Tema 01: Detección de objetos
Enseñando a las máquinas a ver
La brecha semántica: ¿cómo lo ve un humano vs. una máquina?
Visión humana
Inmediatamente identificamos «un gato naranja durmiendo en un sofá» y comprendemos su contexto.
Visión computacional
Una máquina percibe una compleja matriz de millones de píxeles, cada uno con valores numéricos RGB como [255, 128, 64…].
Las imágenes digitales son matrices de píxeles. La visión artificial aprende representaciones que permiten asociar esos valores con objetos, relaciones o regiones.
Tareas principales en visión artificial
¿Qué salida necesitas?
La misma imagen admite tareas distintas.
Respuesta B. Exacto: la detección localiza cada instancia y permite contarla.
La clasificación da una etiqueta global. La detección devuelve cajas y categorías por instancia. La segmentación delimita píxeles. Otros problemas incluyen anomalías, pose, OCR, profundidad y superresolución.
1. Detección de objetos
Tipos de arquitecturas de Object Detection
La rama basada en CNN se divide en frameworks con propuestas de región (R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN, FPN) y frameworks de regresión o clasificación directa (YOLO, SSD, RetinaNet). La rama basada en transformer agrupa detección extremo a extremo (DETR, Deformable DETR, Efficient DETR, Sparse DETR) y arquitecturas ViT (ViT, DeiT, CaiT, CvT).
Evolución histórica de los detectores
-
Two-Stage (2014-2016)
R-CNN, Fast R-CNN, Faster R-CNN: arquitecturas de dos etapas que primero proponen regiones candidatas y luego las clasifican. Precisos pero complejos y lentos.
-
One-Stage (2015 →)
YOLO revoluciona el campo: una sola red neuronal procesa la imagen completa en tiempo real, prediciendo cajas y clases simultáneamente mediante una cuadrícula.
-
Transformers (2020 →)
DETR y RF-DETR: pipelines limpios basados en atención, sin anchors predefinidos ni supresión de no-máximos (NMS). Arquitectura más simple y generalizable.
Redes neuronales convolucionales (CNNs)
Las CNN incorporan localidad e invariancia aproximada a traslaciones. Siguen siendo componentes útiles en muchos detectores; el contexto global y la atención son decisiones de arquitectura, no una carencia universal de todas las CNN.
Two-Stage: precisión a costa de complejidad
R-CNN
Comparación de velocidad de RCNNs
La tabla compara tres generaciones. Método de propuestas: Selective Search en RCNN y Fast RCNN, RPN en Faster RCNN. Tiempo de generación: 1500 ms, 1500 ms y 10 ms. Predicción sobre las propuestas por imagen: 47000 ms, 320 ms y 190 ms. Factor de aceleración: X, 25X y 250X.
YOLO: detección como regresión directa
La arquitectura YOLO: velocidad y simplicidad
Una celda se responsabiliza de un objeto
Baja la cuadrícula y mira qué pasa cuando dos centros caen en la misma celda.
Cada punto es el centro de un objeto. YOLOv1 usaba una cuadrícula de 7 × 7.
Objetos con celda propia3 de 3
Esta página recoge el estado con una cuadrícula de 7 × 7, la que usaba YOLOv1. Al bajar a 6 × 6 o menos, los centros de los dos coches de la izquierda caen en la misma celda y esa celda solo puede responsabilizarse de uno: es la limitación más citada de YOLOv1 con objetos juntos o pequeños. Subir S reparte mejor los centros en general, pero no lo garantiza: con 8 × 8 y con 12 × 12 esos dos centros vuelven a caer juntos, porque lo que decide es dónde quedan las líneas de la rejilla. Además, más celdas multiplican las predicciones y el coste. Las versiones posteriores atacan el problema con predicción multiescala y, más tarde, con enfoques anchor-free.
Una sola pasada, una sola red
Comprueba en qué se diferencia un detector de una etapa.
Respuesta C. Exacto: esa es la idea central, aunque los detalles cambian entre versiones.
Un detector de una etapa predice cajas y clases en una única pasada sobre toda la imagen, sin una fase previa que proponga regiones candidatas.
Evolución de la familia YOLO (2016-2024)
- 2016 · YOLOv1El origen de la detección en tiempo real: un solo vistazo para detectar objetos, superando a los métodos de dos etapas.
- 2018 · YOLOv3Estableció el estándar con predicción multiescala y el backbone Darknet-53, optimizando la detección de objetos pequeños.
- 2020 · YOLOv4Maximizó la velocidad con CSPDarknet y «Bag of Freebies» (por ejemplo, Mosaic), optimizado para rendimiento en C++.
- 2020 · YOLOv5Democratizó YOLO con su implementación en PyTorch, destacando por su facilidad de uso y accesibilidad.
- 2022 · YOLOv7Alcanzó el estado del arte en velocidad y precisión para dispositivos Edge con la innovadora arquitectura E-ELAN.
- 2023 · YOLOv8Cambio a Anchor-Free y unificó la API para detección, segmentación y estimación de pose. Publicado por ultralytics.
- 2024 · YOLOv9Introdujo PGI y GELAN para resolver la pérdida de información en redes profundas sin coste computacional adicional.
Por qué las CNNs no son suficientes
Campo receptivo limitado
Las CNNs procesan información en parches locales. Para entender relaciones a larga distancia, necesitan muchas capas, lo que aumenta la profundidad del modelo y dificulta la propagación de gradientes. Esto es ineficiente para capturar el contexto global de una imagen.
Sesgo inductivo fuerte
Asumen una fuerte localidad espacial e invarianza a traslación. Esto es útil para objetos que aparecen en cualquier lugar de la imagen, pero dificulta la modelización de relaciones abstractas o estructuras que no se ajustan a patrones de vecindad directa.
Componentes Ad-Hoc
Dependen de elementos manuales y heurísticos como los «anchors» predefinidos (cajas de diferente tamaño y aspecto) y el proceso de Supresión de No Máximos (NMS) para eliminar redundancia. Estos componentes añaden complejidad, hiperparámetros y son difíciles de optimizar globalmente.
El umbral de NMS es un hiperparámetro
Baja el umbral y desaparece un coche entero; súbelo y vuelven los duplicados.
Cinco cajas candidatas sobre dos coches. El detector las propone todas antes de filtrar.
Cajas que quedan2
Suprimidas3
Esta página recoge el estado con umbral 0,50. El algoritmo recorre las cajas de mayor a menor puntuación: cada superviviente suprime a las que solapan con ella por encima del umbral. Con 0,20 la caja del primer coche llega a suprimir la del segundo, porque comparten un 25 % de área, y se pierde un objeto real. Con 0,80 apenas se suprime nada y quedan las cinco cajas. No hay un valor universalmente correcto: depende de cuánto se solapen los objetos del dominio, y por eso DETR y RF-DETR eliminan este paso mediante la asignación uno a uno durante el entrenamiento.
DETR: Transformers para detección
Fin del NMS: matching húngaro
YOLO (pre-NMS): predicciones redundantes
Predice miles de cajas candidatas y necesita un proceso de filtrado (NMS) para eliminar las duplicadas.
DETR: predicciones directas y únicas
Asigna una predicción única a cada objeto real utilizando un algoritmo de matching húngaro basado en un coste global.
Una predicción por objeto
La asignación bipartita ocurre durante el entrenamiento, no en la inferencia.
Respuesta A. Exacto: define qué objetivo supervisa cada predicción.
El coste combina clase y geometría. Al forzar una correspondencia uno a uno, el modelo aprende a no duplicar predicciones y deja de necesitar NMS al inferir.
RF-DETR
Backbone DINOv2 pre-entrenado
Utiliza un potente vision transformer pre-entrenado para un reconocimiento robusto de patrones visuales, lo que facilita una rápida adaptación y reduce la necesidad de grandes volúmenes de datos para nuevas tareas.
Atención deformable eficiente
A diferencia de la autoatención estándar, este mecanismo se centra en un pequeño conjunto de puntos de muestreo clave, permitiendo procesar mapas de características de alta resolución de manera eficiente y mejorando la detección de objetos pequeños.
Pipeline modular y sin anchors
Su diseño flexible elimina la necesidad de anchors predefinidos y la supresión de no-máximos (NMS), simplificando la arquitectura y haciéndola más generalizable y fácil de optimizar para distintas aplicaciones.
RF-DETR paso a paso
-
Combinación de features multiescala
RF-DETR integra features provenientes de diferentes escalas de resolución de la imagen. Esto se realiza antes de que los datos lleguen al encoder del Transformer, asegurando una comprensión contextual rica desde el principio.
-
Alineación con atención deformable en el encoder
El encoder del Transformer procesa estas features multiescala y utiliza un mecanismo de atención deformable. Este enfoque permite alinear y enfocar eficientemente las características más relevantes, ajustándose dinámicamente.
-
Interacción de queries con Cross-Attention
Las «object queries» interactúan con los niveles de features del encoder a través de un mecanismo de cross-attention. Esto permite que cada query acceda a información relevante de diversas escalas para proponer ubicaciones.
-
Refinamiento de predicciones en el decoder
El decoder de RF-DETR consta de múltiples capas que refinan iterativamente las predicciones de los objetos. Cada capa toma las predicciones de la anterior y las mejora.
-
Salida final de bounding boxes
Finalmente, el modelo genera directamente las bounding boxes para cada objeto, sin la necesidad de post-procesamiento como NMS, lo que agiliza el proceso de detección.
Por qué NO usamos ultralytics en clase
Licencia problemática
La combinación de licencias AGPL y comercial fuerza a los usuarios a liberar su código o a pagar, lo que contradice el espíritu de un verdadero open-source y limita su uso comercial.
Apropiación de marca YOLO
La designación de sus versiones (YOLOv5-YOLOv11) como «YOLO oficial» es engañosa, ya que no provienen de la familia original de Joseph Redmon ni de la línea académica, causando desinformación generalizada.
Código no modular
El código está fuertemente orientado a su interfaz de línea de comandos (CLI), lo que dificulta su estudio, comprensión interna y adaptación para fines de investigación o proyectos más personalizados.
Limitaciones académicas
Su enfoque lo hace poco apto para la enseñanza y la investigación seria. La falta de modularidad y la escasa reproducibilidad científica lo alejan de los estándares de los papers académicos.
Las condiciones de licencia se revisan por versión y por artefacto: el código y los pesos pueden tener términos distintos y cambiar entre versiones. Conviene comprobar la licencia vigente del repositorio y del checkpoint concreto antes de decidir.
Por qué SÍ usamos RF-DETR en clase
Licencia Apache 2.0
Libre para industria, investigación y enseñanza. Sin obligaciones ocultas que limiten la innovación o el despliegue de proyectos.
Arquitectura moderna y clara
Basado en la familia DETR, ofrece una comprensión profunda de cómo funciona un detector de objetos de vanguardia, sin la complejidad de sistemas heredados.
Código limpio y modular
Diseñado para ser fácil de leer, modificar y explicar a alumnos, facilitando la experimentación y el aprendizaje de la implementación práctica.
Muy buen rendimiento
Ofrece una velocidad de inferencia y entrenamiento superior a muchos modelos YOLO modernos, optimizando los tiempos de desarrollo y prueba en el aula.
RF-DETR vs YOLO en producción
Las curvas proceden del repositorio de RF-DETR y se miden en un hardware concreto. Antes de decidir conviene reproducir la medida en el dispositivo de destino, con el tamaño de entrada, la precisión numérica y el tamaño de lote que se vayan a usar realmente.
IoU (Intersection over Union)
IoU0.33
Umbrales típicos de IoU
¿Por qué es importante?
IoU vale 1 cuando ambas cajas coinciden y 0 cuando no comparten área. Para decidir TP, FP y FN también se tiene en cuenta la clase, la correspondencia uno a uno y un protocolo de evaluación.
Fundamentos: TP, FP, FN (y por qué no hay TN)
TP (True positives)
Detecciones correctas: cajas predichas que coinciden con objetos reales (IoU > umbral).
FP (False positives)
Falsas alarmas: cajas predichas donde no hay objeto real o con IoU muy bajo.
FN (False negatives)
Objetos perdidos: objetos reales que el modelo no detectó.
Por qué NO existen True Negatives (TN) en object detection
Métricas de evaluación: precision y recall
La importancia de la precisión
Mide la confiabilidad de las detecciones positivas. Un detector con alta precisión minimiza los falsos positivos (detectar algo que no está ahí o identificarlo incorrectamente). Es crucial en aplicaciones donde un error de detección tiene costes elevados, como en inspección de calidad o sistemas de seguridad.
Precision = TPTP + FP
Esto responde a la pregunta: «De todas mis predicciones, ¿cuántas son correctas?».
La importancia del recall
Mide la capacidad del modelo para encontrar todos los objetos relevantes en una imagen. Un alto recall significa pocos falsos negativos (no detectar un objeto que sí está presente). Es vital en escenarios donde es crítico no omitir ningún objeto, como la detección de personas en vigilancia o tumores en imágenes médicas.
Recall = TPTP + FN
Esto responde a la pregunta: «De todos los objetos reales, ¿cuántos detecté?».
Calcula precisión y recall
Aplica las dos fórmulas a un recuento concreto.
Respuesta C. Exacto: 3/(3+1) y 3/(3+2).
Con 3 TP, 1 FP y 2 FN: precisión = 3 / (3 + 1) = 0,75 y recall = 3 / (3 + 2) = 0,60. La precisión mira el denominador de las predicciones; el recall, el de los objetos reales.
Subir el umbral cambia el equilibrio
Precisión y recall se mueven en direcciones opuestas cuando filtras por puntuación.
Precisión0,75
Recall1,00
TP 3 FP 1 FN 0
Esta página recoge el estado con umbral 0,30. El emparejamiento sigue el protocolo habitual: las predicciones se ordenan por puntuación y cada una reclama el objeto libre con el que comparte más área, siempre que el IoU llegue a 0,50. La predicción de 0,24 solapa con el tercer objeto, pero llega tarde: ese objeto ya está emparejado, así que cuenta como falso positivo duplicado. Al subir el umbral desaparecen antes las predicciones dudosas: sube la precisión y baja el recall. La curva precisión-recall recorre ese intercambio umbral a umbral.
Filtrar no cambia las cajas
El umbral de confianza decide qué predicciones se muestran; IoU evalúa su solapamiento.
Respuesta A. Exacto: el filtro elimina las puntuaciones que quedan por debajo del nuevo umbral.
Al subir el umbral suelen desaparecer predicciones de baja puntuación: pueden bajar los falsos positivos y también aumentar los falsos negativos. La curva precisión-recall estudia ese intercambio recorriendo muchos umbrales.
Métricas de evaluación: AP y mAP
Recorrer el umbral de confianza traza la curva: con umbral 0,9 la precisión es alta y el recall bajo; con 0,1 ocurre lo contrario. AP50 y AP promediada entre varios umbrales de IoU responden a protocolos distintos y no son intercambiables.
Límites prácticos: COCO y el mundo real
El vocabulario depende de los datos
Un checkpoint aprende las clases de sus datos. Tu aplicación puede necesitar otras.
Respuesta B. Exacto: la nueva categoría exige una estrategia y una evaluación en el dominio.
Un detector de vocabulario cerrado solo puede nombrar las categorías con las que fue entrenado. Ampliarlo exige anotar y reentrenar, o cambiar a un enfoque guiado por texto.
Buenas prácticas al evaluar detectores
Mide donde vas a usarlo
Un benchmark no sustituye datos representativos, latencia medida y análisis de errores.
Respuesta C. Exacto: la elección depende del problema, del entorno y de los errores que aceptas.
Un AP mejor en un benchmark público indica rendimiento sobre ese conjunto y ese protocolo. La decisión necesita además datos de tu dominio, latencia medida en el hardware de destino y revisión de los errores que importan.
El siguiente paso
Limitaciones actuales
- Solo 80 clases COCO
- No entienden lenguaje
- Requieren reentrenamiento
Modelos multimodales
- Entienden texto + imagen
- Zero-shot con lenguaje natural
- Sin reentrenamiento constante
Detectar objetos en seis líneas
Lo mínimo que necesitas para tener cajas sobre una imagen tuya.
from rfdetr import RFDETRMedium
from PIL import Image
model = RFDETRMedium()
image = Image.open("mi_imagen.jpg").convert("RGB")
detections = model.predict(image, threshold=0.5)
print(detections.class_id, detections.confidence, detections.xyxy)
RF-DETR se publica bajo Apache 2.0 y devuelve las clases de COCO. Para un vocabulario propio hace falta fine-tuning con un dataset anotado, que es lo que mide la pantalla siguiente.
¿De dónde han salido esos pesos?
La receta anterior baja un modelo ya entrenado antes de detectar nada. Ese paso silencioso es el tema siguiente.
Por el paquete de Roboflow
Es lo que acabas de ejecutar. rfdetr trae el modelo, la descarga y el predict en una sola pieza, y es también por donde se reentrena con tus propias imágenes.
Por el Hub de Hugging Face
El mismo RF-DETR está publicado como Roboflow/rf-detr-medium con licencia Apache 2.0, así que transformers lo carga igual que a cualquier otro modelo del curso.
from transformers import AutoImageProcessor, RfDetrForObjectDetection
processor = AutoImageProcessor.from_pretrained("Roboflow/rf-detr-medium")
model = RfDetrForObjectDetection.from_pretrained("Roboflow/rf-detr-medium")
Las dos vías cargan los mismos pesos y se diferencian en el envoltorio. El paquete rfdetr expone la API de Roboflow, con predict y el entrenamiento propio; transformers expone la interfaz común de la librería, que es la que comparten todos los modelos de los temas siguientes y la que permite intercambiar un detector por otro sin reescribir el resto. El identificador y el nombre de clase están tomados de la ficha del modelo, consultada el 17 de septiembre de 2026. Hasta este curso RF-DETR solo estaba disponible por el paquete, así que esta equivalencia es nueva.
La misma familia hace tres cosas
El paquete que acabas de usar trae ahora segmentación y puntos clave. Cambia la clase y cambia lo que recibes, con la misma foto y las mismas tres líneas.
from rfdetr import RFDETRMedium
modelo = RFDETRMedium()
salida = modelo.predict("foto.jpg", threshold=0.5)
print(salida.xyxy) # una caja por objeto
print(salida.class_id) # su clase de COCO
from rfdetr import RFDETRSegPreview
modelo = RFDETRSegPreview()
salida = modelo.predict("foto.jpg", threshold=0.5)
print(salida.mask.shape) # una máscara por objeto
print(salida.mask[0].sum()) # área del primero, en píxeles
import cv2
from rfdetr import RFDETRKeypointPreview
modelo = RFDETRKeypointPreview()
imagen = cv2.cvtColor(cv2.imread("foto.jpg"), cv2.COLOR_BGR2RGB)
puntos = modelo.predict(imagen, threshold=0.5)
print(puntos.xy.shape) # personas x 17 puntos x 2
print(puntos.keypoint_confidence[0]) # confianza de cada punto
El ejercicio
Haz una foto a tu mesa, con una persona dentro si puedes, y pasa las tres. Luego responde con cada salida a la misma pregunta: ¿cuánto ocupa ese objeto? La caja da un rectángulo, la máscara da los píxeles de verdad y el esqueleto no responde, porque mide otra cosa.
Para pintarlo
Las tres salidas son objetos de supervision, así que se dibujan con sv.BoxAnnotator, sv.MaskAnnotator y sv.EdgeAnnotator sin tocar nada más.
Segmentación y puntos clave se publican como «preview», es decir, acceso temprano pensado sobre todo para ajustar el modelo con un dataset propio; las clases son RFDETRSegPreview y RFDETRKeypointPreview, y la licencia del paquete abierto es Apache 2.0. Los puntos clave son los 17 de COCO, los mismos que se evalúan con OKS en el tema 6. Las variantes de detección aparecen en el tema 1, la segmentación es lo que se estudia en el tema 5 con SAM y la pose, en el tema 6: esta pantalla adelanta que el mismo paquete cubre las tres, con la diferencia de que aquí las clases son las de COCO y con SAM se segmenta cualquier cosa sin lista de clases. Consultado el 17 de septiembre de 2026 en la documentación de Roboflow.
¿Cuánto cuesta anotar tu dataset?
La cuenta que decide si fine-tuneas o te apoyas primero en un detector guiado por texto.
Imágenes que anotar1200
Horas, con revisión incluida20
Jornadas de una persona3,3
Coste asumible para un conjunto propio. Aun así, empieza validando con zero-shot para saber si hace falta.
Estimación de orden de magnitud. Suma un 30 % de revisión sobre el tiempo de anotación y cuenta 6 horas productivas por jornada.
La página recoge el caso de 4 clases, 300 imágenes por clase y 45 segundos por imagen. Las cifras que más se disparan son las clases y los segundos por imagen: anotar segmentación o puntos clave multiplica el tiempo respecto a poner cajas. Antes de asumir ese coste conviene comprobar cuánto resuelve un detector guiado por texto sin anotar nada, que es el tema siguiente.
¿Qué error te sale más caro?
El umbral no se elige en abstracto: depende de qué duele más en tu aplicación.
Prioriza el recall
No detectar a alguien que sí está es el fallo grave. Una falsa alarma cuesta una comprobación; un objeto perdido cuesta el incidente.
Qué hacer: baja el umbral de confianza y asume más falsos positivos. Añade una segunda comprobación, humana o automática, para filtrarlos.
Prioriza el recall, con revisión humana
Dejar pasar una pieza defectuosa llega al cliente; marcar una buena solo cuesta una revisión en planta.
Qué hacer: umbral bajo y una estación de revisión. Mide cuántas piezas buenas estás parando, porque ese es el coste que notará producción.
Prioriza la precisión
Contar de más es peor que contar de menos: dispara reposiciones y pedidos equivocados que nadie revisa.
Qué hacer: sube el umbral hasta que apenas haya duplicados y vigila el recuento frente a un conteo manual de control.
Busca el equilibrio y mide la tendencia
Aquí no importa cada persona concreta sino que el sesgo sea estable. Un error constante se corrige; uno que cambia con la hora o el clima, no.
Qué hacer: deja el umbral intermedio y valida sobre grabaciones de momentos distintos, no sobre una sola.
La regla general: si el coste de perder un objeto supera al de revisar una falsa alarma, baja el umbral; si es al revés, súbelo. Y en todos los casos, mide el efecto sobre tus propios datos, no sobre el benchmark.
Antes de poner un detector en producción
Ocho comprobaciones que evitan casi todos los sustos.
- Conjunto de validación propioImágenes de tu dominio, tus cámaras y tus condiciones de luz. No basta el mAP del benchmark.
- Umbral elegido con criterioDecidido según qué error cuesta más en tu caso, no dejado en el valor por defecto.
- Latencia medida en el dispositivo realEnd to end, incluyendo carga, preprocesado y posprocesado. No el número del paper.
- Revisión visual de los erroresMira falsos positivos, falsos negativos y casos límite: ocluidos, pequeños, contraluz.
- Licencia comprobadaDel repositorio y de los pesos, en la versión concreta que vas a desplegar.
- Versión y revisión fijadasAnota el identificador del modelo y su revisión para poder reproducir el resultado.
- Comportamiento ante entradas rarasImagen vacía, muy oscura, resolución distinta, formato inesperado.
- Plan de seguimientoCómo vas a detectar que el rendimiento cae cuando cambien las condiciones.
Ahora, con tu propia imagen
Prueba RF-DETR en tu copia del cuaderno.
- Guarda una copia en Drive.
- Ejecuta el detector con una imagen.
- Cambia el umbral de confianza: 0,25 · 0,50 · 0,75.
Un detector cerrado reconoce sus clases; el siguiente bloque añadirá lenguaje y zero-shot.
Abrir en ColabEn Colab: Archivo → Guardar una copia en Drive. Empieza por inferencia. La disponibilidad de GPU varía; el entrenamiento necesita además el dataset indicado en el notebook. La comparación entre 0,25, 0,50 y 0,75 permite observar qué predicciones desaparecen sin confundir confianza con IoU. El siguiente tema amplía el vocabulario cerrado mediante modelos que relacionan visión y lenguaje.