在学习DETR过程中,原模型用的COCO数据集,训练的太慢了,故使用VOC数据集。网上找了好长好长时间,好多博客都走不通,特此记录一下。
1. 数据集准备
数据集转换目标:文件夹名为coco, 里面包含以下几个文件夹:
1.1 标注划分
首先, 根据VOC数据集中的train.txt和val.txt两个记事本(两个记事本位置在VOCdevkit -->VOC 2012-->ImageSets-->Main), 将voc数据集中的标注文件(文件夹位置在:VOCdevkit-->VOC2012-->Annotations)划分为训练集和测试集,划分保存的文件夹名分别为train和val. 划分代码如下:
from PIL import Image
import os
f3 = open("E:/VOCdevkit/VOC2012/ImageSets/Main/val.txt", 'r')
# txt文件所在路径
for line2 in f3.readlines():
line3 = line2[:-1]
xmldir = 'E:/VOCdevkit/VOC2012/Annotations' # 所有的xml文件绝对路径
savedir = './val/'
# 将用于xml文件提取出来的绝对路径
xmllist = os.listdir(xmldir)
for xml in xmllist:
# if '.xml' in xml:
if '.xml' in xml:
if line3 in xml:
fo = open(savedir + '/' + '{}'.format(xml), 'w')
fi = open(xmldir + '/' + '{}'.format(xml), 'r')
content = fi.readlines()
for line in content:
fo.write(line)
fo.close()
f3.close()
1.2 图像划分
其次,根据划分好的标注文件夹将图像(文件夹位置在:VOCdevkit-->VOC2012-->JPE GImages)划分为训练集和测试集,划分保存的文件夹名分别为train2017和val2017. 划分代码如下:
# 将图片根据xml中的文件名挑选出来
from PIL import Image
import os
def convert(input_dir1, input_dir2, output_dir):
for filename in o