¿Cómo detectar objetos con YOLO?

La visión artificial es una de las tecnologías más interesantes de la industria en la actualidad, pero alguna vez te has preguntado, ¿cómo logran detectar objetos estos algoritmos?. En este post trataremos de darte una idea general de cómo funcionan y como implementarlo con la Jetson Nano.

El algoritmo YOLO

En aplicaciones de vision en tiempo real es preciso que el procesamiento de imagenes se haga de manera rápida y eficiente. Uno de los mejores algoritmos para procesar imagenes en tiempo real se llama YOLO. YOLO viene de «You Only Look Once», o sólo se mira una vez.

Este algoritmo detecta eficientemente dentro de una rectángulo el objeto detectado. Vía: Medium.

A grandes rasgos, YOLO procesa la imagen con algo llamado Red Neuronal Convolucional, esta red neuronal es un tipo de inteligencia artificial y es muy útil para extraer características de imágenes. Lo primero que hace el algoritmo es procesar la imagen, pasandola a escala de grises y detectando los bordes de los objetos con un filtro.

Detección de bordes de la imagen. Vía: Medium.

Los pasos que siguen consiste en reducir la imagen a un problema de clasificación de clases y enmarcar el objeto identificado en una caja. Para esto, el algoritmo trata de encerrar el objeto en varias cajas, que luego reduce al mejor candidato que ubique mejor el objeto.

Una de las dificultades que presenta este algoritmo es la detección varios objetos del mismo tipo que estén muy cerca en un recuadro. También se le complica detectar objetos pequeños, debido a que necesita de areas grandes para crear la clasificación del objeto.

Para seguir leyendo…

Aplicaciones del algoritmo

Este algoritmo de visión artificial esta muy difundido en vehículos autónomos. Permite guiar al automóvil para evitar que atropelle una persona o choque contra un poste o un árbol. Además, utilizando otros sensores, permite determinar la distancia del auto a la persona u obstáculo. Otra aplicación es en conteo de asistentes en restaurantes o en controles de calidad para frutas y verduras.

YOLO en la NVIDIA Jetson NANO

Para utilizar este algoritmo es necesario instalar algunos complementos e indicar la fuente de la imagen, que puede ser un archivo o una webcam. Para ello hay que seguir este procedimiento:

Actualizar las librerías

sudo apt-get update

Exportar la ruta de Cuda

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Descargar Darknet y Yolo

git clone https://github.com/AlexeyAB/darknet
cd darknet
wget https://pjreddie.com/media/files/yolov3.weights
wget https://pjreddie.com/media/files/yolov3-tiny.weights

Habilitar el uso de GPU

Necesitamos editar el archivo Makefile de compilación para habilitar el GPU, Cuda y OpenCV. Para ello hay que escribir:

sudo vi Makefile

Y establecer los valores:

GPU=1

CUDNN=1

OPENCV=1

y dejar el resto del archivo como está.

Compilar Darknet

make

Con esto ya estará instalado YOLO y Darknet, con lo que podrás hacer tus proyectos de detección de objetos. Para inciarlo puedes ejecutar alguno de estos comandos.

cd darknet %nos posicionamos en la carpeta de darknet
./darknet detector test cfg/coco.data yolov3.cfg yolov3.weights -ext_output dog.jpg       %para detectar desde una imagen
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 0                  % para detectar desde la webcam
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -ext_output test.mp4  % para detectar desde un video

Referencias:

Overview of the object detection algorithm

How to install and run YOLO on NVIDIA Jetson Nano

Darknet github page