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

semantic segmentation guide

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

Инстанс-сегментация обрабатывает несколько объектов одного класса как различные объекты. Обычно инстанс-сегментация сложнее чем семантическая сегментация.

Перед вами перевод статьи A Simple Guide to Semantic Segmentation, автор — Bharath Raj. Ссылка на оригинал — в подвале статьи.

Сравнение инстанс- и семантической сегментации
Сравнение инстанс- и семантической сегментации

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

Классические методы сегментации

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

Сегментация на основе градации серого

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

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

Условные случайные поля

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

естественная сегментация
(с) пиксели с метками собак смешаны с метками котиков. (d) более естественная сегментация

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

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

Каждый пиксель изображения ассоциируется с конечным набором возможных состояний. В нашем случае целевые метки и будут набором возможных состояний. Затраты на присвоение состояния (метки u) единственному пикселю (х) носят название унарных затрат. Чтобы моделировать взаимосвязи между пикселями, мы также рассматриваем затраты, известные как попарные, на присвоение пары меток (u,v) паре пикселей (x,y). Мы можем рассматривать пары пикселей, которые являются непосредственными соседями (сеточная УСП), или же все работать со всеми парами пикселей изображения (плотные УСП).

Сравнение семантической сегментации
Сравнение сеточных (Grid CRF) и плотных (Dense CRF) УСП

Сумма унарных и попарных затрат на все пиксели носит название энергии (или затрат/потерь) УСП. Чтобы получить хороший результат, это значение энергию УСП необходимо минимизировать.

Методы глубокого обучения

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

Одна из самых простых и популярных архитектур, используемых для семантической сегментации, это полносверточная сеть (Fully Convolutional Network, FCN) . В статье “FCN для семантической сегментации” авторы используют FCN для первоначального преобразования входного изображения до меньшего размера (одновременно с этим увеличивая количество каналов) через серию сверток. Такой набор сверточных операций обычно называется кодировщик. Затем выход декодируется или через билинейную интерполяцию, или через серию транспонированных сверток, который носит название декодер.

Прямое и обратное преобразование
Прямое и обратное преобразование

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

сегментация
Формирование артефактов, расположенных в шахматном порядке

Другой недостаток связан с низкой разрешающей способностью по краям из-за потерь информации в процессе кодирования.

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

U-Net

Сеть U-Net представляет из себя улучшение простой FCN архитектуры. Сеть skip-связи между выходами с блоков свертки и соответствующими им входами блока транспонированной свертки на том же уровне.

Схема U-Net сети
Схема U-Net сети

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

Модель тирамису

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

Схема сети Тирамису
Схема сети Тирамису

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

Многомасштабный метод

Некоторые модели глубокого обучения явным образом представляют методы работы с информацией из разных масштабов. Например, сеть Pyramid Scene Parsing (PSPNet) выполняет операцию объединения (через функцию max или average) при помощи кернелов различного размера и с различными шагами, примененных к выходным отображениям признаков с сверточной нейронной сети (например, ResNet). Далее при помощи билинейной интерполяции происходит пересчет размера всех выходов с pooling слоя и выходного отображения признаков с CNN; затем модель объединяет вдоль оси канала все новые выходы. Для генерации предсказания финальная свертка выполняется уже на объединенном выходе.

Архитектура сети PSPNet
Архитектура сети PSPNet

Модель расширенных сверток (Atrous Convolutions) представляет эффективный способ комбинировать признаки с нескольких масштабов без значительного увеличения количества параметров. Регулируя показатель расширения, один и тот же фильтр распределяет значение веса дальше в пространстве. Это позволяет изучать более общий контекст.

Каскадный режим модели расширенных сверток
Каскадный режим модели расширенных сверток

В работе DeepLabv3 используется модель расширенных сверток с различными показателями расширения, чтобы использовать информацию с разных масштабов без существенных потерь в размере изображения. Авторы проводили эксперименты с Atrous convolutions в режиме каскада (это показано на рисунке сверху), а также параллельном режиме в форме Atrous Spatial Pyramid Pooling (как показано ниже).

Параллельный режим модели расширенных сверток
Параллельный режим модели расширенных сверток

Гибридные методы

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

Работа гибридного УСП-СНС метода
Работа гибридного УСП-СНС метода

Некоторые методы используют УСП в самой нейронной сети, как это сделано в работе “CRF-as-RNN”, где плотные УСП (CRF) моделируются как рекуррентные нейронные сети (RNN). Это позволяет осуществлять обучение от начала до конца, как показано на рисунке сверху.

2. Функции потерь

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

Перекрестная энтропия и метод softmax на пикселях

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

Метки в one-hot формате
Метки в one-hot формате

