前言
由于TensorFlow常用TFrecords作为输入格式,我们需要将制作好的Pascal VOC转为TFrecords格式。使用 object detection API 内提供的脚本。
TFRecords格式如下:
-uint64 length
-uint32 masked_crc32_of_length
-byte data[length]
-uint32 masked_crc32_of_data
前置要求:
Anaconda3(使用python3.x)
制作好的Pascal VOC数据集
1、配置protobuf
Google的protobuf是一种轻便高效的结构化数据存储格式,结构扩展性高,速度快,密度大。我们下载对应的protoc-3.4.0-win32.zip版本。解压之后的文件内容如下:
将bin文件夹所在路径添加到环境变量PATH,再将bin下的protoc.exe移动到C:\Windows\System32目录下。
cmd下进入~models/reseach目录下,输入:
protoc object_detection/protos/*.proto --python_out=.
2、设置搜索路径
Windows下的API使用时会出现图示bug,需要创建xx.pth文件,将以下两条路径添加进去:
~\models\research
~\models\research\slim
接着,将pth文件移动到python安装目录的site-packages下。
最后,我们利用cmd运行model_builder_test.py文件,测试环境是否搭建成功。
3、修改pascal_label_map.pbtxt
打开~models/research/object_detection/data/pascal_label_map.pbtxt,修改其中的name为自己的分类名。
如图所示,这里我要识别分类的是图片数字0~3,所以修改了对应的name。
4、修改create_pascal_tf_record.py文件
(1)47行:根据自己的VOC数据集格式,修改年份,如果是2007,则保持默认;
(2)49行:将data/pascal_label_map.pbtxt改为绝对路径
(3)81行:改为img_path = os.path.join('JPEGImages', data['filename'])
(4)82行:改为full_path =os.path.join(dataset_directory, 'VOC2012',img_path+'.jpg')
(5)163行 : 改为examples_path =os.path.join(data_dir, year, 'ImageSets', 'Main','xx' + FLAGES.set + '.txt')
xx里的内容是~VOCdevkit\VOC2012\ImageSets\Main目录下的文件前缀名称,如果没有,留空就可以。
5、运行
cmd下输入:
python ~/models/research/object_detection/dataset_tools/create_pascal_tf_record.py\
--data_dir=~/VOCdevkit \
--year=VOC2012 \
--output_path=~/xx.record
其中,波浪线的地方分别为自己的py文件位置、VOC数据位置、转换的record文件存储位置。
注:
1、protoc必须使用3.4版本而非3.5,否则会出现找不到*.proto的bug;
2、运行时出现很多bug,根据bug一步一步回推代码修改。
以上这篇Windows下实现将Pascal VOC转化为TFRecords就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。