Prepárese para entrenar a yolov3 en el conjunto de datos de construcción propia (2): Raspberry Pi recolecta automáticamente imágenes, tensorflow_label_tool descarga imágenes, anotaciones yolo_mark y datos de limpieza (con script de Python)


Prólogo


        El artículo anterior escribió cómo descargar el conjunto de datos en la imagen abierta de Google v4 y guardarlo en formato yolo, luego escríbalo aquí. Para confirmar que no hay ningún problema con la etiqueta, podemos usar yolo_mark para limpiarla nuevamente. Y a veces es posible que necesitemos recopilar datos nosotros mismos. Aquí uso la Raspberry Pi y una cámara gran angular para completar mi tarea de recolección automática. Si podemos, también podemos rastrear algunos datos nuevamente en línea, aquí utilicé una pequeña herramienta en github, el efecto no es malo.


Herramientas



Script de colección automática de Raspberry Pi


        La Raspberry Pi agrega una cámara gran angular. Debido a que quiero una escena más grande, elegí una cámara gran angular de 170 grados (143 grados horizontal) con solo 2 millones de píxeles, lo que causó muchas pérdidas en la foto final. Detalles Instale opencv en la Raspberry Pi, conecte la cámara USB y ejecute el siguiente programa para recopilar imágenes automáticamente: las imágenes se colocan en la carpeta actual y reciben el nombre de la hora actual del sistema. Desenchufe la cámara cuando no esté recolectando para salir del programa.

import cv2
import datetime
cap = cv2.VideoCapture(0)
width = 1920
height = 1080
cap.set(cv2.CAP_PROP_FRAME_WIDTH,width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,height)
i = 1
while(cap.isOpened()):
    cv2.waitKey(5)
    i = i + 1
    ret, frame = cap.read()
    now_time = datetime.datetime.now()
    time_str = datetime.datetime.strftime(now_time,'%Y-%m-%d-%H:%M:%S')
    if frame is None:
        continue
    elif i > 15:
        i = 1
        cv2.imwrite(time_str+'.jpg' ,frame)
        cv2.imshow('cap',cv2.resize(frame,(480,270)))

cap.release()
cv2.destroyAllWindows()
    

tensorflow_label_tool tool download pictures


         tensorflow_label_tool es una aplicación que se ejecuta en Windows. Seleccione descarga, ingrese palabras clave, número de descargas, nombre de archivo y ancho y alto del zoom (cuando el valor es 0, significa que no hay zoom, el valor predeterminado es 300x300, lo que significa que la imagen se llena o comprime al fondo negro sin cambiar la forma original 300x300) El resultado se coloca en el directorio de descarga.

                                


Las herramientas en tensorflow implementan el recorte


        El recorte aleatorio es un método de mejora de datos en Tensorflow. La imagen de entrada y el tamaño que desea recortar pueden obtener una salida específica. Cada recorte solo obtendrá una imagen, por lo que uso múltiples bucles para obtener múltiples imágenes recortadas. Aunque libero las variables después de cada gran bucle, a medida que aumenta la imagen de entrada, todavía habrá memoria insuficiente, lo que no se ha resuelto. Si un amigo que conoce la solución tiene la oportunidad de ver esto, espero que también pueda darme algunos consejos. Existen muchos otros métodos de mejora de datos, como la duplicación y el cambio de colores. Además, otro propósito de recortar aquí es reducir la densidad del objetivo en cada imagen, lo cual es conveniente para marcar.


import tensorflow as tf
import cv2
import os
import glob 
import gc
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

if __name__ == "__main__":
    WSI_MASK_PATH = 'G:\Yolo_mark-master'
    paths = glob.glob(os.path.join(WSI_MASK_PATH, '*.jpg'))
    paths.sort()
    for path in paths:
        img = cv2.imread(path)
        filename = os.path.basename(path)
        for cnt in range(4):
            crop_img = tf.random_crop(img,[550,550,3])
            sess = tf.InteractiveSession()
            cv2.imwrite("crop/" + str(cnt)+ "_"+ filename,crop_img.eval())
            img2 = cv2.imread("crop/" + str(cnt) + "_" + filename)
            cut_img = cv2.resize(img2,(608,608),interpolation = cv2.INTER_CUBIC)
            cv2.imwrite("cut/" + str(cnt) + "_" + filename,cut_img)
            sess.close()
            del crop_img,img2,cut_img,sess
            gc.collect()
            cv2.waitKey(100)   
        del filename,img,cnt,path
        gc.collect()
        cv2.waitKey(100)

 


yolo_mark marcado y limpieza


        El gadget yolo_mark utilizado aquí es para marcar, es compatible con Windows y Linux, y se puede utilizar después de compilar y generar un archivo ejecutable. Antes de compilar, modifique el archivo obj.names en un cierto orden para adaptarlo a los requisitos de su tarea. Coloque los datos que desea marcar en la carpeta img, y luego haga doble clic en yolo_mark.cmd para abrir yolo_mark para marcarlo. Ingrese "h" en el teclado para ver algunos comandos de operación. Por ejemplo, "c" es borrar todas las etiquetas de la imagen actual y "r" es borrar las etiquetas del objetivo seleccionado. Anotar una imagen generará un archivo de texto anotado y agregará una ruta al archivo train.txt.

           


Limpiar con yolo_mark


        Puede haber errores en los datos marcados. Puede usar yolo_mark para limpiarlo nuevamente. Por cierto, todas las rutas se agregan a train.txt, y puede hacer ambas cosas.


Referencia


https://blog.csdn.net/wulala789/article/details/80588424

https://blog.csdn.net/sinat_29957455/article/details/80629098

https://blog.csdn.net/chaipp0607/article/details/80009195

28 artículos originales publicados · Me gustaron 34 · Visitantes más de 20,000

Supongo que te gusta

Origin blog.csdn.net/sinat_35907936/article/details/89086081
Recomendado
Clasificación