在COCO数据集中制作Darknet的训练集

本篇博客主要以MS COCO作为数据集,制作出Darknet的训练集

COCO数据集是一个CV数据库,里面包含了包括object detection, keypoints estimation, semantic segmentation,image caption等多个任务所需要的数据库

下载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

下载完成,解压后截图如下:

在COCO数据集中制作Darknet的训练集

      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信息

在COCO数据集中制作Darknet的训练集

   在COCO数据集中制作Darknet的训练集

2. 结合darknet源码,考虑到darknet读取图像和对应label的规则(也可以重新写代码,不执行这一步),需要将所有图像拷贝到一

   个JPEG文件夹下,然后将步骤1生成的label文件夹移动到和JPEG统一级的目录下;

   这个脚本只需要调用一次:

   在COCO数据集中制作Darknet的训练集

    

3. 得到训练图像集, 验证图像集以及测试图像集的路径索引集train.txt,val.txt,test.txt;

    运行python create_yolo_list.py(注意修改程序中的绝对路径)

    生成训练图像集,验证图像集以及测试图像集

     在COCO数据集中制作Darknet的训练集

4. 整合路径,使Darknet框架代码能够正常调用并且训练;

      1.label文件夹和JPEGImages处于同一级文件夹下;

      2.简历一个coco文件夹,文件夹下面放置train.txt,val.txt,test.txt;

      3.创建coco.data文件,指定训练图像索引文件地址,创建coco.names文件,里面是COCO数据集的所有分类;

      在COCO数据集中制作Darknet的训练集


       4.将coco文件夹,coco.data文件,coco.names文件一同拷贝到darknet代码训练脚本文件夹下,创建训练脚本,开始训练      在COCO数据集中制作Darknet的训练集

       可以看到训练开始正常进行,如果需要达到yolov3作者训练的水平,需要漫长的时间等待,上传一张使用作者coco数据集的训练的权重进行检测的结果图,yolov3对小目标的检测是有很大优势的:

  在COCO数据集中制作Darknet的训练集

在COCO数据集中制作Darknet的训练集

    小弟第一次原创,如果有写的不好的,不对的,希望各路大牛指出来,感激不尽,刚入AI坑,对深度学习在图像这一块的应用有*的兴趣,希望得到大牛指点。