YOLOv3训练自己的数据(GPU版本)

1、下载工程

两种方式:

1.1 通过git克隆

    git clone https://github.com/pjreddie/darknet.git

1.2 到GitHub上直接下载

    有时候服务器上内网限制,克隆不下来,不知道原因是啥,有可能是公司内网限制了,本人通过这种方式下载的工程

    https://github.com/pjreddie/darknet

2、编译工程

    解压工程

    改配置文件:

    我想要GPU支持的版本,所以在编译工程前需要先修改Makefile文件,根据自己需求改,GPU版本的将GPU=1,CUDNN = 1, OPENCV=1,我的OPENCV是设成0的,因为我的环境没有opencv。

CPU版本的设置成GPU=0

YOLOv3训练自己的数据(GPU版本)_第1张图片

编译:    

cd darknet-master/

make

如果遇到缺失包报错,将缺失的包装上去以后重新编译,重复下列两个操作,直到所有包都装好,

make clean

make

 最终成功的信号,编译后出现下列信息(从官网上复制的,我自己的界面没保存下来)

 

mkdir -p obj
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
.....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm.... 

3、准备数据

第一步:labels制作

    yolov2的数据分为两部分:labels 文件夹和图片文件夹,labels里存放的是对应图片的目标信息,一张图片对应一个.txt目标信息文件。labels文件夹和图片文件夹必须放在同一目录下。

    但是我发现yolov3好像略有不同,每张图片的labels文件必须和图片放在同一目录下。像下图这样。(至少我是只有这样存放才成功跑起来,还有没有其他办法不确定)

   标注文件.txt里的数据格式是这样的:

YOLOv3训练自己的数据(GPU版本)_第2张图片

具体的每一个值的计算方式是这样的:假设一个标注的boundingbox的左下角和右上角坐标分别为(x1,y1)(x2,y2),图像的宽和高分别为w,h

 

归一化的中心点x坐标计算公式:((x2+x1) / 2.0)/ w

归一化的中心点y坐标计算公式:((y2+y1) / 2.0)/ h

归一化的目标框宽度的计算公式: (x2-x1) / w

归一化的目标框高度计算公式:((y2-y1)/ h

如果图片的高度、宽度未知,可以通过cv2读取。

 

imginfo = cv2.imread(img_dir + img_name + '.jpg').shape

imginfo里存的是图像的[h, w,通道数] ,这一需要注意imginfo结果里的顺序

 

第二步:

划分训练数据和测试数据:

我将标注数据集里的80%作为训练数据集,20%作为验证数据集

分别将它们的图片的路径存放到train.txt和val.txt文件中,这两个文件的路径没有严格要求,放在任意自己觉得舒服的位置,后面在工程的.data文件中指定这两个文件的路径就好。

里面的格式如下所示,每行存放一张图片的绝对路径,为了安全可见,我图片的绝对路径中间一部分我马赛克了

YOLOv3训练自己的数据(GPU版本)_第3张图片

 

4、编辑cfg/XX.data 文件(XX按自己的需求自取名字),在训练时工程来这个文件中找到训练数据和验证数据的路径

 

classes= 1
train  = /train.txt
valid  = 2007_test.txt
names = data/voc.names
backup = backup

classes:类别数

train:前面说的训练数据train.txt的路径

valid:前面说的验证数据val.txt的路径

names:指向存放类别名的文件,自己训练数据的类别名就放到这个指定的文件中,自己新建一个.names文件,一行放一个类名

backu:模型存放的路径

 

5、更改模型的参数配置文件

    如果是训练模型需要修改下列这些地方:

    1)把Training的参数设置打开,Testing的参数设置关闭

                      YOLOv3训练自己的数据(GPU版本)_第4张图片                                                                                                         

   2)改所有yolo层前一层filters大小,即最后一层卷积层,计算公式在论文中有提到过,N为卷积核的size(不确定),3是mask的参数,4表示四个参数(预测boundingbox的:x,y,w,h),1表示置信度

我有一个类别,size为1,所以:1*1*[3*(4+1+1)]=18

YOLOv3训练自己的数据(GPU版本)_第5张图片YOLOv3训练自己的数据(GPU版本)_第6张图片

 

3)改yolo层的classes数

2)、3)总的需要改3的地方

5、跑模型

我认为应该像这样启动训练过程,但是报错

 ./darknet detector train cfg/dog.data cfg/dog.cfg backup/dog.backup -gpu 0

YOLOv3训练自己的数据(GPU版本)_第7张图片

只有不指定模型存放路径和模型名字才不报错,能跑起来,

./darknet detector train cfg/pigface_front.data cfg/pigface_front.cfg

 

即使跑起来,后面还是遇到了其他问题,继续解决中

。。。。。还在努力中

6、踩到的坑

你可能感兴趣的:(图像处理)