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
- Raspberry Pi
- cámara usb
- yolo_mark
- tensorflow_label_tool
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