Сегодня поговорим об известной сверточной сетевой архитектуре под названием Unet. Его название основано на его форме, которую мы увидим позже. Этот пост будет в большей степени ориентироваться на оригинальную статью, которую можно найти здесь.
Семантическая сегментация
Мотивом использования сверточных слоев является инвариантность к локальному переводу, когда нас больше заботит наличие объекта, а не его точное местоположение.
Когда вы впервые начинаете со сверточных нейронных сетей, свертки, вероятно, используются в моделях, которые используются для классификации изображений. Например, вы хотите предсказать, есть ли на картинке какое-то конкретное животное, предмет или даже человек.
Однако очень часто нам нужно локализовать каждый пиксель. Желаемый результат - это изображение, которое разделено на различные области, что снижает сложность понимания изображений машинами. Это очень полезно при обработке биомедицинских изображений и для беспилотных автомобилей.
Давайте рассмотрим несколько примеров семантической сегментации в действии:
Редактирование:
Если вы не так хорошо знакомы с извилинами и тем, как они применяются, вам настоятельно рекомендуется посмотреть блестящую запись в блоге здесь:
Архитектура
Теперь, когда мы понимаем, что такое семантическая сегментация, пришло время взглянуть на строительные блоки модели, которая очень хорошо подходит для создания этих масок.
В Unet есть даунсэмплинг — кодировщик и даунсэмплинг — часть декодера. Одна из ключевых особенностей Unet заключается в том, что он также имеет пропускные соединения или каналы функций, которые распространяют информацию на слои с более высоким разрешением.
Кодировщик
Кодер состоит из повторяющихся сверток 3x3 с ReLU в качестве линейной функции активации, которая вносит нелинейность в модель, а затем следует операция максимального объединения. На каждом шаге понижения частоты количество каналов удваивается.
Декодер
Декодер объединяет пространственную информацию и информацию о функциях через слои повышающей дискретизации, а затем объединяется с функциями с более высоким разрешением от кодера. На каждом шаге повышения частоты дискретизации количество каналов уменьшается вдвое. Последним шагом является свертка 1x1, которая сопоставляет 64-компонентный объект с 23 сверточными слоями.
Пропустить Подключения
Пропустить соединения помогают в построении изображения из декодера с помощью деталей, изученных в части кодировщика.
В документе также упоминается, что важно выбрать размер ввода таким образом, чтобы операции максимального объединения применялись к четным размерам x, y.
Функция обучения и потерь
В оригинальной статье они объединили soft-max с функцией кросс-энтропийных потерь. Я хочу подробнее остановиться на формулах, приведенных в статье, так как это может быть неясно с первого взгляда.
l(x) представляет собой истинную метку пикселя в позиции x, например, если пиксель является частью 1-го класса, то l(x)= 1. Теперь p_k мы вычисляем как:
гдеa_k — это активация в функциональном канале k в позиции x. и k — номер класса. Следовательно, если l(x) = 1, у нас будет p1(x).
Чтобы заставить сеть научиться точно предсказывать границы между объектами одного класса, они ввели взвешенные потери как:
где wc(x) — взвешенная карта классов. Шаги для его вычисления:
- для каждого класса подсчитайте, сколько пикселей в наземной истине принадлежит этому классу
- для каждого пикселя в wc(x), который имеет форму одного входного изображения, назначьте вероятность как 1/(число, рассчитанное выше)
- разделите все значения в карте на максимальное значение карты, чтобы фон имел вес 1
w0(x) — это константы, которые в исходной статье имеют значения 10 и 5 соответственно. d1(x) и d2(x) соответствуют расстояниям, указанным в документе, до первых двух ближайших ячеек. .
Вот визуализация, как вы видите, больше веса приходится на границы между объектами.
Приложения
Семантическая сегментация очень полезна для обеспечения восприятия компьютером. Например, автономные транспортные средства должны понимать окружающую среду, и семантическая сегментация может помочь им распознавать дорогу и объекты, пересекающие дорогу. При диагностике изображений это может помочь врачам управлять направлением рентгеновских лучей, чтобы другие, здоровые органы облучались минимально.
Интересные наборы данных kaggle, которые могут послужить вам практикой:
- https://www.kaggle.com/competitions/uw-madison-gi-tract-image-segmentation/data
- https://www.kaggle.com/datasets/mateuszbuda/lgg-mri-segmentation
- https://www.kaggle.com/datasets/kumaresanmanickavelu/lyft-udacity-challenge
Ссылки:
- http://cs231n.github.io/convolutional-networks/
- https://towardsdatascience.com/understanding-semantic-segmentation-with-unet-6be4f42d4b47
- https://doi.org/10.48550/arXiv.1505.04597