# Algoritmo You Only Look Once (YOLO)

El algoritmo You Only Look Once (YOLO), es un sistema de código abierto para detección de objetos en tiempo real, el cual hace uso de una única red neuronal convolucional para detectar objetos en imágenes. Para su funcionamiento, la red neuronal divide la imagen en regiones, prediciendo cuadros de identificación y probabilidades por cada región; las cajas son ponderadas a partir de las probabilidades predichas. El algoritmo aprende representaciones generalizables de los objetos, permitiendo un bajo error de detección para entradas nuevas, diferentes al conjunto de datos de entrenamiento.
El algoritmo base corre a 45 cuadros por segundo (FPS) sin procesamiento de lote en un GPU Titan X; una versión rápida del algoritmo funciona a más de 150 fps. Debido a sus características de procesamiento, el algoritmo es utilizado en aplicaciones de detección de objetos en transmisión de video con retazo de señal menor a 25 milisegundos.

## Arquitectura

El modelo se implementó como una red neuronal convolucional y fue evaluado en el set de datos para detección de PASCAL VOC. Las capas convolucionales iniciales de la red se encargan de la extracción de características de la imagen, mientras que las capas de conexión completa predicen la probabilidad de salida y las coordenadas del objeto.
La red tiene 24 capas convolucionales seguidas por 2 capas de conexión completa; esta hace uso de capas de reducción de 1x1 seguidas capas convolucionales de 3x3. El modelo Fast YOLO hace uso de una red neuronal de 9 capas. La salida final del modelo tensor de predicción de 7x7x30.

## Entrenamiento

Para el pre entrenamiento, se hace uso de las primeras 20 capas convolucionales seguidas de una capa promediadora de grupos y una capa de conexión completa; posteriormente se convierte el modelo resultante para la obtención de detección de objetos.
Para la implementación de detección de objetos se agregan 4 capas convolucionales y 2 capas de conexión completa con ponderaciones aleatoriamente inicializadas. La última capa de la red predice probabilidades de clases y coordenadas para las cajas de identificación; para este paso se normaliza la altura y ancho de la caja de identificación con respecto a los parámetros de la imagen, de tal manera que sus valores se mantengan entre 0 y 1. En la última capa se usa una función de activación, utilizando un error de suma cuadrada para la optimización de la salida.
El algoritmo YOLO predice múltiples cuadros de identificación por cuadrícula de celdas. En tiempo de entrenamiento se busca tener un solo cuadro de identificación por objeto, lo cual se consigue a partir de las probabilidades predichas para cada cuadro, manteniendo el de mayor alta probabilidad.

## Limitaciones

El algoritmo delimita fuertes restricciones espaciales en los límites de la caja de predicción dado que cada celda predice únicamente dos cajas y una clase; esto limita el número de objetos que se pueden detectar, lo cual hace que el algoritmo se vea limitado en la detección de objetos presentados en grupos.
Presenta problemas en la generalización de objetos visualizados en distintas configuraciones, al igual que en el proceso de post procesamiento de errores, tratando todos los errores con el mismo nivel de importancia.

## Versiones

* YOLO (2015)
* YOLO9000 (2016)
* YOLOv2 (2017)
* Fast YOLO (2017)
* YOLOv3 (2018)
* YOLOv4 (Abril de 2020)
* YOLOv5 (2020)
* YOLOR (2021)
* YOLOv6 (2022)
* YOLOv7 (2022)
* YOLOv8 (2023)
YOLO, YOLO9000, YOLOv2 y YOLOv3, YOLOv5 y YOLOv8 pertenecen al mismo autor, los académicos de la universidad de Washington, que conformaron la empresa Ultralytics. Pero YOLO no es una marca registrada, queda la duda sobre la significancia del uso del nombre por otros autores, como en YOLOv4, YOLOR y YOLOv7, desarrollados por académicos de la Taiwanesa Academia Sinica. Por último YOLOv6 fue desarrollado por la empresa china de delivery Meituan para sus propios robots autónomos.
Cada algoritmo performa mejor que otro en alguna aplicación concreta, y no es sencillo hacer una comparación objetiva sobre su precisión. Aun así, YOLOv7 introdujo otros modelos incluyendo segmentación, y human pose estimation, lo cual la situaba cualitativamente por encima. Más tarde podría incluir detección en 3D.
YOLOv8, que ya no clamaba una mejora en precisión incluyó estas funcionalidades y añadió el tracking, lo cual viene a recoger en un solo repositorio prácicamente todas las aplicaciones de visión por computador. La mayor ventaja que ofrece YOLOv8 es sin duda la amplia documentación que ofrecen sobre su propio algoritmo, algo que ya estaba presente en YOLOv5, y que no ofrecen el resto de repositorios.