生成VOC2012数据集
生活随笔
收集整理的這篇文章主要介紹了
生成VOC2012数据集
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、創建目錄如下所示:
VOC2012
---Annotations
---ImageSets
? ? ---Main
---JPEGImages
?
2、標定圖片放到文件夾VOC2012/JPEGImages,使用labelImg工具進行標定,將標定后的xml文件剪切到文件夾VOC2012/Annotations
?
3、腳本修改xml文件中紅色方框內容
?
4、腳本在VOC2012/JPEGImages/Main文件夾生成:類別名_train.txt和類別名_val.txt;同時生成trainval.txt、train.txt、val.test、test.txt
腳本程序如下所示,腳本放到文件夾VOC2012運行
import xml.etree.ElementTree as ET import os import randomimport cv2 as cvdef change_image_format(old_format='.png', new_format='.jpg'):img_dir = "../VOC2012/JPEGImages/"files = os.listdir(img_dir)for img_file in files:if os.path.isfile(os.path.join(img_dir, img_file)):image_path = os.path.join(img_dir, img_file)# print(image_path)image = cv.imread(image_path)new_image_path = image_path.replace(old_format, new_format)cv.imwrite(new_image_path, image, [cv.IMWRITE_JPEG_QUALITY, 100])print("processed image : %s" % (new_image_path))def xml_modification():ann_dir = "../VOC2012/Annotations/"img_dir = "C:\\Users\\mengkun\\Desktop\\tmp\\VOC2012\\JPEGImages\\" # 改成自己數據集JPEGImages文件夾絕對路徑files = os.listdir(ann_dir)for xml_file in files:if os.path.isfile(os.path.join(ann_dir, xml_file)):xml_path = os.path.join(ann_dir, xml_file)# print(xml_path)tree = ET.parse(xml_path)root = tree.getroot()for elem in root.iter('folder'):elem.text = 'voc2012'for elem in root.iter('filename'):passfor elem in root.iter('path'):path = elem.textfilename = path.split('\\')[-1]new_path = img_dir + filenameelem.text = new_pathtree.write(xml_path)print("processed xml : %s" % (xml_path))def generate_classes_txt():ann_dir = "../VOC2012/Annotations/"ok_train = open("../VOC2012/ImageSets/Main/ok_train.txt", 'w') # 改成自己數據集類別ok_val = open("../VOC2012/ImageSets/Main/ok_val.txt", 'w') # 改成自己數據集類別spot_train = open("../VOC2012/ImageSets/Main/spot_train.txt", 'w') # 改成自己數據集類別spot_val = open("../VOC2012/ImageSets/Main/spot_val.txt", 'w') # 改成自己數據集類別files = os.listdir(ann_dir)for xml_file in files:if os.path.isfile(os.path.join(ann_dir, xml_file)):xml_path = os.path.join(ann_dir, xml_file)# print(xml_path)tree = ET.parse(xml_path)root = tree.getroot()for elem in root.iter('filename'):filename = elem.textname_list = []for elem in root.iter('name'):name = elem.textname_list.append(name)if "ok" in name_list:ok_train.write(filename.replace(".jpg", " ") + str(1) + "\n")ok_val.write(filename.replace(".jpg", " ") + str(1) + "\n")else:ok_train.write(filename.replace(".jpg", " ") + str(-1) + "\n")ok_val.write(filename.replace(".jpg", " ") + str(-1) + "\n")if "spot" in name_list:spot_train.write(filename.replace(".jpg", " ") + str(1) + "\n")spot_val.write(filename.replace(".jpg", " ") + str(1) + "\n")else:spot_train.write(filename.replace(".jpg", " ") + str(-1) + "\n")spot_val.write(filename.replace(".jpg", " ") + str(-1) + "\n")ok_train.close()ok_val.close()spot_train.close()spot_val.close()def generate_train_val_test_txt():xml_file_path = "../VOC2012/Annotations/"save_Path = "../VOC2012/ImageSets/Main/"trainval_percent = 0.9train_percent = 0.9total_xml = os.listdir(xml_file_path)num = len(total_xml)list = range(num)tv = int(num * trainval_percent)tr = int(tv * train_percent)trainval = random.sample(list, tv)train = random.sample(trainval, tr)print("train and val size", tv)print("train size", tr)ftrainval = open(os.path.join(save_Path, 'trainval.txt'), 'w')ftest = open(os.path.join(save_Path, 'test.txt'), 'w')ftrain = open(os.path.join(save_Path, 'train.txt'), 'w')fval = open(os.path.join(save_Path, 'val.txt'), 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)ftrainval.close()ftrain.close()fval.close()ftest.close()xml_modification() # generate_classes_txt() generate_train_val_test_txt()?
總結
以上是生活随笔為你收集整理的生成VOC2012数据集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 群晖使用ClouDNS免费DDNS解析
- 下一篇: 数学趣话,你知道常见的数学符号都是谁发明