Совместное использование ресурсов | Ускорьте написание эссе с FiftyOne

компьютерное зрение

Предисловие:

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

Как найти эти образцы быстро и легко?

В этой статье я представлю инструмент Python — FiftyOne, который может помочь решить следующие болевые точки:

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

Потратьте время, чтобы привести в порядок данные и выходные данные модели.

Визуализируйте результаты своей модели, чтобы создать важные графики страницы 1.

Сравните свою модель с базовой.

Найдите подходящие примеры для своей диссертации.

Обратите внимание, чтобы вовремя получать больше контента компьютерного зрения.

Проблемные пространства, поддерживаемые FiftyOne

Классификация

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

изображениеЦельобнаружить

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

Выбираемые объекты на отображаемом изображении путем скольжения уровня достоверности

видеоЦельобнаружить

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

Семантическая и экземплярная сегментация

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

Ломаная/многоугольник/ключевая точка

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

Особенности Fifty One

Визуализация и анализ результатов модели

Самый надежный способ понять производительность модели — внимательно посмотреть, как она работает на выборочных группах и отдельных примерах. Визуализация производительности вашей модели часто является огромной проблемой, поскольку вы тратите слишком много времени на написание сценариев для визуализации прогнозов только на изображениях. Мой коллега сказал мне, что до того, как мы выпустили FiftyOne, он использовал сценарии и инструменты 20-летней давности, такие как дисплеи и анимация. Это даже не рассматривает идею фактического анализа тысяч изображений или видеоклипов, чтобы получить полную историю производительности модели.

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

import fiftyone as fo

# Create dataset
dataset = fo.Dataset(name="my-detection-dataset")

# Add your samples to the dataset
for filepath in IMAGE_DIRECTORY:
    sample = fo.Sample(filepath=filepath)

    # Convert model detections to FiftyOne format
    detections = []
    for obj in model_outputs[filepath]:
        label = obj["label"]
        bounding_box = obj["bbox"]

        detections.append(
            fo.Detection(label=label, bounding_box=bounding_box)
        )

    # Store detections in a field name of your choice
    sample["model"] = fo.Detections(detections=detections)

    dataset.add_sample(sample)

Получите результаты для большего количества наборов данных

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

import fiftyone.zoo as foz

available_datasets = foz.list_zoo_datasets()

print(available_datasets)
#['caltech101', 
#'cifar10', 
#'cifar100', 
#'coco-2014', 
#'coco-2017', 
#'fashion-mnist', 
#'imagenet-2012', 
#'kitti', 
#'mnist', 
#'quickstart', 
#'quickstart-video', 
#'voc-2007', 
#'voc-2012']

dataset = foz.load_zoo_dataset("coco-2017", split="validation")

然后,你可以使用你的模型生成预测并将其加载到 FiftyOne。如果您想要加载一个不在dataset zoo中的数据集,FiftyOne API 提供了简单的功能来加载ground truth和预测标签。

Организуйте данные и выходные данные — поддерживает более 15 форматов наборов данных.

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

В связи с этим FiftyOne может помочь импортировать и экспортировать изображения и этикетки в различных форматах. Например, прогнозы модели обнаружения можно загрузить в пользовательском формате и экспортировать в формате COCO для запуска оценок pycocotools. Ниже приведен список форматов импорта и экспорта данных, поддерживаемых FiftyOne:

ImageDirectory

VideoDirectory

FiftyOneImageClassificationDataset

ImageClassificationDirectoryTree

TFImageClassificationDataset

FiftyOneImageDetectionDataset

COCODetectionDataset

VOCDetectionDataset

KITTIDetectionDataset

TFObjectDetectionDataset

CVATImageDataset

FiftyOneImageLabelsDataset

FiftyOneVideoLabelsDataset

BDDDataset

FiftyOneDataset

иbaselineсравнивать

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

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

import fiftyone as fo

# Create dataset
dataset = fo.load_dataset("my-classification-dataset")

# Add your predictions to samples
for sample in dataset:    
  
  # Convert model 1 outputs to FiftyOne Classifications
  classifications = []
  for pred in model_1_output[sample.filepath]:
    classifications.append(fo.Classification(label=pred))
    
  sample["model_1"] = fo.Classifications(
      classifications=classifications
  )
    
  # Convert model 2 outputs to FiftyOne Classifications
  classifications = []
  for pred in model_2_output[sample.filepath]:
    classifications.append(fo.Classification(label=pred))
    
  sample["model_2"] = fo.Classifications(
      classifications=classifications
  )
  
  sample.save()

