У меня появилась прекрасная возможность поработать над вызовом Omdena AI Обнаружение аномалий на поверхности Марса. Целью этой задачи является обнаружение аномалий на поверхности Марса (MARS), вызванных инопланетными артефактами, такими как дерби из посадочных модулей MARS, марсоходы и т. Д.

Что такое аномалия?

То, что отличается от стандартного, нормального или ожидаемого. В принципе, ничего такого быть не должно.

Стандартный жизненный цикл:

Сбор данных → EDA → Маркировка данных → Предварительная обработка данных → Модель → Оценка

Сбор данных :

Мои друзья из Omdena создали API для сбора данных из источников данных, который значительно упростил работу.

Но вы также можете собирать данные с HiRise. Я сделал для этого парсер, если кому-то понадобится, дайте мне знать в разделе ответов.



EDA и маркировка данных:

Я хочу сосредоточиться на этой части больше, чем на чем-либо.

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

Выбор интересующего объекта и сохранение согласованного в XML-файле или текстовом файле (в зависимости от используемой версии) с помощью инструментов маркировки

Почему без присмотра?

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

И что теперь?

Это образец изображения, взятого из Dataset API. Сейчас здесь множество объектов, кратеров, холмов и дюн. Наша цель - обнаружить их без какого-либо ручного вмешательства.

Требования:

  1. Python
  2. OpenCV
  3. XML
  4. PIL

Шаги:

  1. Заточка
  2. Порог
  3. Обнаружение контура
  4. Синтаксический анализ XML

Резкость:

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

Я применил пять уровней резкости в своей логике.

Из приведенного выше примера

Уровень 1. Больше ясности в отношении изображения.

Уровень 2: Лучшее разрешение, чем уровень 1

Уровень 3: Началось искажение изображения.

Уровень 4. Уничтожены многие элементы исходного изображения.

Уровень 5. Почти все функции исчезли.

Резюме: Исходный ‹уровень 1‹ Уровень2 ≤ Уровень3 ›Уровень 4› Уровень 5

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

Пороговое значение:

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

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

Почему именно Thesholding?

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

Здесь я разработал систему для 2-х типов порогов.

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

if src(x,y) > thresh

dst(x,y) = maxValue

else

dst(x,y) = 0

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

if src(x,y) > thresh

dst(x,y) = 0

else

dst(x,y) = maxValue

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

if src(x,y) > thresh

dst(x,y) = src(x,y)

else

dst(x,y) = 0

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

Пороговое значение ToZero затемняет те же области.

ЛЮБОПЫТНЫЙ ФАКТ: ЕСЛИ ВЫ ОБЪЕДИНИТЕ ЭТО ДВА ИЗОБРАЖЕНИЯ, ИСПОЛЬЗУЯ АБСОЛЮТНО РАЗНИЦУ, ВЫ ПОЛУЧИТЕ ДЕТЕКТОР КРАЯ

Обнаружение контура / обнаружение формы:

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

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

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

Это двухэтапный процесс:

Найти контуры: это можно сделать с помощью простой функции

cv2.findContours (ThresholdedImage, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE).

Это фактически вернет координаты обнаруженных точек.

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

cv2.boundingRect (c)

где c - контуры, которые мы получили, это вернет нам ширину, высоту, x-координату и y-координату

Звучит знакомо, правда? это именно то, что нужно таким алгоритмам, как Yolo. Им нужно просто ‹xmax, xmin, ymax, ymin›, и мы получили эти координаты.

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

Как мы видим, если мы правильно установили параметры, мы можем ограничить количество объектов. Для меня это был MaxDim, ширина * высота ›1000 и / или Min Height› 100 и т. Д.

Ссылка на Код:

Https://gist.github.com/neelindresh/109c218ccb179e6289ffd1cbe0d8114b



Спасибо, ребята, что прочитали, надеюсь, вам понравилось.

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

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

Мы также находимся в LinkedIn, Instagram, Facebook и Twitter.