Sky segmentation что это

Обзор методов сегментации изображений в библиотеке scikit-image

Thresholding

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

Люди, знакомы с фильмом «Терминатор», наверняка согласятся, что это был величайший научно-фантастический фильм той эпохи. В фильме Джеймс Кэмерон представил интересную концепцию визуальных эффектов, которая позволила зрителям скрыться за глазами киборга под названием Терминатор. Этот эффект стал известен как «Терминаторное видение» (англ. Terminator Vision). В некотором смысле, он отделял силуэты людей от фона. Тогда это могло звучать совершенно неуместно, но сегментация изображений сегодня является важной частью многих методов обработки изображений.

Сегментация изображения

Имеются ряд библиотек, написанных для анализа изображений. В этой статье мы подробно обсудим scikit-image, библиотеку обработки изображений на среде Python.

Scikit-image

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Scikit-image — это библиотека Python, предназначенная для обработки изображений.

Установка

scikit-image устанавливается следующим образом:

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Обзор изображений в Python

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

Импорт GrayScale Image из библиотеки skimage

Модуль данных skimage содержит несколько встроенных примеров наборов данных, которые обычно хранятся в формате jpeg или png.

Импорт цветного изображения из библиотеки skimage

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Импорт изображения из внешнего источника

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Загрузка нескольких изображений

Сохранение изображений

Сегментация изображения

Теперь, когда у нас есть представление о scikit-image, предлагаем рассмотреть детали сегментации изображений. Сегментация изображения – это процесс разделения цифрового изображения на несколько сегментов, чтобы упростить и / или изменить представление изображения на что-то более значимое и более простое для анализа.

В этой статье мы рассмотрим алгоритмы для моделей обучаемые как с учителем (supervised) так и без учителя (unsupervised).

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader
Некоторые из алгоритмов сегментации доступны в библиотеке scikit-image

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

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

Давайте попробуем это на изображении учебника, который поставляется с предустановленным набором данных scikit-image.

Обычный импорт

Простая функция для построения изображений

Образ

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Наш пример оказался 8-битным изображением, поэтому мы имеем 256 возможных значений по оси X. По гистограмме видно, что существует концентрация довольно светлых пикселей (0: черный, 255: белый). Скорее всего, это наш довольно светлый текстовый фон, но остальное немного размыто. Идеальная гистограмма сегментации была бы бимодальной, чтобы мы могли выбрать число прямо посередине. Теперь давайте попробуем создать несколько сегментированных изображений на основе простого порогового значения.

Контролируемый порог

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loaderSky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loaderSky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Слева: текст> 50 | Середина: текст> 70 | Справа: текст> 120

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

Неконтролируемый порог

Неконтролируемый порог Scikit-image имеет ряд автоматических методов определения порога, которые не требуют ввода при выборе оптимального порога. Вот некоторые из методов: otsu, li, local.

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loaderSky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Слева otsu || Справа: li

В случае local, нам также нужно указать block_size. Offset помогает настроить изображение для лучших результатов.

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

Сегментация с алгоритмом для модели с учителем

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

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

Активная контурная сегментация (англ. Active contour segmentation)

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

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

Вышеприведенные вычисления вычисляют координаты x и y точек на периферии круга. Так как мы дали разрешение 200, оно вычислит 200 таких точек.

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Сегментация случайного прохождения (англ. Random walker segmentation)

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

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

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader
Теперь давайте использовать Random Walker и посмотрим, что произойдет.

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

Сегментация без учителя

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

Простая Линейно-итеративная Кластеризация

Метод ( англ. Simple Linear Iterative Clustering или SLIC) использует алгоритм машинного обучения под названием K-Means. Он принимает все значения пикселей изображения и пытается разделить их на заданное количество подобластей. Прочитайте эту работу для подробной инфомации.

SLIC работает с разными цветами, поэтому мы будем использовать исходное изображение.

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Мы сократили это изображение с 512 * 512 = 262 000 пикселей до 155 сегментов.

Felzenszwalb

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

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

Теперь мы получаем меньше количество сегментов. Если бы мы хотели еще меньше сегментов, мы могли бы изменить параметр scale. Этот подход иногда называют избыточной сегментацией (англ. over-segmentation).

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

Источник

Распознавание дороги посредством семантической сегментации

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

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

Но обо всем по порядку и для начала немного матчасти.

Сегментация

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

Вот неплохая статья, описывающая примитивные подходы.

Семантическая сегментация

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

Выглядит это как-то так:

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

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

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

В интернете много статей, как готовить данные и обучать U-net сети:

Более молодая и менее известная сеть. Разработана как раз для распознавания городских улиц.

Данные

Самые популярные датасеты, для сегментации улиц (на них изначально обучали E-net):

Выбор реализации

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

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

Использование очень простое:
(Более всего беспокоит то, что сеть обучена на картинках размером 1024×512 — это во-первых больше, чем отдает камера на Raspberry, во-вторых требуемая производительность для обработки такого объема данных несколько смущает. В итоге, главная проблема окажется именно в этом).

Читаем нейросеть из файлов (в одном сама модель, в другом имена классов, в третьем — цвета).

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

Проверка

Берем готовые картинки с танка и натравливаем на них сегментирующую нейросеть.

Sky segmentation что это. 2hvsvhc9ntkfulrphsvaylzz8je. Sky segmentation что это фото. Sky segmentation что это-2hvsvhc9ntkfulrphsvaylzz8je. картинка Sky segmentation что это. картинка 2hvsvhc9ntkfulrphsvaylzz8je

Дорогой признана только левая часть тротуара.

Сжимаем картинку и берем из нее центр размером 64×64:
(Такой размер ожидается нейросетью, которая принимает решение о смене направления)

Sky segmentation что это. rvypza qrlmnobm. Sky segmentation что это фото. Sky segmentation что это-rvypza qrlmnobm. картинка Sky segmentation что это. картинка rvypza qrlmnobm

Нейросеть направления (по факту — классификатор) командует взять влево. Не очень правильно, но терпимо.

Sky segmentation что это. rbkc5okogbebc5vns4whjzrfsuw. Sky segmentation что это фото. Sky segmentation что это-rbkc5okogbebc5vns4whjzrfsuw. картинка Sky segmentation что это. картинка rbkc5okogbebc5vns4whjzrfsuw

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

Sky segmentation что это. fc5m4es. Sky segmentation что это фото. Sky segmentation что это-fc5m4es. картинка Sky segmentation что это. картинка fc5m4es

Классификатор предлагает ехать прямо.

Ситуция, когда робот оказался посреди тротуара.

Sky segmentation что это. mbdbheuq0b. Sky segmentation что это фото. Sky segmentation что это-mbdbheuq0b. картинка Sky segmentation что это. картинка mbdbheuq0b

Дорога распознана практически идеально.

Sky segmentation что это. acatblunbshunktslu31uongwoe. Sky segmentation что это фото. Sky segmentation что это-acatblunbshunktslu31uongwoe. картинка Sky segmentation что это. картинка acatblunbshunktslu31uongwoe

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

Применение

Поколдовав немного над прошивкой танка, заменил цветовой детектор дороги на сегментирующую нейросеть.

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

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

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

Источник

Object Detection. Распознавай и властвуй. Часть 1

Sky segmentation что это. . Sky segmentation что это фото. Sky segmentation что это-. картинка Sky segmentation что это. картинка

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

Времена, когда обнаружение объектов решалось исключительно путем классического машинного обучения (каскады, SVM. ) уже прошли – сейчас в этой сфере царят подходы, основанные на Deep Learning. В 2014 году был предложен подход, существенно повлиявший на последующие исследования и разработки в этой области – R-CNN модель. Последующие его улучшения (в виде Fast R-CNN и Faster R-CNN) сделали его одним из самых точных, что и стало причиной его использования по сей день.

Помимо R-CNN есть еще много подходов реализующих поиск объектов: семейство Yolo, SSD, RetinaNet, CenterNet… Кто-то из них предлагает альтернативный подход, а кто-то развивает текущий в сторону увеличения показателя производительности. Обсуждение почти каждого из них можно вынести в отдельную статью, по причине обилия фишек и ухищрений 🙂

К изучению предлагаю набор статей с разбором двухступенчатых Object Detection моделей. Умение разбираться в их устройстве приносит понимание базовых идей, применяемых и в других реализациях. В этом посте рассмотрим самую базовую и, соответственно, первую из них – R-CNN.

Терминология

Ограничивающая рамка (bounding box) – координаты, ограничивающие определенную область изображения, – чаще всего в форме прямоугольника. Может быть представлена 4 координатами в двух форматах: центрированный (Sky segmentation что это. c1a65deabb045fbd5990366a08ecda1d. Sky segmentation что это фото. Sky segmentation что это-c1a65deabb045fbd5990366a08ecda1d. картинка Sky segmentation что это. картинка c1a65deabb045fbd5990366a08ecda1d) и обычный (Sky segmentation что это. 2c96bf5147d3b2d967fcbdfde2f06f6b. Sky segmentation что это фото. Sky segmentation что это-2c96bf5147d3b2d967fcbdfde2f06f6b. картинка Sky segmentation что это. картинка 2c96bf5147d3b2d967fcbdfde2f06f6b).