session = fo.launch_app(dataset=dataset)
为您的论文提取比较样本是很简单的。 例如,如果您想查看目标检测模型检测到超过 10 个真阳性而baseline预测超过 10 个假阳性的样本,您可以使用以下代码片段:


from fiftyone import ViewField as F

# Sort the dataset according to where my model had the most true positives
true_positives = dataset.sort_by(F("my_model.ground_truth_eval.true_positives.0_75"), reverse=True)

# Take the top 10 samples
true_positives = true_positives[:10]


# Sort the dataset according to where the baseline had the most false positives
false_positives = dataset.sort_by(F("baseline.ground_truth_eval.false_positives.0_75"))

# Take the top 10 samples
false_positives = false_positives[:10]

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

Найдите примеры для своей статьи

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

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

# Bounding box format is [top-left-x, top-left-y, width, height]
bbox_area = F("bounding_box")[2] * F("bounding_box")[3]

# Create a view that contains only predictions whose area is < 0.005
small_boxes_view = dataset.filter_detections("my_detection_model", bbox_area < 0.005)

session.view = small_boxes_view

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

# Get a view of all male faces and then only correctly predicted ones
male_view = dataset.match(F(“male”) == True)
correct_male_view = male_view.match(F("prediction") == F("ground_truth"))

session.view = correct_male_view

# Get a view of all female faces and then only correctly predicted ones
female_view = dataset.match(F(“male”) == False)
correct_female_view = female_view.match(F("prediction") == F("ground_truth"))

session.view = correct_female_view

# Compare accuracy of male and female predictions
print(len(correct_male_view) / len(male_view))
print(len(correct_female_view) / len(female_view))

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

selected = session.selected
subset = dataset.select(selected)

#
# You can customize the look-and-feel of the annotations
# For more information, see:
# https://voxel51.com/docs/fiftyone/user_guide/draw_labels.html#customizing-annotation-rendering
#
annotation_config = foua.AnnotationConfig({
        "font_size": 24,
        "show_all_confidences": True,
})

# Render the labels
subset.draw_labels(anno_dir, annotation_config=annotation_config)

Суммировать

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

Оригинальная ссылка:

medium.com/VO XE 51/SPE…

Эта статья взята из серии публикаций в Техническом руководстве CV для общедоступных аккаунтов.

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

Ответьте на ключевое слово «Техническое резюме» в официальном аккаунте, чтобы получить резюме следующих статей в формате pdf.

Другие статьи

Почему GEMM лежит в основе глубокого обучения

Почему 8 бит достаточно для использования глубоких нейронных сетей?

Классическая серия документов | Обнаружение целей - CornerNet и также известные как дефекты якорных ящиков

Как просмотреть пузырь искусственного интеллекта

Четкое обнаружение границ с использованием Dice loss

PVT — многофункциональная основа для плотного прогнозирования без свертки

CVPR2021 | Обнаружение объектов в открытом мире

Siamese networkСводка

Визуальное обнаружение и распознавание объектов Прошлое, настоящее и возможное

Какие концепции или методы вы освоили в своей карьере инженера-алгоритма, которые заставляют вас чувствовать, что вы выросли как на дрожжах?

Краткое изложение терминологии компьютерного зрения (1) Создание системы знаний для компьютерного зрения

Краткое изложение методов недообучения и переобучения

Резюме методов нормализации

Краткое изложение общих идей бумажных инноваций

Резюме методов эффективного чтения англоязычной литературы по направлению CV

Обзор непродолжительного обучения компьютерному зрению

Краткий обзор дистилляции знаний

Оптимизировать скорость чтения видео OpenCV

Сводка NMS

Краткое изложение методов функции потерь

Техническое резюме механизма внимания

Краткое изложение технологии пирамиды функций

Краткое изложение технологии объединения

Краткое изложение методов увеличения данных

Резюме эволюции структуры CNN (1) Классическая модель

Резюме эволюции структуры CNN (2) Облегченная модель

Резюме эволюции структуры CNN (3) Принципы проектирования

Как увидеть будущее направление компьютерного зрения

Краткое изложение технологии визуализации CNN (1) Визуализация карты характеристик

Краткое описание технологии визуализации CNN (2) Визуализация ядра свертки

Краткое изложение технологии визуализации CNN (три) типа визуализации

Краткое описание технологии визуализации CNN (4) инструменты и проекты визуализации