首次编辑:24/5/17/23:16
最后编辑:24/5/18/12:47
此博客只记录darknet yolo4 + opencv的编译安装,不涉及cuda和cuDNN。
darknet的github地址为https://github.com/AlexeyAB/darknet。
首先要明确darknet这个darknet的版本,建议点开仓库中的
cfg
文件夹,看看里面有没有以yolov4
开头的文件,有的话才是yolo4版本。
之前第一次编译的时候很神奇地编译了yolo3版本,但明明github链接地址看起来是一样的,还是谨慎为妙。
git clone https://github.com/AlexeyAB/darknet.git
建议后面这个仓库链接还是直接去GitHub上复制。
克隆完仓库之后,进入darknet文件夹。里面有个叫Makefile
的文件,用代码/文本编辑器打开它。
在Makefile文件的前几行中:
GPU=0 # gpu加速,应该就是配合cuda toolkit的
CUDNN=0 # 这个应该也是cuda加速的
CUDNN_HALF=0 # 同上
OPENCV=0
AVX=0 # x86架构处理器指令集的一个扩展,用于提高并行计算的速度
OPENMP=0 # Open Multi-Processing,cpu加速
LIBSO=0 # 是否将darknet编译成静态库
ZED_CAMERA=0 # to enable ZED SDK 3.0 and above
ZED_CAMERA_v2_8=0 # to enable ZED SDK 2.X
如果没有这么多选项那么应该是克隆错版本了。
将OPENCV = 0
改为OPENCV = 1
,如果有cuda和cudnn的话就把前三行的值都改为1。其它的几个选项可以根据自己的电脑情况和需求自行更改。
一般操作到这里就改完了,但由于我的opencv是通过源码编译安装的,还需要改一点东西。
如果opencv是源码编译的
在Makefile文件中找到下面片段:
ifeq ($(OPENCV), 1)
COMMON+= -DOPENCV
CFLAGS+= -DOPENCV
LDFLAGS+= `pkg-config --libs opencv4 2> /dev/null || pkg-config --libs opencv`
COMMON+= `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv`
endif
将LDFLAGS+=
后面的值改为
-L/path/to/opencv/lib -lopencv_gapi -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
其中path/to/opencv/
是opencv的路径。
然后将COMMON+=
后面的值改为
-I/path/to/opencv/include/opencv4
打开终端,进入darknet文件夹,执行make
。等待编译完成。
打开终端,在darknet文件夹下,执行./darknet
,若输出usage: ./darknet <function>
,则表示编译成功。
首先为了测试,我们要先下载一下别人训练好的权重文件。打开终端,在darknet文件夹下,执行:
wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
接着检测一下cv小狗的图片
./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights data/dog.jpg
正常情况下,将会弹出一个窗口,正是那张经典的cv小狗加自行车的检测图像。
没有装cuda的情况下,检测视频可能会非常慢,展示检测结果的窗口可能会很久才弹出。
./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights <video file>
把<video file>
替换成你的视频文件名。
或者也可以将检测的结果保存成一个视频:
./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights <video file> -out_filename <output_video file>
没有装cuda的情况下,实时检测可能会非常慢,展示检测结果的窗口可能会很久才弹出,甚至根本就没法弹出这个窗口,只会显示进程失去响应。
./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights