1 of 56

Metric learning

Технологии компьютерного зрения

2 of 56

Разбор ДЗ

  • ImageFolder
  • Для pretrained моделей используем mean & std от imageNet
  • min_y, min_x = min(min_y, img.shape[1]), min(min_x, img.shape[2])
  • Accuracy
  • Checkpoints
  • Дисбаланс != low accuracy

3 of 56

Модели и данные

  1. Мало классов(1K), много данных (1000K Image Net)
  2. Классификация

  • Много классов(100K) мало данных на класс (10 Face recognition)
  • Metric learning

  • Много - данных (10M) нет разметки
  • Unsupervised learning

  • Есть классы где очень мало данных Поиск аномалий (выбросов/новизны)

4 of 56

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

Задачи

  • Верификация
  • Идентификация / Поиск (watch list)
  • Извлечение атрибутов (пол, возраст и.т.п.)

Сценарии использования

  • Контроль доступа
  • Розыск
  • Соцсети
  • Реклама

...

5 of 56

Наивный подход

#1 Иванов И.И.

CNN

Linear ?

  • Огромный размер
  • Количество выходов меняется
  • Нет данных для обучения

~20М

Номер класса объекта

6 of 56

Понижение размерности

CNN

Linear 256

вектор признак

(embedding)

embedding (128/256/512)

image ( 224 x 224 = 50176)

classifier

7 of 56

Фоторобот == понижение размерности

Hair

5

Eyes

12

Nose

66

Mouth

3

Jaws

17

привет автоэнкодер

8 of 56

Сравнение embedding

Hair

5

Eyes

12

Nose

66

Mouth

3

Jaws

17

Hair

7

Eyes

11

Nose

66

Mouth

5

Jaws

17

distance(A,B)

9 of 56

От классификации к кластеризации

CNN

K-means, DBScan

KNN

10 of 56

Cosine similarity

Косинусная близость [-1 .. 1]

Скалярное

произведение

def.

или

Норма/длина

def.

11 of 56

Нормализация -> проекция на гиперсферу

Если нормировать вектора так, чтобы их длины были равны 1-це, то все точки будут лежать на сфере радиусом 1, а косинусное расстояние будет равно скалярному произведению (т.к. |A||B| == 1)

12 of 56

Как отрезать хвост в Pytorch

embedding size

13 of 56

Сиамские сети (Siamese network)

Одна архитектура, параметры и веса совпадают

14 of 56

Contrastive Losses

Softmax

zi - anchor,

zj - positive,

zk - negative (k != i, k!= j)

Считается на наборе примеров:

15 of 56

CosineEmbeddingLoss

16 of 56

Идентификация. Постановка задачи

F

Target

Imposter

>= d

< d

F

порог

F (x,y) -> [0,1]

Для косинусной близости:

17 of 56

Triplet Loss

18 of 56

Triplet Loss in Pytorch

19 of 56

Triplet mining. Проблема.

N фотографий позволят составить N3 троек

  1. Часть из них будет не валидна, если две фотографии из трех не будут соответствовать одному и тому же объекту.
  2. Часть валидных троек не поможет обучению, если расстояние до негативного элемента будет больше d(a,p) + margin так как лосс по таким элементам будет нулевым

a – anchor, p - positive sample

  • нерационально расходуем ресурсы
  • уменьшаем лосс от сложных троек, так как делим на размер batch

20 of 56

Triplet mining

Offline triplet mining

Собрать все сложные тройки заранее и сформировать датасет из троек

  • дополнительный forward pass по всему датасету
  • Который надо периодически повторять по мере обучения сети

Online Triplet Mining

  • Формируем случайный batch*
  • Получаем набор embedding
  • Считаем матрицу попарных расстояний
  • Маскируем невалидные пары
  • Находим сложные тройки
  • Считаем лосс только по ним

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

21 of 56

ArcFace

Cross entropy loss =

si = Wix = ||Wi|| ||x|| cos(𝜃i)

1.Можем заменить логиты на

так как

2. Если нормировать Wi и x то

si = cos(𝜃i)

где 𝜃i угол между вектором весов и эмбеддингом

x = embedding

3. Заменив si на cos(𝜃i) в CE получим

4. Добавим margin к углу

22 of 56

ArcFace

2018 ArcFace: Additive Angular Margin Loss for Deep Face Recognition

Если модель возвращает эмбеддинг то слой классификатора добавляют в объект лосс-а и его он тоже учиться

23 of 56

Классификационные функции потерь

cos(𝜃+m)

cos(𝜃)-m

cos(𝜃*m)

cos(𝜃)

logit=

combined

24 of 56

Frameworks

PML (Pytorch Metric Learning)

OML (Open Metric Learning)

25 of 56

PML demo

26 of 56

Metrics

MI

AMI

(independent of cluster count)

NMI

Normalized MI

Precision & Recall

