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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода