En los últimos años uno de los usos comerciales más sonados de la inteligencia artificial son los modelos de detección de objetos. Estos son programas los cuales se enfocan en detectar distintos objetos y sus posiciones dentro de una imángen.

En un post pasado ya vimos como hacer detección de objetos sobre fotografías usando TensorFlow y sin duda alguna una de las peticiones que más he recibido es si puedo explicar como hacer lo mismo pero en tiempo real, es decir detectar objetos en un video.

Asi que en este post voy a explicarles como pueden hacer detección de objetos sobre un video mp4 o del feed de una cámara web

Si quieren echarle un vistazo al video de YouTube que hice explicando el paso a paso aqui esta la liga al video . En este post estan todas las ligar necesarias al repositorio al igual que los comandos a ejecutar.

Este video fue seguido por otro tutorial para poder entrenar un modelo para detectar los objetos que nosotros queramos. En este siguiente video esta el detalle desde como etiquetar las imagenes hasta correr el entrenamiento y predicciones.

Paso a Paso para entrenar tu propio modelo de detección en tiempo real

Primero, lo que tendrás que hacer es clonar o descargar el repositorio de Github para hacer las detecciones y entrenamiento. La liga al repositorio esta aquí.

Segundo deberás etiquetar las imagenes con el formato VOC, en el video de arriba explico cómo hacer esto

Desde la carpeta config correremos el archivo create_custom_model para generar un archivo .cfg el cual contiene información sobre la red neuronal para correr las detecciones

cd config
bash create_custom_model.sh <Numero_de_clases_a_detectar>
cd ..

Descargamos la estructura de pesos de YOLO para poder hacer transfer learning sobre esos pesos

cd weights
bash download_darknet.sh
cd ..

Poner las imagenes y archivos de metadata en las carpetar necesarias

Las imagenes etiquetadas tienen que estar en el directorio data/custom/images mientras que las etiquetas/metadata de las imagenes tienen que estar en data/custom/labels. Por cada imagen.jpg debe de existir un imagen.txt (metadata con el mismo nombre de la imagen)

El archivo data/custom/classes.names debe contener el nombre de las clases, como fueron etiquetadas, un renglon por clase.

Los archivos data/custom/valid.txt y data/custom/train.txt deben contener la dirección donde se encuentran cada una de las imagenes.

Entrenar

python train.py --model_def config/yolov3-custom.cfg 
--data_config config/custom.data 
--pretrained_weights weights/darknet53.conv.74 
--batch_size 2

Correr deteccion de objetos en video con nuestras clases

python deteccion_video.py --model_def config/yolov3-custom.cfg 
--checkpoint_model checkpoints/yolov3_ckpt_99.pth 
--class_path data/custom/classes.names  
--weights_path checkpoints/yolov3_ckpt_99.pth  
--conf_thres 0.85