1.准备数据
object detection的数据是需要tfrecord格式的,但是一般我们还是先制作voc格式的数据更加方便。
1.voc格式数据的准备:github上下载一个label-img:
然后选择VOC格式,开始漫长的数据标注过程,标注之后的数据会多一个xml文档,一般在标注之前就按照VOC2012的标准建立文件,你可以去下载VOC2012数据集看一下,如果不想我把数据文件的构成截图发出来,很详细了:
建立VOCdevkit文件,里面建立一个VOC2012文件夹,里面放三个文件:
这三个文件分别放XML、txt、和图像:
至此,VOC2012的数据已经准备完毕了,现在我们要把它转换成tfrecord。
当然如果你需要修改xml中的路径我这也有相应的代码:
# coding=utf-8
import os
import os.path
import xml.dom.minidom
path = "E:\VOCdevkit\VOC2012\Annotations"
files = os.listdir(path) # 得到文件夹下所有文件名称
s = []
count = 0
for xmlFile in files: # 遍历文件夹
if not os.path.isdir(xmlFile): # 判断是否是文件夹,不是文件夹才打开
name1 = xmlFile.split('.')[0]
dom = xml.dom.minidom.parse(path + '\\' + xmlFile)
root = dom.documentElement
newfolder = root.getElementsByTagName('folder')
newpath = root.getElementsByTagName('path')
newfilename = root.getElementsByTagName('filename')
newfolder[0].firstChild.data = 'VOCdevkit\VOC2012\JPEGImages'
newpath[0].firstChild.data = 'VOCdevkit\VOC2012\JPEGImages' + '\\' + name1 + '.jpg'
newfilename[0].firstChild.data = name1 + '.jpg'
with open(os.path.join(path, xmlFile), 'w') as fh:
dom.writexml(fh)
print('写入name/pose OK!')
count = count + 1
2.数据格式转换:数据转换为tfrecord有两种办法。
第一种:先将xml转换为csv,然后把cvs转换为tfrecord
xml到csv的代码:
import os
import glob
import pandas as pd
import xml.etree.ElementTree as ET
def xml_to_csv(pat