YOLOV3实战2:训练自己的数据集,你不可能出错!

大家好,我是小p,今天给大家带来一期用darknet版本YOLO V3训练自己数据集的教程,希望大家喜欢。
欢迎加入对象检测群813221712讨论和交流,进群请看群公告!
一、搭建环境
搭建环境和验证环境是否已经正确配置已在YOLOV3实战1中详细介绍,请一定要先解决环境问题,有任何疑问,欢迎入群@或者求助其他小伙伴。
二、数据准备
总体简介:YOLOV3 训练训练自己的数据集时你一共需要修改6个文件,如表1所示:
表1 训练需要准备的文件列表

文件名 文件路径 文件说明
makefile darknet-master 编译生成可执行程序的文件,在其中指定是否使用GPU和Cuda,是否使用摄像头、OpenCV等
train.txt 自定义 保存训练图片的路径,每一行为一张图片的完整路径,一般报找不到xx图片的错误多半是本文件格式不对
label文件夹 自定义 整个文件夹存放所有图片的标注信息,标注信息用txt文档保存,详细信息见下
.cfg文件 darknet-master/cfg/ .cfg指定了网络的结构和其他超参数,有关cfg的详细说明请关注YOLOV3实战4或进群讨论
.names文件 自定义 该文件中的内容指定了训练的标签,如:person,car等,一个标签占用一行,示例见:data/coco.names
.data文件 自定义 该文件中的内容指示了上述train.tx *.names和模型保存的位置等,参考cfg/coco.data的内容

详细修改:
1、修改makefile文件,makefile文件一共改4处。
① 修改开始几行的内容,如下图所示 ,0表示否,1表示是,自己根据实际情况设置,建议使用GPU和CUDA
在这里插入图片描述
GPU:是否使用GPU? CUDNN:是否开启CUDA加速? OPENCV:是否使用OpenCV?
OPENMP:是否使用摄像头? DEBUG:是否开启调试模式?
②改运算的架构,自己显卡支持什么架构可以自己查询,按需修改,也可以使用默认值:

③更改NVCC值:23行处,NVCC=nvcc,改为你cuda路径下的nvcc,实测也可以不改,因人而异。
④改cuda路径值:48行处,参考图如下:
在这里插入图片描述
此处的路径改为你安装cuda的路径,一般只需要把cuda换成cuda-9.0或者其他类似,如果安装过程添加了软连接,也可以不用修改
2、生成 train.txt
train.txt中的内容为:每一行代表一张训练图片的完整路径,一定要注意一行只能是一张图片哦,自己写脚本生成即可,python推荐函数os.listdir()遍历一个文件夹的所有文件,样本示例如下图所示:
在这里插入图片描述
3、制作标签文件夹
总原则:每张训练图片生成一个以图片名命名的txt标签文档,假设有:1.jpg 2.jpg 3.jpg 三张训练图片
那你就需要生成1.txt 2.txt 3.txt 这三个标签文档,同时train.txt中一定是3行内容。标签文档示例如下图:
在这里插入图片描述
其中每一行表示该图片中一个矩形框的信息。以第一行内容举例:
第一列表示该矩形框中对象的类别索引号,这个类别索引号与.names中的顺序有关,从上到下,索引号从0开始
第二列表示该矩形框的中心点的x坐标值,第三列表示该矩形框的中心点的y坐标值
第四列表示该矩形框的宽度值,第五列表示该矩形框的高度值
注意:第2-5列的值都是归一化后的值,x和宽度值相对于图片的宽归一化,y和高度值相对图片的高度归一化
制作标签文档的编程并不复杂,可以参考darknet-master/scripts/voc_label.py 进行简单修改即可,自己设计也简单
4、修改.cfg的内容(小重点,前期不难)
说明:作此修改之前强烈建议观看我的另一期博客对cfg文件的说明,否则很多参数说不明白
以修改yolov3.cfg为例,建议备份,以免改错!
首先修改batch和subdivision的值,参考博客按需修改
其次改yolo层前一层的卷积核数目★★★,一共改三处,注意是三处,少一处都不行!位置如图所示:
在这里插入图片描述
三处的位置都是在yolo层的上一层描述的地方,具体修改的值根据你数据集的类别数确定,该值为:
3*(类别数+5),比如COCO有80类,则其值为:3*(80+5)=255,注意类别数不包含背景哦。
5、修改.names内容
其为标签名称,每一个标签名称占一行,根据自己需要修改,示例图如下:
在这里插入图片描述
6、修改.data内容
先看示例图:
在这里插入图片描述
classes=80 该值表示你数据集的类别数。
train 后面的内容 表示刚才你生成的train.txt的路径
valid 后面的内容不管
names 后面的内容为刚才生成的.names的路径
backup 后面的内容为保存模型的路径,注意这个路径一定要存在,没有文件夹则先新建
eval 后面的内容不关心
‘#’ 后面的内容表示注释

注意:标签文档存放的路径一定要和训练图片的路径关联,具体参考我源码注释:data.c中fill_truth_detection函数的说明,一时半会解释不清楚

在这里插入图片描述
二、开始训练吧,骚年!
训练之前,由于更改了makefile的内容,先命令行:make clean 再make
训练命令:
./darknet detector train <.data文件路径> <.cfg文件路径> <预训练权重路径,一般为darknet53.74什么的那个,官网下载> -gpus 0,1,如:
./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.** -gpus 0,1,2,3
-gpus后面指定所使用的GPU编号
如果不出意外,不,你不可能出意外,你已经踏上了YOLOV3 训练自己检测数据集的快船,Come on!老铁
三、加群交流,重要的事情说三遍

敬请期待YOLOV3常见错误总结篇,码字不易,且行且珍惜!

猜你喜欢

转载自blog.csdn.net/phinoo/article/details/83315585