
- •Актуальность
- •Азы работы с изображениями
- •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. Ранжирование
10.2. Функции схожести и потерь часть 1
Мы разобрались с тем, как будет выглядеть наша система и какие метрики качества нужно использовать, теперь разберемся, как сравнивать признаки друг друга и обучать. В функции схожести и потерь основная цель архитектуры — создать признаки изображения, поэтому мы возьмем архитектуру классификации с обрезанной частью. Цель функции схожести — находить расстояние между описаниями признаков. Для описания признаков чаще всего используют косинусное или евклидово расстояние.(евклидово — разница между признаками, возведенная в квадрат, косинусное — скалярное произведение двух векторов деленное на норму). Дополнительно признаки нормируются на единичную сферу(в евклидовом — всегда, в косинусном — часто).
Мы хотим, чтобы похожие объекты лежали близко друг к другу, а непохожие далеко.
Мы рассмотрим несколько функций, реализующих данный функционал.
Контрастная функция потерь:
Если признаки принадлежат одной и той же категории, то мы их располагаем рядом, если признаки сильно различаются, то мы максимизируем расстояние между ними, если оно меньше заранее выбранного числа m, в противном случае не трогаем.
Триплетная функция потерь похожа на контрастную, но теперь мы располагаем объекты относительно якоря. Здесь так же есть число m, меньше которого расстояние между позитивным и негативным быть не может.
Но у обоих этих функций есть недостаток — они могут стать 0 при выборе правильно работающих примеров, из — за чего модель перестает учиться.
Для этого триплеты делят на 3 категории: сложные, средние и легкие, после чего доучивают сеть на сложных триплетах.
Для разделения триплетов сначала строим признаки для большого батча, после чего для каждого якоря подбираем самый ближний негативный и самый дальний позитивный примеры. На ранних этапах обучения рекомендуется выбирать полусложные теплеты.
10.3. Функции схожести и потерь часть 2
Альтернатива обучения признаков напрямую — ArcFace – софтмакс классификация. Для нее строится сеть, где добавляется слой, переводящий все лица(если нужно распознавать лица) в отдельные классы, после чего softmax присваевает классам в вероятности.
Недостатки метода:
Обучение классификации требует набор данных со специальной разметкой.
Плохо пригоден для больших наборов данных. В этом случае требует специальной реализации из-за ограничения максимальной памяти GPU.
10.4. Ранжирование
Ранее мы размечали базу данных с фотографиями. Но как же производить поиск по базе? Обычный перебор слишком долог при большом наборе данных и для нас не подходит. Для этого используют приближенный поиск.
Рассмотрим самый популярный алгоритм приближенного поиска — Annoy.
У нас есть фото с большим набором точек. Задача — найти ближайшую точку к случайно выбранной. Мы выбираем две случайные точки, проводим линию между ними и разделяем фото на 2 области. Продолжаем процедуру до критерия остановки — недостатка точек для дальнейшего разделения.
В итоге у нас получилось бинарное дерево, во которому мы и будем искать соседей!