Convertir un conjunto de datos de segmentación semántica a un conjunto de datos en formato yolo

Prefacio

Recientemente, he estado haciendo cálculos en tiempo real. Inicialmente utilicé la segmentación semántica unet y descubrí que su inferencia es muy lenta en la GPU a nivel de servidor, pero la precisión no es mala. Sin embargo, lo que perseguimos es el rendimiento en tiempo real, por lo que Todavía usamos la detección de objetivos. Finalmente seleccioné yolov5

Como todos sabemos sobre el conjunto de datos yolov5, necesitamos conocer cada cuadro de anclaje, lo que requiere imagen y texto, y mi conjunto de datos de segmentación semántica tiene un archivo json, como se muestra en la figura #!/usr/bin/
python
Insertar descripción de la imagen aquí
8

anotación carpeta a continuación A continuación se muestra cómo
se ven algunos archivos en formato json en formato json:

Insertar descripción de la imagen aquí
Aquí solo hay una categoría, los puntos son las coordenadas de algunos cuadros marcados en la imagen original (no marcados con labelme), por ejemplo, hay un agujero de ratón en mi tierra, necesito marcarlo para generarlo. archivo en formato json

import argparse
import json
import os
import os.path as osp
import base64
import warnings
import PIL.Image
import yaml
from labelme import utils

def main():
	json_file = "D:/sd/裁切/8标注"

# freedom
list_path = os.listdir(json_file)
print('freedom =', json_file)
for i in range(0, len(list_path)):
    path = os.path.join(json_file, list_path[i])
    if os.path.isfile(path):

        data = json.load(open(path))
        img = utils.img_b64_to_arr(data['imageData'])
        lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

        captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]

        lbl_viz = utils.draw_label(lbl, img, captions)
        # out_dir = osp.basename(path).replace('.', '_')
        out_dir = osp.basename(path).split('.json')[0]
        save_file_name = out_dir
        # out_dir = osp.join(osp.dirname(path), out_dir)

        if not osp.exists(json_file + 'mask'):
            os.mkdir(json_file + 'mask')
        maskdir = json_file + 'mask'

        if not osp.exists(json_file + 'mask_viz'):
            os.mkdir(json_file + 'mask_viz')
        maskvizdir = json_file + 'mask_viz'

        out_dir1 = maskdir
        # if not osp.exists(out_dir1):
        #     os.mkdir(out_dir1)

        # PIL.Image.fromarray(img).save(out_dir1 + '\\' + save_file_name + '_img.png')
        PIL.Image.fromarray(lbl).save(out_dir1 + '/' + save_file_name + '.png')

        PIL.Image.fromarray(lbl_viz).save(maskvizdir + '/' + save_file_name +
                                          '_label_viz.png')


        with open(osp.join(out_dir1, 'label_names.txt'), 'w') as f:
            for lbl_name in lbl_names:
                f.write(lbl_name + '\n')

        warnings.warn('info.yaml is being replaced by label_names.txt')
        info = dict(label_names=lbl_names)
        with open(osp.join(out_dir1, 'info.yaml'), 'w') as f:
            yaml.safe_dump(info, f, default_flow_style=False)

        print('Saved to: %s' % out_dir1)
if __name__ == '__main__':
# base64path = argv[1]
	main()

Resultado de la conversión:

Generamos un archivo txt correspondiente a la imagen,
Insertar descripción de la imagen aquí
como 100_0001_0007_1_4.jpg, que corresponde al txt en la imagen de arriba, por lo que nuestro método le evita usar labelme para etiquetar uno por uno (si etiqueta uno por uno, se estima (que tomará un año detectar tantos objetos), por lo que este script en Python sigue siendo muy exitoso.
Representación de txt:

la primera es la categoría, porque solo hay una categoría, y las siguientes son los valores de cada cuadro de anclaje.

gracias a todos

Supongo que te gusta

Origin blog.csdn.net/weixin_51038781/article/details/121938265
Recomendado
Clasificación