下载代码的压缩包或者执行如下指令:
进入darknet的根目录下
首先修改Makefile, 如果你要用到GPU,那么第一行设置为
如果要利用cudnn加速,那么第二行设置为
如果要和opencv一起编译,那么第四行设置为
之后输入指令
在这个过程中有可能会碰到错误:
YOLOv3darknet:/make:[obj/convolutional_kernels.o] Error 127
这时候是因为nvcc的环境变量设置有问题,我的方法是修改Makefile,修改nvcc那一行为:
即可,之后再输入make,等待一段时间后就可以顺利编译完成。
AB的数据集的格式和darknet yolov3的官网的要求不太一样,但是对.txt文件的要求是一样的。
我们在对数据完成标注之后,把它放到
< path >/images
下,每一张图片为 image_id.jpg的格式。而标注则放在同目录的文件夹下
< path >/labels
下,格式为,image_id.txt。每一个image_id 都要与图片的一个要对应。
image_id.txt的格式为
< object-class> < x> < y> < width> < height>
其中oject-class 为图片类别,为整数,范围为0~class_num-1。
x,y代表的是物体中心点的位置,w代表物体的宽,h代表物体的高
!!记住这里所有的x,y,w,h都是图片的相对位置和长度!!
除此之外我们还需要准备一个.txt文件用来存放数据的信息。 我们假设为 train.txt,这个文件里面存放着所有的图片的绝对位置。所以我们最后的数据格式如下
–root
----images
------1.jpg
------2.jpg
------3.jpg
----labels
------1.txt
------2.txt
------3.txt
train.txt的文件格式为:
/root/images/1.jpg
/root/images/2.jpg
/root/images/3.jpg
这样我们的数据就准备完毕了
AB的格式要求和官网的有一点不一样,那就是.txt文件不需要另外开一个labels文件夹,只需要和.jpg文件一起放在同一个文件夹下面就行,比如
–root
----images
------1.jpg
------1.txt
即可。
当所有的数据准备完成之后,我们就可以进行训练了。首先我们下载darknet53的预训练权重
然后就是准备相关配置工作:我们一共需要修改三个文件
这个文件通常存放在 ./cfg/ 文件夹下,这里存放着我们需要的类别信息和训练集、测试集位置等
第一行: classes 就是一共有几类
第二行: train 这一行代表着你上面存放数据位置的 train.txt 的路径
第三行: valid 这一行代表着同样格式存放数据位置的 valid.txt 的路径,代表验证集
第四行: names 是存放数据类别名称的文件路径
第五行: 模型权重保存路径
这个文件一共有classes行,每一行是一个名字,代表着object class数字对应的类别名称,通常存放在 ./data/ 文件下。
这个文件就是整个网络的架构文件,我训练的时候是直接从yolov3改过来的。我们要修改的就是batch大小和subdivisions大小,如果需要可以修改输入的高度和宽度。
最终要的一点: 我们要修改最下面yolo层和该层上面卷积层的过滤器数量
yolo层的 classes 修改为你所要预测的classes数量,上面一层的卷积层,filters 修改为(1+4+classes)*3 的数量,并且不能直接用这个公式,要直接写数字。 如果classes为1,那么filters就要修改为18。并且记住,一共要修改三个地方(yolov3)
一切准备完毕之后,就可以开始训练:
在AB版本当中是每1000轮保存一次权重,最新权重名称为 xxx_last.weights。而官网的是每100轮保存一次,最新权重名称为 xxx.backup。
如果要断点续训,则
测试很简单,给定一个图片,输出为根目录下的 prediecitons.jpg