Inferencia de detección de objetos en tiempo real en Python con YOLOv7 PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Inferencia de detección de objetos en tiempo real en Python con YOLOv7

Introducción

La detección de objetos es un campo amplio en la visión por computadora y una de las aplicaciones más importantes de la visión por computadora "en la naturaleza".

La detección de objetos no está tan estandarizada como la clasificación de imágenes, principalmente porque la mayoría de los nuevos desarrollos generalmente los realizan investigadores, mantenedores y desarrolladores individuales, en lugar de grandes bibliotecas y marcos. Es difícil empaquetar los scripts de utilidades necesarios en un marco como TensorFlow o PyTorch y mantener las pautas de la API que guiaron el desarrollo hasta el momento.

Esto hace que la detección de objetos sea algo más compleja, normalmente más detallada (pero no siempre) y menos accesible que la clasificación de imágenes.

Afortunadamente para las masas, Ultralytics ha desarrollado una API de detección de objetos simple, muy poderosa y hermosa en torno a su YOLOv5 que otros equipos de investigación y desarrollo han ampliado a versiones más nuevas, como YOLOv7.

En esta breve guía, realizaremos la detección de objetos en Python, con YOLOv7 de última generación.

Paisaje YOLO y YOLOv7

YOLO (Solo se mira una vez) es una metodología, así como una familia de modelos construidos para la detección de objetos. Desde el inicio en 2015, YOLOv1, YOLOv2 (YOLO9000) y YOLOv3 han sido propuestos por los mismos autores, y la comunidad de aprendizaje profundo continuó con avances de código abierto en los años siguientes.

YOLOv5 de ultralíticos es la primera implementación a gran escala de YOLO en PyTorch, lo que lo hizo más accesible que nunca, pero la razón principal por la que YOLOv5 se ha afianzado tanto es también la API maravillosamente simple y poderosa construida a su alrededor. El proyecto abstrae los detalles innecesarios, al tiempo que permite la personalización, prácticamente todos los formatos de exportación utilizables, y emplea prácticas sorprendentes que hacen que todo el proyecto sea eficiente y óptimo.

YOLOv5 sigue siendo el proyecto básico para construir modelos de detección de objetos, y muchos repositorios que apuntan a avanzar en el método YOLO comienzan con YOLOv5 como línea de base y ofrecen una API similar (o simplemente bifurcan el proyecto y construyen sobre él). Tal es el caso de YOLOR (Solo Aprendes Una Representación) y YOLOv7 que se construyó sobre YOLOR (mismo autor). YOLOv7 es el último avance en la metodología YOLO y, más notablemente, YOLOv7 proporciona nuevos cabezales de modelo, que pueden generar puntos clave (esqueletos) y realizar segmentación de instancias además de solo regresión de cuadro delimitador, que no era estándar con los modelos YOLO anteriores.

¡Esto hace que la segmentación de instancias y la detección de puntos clave sean más rápidas que nunca!

Además, YOLOv7 funciona más rápido y con un mayor grado de precisión que los modelos anteriores debido a un recuento de parámetros reducido y una mayor eficiencia computacional:

Inferencia de detección de objetos en tiempo real en Python con YOLOv7 PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

El modelo en sí se creó a través de cambios arquitectónicos, además de optimizar aspectos de la capacitación, denominados "bolsa de regalos", que aumentaron la precisión sin aumentar el costo de la inferencia.

Instalando YOLOv7

Instalar y usar YOLOv7 se reduce a descargar el repositorio de GitHub a su máquina local y ejecutar los scripts que vienen con él.

Nota: Desafortunadamente, al momento de escribir, YOLOv7 no ofrece una API programática limpia como YOLOv5, que generalmente se carga desde torch.hub(), pasando el repositorio de GitHub. Esta parece ser una función que debería funcionar, pero actualmente está fallando. A medida que se solucione, actualizaré la guía o publicaré una nueva en la API programática. Por ahora, nos centraremos en los scripts de inferencia proporcionados en el repositorio.

Aun así, puedes realizar la detección en tiempo real sobre videos, imágenes, etc. y guardar los resultados fácilmente. El proyecto sigue las mismas convenciones que YOLOv5, que tiene una extensa documentación, por lo que es probable que encuentre respuestas a más preguntas específicas en el repositorio de YOLOv5, si tiene algunas.

Descarguemos el repositorio y realicemos algunas inferencias:

! git clone https://github.com/WongKinYiu/yolov7.git

Esto crea un yolov7 directorio en su directorio de trabajo actual, que alberga el proyecto. Pasemos a ese directorio y echemos un vistazo a los archivos:

