El error que produce 10,000 imágenes inútiles

El enfoque obvio para convertir vídeos en datos de entrenamiento es extraer cada fotograma. Se siente completo. Es casi lo peor que puedes hacer.

Los cuadros consecutivos de video de 30 fps están separados por 33 milisegundos. A menos que la cámara o el sujeto se muevan rápido, el fotograma 1001 es casi idéntico al fotograma 1000: la misma pose, la misma iluminación, el mismo fondo, unos pocos píxeles de diferencia. Un conjunto de datos de 10.000 cuadros de este tipo no contiene 10.000 ejemplos. Contiene quizás 300 situaciones distintas, cada una repetida treinta veces.

Lo que eso hace a la capacitación es específico y perjudicial. El costo de las anotaciones aumenta con el número de imágenes, por lo que paga treinta veces más por la misma información. El tiempo de entrenamiento también escala. Y lo más importante, si esos casi duplicados terminan en ambos lados de su división tren/validación, el modelo efectivamente ha visto el conjunto de validación: obtiene una puntuación de validación que no significa nada.

Por lo tanto, la primera decisión no es una configuración de herramienta. Es: ¿cuánto tiene que cambiar el contenido antes de que un fotograma cuente como un nuevo ejemplo?

Elegir el intervalo de muestreo

Dérivalos del movimiento de la escena, no de la velocidad de fotogramas de origen. Algunos puntos de partida prácticos:

  • Cámara estática, sujeto lento (vigilancia, crecimiento de una planta, cola): 1 fotograma cada 2 a 10 segundos. Cualquier cosa más densa es redundante.
  • Cámara estática, sujeto activo (una persona que trabaja en un banco, tráfico): 1 fotograma cada 0,5 a 2 segundos.
  • Cámara en movimiento (portatil, dron, cámara para salpicadero): 2 a 5 fotogramas por segundo. El fondo cambia continuamente, por lo que los fotogramas se mantienen distintos.
  • Acción rápida donde la pose en sí es la etiqueta (deporte, reconocimiento de gestos): de 5 a 15 fotogramas por segundo, pero solo en los segmentos que contienen la acción.

La manera de resolverlo: extraer un segmento de prueba de un minuto en algunos intervalos y observar los resultados uno al lado del otro. Si puedes hojearlos y cada imagen te dice algo nuevo, el intervalo es el correcto. Si parece un libro animado, amplíelo.

Haga la aritmética antes de extraer. Fotogramas = duración × velocidad objetivo. Noventa minutos de metraje a 1 fotograma por segundo equivalen a 5.400 imágenes, posiblemente una semana de anotaciones. A 1 fotograma cada 5 segundos es 1.080, que es un par de días. Esa decisión merece cinco minutos de reflexión.

En el extractor, el modo "Intervalo de tiempo" toma el intervalo en segundos directamente y el recuento de fotogramas aparece a medida que escribes, por lo que el número de arriba es visible antes de confirmar en lugar de descubrirse después.

Configuraciones de extracción que importan en el futuro

Formato: PNG o JPEG

La respuesta honesta es que normalmente no importa tanto como la gente espera, pero los casos en los que sí valen la pena. saber.

Usa PNG cuando la tarea es sensible a detalles finos o artefactos de compresión: detección de defectos en superficies, trabajo adyacente a OCR, imágenes médicas o científicas, cualquier cosa en la que luego pueda medir valores de píxeles. Utilice JPEG al 90-95% para detección y clasificación general de objetos, donde los modelos son resistentes a una compresión suave y la diferencia de almacenamiento es de cinco a diez veces mayor.

Una regla de coherencia independientemente de la elección: no mezclar. Un conjunto de datos que es mitad PNG y mitad JPEG con calidad variable le da al modelo una señal falsa, y los modelos son muy buenos para encontrar señales falsas.

Resolución

Extraiga en la resolución de origen y reduzca la escala en su tubería de preprocesamiento, no en el momento de la extracción. No puedes recuperar los detalles que descartaste, y dentro de un año es posible que desees recortes de 512 píxeles del metraje que extrajiste a 224. El almacenamiento es más barato que la reextracción, especialmente si el metraje original está archivado en algún lugar inconveniente.

Nombre

Nombres secuenciales con relleno de ceros, lo suficientemente anchos para el conjunto más grande que jamás haya producido. frame_00001.png, no frame_1.png. Las herramientas que clasifican nombres de archivos como texto ordenarán frame_10 antes frame_2, y si el orden temporal importa en cualquier parte de tu proceso, ese error es sutil y difícil de detectar.

