L'erreur qui produit 10 000 images inutiles
L'approche évidente pour transformer une vidéo en données d'entraînement consiste à extraire chaque image. Cela semble complet. C'est presque la pire chose que vous puissiez faire.
Les images consécutives d'une vidéo à 30 ips sont espacées de 33 millisecondes. À moins que l'appareil photo ou le sujet ne bouge rapidement, l'image 1 001 est presque identique à l'image 1 000 : même pose, même éclairage, même arrière-plan, quelques pixels de différence. Un ensemble de données de 10 000 images de ce type ne contient pas 10 000 exemples. Il contient peut-être 300 situations distinctes, chacune répétée trente fois.
Ce que cela fait à la formation est spécifique et préjudiciable. Le coût des annotations évolue avec le nombre d’images, vous payez donc trente fois plus pour les mêmes informations. Les délais de formation également. Et plus important encore, si ces quasi-doublons se retrouvent des deux côtés de votre répartition train/validation, le modèle a effectivement vu l'ensemble de validation — vous obtenez un score de validation qui ne veut rien dire.
La première décision n'est donc pas un paramètre d'outil. La question est la suivante : dans quelle mesure le contenu doit-il changer avant qu'une image ne soit considérée comme un nouvel exemple ?
Choisissez l'intervalle d'échantillonnage
Dérivez-le du mouvement de la scène, et non de la fréquence d'images source. Quelques points de départ :
- Caméra statique, sujet lent (surveillance, une plante en croissance, une file d'attente) – 1 image toutes les 2 à 10 secondes. Tout ce qui est plus dense est redondant.
- Caméra statique, sujet actif (une personne travaillant sur un banc, circulation) – 1 image toutes les 0,5 à 2 secondes.
- Caméra mobile (ordinateur de poche, drone, dashcam) – 2 à 5 images par seconde. L'arrière-plan change continuellement, de sorte que les images restent distinctes.
- Action rapide où la pose elle-même est l'étiquette (sport, reconnaissance gestuelle) – 5 à 15 images par seconde, mais uniquement sur les segments qui contiennent l'action.
La façon de la régler : extraire un segment de test d'une minute à quelques intervalles et regarder les résultats côte à côte. Si vous pouvez les parcourir et que chaque image vous dit quelque chose de nouveau, l'intervalle est correct. Si cela ressemble à un flipbook, élargissez-le.
Faites le calcul avant l'extraction. Frames = durée × fréquence cible. Quatre-vingt-dix minutes de séquences à 1 image par seconde correspondent à 5 400 images – probablement une semaine d’annotation. À 1 image toutes les 5 secondes, c'est 1 080, soit quelques jours. Cette décision mérite cinq minutes de réflexion.
Dans le , le mode "Intervalle de temps" prend directement l'intervalle en secondes et le nombre d'images apparaît au fur et à mesure que vous tapez - de sorte que le nombre ci-dessus est visible avant votre validation plutôt que découvert après.
Paramètres d'extraction importants en aval
Format : PNG ou JPEG
La réponse honnête est que cela n'a généralement pas autant d'importance que ce que les gens attendent, mais les cas où cela en vaut la peine. savoir.
Utilisez PNG lorsque la tâche est sensible aux détails fins ou aux artefacts de compression : détection de défauts sur des surfaces, travaux adjacents à l'OCR, imagerie médicale ou scientifique, tout ce sur quoi vous pourriez ultérieurement mesurer les valeurs des pixels. Utilisez JPEG à 90-95 % pour la détection et la classification générales d'objets, où les modèles sont robustes à une compression légère et la différence de stockage est de cinq à dix fois.
Une règle de cohérence quel que soit le choix : ne pas mélanger. Un ensemble de données composé à moitié de PNG et à moitié de JPEG avec une qualité variable donne au modèle un signal parasite, et les modèles sont très efficaces pour détecter les signaux parasites.
Résolution
Extraire à la résolution source et réduire l'échelle dans votre pipeline de prétraitement, pas au moment de l'extraction. Vous ne pouvez pas récupérer les détails que vous avez supprimés et, dans un an, vous souhaiterez peut-être recadrer des séquences de 512 pixels à partir de séquences que vous avez extraites à 224. Le stockage est moins cher que la réextraction, surtout si la séquence source est archivée dans un endroit peu pratique.
Nom
Noms séquentiels avec zéro, suffisamment larges pour le plus grand ensemble que vous aurez jamais produit. frame_00001.png, pas frame_1.png. Les outils qui trient les noms de fichiers sous forme de texte commanderont frame_10 avant frame_2, et si l'ordre temporel compte n'importe où dans votre pipeline, ce bug est subtil et difficile à repérer.
Incluez la source dans le chemin plutôt que dans le nom du fichier, afin que la provenance survive :
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
Conservez la répartition sous forme de fichiers texte répertoriant les chemins - plutôt que de copier physiquement les images dans les répertoires train/ et val/. - signifie que vous pouvez diviser à nouveau sans recopier et que vous pouvez voir exactement ce qui s'est passé où.
La règle de fractionnement qui compte vraiment
C'est la partie qui mérite d'être lue deux fois, car c'est la différence entre un benchmark auquel vous pouvez faire confiance et un autre auquel vous ne pouvez pas faire confiance.
Diviser par vidéo source, jamais par image.
Si vous mélangez toutes les images et effectuez une répartition aléatoire 80/20, les images de la même seconde de la même vidéo atterrissent des deux côtés. L'ensemble de validation est alors presque une copie de l'ensemble d'entraînement, et la précision de votre validation mesure la mémorisation. Les modèles formés de cette manière rapportent régulièrement 97 à 99 %, puis échouent sur des images véritablement nouvelles, et l'échec est déconcertant jusqu'à ce que vous regardiez comment la séparation a été effectuée.
La bonne approche : attribuez des vidéos entières à l'entraînement, à la validation et au test. Si vous n'avez qu'une seule longue vidéo, divisez-la par temps en blocs contigus : premier train à 70 %, validation suivante à 15 %, dernier test à 15 %, et supprimez quelques secondes de chaque côté de chaque limite afin qu'aucune paire quasi-dupliquée ne la chevauche.
Dans la mesure du possible, allez plus loin : maintenez l'enregistrement entier sessions, des caméras ou des emplacements pour l'ensemble de test. Cela mesure si le modèle se généralise à travers les conditions plutôt qu'à travers les horodatages, ce qui est presque toujours la question qui vous intéresse réellement.
Travailler localement et pourquoi c'est souvent important ici
Une note pratique spécifique à ce domaine : la vidéo de recherche et industrielle est souvent un matériel qui ne peut pas être téléchargé avec désinvolture : enregistrements de patients, images de personnes ayant consenti à une étude et non à un service cloud, lignes de fabrication exclusives, expériences de pré-publication.
conserve le fichier sur la machine ; rien n'est transféré, ce qui compte lorsque la contrainte est une approbation éthique ou un accord de traitement de données plutôt qu'une préférence. Vous pouvez le confirmer plutôt que de le croire : chargez la page, déconnectez-vous du réseau et extrayez-la. Si cela fonctionne toujours, rien n’allait nulle part. La méthode pour vérifier que prend environ une minute.
Soyez également clair sur les limites. Les images sont conservées en mémoire jusqu'au téléchargement, les sources longues doivent donc être traitées par tranches de temps. Pour un pipeline reproductible sur des centaines de fichiers, un script FFmpeg local est le bon outil : le navigateur est destiné aux travaux d'exploration, aux extractions ponctuelles et aux cas où vous souhaitez voir les images tout en décidant de l'intervalle.
Une liste de contrôle avant le début de l'annotation
L'annotation est l'étape coûteuse. Les capturer avant le début permet de gagner le plus de temps :
- Parcourez 50 images aléatoires. Sont-ils visiblement différents les uns des autres ? Si ce n'est pas le cas, élargissez l'intervalle et réextrayez — maintenant, pas après l'étiquetage.
- Vérifiez l'équilibre des classes. Un échantillonnage temporel uniforme vous donne des images proportionnelles à la durée pendant laquelle les éléments sont restés à l'écran, et non proportionnellement à l'importance que vous leur accordez. Les événements rares nécessitent une extraction ciblée à partir de leurs plages de temps spécifiques.
- Supprimez les images mortes. Fondus, cadres noirs au niveau des coupes, reflets de l'objectif, main de quelqu'un sur l'objectif. Ce sont du bruit et ils coûtent du temps d'annotation.
- Confirmez que la répartition s'effectue par vidéo ou par bloc temporel, pas par trame mélangée.
- Enregistrez la provenance. Fichier source, intervalle, date d'extraction, format et qualité, ainsi que l'ensemble de données. Dans six mois, vous devrez le reproduire ou l'étendre, et reconstruire "quel intervalle ai-je utilisé" à partir des images est désagréable.
Rien de tout cela n'est difficile. C'est juste décidé avant l'extraction plutôt que découvert après l'annotation, ce qui est toute la différence.