YOLO_v3训练与编译环境搭建
时间:2021-03-14 13:00:00
实现:YOLO_v3训练与编译环境搭建—重点部分
姓名:乔金明
下载代码
-
下载的是darknet而非YOLOv3本,因为YOLOv3只是基于darknet这个backbone而构建的应用于目标检测的专用网络,而基于darknet构建的网络很多,YOLOv3只是其中之一。
-
$ git clone https://github.com/pjreddie/darknet
代码编译
-
默认编译出来的binary是跑在CPU上的(也就是说不能通过GPU和CUDA来并行计算),且不支持OpenCV(也就是说不具备摄像头读图等功能)
-
$ cd darknet $ make
-
改动Makefile再进行make,获取以上两种功能
-
# 改动内容为: GPU=1 ... OPENCV=1 ...
-
GPU=1意味着使用Nvidia的卡及其CUDA,所以必须保证系统有卡,且安装了CUDA
- OPENCV=1也需要你的系统安装了OpenCV库,,它不需要额外的硬件支持
验证模型
-
验证编译好的binary可用,先拿YOLOv3提供方训练好的权重进行预测
-
wget https://pjreddie.com/media/files/yolov3.weights
-
对自带的图片dog.jpg进行目标检测
-
$ ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg 或者 $ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
训练测试文件
- cfg/coco.data代表的是coco数据集的信息,我们在训练的时候需要它提供的提供“图片们存放的位置”,“类别名字有哪些”等信息,在测试的时候虽然不需要图片存放信息但是需要它给出的“类别名字有哪些”的信息,即data/names.list
- cfg/yolov3.cfg给出的是网络的结构,训练的超参数等信息。当然训练和测试都需要。
数据集准备
-
首先下载VOC2007和VOC2012数据集。实际上VOC2012包含的是从2008年到2012年的数据
-
wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar tar xf VOCtrainval_11-May-2012.tar tar xf VOCtrainval_06-Nov-2007.tar tar xf VOCtest_06-Nov-2007.tar
训练数据
-
修改cfg/voc.data文件,这样训练的时候才能知道你的要训练多少类别(classes),训练集存放在哪(train),验证集存放在哪(valid),类别名类别文件用哪一个(names),训练出来的中间文件和输出的权重文件存放在哪个目录(backup)
-
classes= 20 train = /home/dzi/YOLOv3/darknet/train.txt valid = /home/dzi/YOLOv3/darknet/2007_test.txt names = data/voc.names backup = backup
-
batch=64和subdivisions=16,分别表示每次迭代用64张图片,在计算机处理的时候,每次输送16张进去。这两个参数能大则大,跟内存和显存有关。
-
max_batches = 30000,learning_rate=0.001, steps=10000,20000, scales=.1,.1 初始学习率为0.001,在迭代到10000次时,学习率衰减为0.0010.1,在迭代到20000次时,学习率继续衰减为0.0010.1*0.2, 迭代到30000次停止训练。
-
$ ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74