Рубрики
Без рубрики

Как провести исследование данных для сегментации изображений и обнаружения объектов (вещи, которые я должен был изучить трудным путем)

Эта статья была первоначально написана Jakub Cieślik и опубликована в блоге Neptune. Я был … Помечено машинным обучением, наукой о данных, информатике, Python.

Эта статья была первоначально написана Джакуб Сихлик и опубликовано в Блог Нептуна .

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

Почему это так?

Я полагаю, что есть две основные причины для этого:

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

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

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

  • Почему вы должны заботиться о размерах изображения и объектов,
  • Почему небольшие объекты могут быть проблематичными для многих архитектур глубокого обучения,
  • Зачем борьбу с дисбалансом класса может быть довольно сложным,
  • Почему хорошая визуализация стоит тысячи метрик,
  • Подводные камни увеличения данных.

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

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

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

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

Качество данных и общие проблемы

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

Общий Проблемы с данными при обучении Модели обнаружения объектов и сегментации изображений включают в себя:

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

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

Общее качество данных

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

  • Получите общее ощущение набора данных и осмотрите его визуально.
  • Убедитесь, что это не коррумпированное и не содержит никаких очевидных артефактов (например, только черные изображения)
  • Убедитесь, что все Файлы читаются-вы не хотите найти это в середине вашего обучения.

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

  • Постройте их в ноутбуке Jupyter, используя Matplotlib.
  • Используйте выделенные инструменты, такие как Google Facets для изучения данных изображения ( https://pair-code.github.io/facets/ )
  • Используйте рендеринг HTML для визуализации и изучения в записной книжке.

Я большой поклонник последнего варианта, он отлично работает в ноутбуках Юпитера (даже для тысяч фотографий одновременно!) Попробуйте сделать это с Matplotlib. Есть еще больше: вы можете установить расширение Hover-Zoom, которое позволит вам масштабироваться на отдельные картинки, чтобы осмотреть их в высоком разрешении.

Рисунок 1. 500 кокосовых изображений, визуализированных с использованием HTML -миниатюр

Размеры изображений и соотношения сторон

В реальном мире наборы данных вряд ли будут содержать изображения одинаковых размеров и соотношений сторон. Осмотр основных наборов данных Статистика, такие как соотношения сторон, ширина изображений и высоты поможет вам принять важные решения :

  • Вы можете и должны ли вы? разрушительные изменения размера? (деструктивный означает изменение размера, которое меняет AR)
  • Для неразрушающего изменения размера каким должно быть желаемое выходное разрешение и объем прокладки?
  • Модели глубокого обучения могут иметь гипер -параметры, которые вы должны настраивать в зависимости от вышеперечисленного (например, размер якоря и коэффициентов), или они могут даже предъявлять твердые требования, когда речь идет о минимальном размере входного изображения.

Хорошие ресурсы о якорях Анкет

Специальный случай был бы, если ваш набор данных состоит из действительно больших изображений (4K+), что не так необычно в спутниковых снимках или некоторых медицинских методах. Для большинства передовых моделей в 2020 году вы не сможете установить даже один 4K -изображение на (сервер) графический процессор из -за ограничений памяти. В этом случае вам нужно выяснить, что реально будет полезно для ваших алгоритмов DL.

Два подхода, которые я видел:

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

Рис. 2. Гистограмма соотношений сторон изображения в наборе данных COCO

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

  • Равномерно распределено, где большинство изображений имеют одинаковые размеры -Здесь единственное решение, которое вам нужно будет принять, -это то, сколько изменить размер (если вообще) это будет в основном зависеть от области объектов, размера и соотношений сторон)
  • Слегка бимодальное распределение, но большинство изображений находятся в диапазоне соотношений сторон (0,7 … 1,5) Подобно набору данных COCO. Я полагаю, что другие наборы данных «естественно выглядящий» будут следовать аналогичному распределению-для такого типа наборов данных с вами должны быть в порядке, используя неразрушающий подход Resize-> PAD. Заполнение будет необходимо, но в определенной степени, которая будет управляемой и не будет взорвать размер набора данных.
  • Набор данных с большим количеством экстремальных значений (Очень широкие изображения, смешанные с очень узкими)-этот случай гораздо сложнее, и существуют более продвинутые методы, чтобы избежать чрезмерной прокладки. Вы можете рассмотреть возможность отбора проб изображений на основе соотношения сторон. Помните, что это может привести к своему процессу отбора проб, поэтому убедитесь, что он приемлем или недостаточно силен.