%cd yolov7
!ls
/Users/macbookpro/jup/yolov7
LICENSE.md       detect.py        models           tools
README.md        export.py        paper            train.py
cfg              figure           requirements.txt train_aux.py
data             hubconf.py       scripts          utils
deploy           inference        test.py          runs

Nota: En un cuaderno de Google Colab, tendrás que ejecutar la magia %cd comando en cada celda a la que desea cambiar su directorio yolov7, mientras que la siguiente celda lo devuelve a su directorio de trabajo original. En Jupyter Notebooks locales, cambiando el directorio una vez lo mantiene en él, por lo que no es necesario volver a emitir el comando varias veces.

El detect.py son los scripts de inferencia que ejecutan las detecciones y guardan los resultados en runs/detect/video_name, donde puede especificar el video_name mientras llama al detect.py guión. export.py exporta el modelo a varios formatos, como ONNX, TFLite, etc. train.py se puede usar para entrenar un detector YOLOv7 personalizado (el tema de otra guía), y test.py se puede utilizar para probar un detector (cargado desde un archivo de pesos).

Varios directorios adicionales contienen las configuraciones (cfg), datos de ejemplo (inference), datos sobre la construcción de modelos y configuraciones COCO (data), Etc.

Tamaños YOLOv7

Los modelos basados ​​en YOLO escalan bien y, por lo general, se exportan como modelos más pequeños y menos precisos y modelos más grandes y más precisos. Luego, estos se implementan en dispositivos más débiles o más fuertes, respectivamente.

YOLOv7 ofrece varios tamaños y los comparó con MS COCO:

Consulte nuestra guía práctica y práctica para aprender Git, con las mejores prácticas, los estándares aceptados por la industria y la hoja de trucos incluida. Deja de buscar en Google los comandos de Git y, de hecho, aprenden ella!

Modelo Tamaño de prueba APtest AP50test AP75test lote 1fps lote 32 tiempo promedio
YOLOv7 640 51.4% 69.7% 55.9% 161 fps 2.8 ms
YOLOv7-X 640 53.1% 71.2% 57.8% 114 fps 4.3 ms
YOLOv7-W6 1280 54.9% 72.6% 60.1% 84 fps 7.6 ms
YOLOv7-E6 1280 56.0% 73.5% 61.2% 56 fps 12.3 ms
YOLOv7-D6 1280 56.6% 74.0% 61.8% 44 fps 15.0 ms
YOLOv7-E6E 1280 56.8% 74.4% 62.1% 36 fps 18.7 ms

Dependiendo del hardware subyacente en el que espera que se ejecute el modelo y la precisión requerida, puede elegir entre ellos. ¡El modelo más pequeño alcanza más de 160FPS en imágenes de tamaño 640, en un V100! También puede esperar un rendimiento satisfactorio en tiempo real en las GPU de consumo más comunes.

Video Inferencia con YOLOv7

Crear una inference-data carpeta para almacenar las imágenes y/o videos que le gustaría detectar. Suponiendo que está en el mismo directorio, podemos ejecutar un script de detección con:

! python3 detect.py --source inference-data/busy_street.mp4 --weights yolov7.pt --name video_1 --view-img

Esto generará un video basado en Qt en su escritorio en el que puede ver el progreso y la inferencia en vivo, cuadro por cuadro, así como enviar el estado a nuestro canal de salida estándar:

Namespace(weights=['yolov7.pt'], source='inference-data/busy_street.mp4', img_size=640, conf_thres=0.25, iou_thres=0.45, device='', view_img=True, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='video_1', exist_ok=False, no_trace=False)
YOLOR 🚀 v0.1-112-g55b90e1 torch 1.12.1 CPU

Downloading https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt to yolov7.pt...
100%|██████████████████████████████████████| 72.1M/72.1M [00:18<00:00, 4.02MB/s]

Fusing layers... 
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
Model Summary: 306 layers, 36905341 parameters, 6652669 gradients
 Convert model to Traced-model... 
 traced_script_module saved! 
 model is traced! 
 
video 1/1 (1/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1071.6ms) Inference, (2.4ms) NMS
video 1/1 (2/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1070.8ms) Inference, (1.3ms) NMS

Tenga en cuenta que el proyecto se ejecutará lentamente en máquinas basadas en CPU (como 1000 ms por paso de inferencia en el resultado anterior, se ejecutó en una MacBook Pro 2017 basada en Intel) y significativamente más rápido en máquinas basadas en GPU (más cerca de ~ 5 ms/cuadro en un V100). Incluso en sistemas basados ​​en CPU como este, yolov7-tiny.pt corre a las 172ms/frame, que si bien está lejos de ser en tiempo real, sigue siendo muy decente para manejar estas operaciones en una CPU.