Incluya la fuente en la ruta en lugar del nombre del archivo, para que la procedencia sobreviva:

dataset/
                  raw/
                    cam01_2026-03-14/
                      frame_00001.png
                      frame_00002.png
                    cam02_2026-03-14/
                      frame_00001.png
                  splits/
                    train.txt
                    val.txt
                    test.txt

Mantenga la división como archivos de texto que enumeren las rutas, en lugar de copiar físicamente las imágenes en train/ y val/ directorios: significa que puede volver a dividir sin volver a copiar y puede ver exactamente qué fue y dónde.

La regla de división que realmente importa

Esta es la parte que vale la pena leer dos veces, porque es la diferencia entre un punto de referencia en el que puede confiar y uno en el que no.

Dividir por vídeo fuente, nunca por fotograma.

Si mezclas todos los fotogramas y tomas una división aleatoria 80/20, los fotogramas del mismo segundo del mismo vídeo aparecen en ambos lados. El conjunto de validación es entonces casi una copia del conjunto de entrenamiento, y la precisión de su validación mide la memorización. Los modelos entrenados de esta manera rutinariamente reportan entre un 97% y un 99% y luego fallan en imágenes genuinamente nuevas, y la falla es desconcertante hasta que observas cómo se realizó la división.

El enfoque correcto: asignar vídeos completos para entrenar, validar y probar. Si solo tiene un video largo, divídalo por tiempo en bloques contiguos (primer 70 % de tren, siguiente 15 % de validación, último 15 % de prueba) y descarte unos segundos a cada lado de cada límite para que no haya ningún par casi duplicado que lo abarque.

Cuando sea posible, ve más allá: muestra la grabación completa sesiones, cámaras o ubicaciones para el conjunto de prueba. Eso mide si el modelo se generaliza a través de condiciones en lugar de a través de marcas de tiempo, que es casi siempre la pregunta que realmente le interesa.

Trabajar localmente y por qué a menudo es importante aquí

Una nota práctica específica de este dominio: los vídeos industriales y de investigación son con frecuencia material que no se puede subir casualmente: grabaciones de pacientes, imágenes de personas que dieron su consentimiento para un estudio y no para un servicio en la nube, líneas de fabricación patentadas, experimentos previos a la publicación.

extracción basada en navegador mantiene el archivo en la máquina; no se transfiere nada, lo que importa cuando la restricción es una aprobación ética o un acuerdo de procesamiento de datos en lugar de una preferencia. Puede confirmar esto en lugar de confiar en él: cargue la página, desconéctese de la red y extráigala. Si todavía funciona, nada iba a ninguna parte. El método para verificarlo lleva aproximadamente un minuto.

Sea igualmente claro acerca de los límites. Los fotogramas se mantienen en la memoria hasta que se descargan, por lo que las fuentes largas deben procesarse en fragmentos de tiempo. Para una canalización repetible de cientos de archivos, una secuencia de comandos FFmpeg local es la herramienta adecuada: el navegador es para trabajos exploratorios, para extracciones únicas y para casos en los que desea ver los fotogramas mientras decide el intervalo.

Una lista de verificación antes de comenzar la anotación

La anotación es un paso costoso. Captarlos antes de que comiencen ahorra la mayor cantidad de tiempo:

  1. Pagina a través de 50 frames aleatorios. ¿Son visiblemente diferentes entre sí? De lo contrario, amplíe el intervalo y vuelva a extraerlo, ahora, no después de etiquetar.
  2. Compruebe el equilibrio de clases. El muestreo de tiempo uniforme te proporciona fotogramas en proporción al tiempo que las cosas estuvieron en la pantalla, no en proporción a cuánto te preocupas por ellas. Los eventos raros necesitan una extracción específica de sus rangos de tiempo específicos.
  3. Elimine los fotogramas muertos. Desvanecimientos, marcos negros en los cortes, destellos en la lente, la mano de alguien sobre la lente. Son ruido y cuestan tiempo de anotación.
  4. Confirma que la división es por video o por bloque de tiempo, no por fotograma aleatorio.
  5. Registra la procedencia. Archivo fuente, intervalo, fecha de extracción, formato y calidad, junto con el conjunto de datos. En seis meses necesitarás reproducirlo o ampliarlo, y reconstruir "qué intervalo usé" a partir de las imágenes es desagradable.

Nada de esto es difícil. Simplemente se decide antes de la extracción en lugar de descubrirse después de la anotación, que es la gran diferencia.