Структура MMDetection поддерживает это из коробки, внедряя группу, который выборы на основе AR

Рис. 3 и 4. Примеры изображений (изменение размера и мягкие) с экстремальными соотношениями сторон из набора данных COCO

Метки (объекты) размеры и размеры

Здесь мы начинаем смотреть на наши цели (этикетки). Особенно Мы заинтересованы в том, чтобы узнать, как распределяются размеры и соотношения сторон.

Почему это важно?

В зависимости от вашего подхода к моделированию Большинство рамок будут иметь ограничения проектирования Анкет Как я упоминал ранее, эти модели предназначены для хорошо выполнять наборы данных. Если по какой -либо причине ваши данные отличаются, обучение их может быть невозможным. Давайте посмотрим на конфигурация по умолчанию для сетчатки от Detectron2 :

ANCHOR_GENERATOR:
    SIZES: !!python/object/apply:eval ["[[x, x * 2**(1.0/3), x * 2**(2.0/3) ] for x in [32, 64, 128, 256, 512 ]]"]

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

  • Например, если ваш набор данных содержит только действительно большие объекты-возможно, можно многое упростить модель,
  • С другой стороны, давайте предположим, что у вас есть небольшие изображения с небольшими объектами (например, 10x10px), учитывая эту конфигурацию, это может произойти, вы не сможете обучить модель.

Самые важные вещи, которые следует учитывать, когда дело доходит до размеров коробки или маски:

  • Сторонние соотношения
  • Размер (область)

Рис. 5. Соотношение сторон ограничивающих коробок в наборе данных COCO

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

Рис. 6. Средняя площадь ограничивающей коробки на категорию

Это особенно верно для моделей на основе якоря (большинство моделей обнаружения объектов/сегментации изображений), где существует шаг сопоставления наземных меток истины с предварительно определенными ящиками (он же. Предыдущие коробки).

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

Рис. 7. Изображение показывает Якоря коробки в разных масштабах и соотношениях сторон.

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

Если вы чувствуете, что размер объекта может быть проблемой в вашей проблеме, и вы не хотите слишком много увеличивать изображения (Например, чтобы сохранить желаемую производительность или следы памяти) вы можете Попробуйте решить его с помощью подхода Crop -> Изменение размера. Имейте в виду, что это может быть довольно сложно (вам нужно обрабатывать случаи, что произойдет, если вы прорезаете ограничивающую коробку или маску сегментации)

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

Частично помеченные данные

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

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

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

Рис. 8. Показывает проблему смешивания наборов данных-например, уведомление о том, что на правильном изображении человек не помечен. Один из способов решить эту проблему – мягкая маркировка набора данных моделью, обученной на другой. Источник

Дисбаланс

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

Рис. 9. Количество объектов за класс

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

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

Примечание:

Вы можете попробовать другие решения, такие как:

  • Добавление веса к потере (вклад некоторых коробок или пикселей выше)
  • Предварительная обработка ваших данных по -разному: например, вы можете сделать некоторую пользовательскую обрезку, которая перебавляет набор данных на уровне объекта

Понимание последовательностей увеличения и предварительной обработки

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

Увеличение данных, безусловно, является наиболее важной и широко используемой техникой регуляризации (в сегментации изображения/обнаружении объектов).

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

  • Аффинные преобразования,
  • Обрезка,
  • Искажения,
  • Масштабирование,
  • Ротации
  • и многое другое.

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

Примечание:

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

Минимальная настройка предварительной обработки

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

  • Отключить увеличение
  • Избегайте разрушительного изменения размера
  • Всегда осматривайте выходы визуально

Давайте продолжим наш пример COOC. Из предыдущих шагов мы знаем, что: большинство наших изображений имеют:

  • аспект/.5
  • Средняя avg_width и.

Установка средних значений, поскольку наши основные значения изменения размера предварительной обработки, кажется, является разумной задачей (если на стороне модели нет сильного требования иметь более крупные картинки), например, модель B. связан с количеством слоев снижения)

В «Основной реализации настройки» будет выглядеть примерно так:

  • LongestMaxSize (avg_height)-это спасет изображение на основе самой длинной стороны, сохраняя соотношение сторон
  • Padifneeded (avg_height, avg_width ,,)

Рис. 10

Рис. 11