27 of 56

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

28 of 56

Идентификация. Постановка задачи

F

Target

Imposter

>= d

< d

F

порог

F (x,y) -> [0,1]

Для косинусной близости:

29 of 56

Метрики

  • FRR (False Rejection Rate) — доля неправильно отклонёных target(genuine)-попыток.
  • FAR (False Acceptance Rate) — доля неправильно принятых imposter-попыток.

порог

Equal Error Rate

FRR = FN / Target_count

FAR = FP / Imposter_count

30 of 56

Метрики

DET - detection error trade-off curve

(КОО - кривая компромиссного определения) ошибки

31 of 56

Face Recognition Vendor Test

the Face Recognition Vendor Test (FRVT) competition of the U.S. National Institute of Standards and Technology of the US Department of Commerce (NIST)

FNMR

FMR

FNMR (false non-match rate) is the proportion of mated comparisons below a threshold

FMR (false non-match rate) is the proportion of impostor comparisons at or above that threshold

32 of 56

Датасеты

cooperative

33 of 56

Датасеты

Ferret (1995 -2000) 14000/1200 + 2Y

https://en.wikipedia.org/wiki/FERET_database

Labeled Faces in the Wild знаменитости 12K

http://vis-www.cs.umass.edu/lfw/

MSCeleb

https://megapixels.cc/msceleb/

MegaFace (2017)

http://megaface.cs.washington.edu/

34 of 56

Face analysis in the wild using synthetic data alone

35 of 56

Предобработка

36 of 56

1.Обнаружение лиц (face detection)

HOG — Histograms of Oriented Gradients.

37 of 56

Выравнивание Face Alignment

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

38 of 56

Нахождение ключевых точек (facial landmark detection)

39 of 56

Аффинные преобразования

Отображение плоскости или пространства в себя, при котором параллельные прямые переходят в параллельные прямые, пересекающиеся — в пересекающиеся, скрещивающиеся — в скрещивающиеся.

M =

40 of 56

2.Предобработка

Выравнивание

  • Нашли ключевые точки
  • Преобразовали изображение так чтобы на всех изображения они оказались на одном месте

Нормализация

  • Вычитаем среднее
  • Делим на стандартное отклонение

41 of 56

MTCNN (Multi Task CNN)

Loss

+

𝛼land

𝛼land

𝛼det

+

regression

classification

(binary cross entropy)

42 of 56

Facenet-pytorch

M =

кроме bounding box и ключевых точек, можно предсказывать еще и коэффициенты матрицы аффинных преобразований

43 of 56

MTCNN example

44 of 56

Схема идентификации по лицу

Извлечение признаков (feature extraction)

поиск

Предобработка

embedding

Сжатие

embeddings

Jeff Bezos

Not found

someone else

Нормализация

Выравнивание

Поиск ключевых точек (landmarks)

Face detector

локализация

45 of 56

Поиск

HNSW Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs

https://github.com/nmslib/nmslib

Faiss is a library for efficient similarity search and clustering of dense vectors.

KNN ->ANN (Approximate Neighbor Search)

46 of 56

HNSW (Hierarchical Navigable Small World)

  • Строится индекс, определяющий структуру графа.
  • На верхнем уровне происходит жадный поиск ближайшего элемента среди соседей входной вершины
  • Если такой сосед найден, то шаг два повторяется, только для найденной вершины с минимальным расстоянием
  • Если все соседи дальше текущего то происходит спуск на следующий уровень.

Hierarchical Navigable Small Worlds (HNSW)

47 of 56

https://medium.com/@slavahead/list/similarity-search-598d963ad35e

48 of 56

Демонстрация

49 of 56

ДЗ

Обучить модель для распознавания лиц

50 of 56

  • DET FAR, FAR
  • Почему нельзя считать accuracy
  • Решение через классификацию (что если классов много)
  • np_im = np.array(img)
  • np_im = np_im[..., np.newaxis] # add channal dim
  • np_im = np.repeat(np_im, 3, axis=2) # copy data into this dim

51 of 56

Дополнительные материалы

52 of 56

TPE (Triplet Probabilistic Embedding)

Расстояние Sw считается при помощи матрицы весов W. Веса подбираются методом градиентного спуска

Consider a triplett:= (vi,vj,vk), where vi(anchor) and vj(positive) are from the same class, but vk(neg-ative) belongs to a different class.

53 of 56

Samplers

https://pytorch.org/docs/stable/data.html#torch.utils.data.Sampler

54 of 56

Сравнение/кластеризация : Loss функция

55 of 56

Нахождение ключевых точек (facial landmark detection)

Преобразование изображения к нормализованному виду можно осуществить при помощи аффинных преобразований:

  • масштабирование,
  • сдвиг,
  • поворот.

56 of 56

Метрики

DET - detection error trade-off curve

(КОО - кривая компромиссного определения) ошибки