Гипотеза (Proposal), P – определенный регион изображения (заданный с помощью ограничивающей рамки), в котором предположительно находится объект.

End-to-end обучение – обучение, при котором на вход сети поступают сырые изображения, а на выходе – готовые ответы.

IoU (Intersection-over-Union) – метрика степени пересечения между двумя ограничивающими рамками.

Одним из первых подходов, применимых для определения нахождения объекта на картинке, является R-CNN (Region Convolution Neural Network). Его архитектура состоит из нескольких последовательно выполняемых шагов и проиллюстрирована на изображении 1:

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Поиск гипотез

Имея определенное изображение на входе первым делом, оно разбивается на маленькие гипотезы разных размеров. Авторы этой статьи используют Selective Search – верхнеуровнево, он позволяет составить набор гипотез (класс объекта пока не имеет значения), на основе сегментации определить границы объектов по интенсивности пикселей, перепаду цветов, контраста и текстур. При этом авторы отмечают, что можно использовать любой аналогичный алгоритм. Таким образом выделяется примерно 2000 разных регионов, которые частично друг друга перекрывают. Для более точной последующей обработки каждая гипотеза дополнительно расширяется на 16 пикселей во всех 4 направлениях – как бы добавляя контекст.

Итог:

Кодирование изображения

Каждая гипотеза из предыдущего шага независимо и по отдельности друг от друга поступает на вход сверточной нейронной сети. В качестве нее используется архитектура AlexNet без последнего softmax-слоя. Главной задачей сети является кодирование поступаемого изображения в векторное представление, которое извлекается из последнего полносвязного FC7 слоя. Так на выходе получается 4096-размерное векторное представление.

Можно заметить, что вход AlexNet имеет размерность 3×227×227, а размер гипотезы может быть почти любого соотношения сторон и размера. Эта проблема обходится простым сжатием или растягиванием входа до нужного размера.

Итог:

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

После получения характеризующего гипотезу вектора становится возможна ее дальнейшая обработка. Для определения, какой именно объект находится в предполагаемом регионе, авторы используют классический метод классификации разделяющими плоскостями на базе SVM (Support Vector Machine – машина опорных векторов, можно смоделировать с помощью Hinge loss). Причем должно быть Sky segmentation что это. 3bbc45cf52b65763e5056e645f2a6532. Sky segmentation что это фото. Sky segmentation что это-3bbc45cf52b65763e5056e645f2a6532. картинка Sky segmentation что это. картинка 3bbc45cf52b65763e5056e645f2a6532отдельных (здесь, Sky segmentation что это. cd793e6d98de4ebe6942e292f218d5bd. Sky segmentation что это фото. Sky segmentation что это-cd793e6d98de4ebe6942e292f218d5bd. картинка Sky segmentation что это. картинка cd793e6d98de4ebe6942e292f218d5bdобозначает количество определяемых классов объектов, а единица добавляется для отдельного определения фона) моделей, обученных по принципу OvR (One vs. Rest – один против всех, один из методов мультиклассовой классификации). По сути, решается задача бинарной классификации – есть ли конкретный класс объекта внутри предполагаемого региона или нет. Таким образом, выходом является Sky segmentation что это. 3bbc45cf52b65763e5056e645f2a6532. Sky segmentation что это фото. Sky segmentation что это-3bbc45cf52b65763e5056e645f2a6532. картинка Sky segmentation что это. картинка 3bbc45cf52b65763e5056e645f2a6532-размерный вектор, отображающий уверенность в конкретном классе содержащегося в гипотезе объекта (фон исторически обозначается нулевым классом, Sky segmentation что это. 58490a0240b989daecebcb47ecb9fdbf. Sky segmentation что это фото. Sky segmentation что это-58490a0240b989daecebcb47ecb9fdbf. картинка Sky segmentation что это. картинка 58490a0240b989daecebcb47ecb9fdbf).

Итог:

Уточнение координат гипотез

Гипотезы, полученные на шаге 1 не всегда содержат правильные координаты (например, объект может быть неудачно «обрезан»), поэтому имеет смысл их дополнительно исправлять. По заверению авторов, это приносит дополнительные 3-4 % к метрикам. Так, гипотезы, содержащие какой-либо объект (наличие объекта определяется на шаге классификации), дополнительно обрабатываются линейной регрессией. То есть гипотезы с классом «фон» не нуждаются в дополнительной обработке регионов, ведь на самом деле там нет объекта…

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

