Ошибка, которая создает 10 000 бесполезных изображений.

Очевидный подход к превращению видео в обучающие данные — извлечение каждого кадра. Это кажется тщательным. Это почти худшее, что вы можете сделать.

Последовательные кадры видео с частотой 30 кадров в секунду разделены интервалом 33 миллисекунды. Если только камера или объект не движется быстро, кадр 1001 почти идентичен кадру 1000 — та же поза, то же освещение, тот же фон, разница в несколько пикселей. Набор данных из 10 000 таких кадров не содержит 10 000 примеров. Он содержит около 300 различных ситуаций, каждая из которых повторяется тридцать раз.

То, что это влияет на обучение, является специфическим и разрушительным. Стоимость аннотаций зависит от количества изображений, поэтому вы платите в тридцать раз больше за одну и ту же информацию. Время обучения также масштабируется. И самое главное, если эти почти дубликаты оказываются по обе стороны разделения обучения/проверки, модель фактически увидела набор проверки — вы получаете оценку проверки, которая ничего не значит.

Таким образом, первое решение — это не настройка инструмента. Это так: насколько контент должен измениться, прежде чем кадр будет считаться новым примером?

Выбор интервала выборки

Определите его на основе движения в сцене, а не на основе частоты кадров источника. Некоторые рабочие отправные точки:

  • Статическая камера, медленный объект (наблюдение, выращивание растений, очередь) — 1 кадр каждые 2–10 секунд. Все, что более плотно, является избыточным.
  • Статическая камера, активный объект (человек, работающий на скамейке, пробка) — 1 кадр каждые 0,5–2 секунды.
  • Движущуюся камеру (портативный компьютер, дрон, видеорегистратор) — 2–5 кадров в секунду. Фон постоянно меняется, поэтому кадры остаются четкими.
  • Быстрое действие, когда сама поза является меткой (спорт, распознавание жестов) — 5–15 кадров в секунду, но только по сегментам, содержащим действие.

Способ решения: извлеките одноминутный тестовый сегмент через несколько интервалов и просмотрите результаты параллельно. Если вы можете листать их и каждое изображение говорит вам что-то новое, интервал правильный. Если это похоже на флипбук, расширьте его.

Перед извлечением выполните арифметические действия. Кадры = продолжительность × целевая частота. Девяносто минут видео со скоростью 1 кадр в секунду — это 5400 изображений — вероятно, неделя аннотаций. При 1 кадре в 5 секунд это 1080, это пара дней. Это решение стоит пяти минут размышления.

В экстрактор, режим «Временной интервал» напрямую учитывает разрыв в секундах, а количество кадров отображается по мере ввода — поэтому указанное выше число видно до фиксации, а не обнаруживается впоследствии.

Настройки извлечения, которые имеют значение в дальнейшем

Формат: PNG или JPEG

Честный ответ заключается в том, что обычно это не так важно, как люди ожидают, но есть случаи, когда это имеет значение. стоит знать.

Используйте PNG когда задача чувствительна к мелким деталям или артефактам сжатия — обнаружение дефектов на поверхностях, работа, связанная с распознаванием символов, медицинские или научные изображения, все, что вы можете позже измерить значения пикселей. Используйте JPEG на уровне 90–95 % для общего обнаружения и классификации объектов, где модели устойчивы к умеренному сжатию, а разница в хранении составляет от пяти до десяти раз.

Одно правило согласованности независимо от выбора: не смешивать. Набор данных, состоящий наполовину из PNG и наполовину из JPEG различного качества, дает модели ложный сигнал, а модели очень хорошо обнаруживают ложные сигналы.

Решение

Извлечение с исходным разрешением и уменьшение масштаба ваш конвейер предварительной обработки, а не во время извлечения. Вы не сможете восстановить детали, которые вы отбросили, и через год вам может понадобиться кадрировать 512 пикселей из материала, который вы извлекли с разрешением 224. Хранение обходится дешевле, чем повторное извлечение, особенно если исходный материал заархивирован в неудобном месте.

Именование

