Ubuntu 18.04下测试了YOLO的方案。选择安装的是CUDA 11.4和cuDNN 8.2,在测试v3版本时遇到了编译的问题。所以选择v4版本。

参考链接:https://pjreddie.com/darknet/yolo/,其中项目下载替换为下载AlexeyAB的v4版本,其它操作相同。

项目下载

$ git clone https://github.com/AlexeyAB/darknet

(这个是v4版本,原项目版本https://github.com/pjreddie/darknet也可以下载编译运行,不过在使用GPU选项进行编译时会产生问题)

在当前目录下产生darknet目录。国内通过git连接github克隆项目不是很顺的情况下也可以试试zip下载,之后解压。进入darknet目录。

$ cd darknet

进行编译

$ make -j4

之后下载网络的权重文件

$ wget https://pjreddie.com/media/files/yolov3.weights

可以以这个权重文件运行目标识别示例程序

$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

程序的目的是识别data目录下的dog.jpg文件,里面包含狗、自行车、汽车等内容。运行结果显示类似如下

用了8秒多时间,识别结果产生在darknet目录下的predictions.jpg文件,如下

识别出了狗、自行车、卡车等内容以及各自的自信程度。

YOLO项目默认编译配置是不使用GPU的,上述运行用了8秒多时间,如果使用GPU,则修改darknet目录下的Makefile文件。

$ gedit Makefile

把前面两行的配置修改为

        GPU=1
        CUDNN=1

再重新进行编译

$ make clean
$ make -j4

然后运行识别程序

$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

出现结果

显示使用了0.418秒的时间,大大加速了运算速度。运算结果同样出现在predictions.jpg文件中,与前面一样。说明GPU大大加强了计算性能。

根据说明,也可以尝试Tiny YOLOv3的配置。经测试速度加快很多,但是识别准确率差别较大。