01
Принцип и структура сегментации изображений U-Net
01
Принцип U-Net
U-Net — это сквозная модель сегментации изображений, основанная на сверточных нейронных сетях (CNN), основной особенностью которой является симметричная структура кодера-декодера. Кодер отвечает за извлечение характеристик изображения, а декодер реконструирует и генерирует сегментированные изображения.
01
Структура U-Net
Структуру U-Net можно разделить на две части: путь сокращения (кодер) и путь расширения (декодер).
Путь сокращения (кодер): Кодер состоит из серии сверточных слоев, функций активации (таких как ReLU) и слоев максимального пула. Каждый сверточный слой извлекает особенности изображения и уменьшает пространственный размер изображения. По мере углубления модели извлеченные функции становятся более сложными и абстрактными.
Путь расширения (декодер): декодер состоит из серии повышающих дискретизаций, сверточных слоев и функций активации (таких как ReLU). Операция повышения дискретизации увеличивает размер входной карты объектов, так что она постепенно возвращается к пространственному разрешению исходного входного изображения. В пути расширения низкоуровневые функции кодера также комбинируются с высокоуровневыми функциями декодера посредством пропуска соединений, что позволяет сети захватывать многомасштабную информацию.
В конце декодера обычно используется сверточный слой 1x1 для преобразования карты объектов в соответствующее количество категорий. Затем модель U-Net будет обучена с использованием потерь классификации на уровне пикселей, таких как потеря перекрестной энтропии, чтобы получить точную производительность в задачах сегментации изображений дистанционного зондирования.
Таким образом, U-Net обеспечивает точную и эффективную работу в задачах сегментации изображений дистанционного зондирования за счет использования симметричной структуры кодера-декодера и пропуска соединений.
02
Пропустить соединения и методы отбора проб
01
Разница между пропуском соединения и полным соединением
Пропускные соединения играют важную роль в U-Net, они помогают захватывать многомасштабную информацию, тем самым повышая точность сегментации изображений. Ниже приведены основные функции пропущенных соединений и отличия от полностью связанных слоев:
Функция пропуска соединения:
1) Объединение многомасштабных функций. Комбинируя низкоуровневые функции кодера с высокоуровневыми функциями декодера, пропускаемые соединения могут захватывать многомасштабную информацию изображения. Это помогает модели лучше идентифицировать и различать цели разного размера и сложности.
2) Распространение градиента. В глубоких нейронных сетях исчезновение градиента является распространенной проблемой, из-за которой модель может обучаться медленно или ее будет трудно обучать. Пропускные соединения позволяют градиентам течь непосредственно в сети, тем самым облегчая проблему исчезновения градиента и улучшая обучающий эффект модели.
Разница между пропущенным соединением и полностью подключенным слоем:
1) Метод подключения: Пропускное соединение — это попиксельное сложение или операция сращивания между картой объектов кодера и картой объектов декодера, которая сохраняет пространственную информацию. Полносвязный слой полностью соединяет нейроны и обычно используется для сопоставления векторов признаков с выходным слоем (например, в задачах классификации). При этом пространственная информация будет потеряна.
2) Сценарии применения. Пропускные соединения в основном используются в архитектурах кодировщика-декодера, таких как U-Net, где они очень эффективны в задачах сегментации изображений и прогнозирования на уровне пикселей. Полностью связные слои обычно используются для задач классификации и могут сопоставлять извлеченные признаки с выходными данными категорий в заключительной части сверточной нейронной сети.
3) Количество параметров: количество параметров полностью связанного слоя обычно больше, поскольку каждый нейрон должен быть связан со всеми нейронами предыдущего слоя. Напротив, пропускаемые соединения имеют меньшее количество параметров, поскольку они просто добавляют или объединяют две карты объектов попиксельно.
Короче говоря, пропуск соединений играет роль в интеграции многомасштабных функций и улучшении распространения градиента в U-Net, что помогает повысить точность задач сегментации изображений. Полносвязный слой в основном используется для задач классификации и отличается от пропущенных соединений методами подключения, сценариями применения и количеством параметров.
02
Повышающая и понижающая дискретизация
Понижение разрешения — это операция, которая преобразует карты объектов с высоким разрешением в карты объектов с низким разрешением. Она часто используется в кодирующей части сверточных нейронных сетей. В U-Net операция понижения дискретизации помогает уменьшить размер карт объектов, тем самым снижая сложность вычислений при сборе контекстной информации более высокого уровня. Принцип понижающей дискретизации в основном включает в себя операцию свертки и операцию объединения.
Операция свертки: операция свертки извлекает локальные объекты путем перемещения обучаемого ядра свертки на входную карту объектов. Используя шаг больше 1, операция свертки может уменьшить размер карты объектов. Например, использование операции свертки с шагом 2 может уменьшить размер карты объектов вдвое. Однако этот метод может потерять некоторую информацию о функциях.
Операция объединения: Операция объединения — это еще один метод понижающей дискретизации, который в основном имеет следующие общие типы:
a. Максимальное объединение: максимальное объединение уменьшает размер карты объектов за счет извлечения максимального значения в локальном окне входной карты объектов. Этот подход помогает сохранить важные функции и одновременно снизить сложность вычислений.
b. Объединение средних значений: объединение средних значений уменьшает размер карты объектов путем расчета среднего значения в локальном окне входной карты объектов. По сравнению с максимальным пулом, средний пул может сохранить больше исходной информации, но может потерять некоторые существенные функции.
c Глобальное объединение: Глобальное объединение сжимает всю входную карту объектов в одно значение. Global Max Pooling извлекает максимальное значение из карты объектов, а Global Average Pooling вычисляет среднее значение карты объектов. Глобальное объединение часто используется на последнем уровне сверточной нейронной сети для уменьшения количества параметров и извлечения глобальной информации.
В кодирующей части U-Net для понижающей дискретизации обычно используются сверточные слои и слои максимального пула. Сверточный слой отвечает за извлечение локальных объектов, а слой максимального пула уменьшает размер карты объектов, чтобы уменьшить объем вычислений. Такое сочетание помогает добиться эффективного сбора контекстной информации, сохраняя при этом ключевые функции.
Повышение дискретизации — это операция, которая преобразует карты объектов с низким разрешением в карты объектов с высоким разрешением. В U-Net повышение дискретизации является основным компонентом части декодера, который используется для постепенного восстановления пространственного разрешения входного изображения. Повышение дискретизации помогает модели получить глубокие характеристики и предоставить необходимую подробную информацию для окончательного прогнозирования на уровне пикселей.
Принцип повышения дискретизации. Повышение дискретизации может быть достигнуто разными способами. Ниже приведены некоторые часто используемые методы повышения дискретизации.
Деконволюция (транспонированная свертка): Деконволюция — это метод повышения дискретизации обучения, который генерирует карты объектов с высоким разрешением путем применения обучаемого ядра свертки к входной карте объектов. В U-Net этот подход позволяет декодеру научиться захватывать важную контекстную информацию и генерировать более точные результаты сегментации. Часть декодирования U-Net обычно использует деконволюцию (транспонированную свертку) для повышения дискретизации.
Билинейная интерполяция. Билинейная интерполяция — это метод повышения дискретизации без обучения, который генерирует карты объектов с высоким разрешением путем выполнения линейной интерполяции между соседними пикселями входной карты объектов. Хотя этот метод не может изучить детали конкретной задачи, он может быстро генерировать карты объектов с высоким разрешением, одновременно снижая сложность вычислений.
Интерполяция ближайшего соседа. Интерполяция ближайшего соседа также является методом повышения дискретизации без обучения, который генерирует карты объектов с высоким разрешением путем прямого копирования пикселей ближайших соседей во входной карте объектов. Этот метод требует меньше вычислительных затрат, но может привести к неровным эффектам в сгенерированных картах объектов.
03
Реализация модели глубокого обучения U-Net на основе pytorch
import torch
import torch.nn as nn
class UNet(nn.Module):
def __init__(self, in_channels, out_channels):
super(UNet, self).__init__()
# Часть кодировщика
self.encoder = nn.Sequential(
nn.Conv2d(in_channels, 64, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(64, 64, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=2, stride=2)
)
# средний сверточный слой
self.middle = nn.Sequential(
nn.Conv2d(64, 128, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(128, 128, kernel_size=3, padding=1),
nn.ReLU(inplace=True)
)
# Часть декодера
self.decoder = nn.Sequential(
# деконволюция
nn.ConvTranspose2d(128, 64, kernel_size=2, stride=2),
nn.ReLU(inplace=True),
nn.Conv2d(64, 64, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(64, out_channels, kernel_size=1)
)
def forward(self, x):
# кодирование
enc = self.encoder(x)
# средний сверточный слой
mid = self.middle(enc)
# декодирование
dec = self.decoder(mid)
return dec
В этой упрощенной версии модели U-Net:
Часть декодера: self.decoder соответствует части декодера, включая деконволюцию (операцию повышения дискретизации), функцию активации ReLU и обычный слой свертки.
Деконволюция: первый уровень nn.ConvTranspose2d в декодере представляет собой уровень деконволюции, используемый для реализации повышающей дискретизации. В этом примере мы используем ядро свертки 2x2 и операцию деконволюции с шагом 2.
Обучаемые ядра свертки: nn.Conv2d в кодере, промежуточные сверточные слои и декодер содержат обучаемые ядра свертки. Эти ядра свертки оптимизируются посредством градиентного спуска и обратного распространения ошибки во время обучения, чтобы фиксировать важные функции и закономерности во входных данных.
Обратите внимание, что эта упрощенная версия модели U-Net не включает пропускные соединения и ее структура также проще. В практических приложениях вам может потребоваться построить более сложную структуру U-Net на основе конкретных задач и наборов данных, например U-Net, содержащую больше сверточных слоев и пропущенных соединений.