目标检测与位姿估计(一):YOLOv4的实现

paper

https://arxiv.org/abs/2004.10934

如果你有兴趣,YOLO的系列的损失函数也是一绝,了解下:https://mp.weixin.qq.com/s?__biz=MzIzNDM2OTMzOQ==&mid=2247487059&idx=1&sn=9e2c5ee7923ddd36c889507c70ddb804&chksm=e8f63607df81bf11c4597a116b4812af35570ada98220a283af295c829bb60473089a41d80eb&mpshare=1&scene=23&srcid=0722LIxqziSJe01Uv5ddFGvI&sharer_sharetime=1595423944083&sharer_shareid=7ac210d5394f53b68ccf96c0ef8a72ed#rd

下载训练权重

链接:https://pan.baidu.com/s/15Q_7bNe4Ca0OluBM_2je5A
提取码:4da9

放于主文件夹下即可

Opencv下载编译

下载:官网地址:https://opencv.org/的releases选项中下载合适版本的zip或者直接github下载

编译:进入opencv主文件夹

mkdir build
cd build
cmake ..
make -j8
sudo make install

DarkNet的下载与编译

下载:https://github.com/AlexeyAB/darknet

编译:打开Makefile文件

          set:          

GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=0
ZED_CAMERA=0
ZED_CAMERA_v2_8=0

# set GPU=1 and CUDNN=1 to speedup on GPU
# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)
# set ZED_CAMERA=1 to enable ZED SDK 3.0 and above
# set ZED_CAMERA_v2_8=1 to enable ZED SDK 2.X


#然后make -j8 命令编译

 YOLOv4测试

./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg

如果编译了opencv会直接显示结果,如果没有编译会在主文件夹下生成结果图片

自己从零训练YOLOv4(VOC2007+2012联合训练为例)

参考材料如下,在此致谢

https://blog.csdn.net/ly_twt/article/details/105761312

https://blog.csdn.net/ly_twt/article/details/105577683

https://www.cnblogs.com/bob-jianfeng/p/12888111.html

1 VOC数据集的下载(07的train+test+val  12的train+val)

1.1 百度网盘

链接:https://pan.baidu.com/s/1ZAQiELMUfhNqLoyQXEK4rQ
提取码:mbmn

1.2 或者直接

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

1.3 解压需要注意

将以上压缩包放在同一文件夹中进行解压,解压后,所有的数据都会解压到VOCdevkit文件夹中。将VOCdevkit文件夹放在darknet目录中就行。注意:因为VOCtest_06-Nov-2007和VOCtrainval_06-Nov-2007解压后都是VOC2007,所以要先解压VOCtest_06-Nov-2007,然后将文件名由VOC2007改成VOC2007_test,然后再解压VOCtrainval_06-Nov-2007)

tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
tar xvf VOCtrainval_11-May-2012.tar

解压后,VOCdevkit文件夹中主要有:

./ VOC2007

./ VOC2007_test

./ VOC2012

./ VOCcode

./ 以及一些示例

1.4 制作label标签文件

将darknet/scripts目录下的voc_label.py文件,拷贝至darknet目录。打开voc_label.py文件,修改第7行,将列表的最后一个元组修改为('2007_test', 'test'):

修改第58行,将2007_test改为2007_test_test:

目标检测与位姿估计(一):YOLOv4的实现_第1张图片

运行voc_label.py文件:

python voc_label.py

运行后,darknet目录下会生7个文件,分别为:

2007_train.txt,2007_val.txt,2007_test_test.txt,2012_train.txt,2012_val.txt,train.txt,train.all.txt

将这7个txt文件放到darknet/VOCdevkit中。

2 预训练权重

链接:https://pan.baidu.com/s/1cQfqKz6-v3njSDoBhF8vRA
提取码:fj8c

3 修改训练配置文件

3.1 修改cfg/voc.data文件

将下图:

目标检测与位姿估计(一):YOLOv4的实现_第2张图片

改成:

目标检测与位姿估计(一):YOLOv4的实现_第3张图片

3.2 将cfg/yolov4-custom.cfg进行复制,并将复制后的文件命名为yolo-obj.cfg。

修改cfg/yolo-obj.cfg文件:

3.2.1 如果在训练过程中出现out of memory,将subdivisions修改为32或者64。

目标检测与位姿估计(一):YOLOv4的实现_第4张图片

其中,batch值可以根据自己的显存大小进行调整。但是batch不能太小,如果batch太小或者等于1,最终训练得到的模型可能会无法收敛。

3.2.2

目标检测与位姿估计(一):YOLOv4的实现_第5张图片

3.2.3 在文件中,使用Ctrl+F搜索yolo,一共出现在三个地方。修改yolo下面的classes,以及yolo上面的filters:

目标检测与位姿估计(一):YOLOv4的实现_第6张图片

训练

./darknet detector train cfg/voc.data cfg/yolo-obj.cfg yolov4.conv.137 -gpus 0

观察到如下信息证明训练已开始

目标检测与位姿估计(一):YOLOv4的实现_第7张图片

你可能感兴趣的:(目标检测与位姿估计)