Последовательные имена с нулевыми дополнениями, достаточно широкие для самого большого набора, который вы когда-либо создавали. frame_00001.png, а не frame_1.png. Инструменты, которые сортируют имена файлов в виде текста, будут упорядочивать frame_10 до frame_2, и если временной порядок имеет значение где-либо в вашем конвейере, эта ошибка неуловима и ее трудно обнаружить.

включите источник в путь, а не в имя файла, чтобы сохранить происхождение:

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

Сохраняйте разделение в виде текстовых файлов со списком путей, а не физически копируйте изображения в train/ и Каталоги val/ — означает, что вы можете повторно разделить без повторного копирования и точно увидеть, что и куда пошло.

Правило разделения, которое действительно имеет значение

Эту часть стоит прочитать дважды, потому что в этом разница между эталоном, которому можно доверять, и тем, которым нельзя.

Разбивать по исходному видео, а не по кадрам.

Если вы перетасируете все кадры и произведете случайное разделение 80/20, кадры из одной и той же секунды одного и того же видео попадут с обеих сторон. Тогда проверочный набор является почти копией обучающего набора, и ваша точность проверки измеряет запоминание. Модели, обученные таким образом, обычно сообщают о 97–99%, а затем терпят неудачу на действительно новых кадрах, и эта ошибка сбивает с толку, пока вы не посмотрите, как было произведено разделение.

Правильный подход: назначьте целые видео для обучения, проверки и тестирования. Если у вас есть только одно длинное видео, разделите его по времени на смежные блоки — сначала 70% обучения, следующие 15% проверки, последние 15% теста — и отбросьте несколько секунд по обе стороны от каждой границы, чтобы ни одна почти повторяющаяся пара не пересекала его.

Где возможно, идите дальше: держите всю запись сеансы, камеры или места для тестового набора. Это позволяет определить, обобщает ли модель условия, а не временные метки, что почти всегда является тем вопросом, который вас действительно волнует.

Работа локально, и почему это часто имеет здесь значение

Практическое замечание, специфичное для этой области: исследовательское и промышленное видео часто представляет собой материал, который невозможно загрузить случайно: записи пациентов, кадры людей, которые согласились на исследование, а не на облачный сервис, собственные производственные линии, эксперименты перед публикацией.

Извлечение с помощью браузера сохраняет файл на компьютере; ничего не передается, что имеет значение, когда ограничением является одобрение этики или соглашение об обработке данных, а не предпочтение. Вы можете подтвердить это, а не принимать на веру — загрузить страницу, отключиться от сети и извлечь. Если оно еще работает, то ничего никуда не шло. метод проверки того, что занимает около минуты.

Так же четко указывайте ограничения. Кадры хранятся в памяти до загрузки, поэтому длинные источники необходимо обрабатывать частями временного диапазона. Для повторяющегося конвейера с сотнями файлов подходящим инструментом является локальный сценарий FFmpeg — браузер предназначен для исследовательской работы, для одноразового извлечения и для случаев, когда вы хотите видеть кадры при определении интервала.

Контрольный список перед началом аннотации

Аннотации – это дорогостоящий шаг. Обнаружение их до начала экономит больше всего времени:

  1. Пролистывание 50 случайных кадров. Они заметно отличаются друг от друга? Если нет, увеличьте интервал и повторно извлеките — сейчас, а не после маркировки.
  2. Проверьте баланс классов. Единая временная выборка дает вам кадры пропорционально тому, как долго объекты находились на экране, а не пропорционально тому, насколько они вам важны. Редкие события требуют целенаправленного извлечения из определенных временных диапазонов.
  3. Удалите мертвые кадры. Затухание, черные рамки на кадрах, блики на линзе, чья-то рука над линзой. Это шум и затраты времени на аннотации.
  4. Подтвердите, что разделение происходит по видео или по временному блоку, а не перетасованным кадром.
  5. Запишите происхождение. Исходный файл, интервал, дата извлечения, формат и качество вместе с набором данных. Через шесть месяцев вам нужно будет воспроизвести или расширить его, а восстанавливать по изображениям «какой интервал я использовал» неприятно.

Все это не сложно. Это просто решается до извлечения, а не обнаруживается после аннотации, и в этом вся разница.