
- •Актуальность
- •Азы работы с изображениями
- •1. Азы работы с изображениями
- •1.1. Попиксельная обработка изображений
- •1.2. Задача маттинга и морфология
- •1.3. Свертки
- •2. Базовые алгоритмы над изображениями
- •2.1. Интерполяция
- •2.2. Фильтрация
- •2.3. Гистограммы
- •Границы и признаки
- •3. Границы
- •3.1. Оператор Собеля
- •3.2. Оператор Лапласа
- •4. Пирамиды и признаки
- •4.1. Пирамиды
- •Задача классификации для нейронных сетей
- •5. Задача классификации
- •5.1. Классификация изображений и ImageNet
- •5.2. Базовые слои и оптимизация
- •6. Архитектуры
- •6.2. Модели ResNet
- •7. Практическая методология
- •7.1. Что делать если плохо учится?
- •7.2. Аугметация и Псевдо-разметка
- •Задачи переноса стиля и поиска изображений по содержанию
- •9. Стаил Трансфер
- •10.1. Поиск изображений по содержанию
- •10.2. Функции схожести и потерь часть 1
- •10.3. Функции схожести и потерь часть 2
- •10.4. Ранжирование
5.2. Базовые слои и оптимизация
Сверточные слои — применяются в компьютерном зрении, так как не чувствительны к сдвигу и применяются не к каждому каналу по отдельности, а ко всем сразу, что экономит много ресурсов. Получается , что итоговые веса — высота свертки * ширину свертки * глубину входного канала * глубину выходного канала.
Еще одним преимуществом сверточных слоев является то, что их можно применять с зазором, то есть не ко всем кусочкам изображения, а к каждому второму. Это позволяет нам понизить размерность изображения.
Еще один способ понизить размерность изображения - разделить его на области 4*4 и брать из этой области самое высокое значение. Таким образом мы оставляем самые важные значения и выкидываем неважные.
Самая популярная промежуточная активация в компьютерном зрении — ReLU
У нее есть неприятная особенность — если на слое все признаки выдадут 0 или меньше, то активация все признаки приравняет к 0, из-за чего все признаки у следующих слоев автоматически станут равны 0.
Следующим слоем является Dropout, который создает подсети, случайно выключая активации. Выключение активации — приравнивание ее к 0.
Он нужен для регуляризации, то есть когда при реальных условиях сеть ведет себя намного хуже, чем при тестах. Но минус этого слоя — сильное замедление работы сети.
У нас получилась итоговая схема обучения:
5.3. FLOPs & FoV
У нейронных сетей есть определенный набор характеристик:
FLOPs – Floating Point Operations – количество операций, необходимых для прогона модели на одном примере. Этот параметр не прямо зависим со скоростью работы, хоть и сильно коррелирует.
FoV – этот параметр определяет, сколько признаков поучаствовало в формировании признака определенного слоя. При формировании признака слоя участвуют несколько признаков предыдущего слоя. Он помогает лучше понять архитектуру сети и ее работоспособность еще до начала обучения. Например, если мы хотим найти на изображении объект, а FoV конечного слоя нашей сети меньше размера этого объекта, то очень велика вероятность, что сеть не справится с поставленной задачей.
6. Архитектуры
6.1. VGG & BatchNorm
Первая архитектура, которую мы рассмотрим — это VGG & BatchNorm.
Она была представлена в 2014 году и представляет собой просто последовательность сверток, которые заканчиваются несколькими полносвязными слоями. Использовалась активация ReLU и Пулинг maxpool 2x2(понижение разрешения). Причем при понижении разрешения увеличивается количество каналов на наших промежуточных признаках.
У VGG есть много вариаций, например VGG 19 с 19 полновязными слоями.
Этот алгоритм показывал лучшие результаты среди VGG, его параметры занимали более 500 mb, но существенным минусом было время обучения — 3 недели.
6.2. Модели ResNet
Модели ResNet пришли на смену VGG, когда последние достигли пика своих возможностей. Суть этой модели — блоки(или слои), в которых есть несколько последовательно расположенных сверток, и в которых общий выход блока состоит из выхода последней свертки с прибавлением входа блока.
Этот метод позволяет создать сеть с 152 слоями и более устойчива к разным негативным эффектам. Благодаря этим слоям значительно сократилось время обучения сети, что является огромным плюсом ResNet.
6.3. XceptionNet & MobileNet
XceptionNet – быстрая и компактная архитектура сетей.
XceptionNet — суть архитектуры: мы так же используем блоки, но в них изначально увеличивается количество входных каналов с помощью свертки 1х1, после чего делим нашу карту признаков на большое количество более мелких. Получившиеся карты признаков мы используем в некотором количестве сверток 3х3, которые учатся независимо друг от друга, после чего формируем с их помощью 1 большой выход.
Эта архитектура сильно ускорила и сжала сеть.
6.4. MNAS
Мы рассмотрели некоторые архитектуры сетей, но как выбрать, какая из них в вашем случае будет наиболее эффективна. NAS – это автоматический выбор архитектуры сети в зависимости от задачи. Для этого мы обучаем отдельную сеть, которая будет выбирать архитектуру для остальных сетей.
6.5. EfficientNet
Все архитектуры сетей, которые мы рассматривали до этого, были сверточными, но в 2017 появился новый вид архитектуры — трансформеры, который используют для обработки текста. ViT относится именно к этому виду. Его идея заключается в использовании блока attention, который из поступивших значений должен выбрать самый важный признак. Алгоритм: для каждого признака Q и K перемножаются, после чего от получившегося значения берем SoftMaх, у нас получается число в диапазоне 0...1, к которому прибавляется 1. И в итоге V умножается на получившееся число. Далее сравниваются все получившееся значения и выбирается самое большее. Для нашего алгоритма блоки ставятся параллельно.
Минус алгоритма ViT заключается в том, что обучение требует слишком много ресурсов, но в будущем эта архитектура может стать лучше сверточной, так как появилась совсем недавно.