Implementación de entrenamiento y val de división de conjuntos de datos en formato VOC o formato YOLO

El conjunto de datos de la imagen original y el conjunto de datos de la etiqueta deben dividirse al mismo tiempo, y deben usarse al entrenar el modelo, y deben corresponderse uno a uno. Es decir, si se utiliza una imagen original como conjunto de verificación, entonces los datos de su etiqueta correspondiente también deben usarse como conjunto de verificación.

Esto se puede lograr fácilmente con el siguiente código

import os, random, shutil


def moveimg(fileDir, tarDir):
    pathDir = os.listdir(fileDir)  # 取图片的原始路径
    filenumber = len(pathDir)
    rate = 0.1  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(pathDir, picknumber)  # 随机选取picknumber数量的样本图片
    print(sample)
    for name in sample:
        shutil.move(fileDir + name, tarDir + "\\" + name)
    return


def movelabel(file_list, file_label_train, file_label_val):
    for i in file_list:
        if i.endswith('.jpg'):
            # filename = file_label_train + "\\" + i[:-4] + '.xml'  # 划分xml标签的数据集使用这句,将下面一句注释掉
            filename = file_label_train + "\\" + i[:-4] + '.txt'  # 划分txt标签的数据集使用这句,将上面一句注释掉
            if os.path.exists(filename):
                shutil.move(filename, file_label_val)
                print(i + "处理成功!")


if __name__ == '__main__':
    fileDir = r"D:\code\mydata\image\JPEGImages" + "\\"  # 源图片文件夹路径
    tarDir = r'D:\code\mydata\image\JPEGImages_val'  # 图片移动到新的文件夹路径
    moveimg(fileDir, tarDir)
    file_list = os.listdir(tarDir)
    file_label_train = r"D:\code\mydata\labels" # 源图片txt或者xml标签路径
    file_label_val = r"D:\code\mydata\labels_val"  # txt或者xml标签存入路径
    # 移动到新的文件路径
    movelabel(file_list, file_label_train, file_label_val)

Aviso

tasa: extraiga aleatoriamente un conjunto de datos con una proporción de tasa de todos los conjuntos de datos como un conjunto de verificación, y el resto como un conjunto de verificación

nombre de archivo: divida las etiquetas txt o las etiquetas xml, y las declaraciones de código correspondientes son diferentes

fileDir: la ruta de la carpeta de imágenes original, después de extraer el conjunto de verificación, el resto se usará como conjunto de entrenamiento

tarDir: la ruta de la carpeta a la que se mueve la imagen original como conjunto de validación

file_label_train: ruta de la carpeta de etiquetas txt o xml, después de extraer el conjunto de verificación, el resto se usará como conjunto de entrenamiento

file_label_val: etiqueta txt o xml como la ruta de la carpeta del conjunto de validación

Supongo que te gusta

Origin blog.csdn.net/m0_63769180/article/details/129335080
Recomendado
Clasificación