python打乱voc格式深度学习数据集顺序
由于自己制作的深度学习数据集大都是一类一类在一起,可能对训练效果有影响,故需要打乱
本方法针对voc数据集使用,不知道其他格式是否适用
由于本方法是采用文件在文件夹中的索引号进行打乱,务必保证xml和jpg格式的文件是一一对应,一个不多一个不少。
打乱后的xml和jpg相当于,只随机修改了对应的文件名使其文件名随机,但内容仍然不变。
代码如下,只需修改输入路径和输出路径,好用请点个赞!
import numpy as np
import cv2
import os
import random
import xml.etree.ElementTree as ET
//原始图片路径和xml文件路径
image_root = 'C:/Users/Desktop/test/JPEGImages/'
xml_root='C:/Users/Desktop/test/Annotations/'
image_list = os.listdir(image_root)
xml_list=os.listdir(xml_root)
//打乱后的输出图片路径和xml文件路径
image_output = 'C:/Users/Desktop/output/JPEGImages/'
xml_output='C:/Users/Desktop/output/Annotations/'
index = [i for i in range(len(image_list))]
print(len(image_list))
print(len(xml_list))
random.shuffle(index)
a=np.array(index)
num=1
for i in a:
img_name=image_list[i]
xml_name=xml_list[i]
print('修改第', i , '个',' 生成第',num,'个')
img_path = image_root + img_name
xml_path = xml_root+xml_name
I = cv2.imread(img_path)
xmlDoc = ET.parse(xml_path)
img_save_path = image_output + str(num) + '.jpg'
xml_save_path = xml_output+str(num)+'.xml'
cv2.imwrite(img_save_path, I)
xmlDoc.write(xml_save_path, 'utf-8', True)
num+=1