Una vez finalizada la ejecución, puede encontrar el video resultante en runs/video_1 (el nombre que proporcionamos en el detect.py llamada), guardada como .mp4:

Inferencia de detección de objetos en tiempo real en Python con YOLOv7 PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Inferencia sobre Imágenes

La inferencia en imágenes se reduce al mismo proceso: proporcionar la URL a una imagen en el sistema de archivos y llamar detect.py:

! python3 detect.py --source inference-data/desk.jpg --weights yolov7.pt

Nota: Al momento de escribir, la salida no escala las etiquetas al tamaño de la imagen, incluso si configura --img SIZE. Esto significa que las imágenes grandes tendrán líneas de cuadro delimitador muy delgadas y etiquetas pequeñas.

Inferencia de detección de objetos en tiempo real en Python con YOLOv7 PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Conclusión

En esta breve guía, analizamos brevemente YOLOv7, el último avance de la familia YOLO, que se basa en YOLOR. Hemos analizado cómo instalar el repositorio en su máquina local y ejecutar scripts de inferencia de detección de objetos con una red previamente entrenada en videos e imágenes.

En otras guías, cubriremos la detección de puntos clave y la segmentación de instancias.

Yendo más lejos: aprendizaje profundo práctico para la visión por computadora

¿Tu naturaleza inquisitiva te hace querer ir más allá? Recomendamos revisar nuestro Curso: “Aprendizaje Profundo Práctico para Visión por Computador con Python”.

Inferencia de detección de objetos en tiempo real en Python con YOLOv7 PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

¿Otro curso de visión artificial?

No haremos clasificación de dígitos MNIST o moda MNIST. Cumplieron su parte hace mucho tiempo. Demasiados recursos de aprendizaje se centran en conjuntos de datos básicos y arquitecturas básicas antes de permitir que las arquitecturas avanzadas de caja negra carguen con la carga del rendimiento.

queremos centrarnos en desmitificación, sentido práctico, comprensión, intuición y proyectos reales. Querer aprender cómo ¿Tu puedes hacer la diferencia? Lo llevaremos en un viaje desde la forma en que nuestros cerebros procesan imágenes hasta escribir un clasificador de aprendizaje profundo de grado de investigación para el cáncer de mama y redes de aprendizaje profundo que "alucinan", enseñándole los principios y la teoría a través del trabajo práctico, equipándolo con el conocimientos y herramientas para convertirse en un experto en la aplicación del aprendizaje profundo para resolver la visión artificial.

¿Qué hay adentro?

  • Los primeros principios de la visión y cómo se puede enseñar a las computadoras a “ver”
  • Diferentes tareas y aplicaciones de la visión artificial
  • Las herramientas del oficio que facilitarán tu trabajo
  • Encontrar, crear y utilizar conjuntos de datos para la visión por computadora
  • La teoría y aplicación de las Redes Neuronales Convolucionales
  • Manejo de cambio de dominio, co-ocurrencia y otros sesgos en conjuntos de datos
  • Transfiera el aprendizaje y utilice el tiempo de capacitación y los recursos computacionales de otros para su beneficio
  • Construyendo y entrenando un clasificador de cáncer de mama de última generación
  • Cómo aplicar una buena dosis de escepticismo a las ideas principales y comprender las implicaciones de las técnicas ampliamente adoptadas
  • Visualización del "espacio conceptual" de ConvNet usando t-SNE y PCA
  • Casos prácticos de cómo las empresas utilizan técnicas de visión artificial para lograr mejores resultados
  • Evaluación adecuada del modelo, visualización del espacio latente e identificación de la atención del modelo.
  • Realizar investigaciones de dominio, procesar sus propios conjuntos de datos y establecer pruebas modelo
  • Arquitecturas de vanguardia, la progresión de las ideas, qué las hace únicas y cómo implementarlas
  • KerasCV: una biblioteca WIP para crear canalizaciones y modelos de última generación
  • Cómo analizar y leer documentos e implementarlos usted mismo
  • Selección de modelos en función de su aplicación
  • Creación de una canalización de aprendizaje automático de extremo a extremo
  • Panorama e intuición sobre la detección de objetos con Faster R-CNN, RetinaNets, SSD y YOLO
  • Instancia y segmentación semántica
  • Reconocimiento de objetos en tiempo real con YOLOv5
  • Capacitación de detectores de objetos YOLOv5
  • Trabajando con Transformers usando KerasNLP (biblioteca WIP de fuerza industrial)
  • Integrando Transformers con ConvNets para generar subtítulos de imágenes
  • sueño profundo
  • Optimización del modelo de Deep Learning para visión artificial

Sello de tiempo:

Mas de Abuso de pila