Так как метка уже находится в удобной one-hot форме, её можно сразу использовать для вычисления кросс-энтропии. Однако перед расчетом кросс-энтропии метод softmax должен быть применен к выходным предсказаниям, так как каждый пиксель может принадлежать к любому из классов.

Функция локальных потерь

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

Рассмотрим график уравнения стандартной функции потерь перекрестной энтропии, который представлен ниже (синий цвет). Даже в том случае, когда модель уверена в классе пикселя (скажем, на 80%),  значение потерь примерно равно 0.3. С другой стороны, когда модель уверена в классе (потери почти равны нулю для 80%-ой уверенности), функция локальных потерь (фиолетовый цвет, параметр гамма равен 2) не штрафует её в такой степени.

Поведение стандартной кросс-энтропии
Поведение стандартной кросс-энтропии (синяя линяя) и функций локальных потерь с различными параметрами гамма

Давайте на простом интуитивном примере рассмотрим, почему это важно. Предположим, что мы работаем с изображением, содержащим 10000 пикселей, для которого доступны только два класса: фоновый класс (0 в форме one-hot) и целевой (1 в форме one-hot). Предположим также, что 97% изображения занято фоном, и только 3% являются целевым классом. Теперь скажем, что модель на 80% уверена в пикселях, к которым приписан класс 0, а уверенность в целевом классе составляет лишь 30%.

Используя перекрестную энтропию, потери на пикселях фонового класса равны (97% от 10000) * 0.3, то есть 2850, а потери на пикселях целевого класса составляют (3% от 10000), то есть 360. Очевидно, что здесь доминируют потери, в которых модель наиболее уверена, а изучать целевой класс стимула нет. В сравнении с этим функция локальных потерь из-за фоновых пикселей (97% от 10000) * 0 равна 0. Это позволяет модели лучше учить целевой класс.

Функция потери Дайса

Это еще одна популярная функция потерь, используемая для решения задач семантической сегментации с чрезвычайной несбалансированностью классов. Впервые представленная в статье V-Net, функция Дайса используется для вычисления перекрытия между предсказанным и реальным классами. Коэффициент Дайса (D) считается по формуле:

коэффициент дайса

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

производная
Производная коэффициента Дайса

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

Применение сегментации

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

Автономное вождение

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

Семантическая сегментация в беспилотном автомобиле
Семантическая сегментация в беспилотном автомобиле

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

Сегментация медицинских изображений

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

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

Мы также можем автоматизировать менее важные операции, такие как оценка объема органов с помощью трехмерной семантической сегментации снимков.

Задача понимания эпизода

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

Результат работы алгоритма
Результат работы алгоритма

Индустрия моды

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

Семантическая сегментация как промежуточных шаг в задаче смены одежды

Обработка изображений со спутников

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

Семантическая сегментация спутникового снимка
Семантическая сегментация спутникового снимка

Заключение

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

оценка и предсказание 3D позы

Open source модель определения 3D позы по 2D изображению

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

Искусственная нейронная сеть с нуля на Python c библиотекой NumPy

В туториале показано, как с нуля построить искусственную нейронную сеть на Python с помощью библиотеки NumPy. Сеть будет классифицировать изображения из датасета Fruit360. Материалы туториала, за исключением цветных изображений из сета Fruit360, взяты из книги  «Practical Computer Vision Applications Using Deep Learning with CNNs» автора…

Как использовать BERT для мультиклассовой классификации текста

Возможно, наиболее важное событие прошедшего года в NLP — релиз BERT, мультиязычной модели на основе трансформера, которая показала state-of-the-art результаты в нескольких задачах NLP. BERT — двунаправленная модель с transformer-архитектурой, заменившая собой последовательные по природе рекуррентные нейронные сети (LSTM и GRU), с более быстрым подходом…
self-driving-cars

Беспилотные автомобили — насколько мы далеки от полной автономности?

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

11 JavaScript-библиотек для машинного обучения

Javascript-библиотеки используют для определения, обучения и запуска моделей глубокого обучения, визуализации данных полностью в браузере. Они значительно облегчают жизнь разработчику. Ниже представлены изящные библиотеки, которые объединяют Javascript, машинное обучение, глубокие нейронные сети и даже NLP. 1. Brain.js Brain.js — Javascript библиотека для искусственных нейронных…
pytorch tensorflow сходства и отличия

PyTorch и TensorFlow: отличия и сходства фреймворков

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

Эпоха, батч, итерация — в чем различия?

Вам должны быть знакомы моменты, когда вы смотрите на код и удивляетесь: “Почему я использую в коде эти три параметра, в чем отличие между ними?”. И это неспроста, так как параметры выглядят очень похожими. Epoch - Batch Size - Iteration Чтобы выяснить разницу между…
капсульная нейронная сеть введение

