制作VOC2007格式数据集,并用TensorFlow Object Detection API训练

一、制作自己的VOC2007数据集

1. VOC2007数据集格式

1)JPEGImages文件夹
文件夹里包含了训练图片和测试图片,混放在一起
2)Annatations文件夹
文件夹存放的是xml格式的标签文件,每个xml文件都对应于JPEGImages文件夹的一张图片。
3)ImageSets文件夹
Main存放的是图像物体识别的数据,Main里面有test.txt , train.txt, val.txt , trainval.txt.这四个文件。

2.准备照片素材,标注每张图片

  • 图片重命名
    命名统一为六位数字,从000001开始。
    参考:
    Tensorflow Object Detection API-如何制作VOC格式数据集
    工具来源: https://github.com/whlook/VOCMaker

  • 目标物体标注
    工具来源:https://github.com/puzzledqs/BBox-Label-Tool
    编写脚本将标注选取的坐标数据写入到一个txt文件中,txt文件每行格式为:

    000001.JPG dog 44 28 132 121

    如果一张图片有多个目标(比如两个目标),则格式如下:

    000001.JPG dog 44 28 132 121
    000001.JPG car 50 27 140 110
    

    将标注的txt文件生成xml:

    参考代码:matlab程序VOC2007xml,将txt生成xml。
    该过程中,需要一些脚本,链接。
    这一步里面的一个坑是,生成的xml里有很多空格,会导致读取时的错误,需要转换为tab,使用以上链接中的脚本即可。
    (也可使用labelImg,可直接生成符合VOC2007格式的xml文件)


  • 将标注的txt汇总到output.txt
    参考代码:用于生成output.txt的脚本

  • 数据集分割
    在实际训练过程中,需要四个文件,分别为test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集。每个文件为对于图片的名字。在VOC2007中,trainval大概是整个数据集的50%,test也大概是整个数据集的50%;train大概是trainval的50%,val大概是trainval的50%。

    参照 matlab脚本, 生成的四个txt文件就可以拷贝到Main目录下,四个文件的比例可在脚本中修改。


  • 完成数据集创建
    如果上述各步骤中没有做拷贝的动作则在本步骤把相应的文件拷贝到对应的目录下,以符合VOC2007格式的要求。

    ------ Annotations 将xml文件全部放到该文件夹里
    
    ------ ImageSets
           ------ Main 其有四个txt文件,test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集。Txt里的内容是即图片名字(无后缀)。
    
    ------ JPEGImages 所有的训练图片放到该文件夹里

    把上述目录及其文件都拷贝到MyDatasetName/VOC2007/下。


二、将VOC2007数据集转换为TFRecord格式

  1. 修改models/object_detection/data/pascal_label_map.pbtxt 文件里的类别,或者新建对应自己数据集的.pbtxt文件。
  2. 修改models/object_detection/create_pascal_tf_record.py 文件
     # 将pascal_label_map.pbtxt修改为自己的.pbtxt文件
    flags.DEFINE_string('label_map_path', 'data/pascal_label_map.pbtxt',
                        'Path to label map proto') 
      # img_path = os.path.join(data['folder'], image_subdirectory, data['filename'])
      img_path = os.path.join(str(data['folder']), image_subdirectory, str(data['filename']))
    ```
    ```
        #examples_path = os.path.join(data_dir, year, 'ImageSets', 'Main',
        #                             'aeroplane_' + FLAGS.set + '.txt')
        examples_path = os.path.join(data_dir, year, 'ImageSets', 'Main',
                                     FLAGS.set + '.txt')

3.TFRecord生成

#research/object_detection
python dataset_tools/create_pascal_tf_record.py --data_dir=/home/cyj/Project/models/research/MyDatasetName --year=VOC2007 --set=train --output_path=parkinglot_train.record

此过程可能会报错,说object_detection/utils/dataset_util.py 的第75行if not xml 的FutureWarning,此时可将if not xml 改为 if xml is None, 运行代码,会出现读取的data为空,然后再修改为if not xml,即可解决此问题,原因不详。
然后就可以在objection_detection文件夹里发现生成的**_train.record文件,同理生成对应的val.record

后续过程参考:Tensorflow Object Detection API使用

你可能感兴趣的:(深度学习笔记)