Глубокое Обучение – Как Это Работает? Часть 4

Часть 1 Часть 2 Часть 3 В этой статье вы узнаете:

  • О том, что это такое трансферное обучение и как это работает
  • О том, что это такое семантическая/экземплярная сегментация и как это работает
  • О том, что это такое обнаружение объектов и как это работает


Введение

Для задач обнаружения объектов существует два метода (источник и подробнее — здесь ):
  • Двухэтапные методы (англ.

    двухэтапные методы), также известные как «методы, основанные на регионах» (англ.

    Region-Based Methods) — подход, разделенный на два этапа.

    На первом этапе путем выборочного поиска или использования специального слоя нейронной сети выявляются области интереса (RoI) — регионы с высокой вероятностью содержания внутри себя объектов.

    На втором этапе выбранные регионы рассматриваются классификатором для определения принадлежности к исходным классам и регрессором для уточнения расположения ограничивающих рамок.

  • Одношаговые методы (английские одноэтапные методы) — подход, который не использует отдельный алгоритм для генерации регионов, а вместо этого прогнозирует координаты определенного количества ограничивающих рамок с разными характеристиками, такими как результаты классификации и степень достоверности, и дополнительно корректирует расположение ящиков.

В этой статье рассматриваются одношаговые методы.



Трансферное обучение

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

Например, у нас есть модель EfficientNet-B5, которая обучена на наборе данных ImageNet (1000 классов).

Теперь в простейшем случае меняем его последний слой классификатора (скажем, чтобы классифицировать объекты 10 классов).

Взгляните на картинку ниже:

Глубокое обучение – как это работает? Часть 4

Кодер выполняет субдискретизацию слоев (свертка и объединение).

Замена последнего слоя в коде выглядит так (фреймворк — pytorch, среда — google colab): Загружаем обученную модель EfficientNet-b5 и смотрим на ее слой классификатора:

Глубокое обучение – как это работает? Часть 4

Измените этот слой на другой:

Глубокое обучение – как это работает? Часть 4

Декодер нужен, в частности, для задачи сегментации (об этом позже).



Стратегии передачи обучения

Стоит добавить, что по умолчанию все слои модели, которые мы хотим обучать дальше, являются обучаемыми.

Мы можем «заморозить» веса некоторых слоев.

Чтобы заморозить все слои:

Глубокое обучение – как это работает? Часть 4

Чем меньше слоев мы обучаем, тем меньше вычислительных ресурсов нам нужно для обучения модели.

Всегда ли этот прием оправдан? В зависимости от объема данных, на которых мы хотим обучать сеть, и от данных, на которых сеть обучалась, существует 4 сценария трансферного обучения (под «мало» и «много» можно взять условное значение 10к) :

  • Ты мало данных , И они похожий на данных, на которых сеть предварительно обучалась.

    Вы можете попробовать тренировать только несколько последних слоев.

  • Ты мало данных , И они не похожи на данных, на которых сеть предварительно обучалась.

    Самый печальный случай.

    Здесь, скорее всего, вам придется просто подобрать модель по объему данных, т.к.

    даже обучение всех слоев может не помочь.

  • Ты много данных , И они похожий на данных, на которых сеть предварительно обучалась.

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

  • Ты много данных , И они не похожи на данных, на которых сеть предварительно обучалась.

    Лучше обучить практически всю сеть.



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

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

Глубокое обучение – как это работает? Часть 4

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

Достаточно посмотреть на архитектуру сети ResNeSt-269 :) Интуиция - на входе изображение (h,w,c), на выходе мы хотим получить маску (h,w) или (h,w,c), где c - количество классов (в зависимости от данных и модель).

Давайте теперь добавим декодер после нашего кодера и обучим его.

Декодер будет состоять, в частности, из слоев повышающей дискретизации.

Вы можете увеличить размерность, просто «растянув» нашу карту объектов по высоте и ширине на том или ином шаге.

При «вытягивании» можно использовать билинейная интерполяция (в коде это будет просто один из параметров метода).

Сетевая архитектура Deeplabv3+:

Глубокое обучение – как это работает? Часть 4

Не вдаваясь в подробности, можно заметить, что в сети используется архитектура кодер-декодер.

Более классический вариант сетевой архитектуры U-net:

Глубокое обучение – как это работает? Часть 4

Что это за серые стрелки? Это так называемые пропускные соединения.

Дело в том, что кодер «кодирует» наше входное изображение с потерями.

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

В этой задаче мы можем применить трансферное обучение — например, мы можем взять сеть с уже обученным кодировщиком, добавить декодер и обучить ее.

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



Сегментация экземпляров

Более сложная версия проблемы сегментации.

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

Глубокое обучение – как это работает? Часть 4

Бывает, что классы «слиплись» или между ними нет видимой границы, а нам хочется отличить объекты одного класса друг от друга.

Здесь также есть несколько подходов.

Самый простой и интуитивно понятный — мы обучаем две разные сети.

Мы обучаем первый классифицировать пиксели по некоторым классам (семантическая сегментация), а второй классифицировать пиксели между объектами классов.

Получаем две маски.

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



Обнаружение объектов

Мы подаем изображение на вход, а на выходе хотим видеть что-то вроде:

Глубокое обучение – как это работает? Часть 4

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

Такая схема имеет место быть, но она явно не самая лучшая.

В конце концов, у нас есть сверточные слои, которые каким-то образом по-разному интерпретируют карту признаков «до» (А) в карту признаков «после» (Б).

При этом мы знаем размеры сверточных фильтров => знаем, какие пиксели из А в какие пиксели Б были преобразованы.

Давайте посмотрим на YOLO v3:

Глубокое обучение – как это работает? Часть 4

YOLO v3 использует карты объектов разных размеров.

Это сделано, в частности, для того, чтобы правильно обнаруживать объекты разного размера.

Далее все три шкалы объединяются:

Глубокое обучение – как это работает? Часть 4

Выход сети, с входным изображением 416x416, 13x13x(B*(5+C)), где C — количество классов, B — количество ящиков для каждого региона (их в YOLO v3 3).

5 – это такие параметры, как: Px, Py – координаты центра объекта, Ph, Pw – высота и ширина объекта, Pobj – вероятность нахождения объекта в этой области.

Давайте посмотрим на картинку, будет немного понятнее:

Глубокое обучение – как это работает? Часть 4

YOLO фильтрует данные прогнозирования сначала по показателю объективности по некоторому значению (обычно 0,5-0,6), а затем по немаксимальное подавление .

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



Заключение

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

Есть определенные идеи, поняв которые, станет легче разобраться в этом зоопарке моделей и подходов.

Именно эти идеи я попытался выразить в этой статье.

В следующих статьях мы поговорим о переносе стилей и GAN. Теги: #Машинное обучение #искусственный интеллект #глубокое обучение

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.