# Co-Mining: Deep Face Recognition with Noisy Labels
Достаточно частая проблема датасетов в том, что они плохо чищены. Могут возникать следующие проблемы

* Некоторые фотки с перепутанными айдишниками
* Есть мусорные фотки, которые не принадлежат ни к какому айдишнику, но с меткой
* При объединении датасетов айдишники дублируются
В работе [Co-Mining: Deep Face Recognition with Noisy Labels](http://openaccess.thecvf.com/content_ICCV_2019/html/Wang_Co-Mining_Deep_Face_Recognition_With_Noisy_Labels_ICCV_2019_paper.html) рассматриваются первые две проблемы.
## Idea
Когда нейронка обучается, она сначала выучивает легкие, правильно размеченные примеры, а только потом выучивает сложные и плохо размеченные. Что если обучать сетку на чистых и хорошо размеченных примерах? (а что произойдет с хард кейсами?)
Ок, гипотеза, что если мы обучаемся на примерах с чистой разметкой, то это не угробит модель. Если обучаться на грязной разметке, то это сделает только хуже.
## Bad cases detection
У вас есть нейронка (пока одна). В начале обучения она чуть выучила примеров и больше всего тупит на плохой разметке, пытаясь заассайнить ей "неправильную метку". Нам надо сделать так, чтобы это поведение сохранялось.
Самый простой способ это сделать, это не обучать на примерах с маленьким лоссом. Однако. Тогда мы делаем биас на то, как учится сеть и усугубляем ее ошибки. Нужно все-таки как-то смягчить проблему биаса на свои ошибки. Почему бы не добавить вторую сеть, которая бы говорила, какие примеры хорошие для обучения, а какие плохие. Ситуация симметрична, первая сеть тоже может выдавать набор хороших плохих примеров для второй сети.
На этой идее строится весь предложенный авторами подход.
## Method

* В обучении есть две нейронки
* Подается одинаковый батч для каждой сети
* Сеть 1 и 2 делят батч на хорошие ($1-r\%$) и плохие примеры ($r\%$)
* Из обучения 1 выкидываются те, которые были признаны плохими 2. И наоборот
* Для примеров которые обе сети признали хорошими, меняется лосс (baseline probability уменьшается). На них градиенты будут сильнее.
* Для примеров нe из пересечения считается обычный ArcFace
Ниже алгоритм и лоссы более формально из статьи.




## Experiments
Для начала CASIA, легкий датасет и легкие бенчмарки, чтобы проверить работоспособность и идею. Разметку они сделали хорошей вручную.
* NLD -- их метод с детекции по лоссу
* HCCFE -- обмен примерами
* CFR -- увеличение важности хороших примеров

Интересные они графики приводят для оценки качества разметки (Further, we
use the SEResNet100-IR model pre-trained on MS1Mdeepglint)


### More complicated datasets
