U-net, принцип сегментации изображений дистанционного зондирования и анатомия глубокого обучения
U-net, принцип сегментации изображений дистанционного зондирования и анатомия глубокого обучения
U-Net — это популярная модель глубокого обучения, в основном используемая для задач сегментации изображений, особенно широко используемая при обработке биомедицинских изображений. Однако благодаря своей эффективности и надежности U-Net также подходит для сегментации изображений дистанционного зондирования. Сегментация изображений дистанционного зондирования направлена ​​на выявление и сегментирование объектов поверхности (таких как здания, дороги, растительность и т. д.) на спутниковых или аэрофотоснимках.

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

Язык кода:javascript
копировать
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, содержащую больше сверточных слоев и пропущенных соединений.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose