Tema 04: DINO y representaciones visuales
4. DINO (v1, v2, v3): ver sin etiquetas
¿Por qué auto-supervisado?
Aprendizaje supervisado
- Necesita etiquetas manuales de expertos.
- Costoso y lento de producir.
- Limitado a categorías predefinidas.
- No escala bien a grandes volúmenes de datos.
Ejemplo: ImageNet
- 14 millones de imágenes.
- 1000 categorías.
- Años de trabajo manual.
- Millones de dólares de inversión.
Aprendizaje auto-supervisado
- No requiere etiquetas manuales.
- Aprende de la estructura interna de los datos.
- Escala a billones de imágenes de manera eficiente.
- Genera representaciones más generales y transferibles.
Self-supervised learning explicado
Contrastive learning
- Imágenes similares → embeddings cercanos.
- Imágenes diferentes → embeddings lejanos.
Masked prediction
- Ocultar partes de imagen.
- Predecir partes ocultas.
Rotation prediction
- Rotar imagen.
- Predecir ángulo de rotación.
Clustering
- Agrupar features similares sin saber qué representan.
Auto-destilación
El papel de la red maestra
Las dos redes comparten arquitectura, pero no aprenden igual.
Respuesta A. Exacto: la profesora proporciona una referencia durante el entrenamiento.
La maestra no se entrena por backpropagation: sus pesos son un promedio móvil de los de la estudiante. Esa estabilidad es lo que da un objetivo consistente y evita el colapso de las representaciones.
Lo que DINO aprende solo
Los mapas de atención son una señal interna del modelo y se alinean a menudo con objetos, pero no son una máscara de segmentación garantizada ni validada píxel a píxel.
La atención, encima de la foto
Dos animales del mismo tipo y el mapa los separa a los dos, con más intensidad en cuellos y cabezas.
Los recortes salen de la figura original del artículo de DINO, que muestra la atención del token de clase en la última capa de un ViT entrenado sin etiquetas. El mapa tiene la resolución de los parches, de ahí el aspecto cuadriculado: con parches de 8 píxeles se ve más fino que con parches de 16. Conviene recordar que es una señal interna del modelo y no una máscara validada píxel a píxel, así que sirve para entender qué mira y no como salida de segmentación.
DINO: identificación de copias de imágenes
Evolución de la familia DINO
-
2021: DINO v1
Primer ViT auto-supervisado. Demostró que la atención del modelo podía realizar segmentación de objetos sin supervisión explícita.
-
2022: DINO v2
Escalado a 142M imágenes, con mejoras arquitectónicas. Generó features visuales mucho más robustas y generalizables.
-
2024: DINO v3
Entrenado con 1B+ imágenes, logrando una calidad de representación cercana a la supervisada. Base para nuevos modelos fundacionales.
DINOv2 se publicó en 2023 y DINOv3 en 2025. Las fechas de la diapositiva señalan el momento en que cada generación se incorporó al curso.
Pipeline de procesamiento de datos DINOv2
-
Ingesta de datos
Imágenes curadas y no curadas (de la web) se combinan para diversidad.
-
Generación de embeddings
Todas las imágenes se transforman en embeddings de alta dimensión.
-
Eliminar duplicados
Se eliminan duplicados o imágenes muy similares de los datos no curados usando embeddings.
-
Matching y enriquecimiento
Imágenes no curadas visualmente similares a las curadas se añaden para enriquecer el dataset.
-
Retrieval auto-supervisado
El sistema expande el dataset añadiendo imágenes relevantes sin etiquetado manual.
Cómo funciona DINO
-
Imagen y aumentaciones diferentes
Una imagen de entrada se somete a diversas transformaciones (aumentaciones) para crear múltiples vistas, incluyendo crops locales y globales.
-
Red estudiante: vistas locales
La red estudiante recibe y procesa específicamente los crops locales, o las versiones más pequeñas y detalladas, de la imagen aumentada.
-
Red maestra: vistas globales
Simultáneamente, la red maestra procesa las vistas globales y más amplias de la misma imagen, capturando el contexto general.
-
Estudiante predice salida de la red maestra
El objetivo de la red estudiante es aprender a predecir la representación (salida) de la red maestra a partir de sus propias vistas locales.
-
Maestra se actualiza por promedio
Los pesos de la red maestra se actualizan de forma suave, utilizando un promedio móvil exponencial (momentum update) de los pesos de la red estudiante, asegurando estabilidad y progreso constante.
Lo que DINO aprende solo
Descubrimientos importantes
Segmentación semántica
Los mapas de atención de DINO actúan como máscaras de objetos, distinguiendo el primer plano del fondo. Identifica objetos coherentes en la escena sin ninguna anotación durante su entrenamiento.
Correspondencias
Es capaz de encontrar puntos equivalentes y coherentes entre diferentes vistas de una imagen o incluso entre imágenes distintas. Esta capacidad surge sin haber sido supervisado nunca para tareas de correspondencia.
Detección de objetos
Los heads de atención de DINO se focalizan naturalmente en objetos salientes dentro de la imagen. Esto ocurre sin que el modelo haya visto una sola bounding box durante su fase de preentrenamiento.
Clasificación
Utilizando las features extraídas por DINO, un clasificador k-NN simple puede lograr buenos resultados. DINO no utiliza etiquetas de clases para el entrenamiento, pero sus representaciones son altamente discriminativas.
DINO como extractor de características
Cercanía según el modelo
La similitud coseno compara la dirección de dos embeddings normalizados.
Respuesta A. Exacto: la cercanía expresa similitud según esa representación.
Una similitud alta significa que el modelo representa las imágenes de forma próxima. No demuestra identidad píxel a píxel ni una categoría concreta.
Entendiendo qué aprende DINO
Mapas de atención
Visualizan las ponderaciones de auto-atención del modelo, mostrando explícitamente dónde se focaliza la red. Revelan segmentación implícita de objetos y la relación entre elementos.
PCA de features
Aplica Análisis de Componentes Principales a las características densas extraídas por DINO. Se mapean los primeros 3 componentes a canales RGB para visualizar agrupaciones semánticas.
t-SNE / UMAP
Estas técnicas de reducción de dimensionalidad no lineal proyectan los embeddings de alta dimensión en un espacio 2D. Muestran cómo DINO agrupa conceptos visuales similares sin etiquetas.
Vecinos cercanos
Identifica parches de imagen o imágenes completas con las representaciones DINO más similares. Útil para validar la coherencia de las características y encontrar correspondencias visuales.
PCA es una proyección lineal útil para colorear características densas. t-SNE y UMAP son técnicas no lineales que proyectan embeddings a 2D para explorar vecindarios. Ninguna crea etiquetas ni demuestra por sí sola que un cluster sea una clase real.
De 768 números a un color
-
Un vector por parche
La imagen se parte en parches de 16 × 16 píxeles y el modelo devuelve un vector por parche, de 768 números en un ViT base. Una imagen de 224 × 224 da 196 vectores.
-
PCA sobre todos los parches
Se juntan esos vectores y se buscan las tres direcciones en las que más varían. Es álgebra pura, sin entrenamiento ni etiquetas.
-
Tres números por parche
Cada parche se proyecta sobre esas tres direcciones. Los 768 números se quedan en tres, que es justo lo que cabe en un color.
-
Los tres números se pintan
Se reescalan a 0-255 y se usan como rojo, verde y azul. El parche vuelve a su sitio en la rejilla y aparece la imagen de colores.
Dos avisos prácticos. El primero: los colores no son comparables entre imágenes salvo que el PCA se ajuste con todas a la vez, porque cada ajuste elige sus propias direcciones y el signo de cada componente es arbitrario. Por eso las figuras publicadas suelen calcular el PCA sobre el conjunto entero de imágenes que enseñan. El segundo: la primera componente suele separar objeto y fondo más que partes concretas, así que es habitual usarla como máscara, quedarse solo con los parches del objeto y repetir el PCA sobre ellos para que las tres componentes se gasten en distinguir partes. El procedimiento no depende de DINO: se puede aplicar a las características densas de cualquier modelo, y lo que cambia de uno a otro es cuánta estructura aparece.
DINO v3
DINO v3: características densas
Cuándo usar (y cuándo no) DINO
Úsalo si…
- No tienes etiquetas o son muy costosas de obtener.
- Las clases o categorías cambian frecuentemente y reentrenar es inviable.
- Necesitas features reutilizables para múltiples tareas (segmentación, anomalías, búsqueda…).
- Quieres descubrir patrones sin asumir taxonomía previa.
- Buscas robustez a cambios de dominio (iluminación, fondo, escala).
Evítalo si…
- Tienes muchas etiquetas fiables y un objetivo de clasificación bien definido (supervisado será mejor).
- Requieres tiempo real en edge con hardware muy limitado (DINO es más pesado que MobileNet).
- Necesitas explicabilidad detallada y reglas interpretables (modelos más simples o clásicos).
- El problema es extremadamente específico y las features generales no aportan (raro, pero posible).
Anomalías con DINOv2/v3 (estilo PatchCore)
-
Imágenes de referencia «normales»
Se recopilan entre 10 y 50 imágenes que representan el estado normal o sin defectos del objeto o proceso a monitorear.
-
Extracción de features DINO
Se utiliza DINOv2 (ViT-B/14 para un buen balance) o DINOv3 (para mayor robustez) como extractor de características.
-
Embeddings por parche
Se extraen los tokens de atención (no solo el CLS) y se normalizan con L2, capturando representaciones detalladas para cada parche de la imagen.
-
Generación del banco de normalidad (CoreSet)
A partir de los embeddings de las imágenes normales, se construye un CoreSet (un subconjunto representativo del 1-10 %) para almacenar la normalidad.
-
Imagen de test
Una nueva imagen, que podría contener anomalías, se procesa de la misma manera para extraer sus embeddings por parche.
-
Predicción de anomalías (kNN)
Se calcula la distancia kNN (L2 o coseno) de cada parche de la imagen de test a su vecino más cercano en el CoreSet. Esto genera un heatmap de anomalías y un score global.
Lejos de todo lo normal
El banco solo guarda parches sin defectos: la puntuación es la distancia al más parecido que encuentre.
Esquema con dos dimensiones. DINO compara embeddings de varios cientos por parche.
Anomalía
Distancia al vecino21,58
Esta página recoge el estado con el parche al 55 % del recorrido. El banco no contiene ni un solo ejemplo de defecto: por eso el método sirve cuando los fallos son raros o desconocidos. Un parche se considera anómalo cuando ningún vector del banco se le parece lo suficiente, y el umbral se fija observando parches normales de validación, no adivinando. Con cada parche puntuado así, la imagen completa produce un heatmap y un score global.
Aceptar o rechazar la pieza
La misma alfombra, buena y con un defecto. Mueve el umbral y mira qué celdas se encienden en cada una.
Se rechaza
Celdas marcadas13
Puntuación más alta1,89
Qué pieza pasa por la cámara
Esta página recoge el estado de la pieza defectuosa con umbral 1,30. Las puntuaciones están precalculadas con un descriptor clásico, no con DINO: cada celda de 35 × 35 píxeles se resume en siete estadísticas de intensidad y de gradiente, se normaliza con las celdas buenas y se puntúa por la distancia a la celda buena más parecida, que es exactamente la regla de PatchCore. Una celda de la pieza buena se compara con las demás celdas buenas y nunca consigo misma, así que su puntuación es honesta. El mapa se suaviza con una media de 3 × 3 para que un parche raro suelto no dispare la alarma. Con este descriptor la pieza buena llega como máximo a 1,28 y la defectuosa a 1,89: el margen existe pero es estrecho, y por debajo de 1,20 aparecen falsas alarmas. Con características de DINOv2 el margen se abre, que es justamente el motivo de usarlas, y el cuaderno del tema lo comprueba con el mismo par de imágenes.
Del embedding a la decisión
Un vector por sí solo no dice si algo está bien o mal.
Respuesta A. Exacto: la distancia requiere referencias y una decisión validada.
Hace falta una referencia de normalidad y un criterio de distancia. Sin banco y sin umbral, un embedding es solo un punto en el espacio.
Un vector por imagen, sin etiquetas
El extractor que alimenta búsqueda por similitud, clustering y detección de anomalías.
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModel
model_id = "facebook/dinov2-base"
processor = AutoImageProcessor.from_pretrained(model_id)
model = AutoModel.from_pretrained(model_id).eval()
def embedding(ruta):
image = Image.open(ruta).convert("RGB")
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():
salida = model(**inputs).last_hidden_state
cls = salida[:, 0] # resumen global de la imagen
return torch.nn.functional.normalize(cls, dim=-1)
a, b = embedding("pieza_1.jpg"), embedding("pieza_2.jpg")
print("similitud:", float(a @ b.T))
Montar un detector de anomalías en una tarde
Sin un solo ejemplo de defecto, con las cifras de la diapositiva anterior.
-
Reúne entre 10 y 50 imágenes normales
De la misma cámara, la misma distancia y la misma luz que vas a tener en producción. La variabilidad que no esté aquí se marcará como anomalía.
-
Extrae embeddings por parche y normaliza
Usa los tokens de parche, no solo el CLS, y normaliza con L2. Así cada región tiene su propia representación.
-
Construye el banco con un CoreSet del 1 al 10 %
No guardes todos los vectores: quédate con un subconjunto que cubra el espacio. Reduce memoria y acelera la búsqueda sin perder cobertura.
-
Fija el umbral con imágenes normales de validación
Puntúa unas cuantas imágenes buenas que no estén en el banco y coloca el umbral por encima de su distancia máxima, con margen. No lo adivines.
-
Puntúa y revisa el heatmap, no solo el número
El máximo por parche da el score de la imagen; el mapa completo te dice si el modelo mira donde tú mirarías.
Antes de fiarte de un banco de normalidad
Seis comprobaciones para un método que no ha visto ni un defecto.
- Las imágenes normales cubren la variación realTurnos, lotes, luz de mañana y de tarde. Lo que falte se marcará como anomalía.
- Encuadre estableSi la pieza cambia de posición entre fotos, la distancia sube sin que haya defecto.
- Umbral fijado con validaciónCon imágenes buenas apartadas, no con las del propio banco.
- Heatmap revisado a ojoQue se encienda donde está el defecto y no en el fondo.
- Falsos positivos contadosCuántas piezas buenas estás parando. Ese es el coste que notará producción.
- Plan de actualizaciónQué haces cuando cambie el proveedor, el lote o la iluminación.
Explora los embeddings
Extrae representaciones globales y densas con DINOv2.
- Guarda una copia en Drive.
- Compara dos imágenes.
- Interpreta patches y PCA.
Compara el token global para similitud entre imágenes y los tokens de patch para estructura espacial. Observa si PCA, vecinos cercanos y distancia coseno cuentan una historia coherente; una visualización atractiva no sustituye la validación de la tarea final.