darknet训练coco数据集2014
本文以coco数据集2014为例,因为官网下载的数据集不能直接使用,需要做个解析。
首先,下载好coco2014的数据集,文件很大,大概24个G吧。主要信息是train2014,test2014,val2014以及各自的annotation文件。
这三个文件存放的是图片,jpg格式。
test2014的annotation存放在下面这个文件夹
train2014和val2014的annotation存放在这个文件夹,这两个的标注文件放在了一个文件夹 。
darknet需要的是图片以及图片的bbox信息和类别信息。所以接下来要做两件事,
1,利用脚本从json文件中奖每张图片的需要的信息解析出来,并且保存在图片对应的txt文件中。这里多少图片就有多少个txt 文件
2,利用脚本将每张图片所在的完整路径保存下来。分别就是train.txt,test.txt,val.txt这三个文件将会在coco.data中用到。
本文所需要用到Python脚本代码可以在Github上找到:https://github.com/ChriswooTalent/COCO_forYOLO 。
共包含 4 个 python 脚本:
① batch_split_annotation_foryolo.py: 批处理解析 coco 注释文件,将整体的注释文件分离成每个图像单个的注释文件;
②split_annotation_foryolo.py:分离数据文件的执行部分,在 batch_split_annotation_foryolo 中会调用;
③create_JEPG_dir.py: 将所有训练图像,验证图像,测试图像拷贝到一个 JPEGImages 文件夹下,只用调用一次;
④create_yolo_list.py: 根据先前分离得到的注释文件,生成训练图像,验证图像,测试图像索引文件。
这4个文件采用是python2,但是我用的python3,所以文件中会一些错误,修改一下就行。很简单。
步骤一:
我是根据程序建立的相应文件夹。
先在I:盘下建立一个coco_data文件,
在该文件夹下建立一个annotation文件夹,把instances_train2014.json,instances_val2014.json,image_info_test2014.json放进去,方便后面使用。再建立一个ImageSets文件夹,存放的txt包含每个图片的名称。
接着将三个数据集也放进去。
最后建立一个labels文件夹,下面再键三个文件夹分别为trai2014,test2014,val2014。
打开第一个 batch_split_annotation_foryolo.py文件和split_annotation_foryolo.py,进行相应的路径修改。主要是路径修改,自己看清楚了。
接着修改split_annotation_foryolo.py,因为在上一个.py文件中会调用这个文件。
虽然coco的类别是80个,但是它的category_id是跳跃编号的,一直编号到了90,所以这里要做一些修改。
不然训练的时候会一直报错,
cat_id = cat_id -1;
少了这个操作,id要控制在0-79;
做完这些工作就可以运行第一个py文件。
结果:ImageSets下得到三个txt文件,保存了每个图片的名称
labels得到train和val的关于类别和bbox信息的txt文件。然后还有三个文件夹,重复之前的txt文件(不知道为什么test的信息没有解析出来,test所有的txt文件是空的????)暂时不用test,所以先搁置。
步骤二:
在coco_data下建立一个JPEGImages,运行create_JEPG_dir.py,将三个数据集的图片都保存在这个文件夹下面,所谓的只运行一次是因为数据集真的太大,最好一次成功。
步骤三:
这一步呢,生成图片的完整路径。还要在coco_data下建立一个cocoImage/labels,应该是用来整合文件的。
我这里的img_dir和dst_img_dir是一个文件名,所以这里的删除其中一个即可。总共三处都要删除。
文件中这个地方写的是train2014和val2014,我把val2014删除,因为我需要的是txt中是单独一个数据集的图片路径。
结果:
存放图片位置信息的labels文件夹和JPEGImages得在一个文件夹下面。
步骤四:在darknet的项目下做一些修改。
现在data下建立一个coco文件夹。存放四个文件:
train.txt和val.txt就是存放图片完整路径的那个文件,即上述ImageSets下的。
coco.data相应的txt文件进行修改。
cfg文件的修改如下:
步骤五:
上述步骤完成后。
打开darknet_yolo_v3.cmd的命令,保存执行。
darknet_no_gpu.exe detector train data/coco/coco.data cfg/yolov3.cfg darknet53.conv.74
参考博客;https://blog.csdn.net/Gentleman_Qin/article/details/87294874