Введение
В настоящее время семантическая сегментация является одной из ключевых задач в области компьютерного зрения. Обрабатывая все объекты на изображении, семантическая сегментация позволяет программе полностью интерпретировать обрабатываемую сцену. Важность программной интерпретации изображения подчеркивается тем фактом, что все большее число приложений переводит компьютерные данные в графический формат, который понятен человеку. К таким приложениям относятся: системы управления транспортным средством для автономного вождения, продвинутые способы взаимодействие человека с компьютером, виртуальная реальность и т.д. Из-за роста популярности машинного обучения в последние годы многие задачи семантической сегментации решаются путем использования архитектур нейронных сетей, чаще всего сверточных, которые превосходят другие подходы с большим отрывом, с точки зрения точности и эффективности. [1][2]
Обзор задачи семантической сегментации
Целью семантической сегментации является точная классификация и сегментация каждого объекта, представленного на изображении. Семантическая классификация состоит из трех основных шагов: [3]
1. Первоначально происходит выделение всех классов, присутствующих на обрабатываемом изображении.
2. Следующим шагом является сегментация / обнаружение, которые предоставляют не только сущности классов, но и информацию относительно пространственного расположения этих классов.
3. На последнем шаге достигается точный вывод. Создаются метки для каждого пикселя. Эти метки указывают на принадлежность определенного пикселя к сущности класса. [4][5]
Результат задачи семантической сегментации, интерпретированный в изображение, понятное человек, показан на рис. 1.
Рис. 1. Результат задачи семантической сегментации.
Далее представлены примеры некоторых стандартных архитектур глубоких нейронных сетейт, которые внесли значительный вклад в область компьютерного зрения, поскольку они часто используются в качестве основы систем семантической сегментации:
1. AlexNet: архитектура CNN созданная в Торонто, победившая в конкурсе ImageNet 2012 года с точностью 84,6%. Она состоит из пяти слоев: 3 сверточных слоев с использованием активационной функции ReLU для нелинейности, одного слоя субдискретизации и одного слоя сброса.
2. VGG-16: эта модель нейронной сети была разработана в Оксфордском университете и победила в конкурсе ImageNet 2013 года с точностью 92,7%. Она использует стек слоев свертки с маленькими рецептивными полями в первых слоях вместо нескольких слоев с большими рецептивными полями.
3. GoogLeNet. Эта сеть от компании Google стала победителем конкурса ImageNet 2014 года с точностью 93,3%. Она состоит из 22 слоев и нового строительного блока нейронных сетей, называемого начальным модулем. Начальный модуль состоит из: слоя соединения сетей, слоя субдискретизации, уровня свертки большого размера и уровня свертки малого размера.
4. ResNet. Эта модель от компании Microsoft, которая выиграла конкурс ImageNet 2016 года с точностью 96,4%. Она хорошо известна благодаря своей глубине (152 слоя) и введению остаточных блоков. Остаточные блоки решают проблему обучения действительно глубокой архитектуры путем введения соединений с пропуском идентификаторов, чтобы слои могли копировать свои входные данные на следующий уровень.
Подходы семантической сегментации
В широком смысле архитектура семантической сегментации может рассматриваться как кодирующая сеть, за которой следует декодирующая сеть:
1. Кодирующая сеть обычно представляет собой предварительно обученную классификационную нейронную сеть, такую как VGG / ResNet, за которой следует декодирующая сеть.
2. Задача декодирующей сети состоит в том, чтобы семантически проецировать распознаваемые признаки (более низкое разрешение), изученные кодирующей сетью, на пространство пикселей (более высокое разрешение), чтобы получить плотную классификацию. [6]-[8]
В отличие от обычной задачи классификации, где конечный результат глубокой сети является единственной важной вещью, семантическая сегментация требует не только различения на уровне пикселей, но также и механизма для проецирования распознавающих признаков, изученных на разных этапах кодирующей сети, в пространство пикселей. Различные подходы используют разные механизмы, являющиеся частью декодирующей сети. Три основных подхода семантической сегментации:
1. Областная семантическая сегментация
2. Семантическая сегментация на основе полностью сверточной сети
3. Семантическая сегментация со слабым контролем
Областная семантическая сегментация обычно использует в качестве источника информации данные, полученные с помощью «сегментации с использованием распознавания». Данный метод сначала извлекает области свободной формы из изображения и описывает их, а затем классифицирует их. Во время тестирования предсказания данного метода преобразуются в пиксели. Обычно это происходит путем маркировки пикселя в соответствии с областью наивысшей оценки, которая его содержит.
R-CNN - репрезентативная сеть для использования методов, основанных на областных выделениях. Она выполняет семантическую сегментацию на основе результатов обнаружения объекта. Изначально R-CNN использует выборочный поиск для извлечения большого количества предполагаемых объектов, а затем вычисляет функции CNN для каждого из них. В итоге, она классифицирует каждую область изображения, используя классовые линейные SVM. По сравнению с традиционными структурами CNN, которые в основном предназначены для классификации изображений, R-CNN может решать более сложные задачи, такие как обнаружение объектов и сегментация изображений. Она может послужить основой для обеих задач. Кроме того, R-CNN может быть построена поверх любых эталонных структур CNN, таких как AlexNet, VGG, GoogLeNet и ResNet.
Рис. 2. Архитектура R-CNN
Для задачи сегментации изображения R-CNN выделила 2 типа объектов для каждой области: объект полного региона и объект переднего плана и обнаружила, что это может привести к повышению производительности при объединении этих областей вместе. R-CNN позволяет значительно улучшить производительность благодаря использованию сильно различающих функций CNN. Тем не менее, она также страдает от нескольких недостатков для задачи сегментации.
Семантическая сегментация на основе полностью сверточной сети (FCN) обрабатывает изображение от пикселя к пикселю без извлечения объектов по определенной области. Сетевой конвейер FCN является продолжением классического конвейера CNN. Основная идея заключается в том, чтобы заставить классическую архитектуру CNN принимать в качестве входных данных изображения произвольного размера. Ограничение CNN принимать и производить разметку только для входов определенного размера исходит от полностью связанных слоев, которые являются фиксированными. В отличие от них, FCN имеет сверточный и объединяющий слои, которые дают им возможность делать прогнозы на входах произвольного размера.
Рис. 3. Архитектура FCN
Одна из проблем данной архитектуры заключается в том, что при распространении через несколько чередующихся сверточных и объединяющих слоев разрешение выходных карт объектов снижается. Поэтому прямые предсказания FCN обычно имеют низкое разрешение, что приводит к относительно нечетким границам объектов. Для решения этой проблемы было предложено множество более продвинутых подходов, основанных на FCN, включая SegNet, DeepLab-CRF и Dilated Convolutions.
Семантическая сегментация со слабым контролем. Большинство соответствующих методов в семантической сегментации полагаются на большое количество изображений с пиксельными масками. Однако ручное выделение этих масок является довольно трудоемким, утомительным и коммерчески дорогим процессом. Поэтому в последнее время были предложены некоторые слабо контролируемые методы, предназначенные для выполнения семантической сегментации с использованием аннотированных ограничивающих рамок.
Рис. 4. Обучение Boxsup
Например, Boxsup использовал аннотирование ограничивающей области в качестве контроля для обучения сети и итеративного улучшения оценочных масок для семантической сегментации. Классификация на уровне пикселей позволила интерпретировать задачу сегментации в структуре обучения с несколькими экземплярами и позволила добавить дополнительный слой, чтобы ограничить модель для присвоения большего веса всем важным пикселям для классификации на уровне изображения.
Семантическая сегментация с использованием полностью сверточной сети
Вот ключевые особенности архитектуры FCN:
1. FCN передает знания из VGG16 для выполнения семантической сегментации.
2. Полностью соединенные слои VGG16 преобразуются в полностью сверточные слои с использованием свертки 1x1. Этот процесс создает тепловую карту присутствия класса в низком разрешении.
3. Повышение дискретизации карт семантических признаков низкого разрешения выполняется с использованием транспонированных сверток (инициализированных с помощью билинейных интерполяционных фильтров).
4. На каждом этапе процесс повышения дискретизации дополнительно совершенствуется путем добавления функций из более неточных, но с более высоким разрешением карт объектов из более низких уровней в VGG16.
5. Пропускное соединение вводится после каждого блока свертки, чтобы позволить последующему блоку извлекать более абстрактные, характерные для класса функции из ранее объединенных функций.
Далее будет рассматриваться пошаговая реализацию самой популярной архитектуры семантической сегментации - полностью сверточной сети (FCN-8). Для реализации используется библиотека TensorFlow (Python 3), а также другие зависимости, такие как Numpy и Scipy.
Пошаговое внедрение архитектуры FCN-8:
1. Кодирующая сеть: предварительно обученная сеть VGG16 используется в качестве кодировщика. Декодирующая сеть начинается со слоя 7 VGG16.
2. Слой FCN-8: последний полностью подключенный слой VGG16 заменяется сверткой 1x1.
3. Слой FCN-9: слой FCN-8 увеличивается в 2 раза, чтобы соответствовать размерам слоя 4 VGG16, с использованием транспонированной свертки с параметрами: (kernel=(4,4), stride=(2,2), paddding=’same’). После этого необходимо добавить пропущенное соединение между слоем 4 VGG16 и слоем 9 FCN.
4. Слой FCN-10: слой FCN-9 увеличивается в 2 раза для соответствия размерам со слоем 3 VGG16 с использованием транспонированной свертки с параметрами: (kernel=(4,4), stride=(2,2), paddding=’same’). После этого было добавлено пропущенное соединение между слоем 3 VGG16 и слоем 10 FCN.
5. Слой FCN-11: слой FCN Layer-10 увеличивается в 4 раза для согласования размеров с размером входного изображения, поэтому мы получаем реальное изображение обратно, а глубина равна количеству классов, используя транспонированную свертку с параметрами: (kernel = (16,16) , stepde = (8,8), paddding = 'same').
Рис. 5. Архитектура FCN-8
После реализации архитектуры FCN-8, необходимо подготовить обучающие данные, или взять их из свободных ресурсов и обучить сеть. Результат распознавания должен получиться как на рис. 6.
Рис. 6. Результат распознавания нейронной сети FCN-8
Заключение
Задача семантической сегментации является высокоуровневой задачей обработки изображений, относящейся к группе задач машинного распознавания. Она является более сложной, чем задача классификации изображений и поиска объектов, что обусловлено не только необходимостью определения классов объектов, но и выявления их структуры, правильного выделения частей объектов на изображении.
Существует три основных метода семантической сегментации областная семантическая сегментация, семантическая сегментация на основе полностью сверточной сети, семантическая сегментация со слабым контролем. Данные методы включают в себя разные архитектуры нейронных сетей и постоянно совершенствуются.
В рамках статьи была описана реализация архитектур FCN-8 с использованием библиотеки машинного обучения tensorflow.