itmo_conspects

Лекция 7. Методы оценки положения объектов в пространстве

Карта глубины

Карта глубины - изображение, в котором для каждого пикселя вместо цвета хранится его расстояние до камеры

Для того, чтобы построить карту глубины, используют:

Если такого дорогого оборудования нет, то используют нейросети. Применяют несколько подходов:

Рассмотрим модели, которые распознают по одному изображению:

Карты глубины используются для:

Также карты глубины используются для разделения объекта на переднем фоне и задний фон, определив маску прозрачности (такой процесс извлечения объекта называется альфа-маттингом, Alpha matting)

Чтобы сделать альфа-маттинг, используют алгоритмы из библиотек Pymatting, RemBg, OpenCV

Для этого также можно использовать нейросеть MODNet, которая в реальном времени может разделить объект (например, человека) от фона, что можно применять, например, в конференциях в Zoom

Такие модели принимают на вход изображение и маску, в которой выделен объект, или тернарную маску, где указаны объект, задний фон и места в изображении, которые не определены

Поиск похожих изображений

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

Как же тогда сравнивать изображения:

Нейросети, которые ищут похожие изображения, обучают несколькими способами:

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

Распознавание лиц

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

Скалярное произведение двух нормализованных векторов лиц одного и того же человека должно быть как можно ближе к 1

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

В обучении ест два подхода:

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

    Здесь используют функции потерь:

    • Contrastive Loss (Контрастная потеря)

      Основная цель - минимизировать расстояние между векторами похожих изображений и максимизировать его для разных

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

    • Triplet Loss (Триплетная потеря)

      Этот метод стал известен благодаря работе FaceNet от Google. Вместо пары он использует триплет, состоящий из якоря (базовое изображение человека), положительного изображения (другое изображение того же человека) и негативного изображения (другого человека)

      Цель обучения: сделать так, чтобы эмбеддинг якоря был значительно ближе к положительную, чем к негативному изображения, на заданную величину отступа $\alpha$

      Это позволяет не просто отдалять классы, а создавать четкую иерархию сходства. Функция выглядит так: $L = \max(d(a, p) - d(a, n) + \alpha, 0)$, где $a$ - якорь, $p$ - положительное, $n$ - негативное изображение, $d$ - функция расстояния

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

  2. Классификационные функции отступа (margin-функции) - модифицировать функцию Softmax, чтобы она принудительно “раздвигала” разные классы и сильнее “сжимала” схожие

    • Softmax Loss

      У базовой функции Softmax есть два серьёзных недостатка:

      • Она не оптимизирует метрики напрямую: Минимизируя ошибку классификации, он не гарантирует, что похожие лица будут близки в пространстве признаков.

      • Она не гарантирует “разрывов” между классами: Качество разделения может быть разным в зависимости от данных.

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

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

    • SphereFace (или A-Softmax)

      Работает так: функция вводит угловой отступ $m$, на который нужно умножить угол между вектором признака и вектором весов класса: $\cos(\theta \cdot m)$

    • CosFace (Large Margin Cosine Loss) - такой метод уже напрямую работает с косинусом угла, делая его основой для сравнения лиц

      Работает так: добавляется косинусный отступ $m$ к целевому значению косинуса, напрямую увеличивая требуемое сходство для правильного класса: $L(y_i) = -\log \frac{e^{s (\cos \theta_{y_i} - m)}}{e^{s (\cos \theta_{y_i} - m)} + \sum_{j \neq y_i} e^{s \cos \theta_j}}$, где $s$ - масштабирующий коэффициент, а $m$ - гиперпараметр отступа

    • ArcFace (Additive Angular Margin Loss)

      На сегодняшний день ArcFace считается одним из самых эффективных и популярных решений в задачах распознавания лиц

      Ключевое отличие: если CosFace штрафует косинус угла, то ArcFace применяет аддитивный угловой отступ $m$, который вычитается непосредственно из угла $\theta$ между признаком и вектором весов: $\cos(\theta + m)$

      Получаем: $L(y_i) = -\log \frac{e^{s \cos (\theta_{y_i} + m)}}{e^{s \cos (\theta_{y_i} + m)} + \sum_{j \neq y_i} e^{s \cos \theta_j}}$

      Это лучше, потому что работая напрямую с углом, ArcFace обеспечивает более четкое разделение классов на гиперсфере и часто показывает лучшие результаты, чем CosFace и SphereFace в большинстве реальных сценариев

    • AirFace (Additive Angular Margin Loss)

      Аналогичен ArcFace, но используется $\frac{\pi - 2 \theta}{\pi}$ вместо косинуса угла $\theta$

      Получаем: $L(y_i) = -\log \frac{e^{s \frac{\pi - 2 (\theta_{y_i} + m)}{\pi}}}{e^{s \frac{\pi - 2 (\theta_{y_i} + m)}{\pi}} + \sum_{j \neq y_i} e^{s \frac{\pi - 2 \theta_{j}}{\pi}}}$

Для современных решений оптимальным выбором будет ArcFace - такой метод обеспечивает высокое качество и является отраслевым стандартом. Для обучения и экспериментов, особенно когда датасет небольшой, стоит начать с Triplet Loss. Простота реализации подхода поможет быстро получить работающий прототип