Маркировка данных имеет решающее значение, но отнимает много времени. Представьте себе, если бы мы могли меньше маркировать и добиться большей точности. Умный выбор рамы – вот ответ. Выбирая кадры, которые отражают суть и разнообразие данных, мы можем сократить ручные усилия, не жертвуя при этом качеством. В этой статье представлен хитрый подход, который не только ускоряет маркировку, но и максимизирует результаты. Давайте окунемся в мир эффективного аннотирования данных посредством стратегического выбора кадров.

Приняв наш подход, мы достигаем впечатляющего повышения эффективности. Из 50 клипов продолжительностью 495 секунд и содержащих 12 тысяч кадров мы вытаскиваем только 15 кадров — но именно эти кадры захватывают ядро ​​датасета. Наш метод упрощает аннотирование, выявляя наиболее информативные экземпляры, сохраняя качество и значительно сокращая ручную работу. На диаграмме ниже показано, насколько мы сокращаем ручную работу на каждом этапе.

Вкратце, наш рабочий процесс состоит из трех этапов:

  1. Извлеките подмножество кадров из коллекции видео.
  2. Выберите наиболее информативные кадры для аннотации.
  3. Фильтруйте и сортируйте кадры по их содержанию и разнообразию.

Шаг 1. Извлеките ключевые кадры

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

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

Запустите эту команду ниже, чтобы извлечь ключевые кадры для одного видеофайла (после установки ffmpeg):

ffmpeg -i path/to/my/video/file.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr "keyframes_%03d.jpg"

Скрипт использует команду FFmpeg со следующими флагами:

  • -vf флаг для выбора только ключевых кадров,
  • -vsync vfr флаг для поддержания переменной частоты кадров,
  • извлеченные ключевые кадры называются keyframes_%d.jpg и последовательно нумеруются.

Например, ffmpeg извлекает 21 кадр из 79-секундного видеоклипа с частотой 30 кадров/с. Это меньше 1 % от исходного количества кадров. Ниже представлен результат извлечения 160 ключевых кадров из коллекции из 50 коротких видеоклипов (12082 исходных кадра) из набора данных кинетики-700–2020.

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

Шаг 2. Выберите информативные кадры

После того как мы извлекли ключевые кадры, следующим шагом будет извлечение из этих кадров признаков, которые можно использовать для их дифференциации и классификации. Модели глубокого обучения, особенно сверточные нейронные сети (CNN) или визуальные преобразователи, превосходно улавливают сложные функции изображений. Предварительно обученная модель CNN из семейства моделей ResNet, VGG или EfficientNet может использоваться для извлечения вложений изображений из ключевых кадров.

Вычисление вложений. Это пример того, как получить встраивание изображений с помощью модели EfficientNet-B0 в PyTorch:

import torch
from torchvision import models
from torchvision.models import feature_extraction

model = models.get_model('efficientnet_b0')
model.eval()

feature_extractor = feature_extraction.create_feature_extractor(eff, return_nodes=["avgpool"])

x = torch.randn(1, 3, 224, 224)
with torch.no_grad():
    out = feature_extractor(x)

print(out["avgpool"].size())
# prints torch.Size([1, 1280, 1, 1])

Код сначала импортирует необходимые модули, включая torch и models из torchvision, загружает модель EfficientNet-B0, используя и создает экстрактор функций из модели EfficientNet, указывая, что только выходные данные узла «avgpool» должны быть вернулся. Передача случайных входных данных через эту модель приводит к созданию тензора с размерами [1, 1280, 1, 1], где 1280 представляет собой выходной размер внедрения.

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

  • EfficientNet отличается своей масштабируемостью, обеспечивая превосходную производительность в широком диапазоне размеров моделей за счет одновременной оптимизации глубины, ширины и разрешения. Он обеспечивает баланс между эффективностью и точностью, что делает его подходящим для сред с ограниченными ресурсами.
  • DINO» и DINOv2представляют подход с самоконтролем, который использует как распознавание экземпляров, так и кластеризацию для изучения надежных визуальных представлений. Его способность собирать мелкие детали и обнаруживать сходства в различных областях данных делает его особенно эффективным для задач, не контролируемых пользователем.
  • ConvNeXt сочетает в себе лучшие возможности сверточных нейронных сетей и преобразователей зрения.
  • CLIP сочетает в себе зрение и понимание языка, позволяя ему изучать мощные визуальные представления, соответствующие описаниям на естественном языке. Это делает его универсальным для задач, требующих кросс-модального понимания, таких как поиск изображения и текста.

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

Варианты кластеризации:

  1. DBSCAN (пространственная кластеризация приложений с шумом на основе плотности): DBSCAN эффективен при идентификации кластеров различной формы и размера в зависимости от плотности. Он не требует предварительного указания количества кластеров и также может определять точки шума.
  2. KMeans: KMeans — это классический алгоритм кластеризации на основе центроидов, который разбивает данные на заранее определенное количество кластеров. Это хорошо работает, когда количество кластеров известно и кластеры данных относительно хорошо разделены.
  3. Иерархическая кластеризация. Иерархическая кластеризация создает древовидную структуру кластеров, которую можно визуализировать в виде дендрограммы. Он не требует указания количества кластеров и может быть агломеративным (снизу вверх) или разделительным (сверху вниз).

Разбив данные на кластеры, мы можем выбрать кадр, представляющий весь кластер:

  1. Центроид (KMeans): В KMeans каждый кластер имеет центроид, представляющий его центр. Выбор точки данных, ближайшей к центроиду, может служить представителем кластера.
  2. Основная точка (DBSCAN): DBSCAN определяет основные точки, которые имеют минимальное количество точек на указанном расстоянии (эпсилон). В качестве репрезентативной можно выбрать центральную точку с наибольшей плотностью.
  3. Агломеративная кластеризация (иерархическая): При агломеративной иерархической кластеризации каждый кластер формируется путем слияния двух меньших кластеров. Вы можете выбрать самую центральную точку данных в объединенном кластере.
  4. Среднее внедрение. Рассчитайте среднее значение внедрений в каждом кластере и выберите то, которое ближе всего к среднему значению кластера. Этот метод хорошо работает, когда для измерения сходства используются вложения.

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

Пятьдесят один

Если вы используете пакет fiftyone для управления наборами данных компьютерного зрения, то весь второй шаг сводится к нескольким простым строкам кода Python:

import fiftyone as fo

dataset = fo.load_dataset(YOUR_DATASET_NAME)
res = fob.compute_similarity(dataset, brain_key="frame_sim")
res.find_unique(NUM_SAMPLES_YOU_WANT)
uniq_view = dataset.select(res.unique_ids)
fo.launch_app(view=uniq_view)

Приведенный выше код будет генерировать внедрения для каждого образца изображения с помощью облегченного mobilenet-v2, а затем продолжать выбирать отдельные образцы из окружения похожих изображений до тех пор, пока не будет достигнуто желаемое количество целевых изображений.

После появления окна «51» вы можете просмотреть выбранные образцы. Ниже представлен результат отбора топ-30 самых уникальных кадров. Несмотря на то, что кадры сильно отличаются друг от друга, легко заметить, что половина из них не будет информативна для аннотаций и обучения модели, поскольку они либо размыты, либо не содержат интересующих объектов. На следующем этапе мы можем отфильтровать ненужные кадры.

Шаг 3. Сортировка кадров по разнообразию

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

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

Для этой цели установленные модели могут оказаться неоценимыми для определения общих классов объектов:

  • Детекторы объектов, такие как YOLOv8, EfficientDet или Mask R-CNN, которые предварительно обучены на наборе данных COCO. Эти модели обладают глубоким пониманием общих классов объектов и визуальных шаблонов, что делает их хорошо подходящими для обнаружения и классификации соответствующих объектов в ваших кадрах. Запуск детектора объектов с помощью fiftyone: fiftyone zoo models apply --model-name mask-rcnn-resnet50-fpn-coco-torch --dataset-name quickstart --label-field mask-rcnn
  • Классификаторы на основе Imagenet, такие как EfficientNet, Vision Transformers и ConvNeXt, могут предоставлять точные и подробные аннотации для широкого спектра объектов в случае, если данные включают в себя более широкий диапазон классов объектов. Запуск классификатора изображений с помощью fiftyone: fiftyone zoo models apply --model-name resnet18-imagenet-torch --dataset-name quickstart --label-field resnet18
  • Альтернативно, ключевую роль могут также сыграть предсказатели с нулевым выстрелом. Использование таких моделей, как CLIP для классификации изображений и Grounding DINO для обнаружения объектов, позволяет нам задействовать возможности обобщенного обучения. Эти модели могут распознавать объекты за пределами общего набора меток, что делает их полезными для всех типов областей данных.

Прочтите мою другую статью ниже, чтобы увидеть сравнение предварительно обученных детекторов объектов в видеопотоке.



Это окончательный результат после того, как мы применили Grounding DINO с одной меткой класса «Человек», чтобы с высокой уверенностью выбирать изображения, на которых есть люди.

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

Заключение

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

Помимо технических преимуществ, этот автоматизированный рабочий процесс также может значительно снизить затраты. Точно выбирая кадры, он сводит к минимуму необходимые человеко-часы для ручного аннотирования, тем самым оптимизируя человеческие ресурсы и экономя драгоценное время и деньги.

Если вам понравилось то, что вы прочитали, и вы хотите увидеть больше, подпишитесь, чтобы получать обновления, когда я публикую новые публикации.