本篇博客主要以MS COCO作为数据集,制作出Darknet的训练集
下载MS COCO 2017年版本的数据集, 一共25G左右的图片和1.5G左右的annotation文件,annotation文件的格式为json格式,存储了所有图片中的目标类别(总共80类),目标bounding box的精确坐标以及目标的分割轮廓信息等。
可以到官方网站下载:http://cocodataset.org/ 但是链接似乎不太管用
给出迅雷下载地址:
图片(images):
http://images.cocodataset.org/zips/train2017.zip
http://images.cocodataset.org/zips/test2017.zip
http://images.cocodataset.org/zips/val2017.zip
注释(annotations):
http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip
http://images.cocodataset.org/annotations/image_info_test2017.zip
http://images.cocodataset.org/annotations/annotations_trainval2017.zip
下载完成,解压后截图如下:
Darknet是一个用C语言和CUDA编写的开源神经网络框架,目前基于darknet实现的目标检测算法yolov1, yolov2和yolov3在目标检测分类领域有一定的优势,主要在于yolo的网络是end-to-end的,实现简单,检测速度快。具体的算法论坛内有很多相关的说明,请自行查阅。
提取脚本已经上传到[email protected]:ChriswooTalent/COCO_forYOLO.git中
有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: 根据先前分离得到的注释文件,生成训练图像,验证图像,测试图像索引文件。
回归正题,Darknet对训练集有一定的要求,现在主要说明一下如何基于COCO数据集制作Darknet的训练集。
1. 首先从COCO数据集中的注释集中提取出yolo算法需要的图像中目标的bounding box信息;
安装python 2.7以及相关的依赖库,就可以运行
运行python batch_split_annotation_foryolo.py(注意修改程序中的绝对路径)
得到darknet训练所需要的label信息
2. 结合darknet源码,考虑到darknet读取图像和对应label的规则(也可以重新写代码,不执行这一步),需要将所有图像拷贝到一
个JPEG文件夹下,然后将步骤1生成的label文件夹移动到和JPEG统一级的目录下;
这个脚本只需要调用一次:
3. 得到训练图像集, 验证图像集以及测试图像集的路径索引集train.txt,val.txt,test.txt;
运行python create_yolo_list.py(注意修改程序中的绝对路径)
生成训练图像集,验证图像集以及测试图像集
4. 整合路径,使Darknet框架代码能够正常调用并且训练;
1.label文件夹和JPEGImages处于同一级文件夹下;
2.简历一个coco文件夹,文件夹下面放置train.txt,val.txt,test.txt;
3.创建coco.data文件,指定训练图像索引文件地址,创建coco.names文件,里面是COCO数据集的所有分类;
4.将coco文件夹,coco.data文件,coco.names文件一同拷贝到darknet代码训练脚本文件夹下,创建训练脚本,开始训练
可以看到训练开始正常进行,如果需要达到yolov3作者训练的水平,需要漫长的时间等待,上传一张使用作者coco数据集的训练的权重进行检测的结果图,yolov3对小目标的检测是有很大优势的:
小弟第一次原创,如果有写的不好的,不对的,希望各路大牛指出来,感激不尽,刚入AI坑,对深度学习在图像这一块的应用有狂热的兴趣,希望得到大牛指点。