Plug and play, mejora de datos de segmentación semántica

En la actualidad, existen muchas bibliotecas para la mejora de datos, pero los métodos de mejora de datos son diferentes para diferentes propósitos. Esta vez, escribí un método de mejora de datos de segmentación semántica.

Normalmente, los métodos de aumento de datos incluyen recortar, escalar, voltear, agregar ruido, modificar el contraste, etc. Esta vez el método se utiliza para recortar aleatoriamente y escalar costuras.

preparación de datos

Datos en formato VOC

En JPEGImages está la imagen original, en formato jpg, y en SegmentationClass está la etiqueta, en formato png.

 

 Escribí un método de mejora de datos antes, que se utiliza para empalmes aleatorios y no es perfecto, esta vez es una actualización del método anterior. Las imágenes actuales se seleccionan aleatoriamente a partir de los resultados de la última mejora de datos y se puede ver que simplemente se ampliaron y unieron. No hay mucho procesamiento y también puede usar imágenes y etiquetas que no hayan sido mejoradas con datos, siempre que el formato de las etiquetas sea el formato VOC. Si es una etiqueta marcada con labelme, simplemente consulte el script en Internet para convertirlo al formato VOC.

el código

def random_concat_images_and_masks(img_folder, mask_folder,num):

    import os
    import random
    from PIL import Image

    img_names = os.listdir(img_folder)
    selected_img_names = random.sample(img_names, num)

    base_img_name = selected_img_names[0]
    base_img = Image.open(os.path.join(img_folder, base_img_name))
    base_mask_name = os.path.splitext(base_img_name)[0] + '.png'
    base_mask = Image.open(os.path.join(mask_folder, base_mask_name))

    for img_name in selected_img_names[1:]:
        img = Image.open(os.path.join(img_folder, img_name))
        mask_name = os.path.splitext(img_name)[0] + '.png'
        mask = Image.open(os.path.join(mask_folder, mask_name))

        scale = random.uniform(0.5, 1.5)
        img = img.resize((int(img.width * scale), int(img.height * scale)))
        mask = mask.resize((int(mask.width * scale), int(mask.height * scale)))

        base_img.paste(img, (0, 0))
        base_mask.paste(mask, (0, 0))

    return base_img, base_mask

Directamente en el código, esta función escala aleatoriamente la imagen y su etiqueta, luego la recorta y la une aleatoriamente.

Cómo utilizar:

base_img,base_mask = random_concat_images_and_masks(img_folder,mask_folder,num)

parámetro:

img_folder es la ruta de la imagen, 
mask_folder es la ruta de la etiqueta y 
num son imágenes seleccionadas aleatoriamente.

El papel del método:

Este método seleccionará aleatoriamente numerosas imágenes y sus etiquetas correspondientes en el conjunto de datos, realizará escalado, recorte, empalme aleatorio y devolverá las imágenes y etiquetas.

manifestación:

if __name__ == '__main__':
    img_folder = 'E:/project3/unet-pytorch-main/datasets/JPEGImages'
    mask_folder = 'E:/project3/unet-pytorch-main/datasets/SegmentationClass'
    img_aug_folder = 'E:/project3/unet-pytorch-main/datasets/JPEGImages_augmentation'
    mask_aug_folder = 'E:/project3/unet-pytorch-main/datasets/SegmentationClass_augmentation'

    for i in range(3):
        base_img,base_mask = random_concat_images_and_masks(img_folder,mask_folder,3)
        base_img.save(os.path.join(img_aug_folder,f'aug{i}.jpg'))
        base_mask.save(os.path.join(mask_aug_folder,f'aug{i}.png'))

 Realice un ciclo tres veces y seleccione tres imágenes aleatorias en el conjunto de datos cada vez. y guardar en una nueva carpeta

Resultado: (Ciclé tres veces y generé tres tarjetas, aquí uso una como ejemplo.

 

 

 

 El código es un poco desenfrenado jajaja, estos pequeños scripts los uso yo mismo, no te sorprendas.

Supongo que te gusta

Origin blog.csdn.net/m0_50317149/article/details/132325205
Recomendado
Clasificación