利用自己的数据进行AB-darknet yolov3的训练

要求

  • Linux or Windows
  • CUDA >= 10.0
  • Opencv >=2.4
  • cndnn >=7.0 for CUDA
  • GPU with CC>=3.0
  • Linux: GCC or Clang

下载

下载代码的压缩包或者执行如下指令:

  • git clone https://github.com/AlexeyAB/darknet.git
  • cd darknet

进入darknet的根目录下

MAKE

首先修改Makefile, 如果你要用到GPU,那么第一行设置为

  • GPU=1

如果要利用cudnn加速,那么第二行设置为

  • CUDNN=1

如果要和opencv一起编译,那么第四行设置为

  • OPENCV=1

之后输入指令

  • make

在这个过程中有可能会碰到错误:

YOLOv3darknet:/make:[obj/convolutional_kernels.o] Error 127

这时候是因为nvcc的环境变量设置有问题,我的方法是修改Makefile,修改nvcc那一行为:

  • NVCC=/usr/local/cuda/bin/nvcc

即可,之后再输入make,等待一段时间后就可以顺利编译完成。

训练

AB的数据集的格式和darknet yolov3的官网的要求不太一样,但是对.txt文件的要求是一样的。

darknet yolov3 官网

我们在对数据完成标注之后,把它放到
< 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 darknet

AB的格式要求和官网的有一点不一样,那就是.txt文件不需要另外开一个labels文件夹,只需要和.jpg文件一起放在同一个文件夹下面就行,比如
–root
----images
------1.jpg
------1.txt
即可。

当所有的数据准备完成之后,我们就可以进行训练了。首先我们下载darknet53的预训练权重

  • wget https://pjreddie.com/media/files/darknet53.conv.74

然后就是准备相关配置工作:我们一共需要修改三个文件

xxx.data

这个文件通常存放在 ./cfg/ 文件夹下,这里存放着我们需要的类别信息和训练集、测试集位置等
第一行: classes 就是一共有几类
第二行: train 这一行代表着你上面存放数据位置的 train.txt 的路径
第三行: valid 这一行代表着同样格式存放数据位置的 valid.txt 的路径,代表验证集
第四行: names 是存放数据类别名称的文件路径
第五行: 模型权重保存路径

xxx.names

这个文件一共有classes行,每一行是一个名字,代表着object class数字对应的类别名称,通常存放在 ./data/ 文件下。

xxx.cfg

这个文件就是整个网络的架构文件,我训练的时候是直接从yolov3改过来的。我们要修改的就是batch大小和subdivisions大小,如果需要可以修改输入的高度和宽度。
最终要的一点: 我们要修改最下面yolo层和该层上面卷积层的过滤器数量
yolo层的 classes 修改为你所要预测的classes数量,上面一层的卷积层,filters 修改为(1+4+classes)*3 的数量,并且不能直接用这个公式,要直接写数字。 如果classes为1,那么filters就要修改为18。并且记住,一共要修改三个地方(yolov3)

一切准备完毕之后,就可以开始训练:

  • ./darknet detector train cfg/xxx.data cfg/xxx.cfg darknet53.conv.74

在AB版本当中是每1000轮保存一次权重,最新权重名称为 xxx_last.weights。而官网的是每100轮保存一次,最新权重名称为 xxx.backup
如果要断点续训,则

  • ./darknet detector train cfg/xxx.data cfg/xxx.cfg backup/xxx_last.weights

测试

测试很简单,给定一个图片,输出为根目录下的 prediecitons.jpg

  • ./darknet detect cfg/xxx.cfg ./backup/xxx.weights data/test.jpg

你可能感兴趣的:(深度学习,github)