Капсульная нейронная сеть или CapsNet: введение

Сверточные сети сделали потрясающую работу, но завязли в проблемах. Настало время начать думать о новых решениях или улучшениях. Эта статья — введение в капсульные нейронные сети. После прочтения вы поймете, как работают CapsNet и в чем их приципиальное отличие. Перед вами перевод статьи Understanding Capsule Networks…

Нейронная сеть на JavaScript в 30 строк кода

В этой статье будет показано, как создать и обучить нейронную сеть на JavaScript, используя Synaptic.js. Этот пакет позволяет реализовывать глубокое обучение в Node.js и в браузере. Будет создана простейшая возможная нейронная сеть — та, которой удается выполнить XOR операцию. Перевод статьи «How to create…
многозадачное обучение hmtl

Как HMTL помогает улучшить итоговую точность в задачах NLP

Да, вы правильно прочитали, это правда HMTL — модель Hierarchical Multi-Task Learning, что дословно переводится как Иерархическое многозадачное обучение. Наблюдается нарастающая волна как в NLP, так и в целом в глубоком обучении, которая называется многозадачное обучение! Перевод статьи Beating state-of-the-art in NLP with HMTL, автор…
функции активации нейронной сети

Функции активации нейросети: сигмоида, линейная, ступенчатая, ReLu, tahn

Что делает искусственный нейрон? Простыми словами, он считает взвешенную сумму на своих входах, добавляет смещение (bias) и решает, следует это значение исключать или использовать дальше (да, функция активации так и работает, но давайте пойдем по порядку).  Функция активации определяет выходное значение нейрона в зависимости…
vgg16 нейронная сеть

VGG16 — сверточная сеть для выделения признаков изображений

VGG16 — модель сверточной нейронной сети, предложенная K. Simonyan и A. Zisserman из Оксфордского университета в статье “Very Deep Convolutional Networks for Large-Scale Image Recognition”. Модель достигает точности 92.7% — топ-5, при тестировании на ImageNet в задаче распознавания объектов на изображении. Этот датасет состоит…
дерево решений

Дерево решений: метод «белого ящика» в машинном обучении

Дерево решений — логическая схема, позволяющие получить окончательное решение о классификации объекта после ответов на иерархически организованную систему вопросов. Стоит сказать, большинство высоко результативных решений на Kaggle — комбинация XGboost-ов, одного из вариантов деревьев решений, и очень качественного фичер-инжиниринга. Один уровень Стоящая за деревьями…
pytorch bigraph

Сверточная нейронная сеть на PyTorch: пошаговое руководство

В предыдущем вводном туториале по нейронным сетям была создана трехслойная архитектура для классификации рукописных символов датасета MNIST. В конце туториала была показана точность приблизительно 86%. Для простого датасета, как MNIST, это плохое качество. Дальнейшая оптимизация смогла улучшить результат плотно соединенной сети до 97-98% точности.…
pytorch туториал

Туториал по PyTorch: от установки до готовой нейронной сети

Если вы уже пробовали создавать собственные глубокие нейронные сети с помощью TensorFlow и Keras, то, вероятно, знакомы с чувством разочарования при отлаживании этих библиотек. Хотя они имеют API на Python, всё еще трудно выяснить, что именно пошло не так при ошибке. Они также плохо…
neural network nlp architectures

7 архитектур нейронных сетей для решения задач NLP

Искусственная нейронная сеть (ИНС) — вычислительная нелинейная модель, в основе которой лежит нейронная структура мозга, способная обучаться выполнению задач классификации, предсказания, принятия решений, визуализации и некоторых других только благодаря рассмотрению примеров. Любая архитектура ИНС состоит из искусственных нейронов — элементов обработки, имеющих структуру 3…
big data примеры и виды

Что такое Big Data: характеристики, классификация, примеры

Что такое Big Data (дословно — большие данные)? Обратимся сначала к оксфордскому словарю: Данные — величины, знаки или символы, которыми оперирует компьютер и которые могут храниться и передаваться в форме электрических сигналов, записываться на магнитные, оптические или механические носители. Термин Big Data используется для…
обработка естественного языка

5 методов обработки естественного языка, которые стремительно меняют мир вокруг нас

Собираетесь изучать NLP и заниматься разработкой приложений, основанных на обработке естественного языка? Хотите создать свое приложение или программу для голосового помощника Amazon Alexa или Яндекс Алиса? В статье мы расскажем о направлениях развития и техниках, которые применяются для решения задач NLP, чтобы вам стало…