В отличие от предыдущего шага, авторы для наилучшей работы используют на входе не вектор из слоя FC7, а карты признаков, извлеченные из последнего MaxPooling слоя (в AlexNet это Sky segmentation что это. 90b726f1c082ac2bb52cf9a4ef238846. Sky segmentation что это фото. Sky segmentation что это-90b726f1c082ac2bb52cf9a4ef238846. картинка Sky segmentation что это. картинка 90b726f1c082ac2bb52cf9a4ef238846, размерность 256×6×6). Объяснение тут следующее – вектор сохраняет информацию о наличии объекта с какими-то характеристическими подробностями, а карта признаков наилучшим образом сохраняет информацию о местоположении объектов.

Итог:

Вспомогательные трюки

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

Обозначение позитивных и негативных гипотез

2000) содержат этот самый объект (Sky segmentation что это. e41600886a879d3a3e28bc203bb2db8b. Sky segmentation что это фото. Sky segmentation что это-e41600886a879d3a3e28bc203bb2db8b. картинка Sky segmentation что это. картинка e41600886a879d3a3e28bc203bb2db8b0$» data-tex=»inline»/>), а все остальные являются фоном (Sky segmentation что это. 58490a0240b989daecebcb47ecb9fdbf. Sky segmentation что это фото. Sky segmentation что это-58490a0240b989daecebcb47ecb9fdbf. картинка Sky segmentation что это. картинка 58490a0240b989daecebcb47ecb9fdbf).

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

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

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

С позитивными гипотезами все понятно – если класс определен неверно, нужно штрафовать. Но как быть с негативными? Их намного больше, чем позитивных… Для начала отметим, что не все негативные гипотезы одинаково сложно распознавать. Например, случаи, содержащие только фон (easy negative) гораздо проще классифицировать, чем содержащие другой объект или малую часть нужного (hard negative).

На практике easy negative и hard negative определяются по пересечению ограничивающей рамки (как раз используется Intersection over Union) с правильным положением объекта на изображении. Например, если пересечения нет, или оно крайне мало – это easy negative (Sky segmentation что это. 58490a0240b989daecebcb47ecb9fdbf. Sky segmentation что это фото. Sky segmentation что это-58490a0240b989daecebcb47ecb9fdbf. картинка Sky segmentation что это. картинка 58490a0240b989daecebcb47ecb9fdbf), если большое – это hard negative или positive.

Подход Hard Negative Mining предлагает использовать для обучения только hard negative, поскольку, научившись распознавать их, мы автоматический добиваемся наилучшей работы с easy negative гипотезами. Но такая идеология будет применяться только в последующих реализациях (начиная с Fast R-CNN).

Non-maximum suppression

Довольно часто получается так, что модель выделяет несколько гипотез с большой уверенностью указывающие на один и тот же объект. С помощью Non-maximum suppression (NMS) можно обработать такие случаи и оставить только одну, наилучшую, ограничивающую рамку. Но при этом не стоит забывать о случае, когда на изображении может быть два разных объекта одного класса. На изображении 3 проиллюстрирован эффект работы до (слева) и после (справа) работы алгоритма.

Sky segmentation что это. image loader. Sky segmentation что это фото. Sky segmentation что это-image loader. картинка Sky segmentation что это. картинка image loader

Рассмотрим алгоритм работы на одном классе (в реальности он применяется на каждый класс по отдельности):

Обучение

Блок выделения гипотез не подлежит обучению.

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

Обучение векторного представления

За основу берётся предобученная на ImageNet сеть – такие сети уже умеют хорошо извлекать важные признаки из поступающих изображений, – остается обучить их работать с нужными классами. Для этого необходимо изменить размерность выходного слоя на Sky segmentation что это. cd793e6d98de4ebe6942e292f218d5bd. Sky segmentation что это фото. Sky segmentation что это-cd793e6d98de4ebe6942e292f218d5bd. картинка Sky segmentation что это. картинка cd793e6d98de4ebe6942e292f218d5bdи обучить уже модифицированный вариант. Первые слои можно заблокировать, поскольку они извлекают первичные (почти одинаковые для всех изображений) признаки, а последующие во время обучения адаптируются под признаки нужных классов. Так сходимость будет достигаться гораздо быстрее. Но если обучение все же идет плохо, можно разблокировать и первичные слои. Поскольку необходимо именно донастроить уже имеющиеся веса. Использовать большой темп обучения (learning rate) не рекомендуется, – можно очень быстро затереть уже имеющиеся веса.

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