Рис. 10 и 11. MaxSize-> PAD вывод для двух изображений с совершенно разными соотношениями сторон

Как вы можете видеть на рисунке 10 и 11, предварительная обработка приводит к изображению 500 × 600 с разумным 0-версией для обоих изображений.

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

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

Рис. 12. Обратите внимание, как обдумывание размышлений создает ложные отрицательные ошибки в наших аннотациях. Отражение кошки (верхняя часть картинки) не имеет ярлыка!

Увеличение-ротации

Вращения являются мощными и полезными увеличениями, но они должны использоваться с осторожностью. Посмотрите на рис. 13. ниже, который был сгенерирован с использованием конвейера вращения (45)-> RESRIFE-> PAD.

Рис. 13. Вращения могут быть вредными для ваших меток с ограничительными коробками

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

Моя рекомендация:

  • Возможно, вы захотите отказаться от них, если у вас много объектов с соотношением сторон далеко от одного.

Еще одна вещь, которую вы можете рассмотреть,-это использование 90 180, 270 градусов, не связанных с ними (если они имеют смысл) для вашей проблемы (они не уничтожат каких-либо ограничивающих ящиков)

Увеличения-ключевые выводы

Как вы видите, пространственные преобразования могут быть довольно сложными, и может произойти много неожиданных вещей (особенно для проблем обнаружения объектов).

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

Примечание:

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

Из моего опыта хорошая отправная точка (без пространственных преобразований) и для натуральных наборов данных (аналогично Coco) – это следующий трубопровод:

transforms = [
    LongestMaxSize(max_size=500),
    HorizontalFlip(p=0.5),
    PadIfNeeded(500, 600, border_mode=0, value=0),
    JpegCompression(quality_lower=70, quality_upper=100, p=1),
    RandomBrightnessContrast(0.3, 0.3),
    Cutout(max_h_size=32, max_w_size=32, p=1)
]

Конечно, такие вещи, как Max_Size или размеры выреза, произвольны и должны быть скорректированы.

Рис. 14. Результаты увеличения с помощью выреза, сжатия JPEG и регулировки контрастности/яркости

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

%%timeit -n 1 -r 1
for b in data_loader: pass

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

  • поврежденные файлы,
  • метки, которые нельзя преобразовать и т. Д.
  • Все подозрительное, что может прервать тренировки вниз по линии.

Понимание результатов

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

Давайте посмотрим на официальный Coco Challenge и о том, как выглядит процесс оценки (все результаты, которые я буду показывать, предназначены для модели Mask R-CNN с основой Resnet50).

Рис. 15. Коко -оценка результатов

Он возвращает Ap и AR для различных групп наблюдений, разделенных IOU (пересечение над союзом прогнозов и основной истины) и области. Таким образом, даже официальная оценка Coco – это не только одна метрика, и для этого есть веская причина.

Давайте сосредоточимся на обозначениях 50: 0,95.

Это означает следующее: AP и AR рассчитываются как среднее значение точности и отзывов, рассчитанных для различных настроек IOU (от 0,5 до 0,95 с 0,05 стадией) . То, что мы получаем здесь, является более надежным процессом оценки, в таком случае модель будет набрать высокий уровень, если она довольно хороша в обоих (локализация и классификация).

Конечно, ваша проблема и набор данных могут быть разными. Может быть, вам нужен чрезвычайно точный детектор, в этом случае выбор AP@0.90iou может быть хорошей идеей.

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

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

Рис. 16. За класс Ap

Рисунок 16. дает вам много полезной информации, есть несколько вещей, которые вы можете рассмотреть:

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

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

Итак, если смотреть на отдельные метрики недостаточно, что вы должны делать?

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

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

GIF доступен здесь

На GIF мы видим, как визуализируется вся важная информация:

  • Красные маски-прогнозы
  • Оранжевые маски-перекрытие предсказаний и масок истины наземной истины
  • Зеленые маски-наземная правда
  • Пунктирные ограничительные коробки-ложные срабатывания (прогнозы без совпадения)
  • Оранжевые коробки True Poil
  • Зеленые коробки-наземная правда

Понимание результатов-оценки изображения

Глядя на жесткие метрики и визуально осматривая изображения, мы, скорее всего, имеем довольно хорошее представление о том, что происходит. Но рассмотрение результатов случайных изображений (или сгруппированных по классу), вероятно, не является оптимальным способом сделать это. Если вы хотите по -настоящему погрузиться и определить края вашей модели, я предлагаю расчеты на показатели изображения (Например, AP или отзыв).

Ниже и пример изображения, которое я нашел, сделав именно это.

Рис. 18. Изображение с очень низким баллом AP

В примере выше (рис. 18.) Мы можем увидеть два фальсифицированных прогноза знака остановки-из этого мы можем сделать вывод, что наша модель понимает, что такое знак остановки, но не то, что такое другие знаки трафика.

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

Рис. 19. Пример изображения с хорошей оценкой> 0,5 AP

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

Коко -формат

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

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

Тем не менее, Набор данных COCO (и формат COCO) стал стандартным способом организации обнаружения объектов и наборов данных сегментации изображений.

В Коко мы следим за xywh Конвенция для ограничительных кодировки ящика или, как мне нравится называть это TLWH: (высота верхней левой ширины) Таким образом, вы не можете путать это с, например, CWH: (Center-Point, W, H) Анкет Метки маски (сегментации) кодированы длиной длиной (Объяснение RLE) .

Рис. 20. Формат аннотаций набора данных COCO

Есть все еще очень важные преимущества наличия широко принятого стандарта:

  • Инструменты маркировки и услуги Экспорт и импорт наборов данных Coco
  • Код оценки и оценки (используемый для конкурса Coco) довольно хорошо оптимизирован и протестирован сражением.
  • Несколько наборов данных с открытым исходным кодом следуют за ним.

В предыдущем абзаце я использовал функциональность Coco Eval, которая является еще одним преимуществом соблюдения стандарта COCO. Чтобы воспользоваться тем, что вам необходимо форматировать свои прогнозы так же, как и ваш набор данных COCO, а затем расчет метрик так же просто, как и призыв: Cocoeval (GT_Dataset, Pred_dataset)

Чтобы упростить процесс разведки данных и результатов (особенно для обнаружения объектов), я написал инструмент, который работает на наборах данных COCO.

По сути, вы предоставляете его с помощью набора данных Ground Pruth и набора данных прогнозов (необязательно), и он сделает все остальное:

  • Рассчитайте большинство показателей, которые я представил в этом посте
  • Легко визуализировать наборы данных наземные истины и прогнозы
  • Осмотрите кокосовые метрики, на класс AP -метрики
  • Осмотрите оценки на предмет

Для использования инструмента Explorer набора данных Coco вам нужно:

git clone https://github.com/i008/COCO-dataset-explorer.git
  • Загрузите примеры данных, которые я использовал для примеров или используйте свои собственные данные в формате Coco:

Пример набор данных формата Coco с прогнозами Анкет

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

tar -xvf coco_data.tar

У вас должна быть следующая структура каталога:

COCO-dataset-explorer
    |coco_data
        |images
            |000000000139.jpg
            |000000000285.jpg
            |000000000632.jpg
            |...
        |ground_truth_annotations.json
        |predictions.json
|coco_explorer.py
|Dockerfile
|environment.yml
|...

*Установите среду со всеми зависимостями

conda env update;
conda activate cocoexplorer
  • Запустите приложение Streamlit, указав файл с наземной правдой и прогнозами в формате COCO и в каталоге изображений:
streamlit run coco_explorer.py -- \
    --coco_train coco_data/ground_truth_annotations.json \
    --coco_predictions coco_data/predictions.json  \
    --images_path coco_data/images/

Примечание: Вы также можете запустить это с помощью Docker:

sudo docker run -p 8501:8501 -it -v "$(pwd)"/coco_data:/coco_data i008/coco_explorer  \
    streamlit run  coco_explorer.py -- \
    --coco_train /coco_data/ground_truth_annotations.json \
    --coco_predictions /coco_data/predictions.json  \
    --images_path /coco_data/images/
  • Исследуйте набор данных в браузере. По умолчанию он будет работать на http://localhost: 8501/

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

Я уверен, что усилия, которые мы предпринимаем на этом этапе проекта, окупаются в долгосрочной перспективе.

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

Эта статья была первоначально написана Джакуб Сихлик и опубликовано в Блог Нептуна . Вы можете найти там более подробные статьи для практикующих машинного обучения.

Оригинал: “https://dev.to/kamil_k7k/how-to-do-data-exploration-for-image-segmentation-and-object-detection-things-i-had-to-learn-the-hard-way-1067”