Позитивными на этом шаге считаются гипотезы, которые пересекаются с правильным положением объекта (по IoU) более чем на 0.5. Негативными же считаются все остальные. Для обновления весов используется мини-батч размерности 128, состоящий из 32 позитивных и 96 негативных гипотез.

Обучение классификаторов

Напомню, для классификации каждой гипотезы используется Sky segmentation что это. 3bbc45cf52b65763e5056e645f2a6532. Sky segmentation что это фото. Sky segmentation что это-3bbc45cf52b65763e5056e645f2a6532. картинка Sky segmentation что это. картинка 3bbc45cf52b65763e5056e645f2a6532SVM моделей, которые получают на вход векторное представление гипотезы, и на основе принципа один против остальных (One-vs-Rest) определяют класс объекта. Обучаются они как обычные SVM модели за одним исключением – на этом шаге определение позитивов и негативов немного отличается. Здесь за негативы берутся те гипотезы, пересечение которых с правильным положением менее 0.3.

Обучение регрессоров

\begin
\hat &= p_w d_x(P) + p_x \\
\hat &= p_h d_y(P) + p_y \\
\hat &= p_w e^ \\
\hat &= p_h e^
\end
При этом Sky segmentation что это. 26c2a0659dc3e5eaadaca3fc1f260918. Sky segmentation что это фото. Sky segmentation что это-26c2a0659dc3e5eaadaca3fc1f260918. картинка Sky segmentation что это. картинка 26c2a0659dc3e5eaadaca3fc1f260918(здесь Sky segmentation что это. 42a5b997065a371f1dd3e44efd081d54. Sky segmentation что это фото. Sky segmentation что это-42a5b997065a371f1dd3e44efd081d54. картинка Sky segmentation что это. картинка 42a5b997065a371f1dd3e44efd081d54) является линейной функцией, а вектор Sky segmentation что это. 998b80161caa1332d3be9eb3e976e15f. Sky segmentation что это фото. Sky segmentation что это-998b80161caa1332d3be9eb3e976e15f. картинка Sky segmentation что это. картинка 998b80161caa1332d3be9eb3e976e15fищется с помощью задачи оптимизации (ridge регрессия):

Sky segmentation что это. 6c4d13967fd5e07b245e0b084994f535. Sky segmentation что это фото. Sky segmentation что это-6c4d13967fd5e07b245e0b084994f535. картинка Sky segmentation что это. картинка 6c4d13967fd5e07b245e0b084994f535

Для определения поправок к координатам соберем пары между правильным положением гипотез Sky segmentation что это. 560bd97f235311a36dff00db005e6ab5. Sky segmentation что это фото. Sky segmentation что это-560bd97f235311a36dff00db005e6ab5. картинка Sky segmentation что это. картинка 560bd97f235311a36dff00db005e6ab5и их текущем состоянием Sky segmentation что это. c3d2f2c44fc42edea27de7f8f67b4829. Sky segmentation что это фото. Sky segmentation что это-c3d2f2c44fc42edea27de7f8f67b4829. картинка Sky segmentation что это. картинка c3d2f2c44fc42edea27de7f8f67b4829, и определим значения Sky segmentation что это. faff1228ceaab21dcf270273d087ea2e. Sky segmentation что это фото. Sky segmentation что это-faff1228ceaab21dcf270273d087ea2e. картинка Sky segmentation что это. картинка faff1228ceaab21dcf270273d087ea2eкак:

\end
Обозначения в формулах внутри этой статьи с целью наилучшего понимания могут расходиться с обозначениями оригинальной статьи.

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

2000 гипотез, они объединяются с помощью Non-maximum suppression. Авторы статьи также указывают, что если вместо SVM использовать SoftMax слой (который был откинут на втором шаге), то точность падает на

4-4.5 % (датасет VOC 2007), но при этом отмечают, что лучшая «подгонка» весов вероятно поможет избавиться от такой проблемы.

В заключение выделим основные недостатки такого подхода:

Список литературы

1. R. Girshick, J. Donahue, T. Darrell, and J. Malik. «Rich feature hierarchies for accurate object detection and semantic segmentation.» In CVPR, 2014. arXiv:1311.2524

2. R. Girshick, J. Donahue, T. Darrell, and J. Malik. «Region-based convolutional networks for accurate object detection and segmentation.» TPAMI, 2015

Автор: Сергей Михайлин, специалист машинного обучения «Инфосистемы Джет»

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *