SlideShare a Scribd company logo
1 of 81
Опыт моделеварения от команды
ComputerVision Mail.ru
Тянтов Эдуард
edges object parts (combination of edges) object models
Computer Vision
Решаем задачи компьютерного зрения в Mail.Ru
– Облако
– Vision b2b
– Почта
– …
Проекты
Сервис для хранения и обработки фотографий
– 60 миллиардов
– «Умная» обработка
Cases: Cloud
Face & Landmark
Recognition
Cases: Cloud
Cases: OCR at Mail
Cases: Person Detection
1. Постановка задачи
2. Данные
3. Обучение
4. Inference
План
Постановка задачи
Как поставишь – так и поплывет
Постановка
В AI-продуктах
– Нельзя описать словами, что нужно
– Не формочка на сайте
Особенности постановки
Задача
Различать людей по лицу
Вроде все понятно, скорее делать?
Пример: Face Recognition
Проблемы
– Разные национальности
– Рисованные персонажи
– Дети
– На чем нельзя фолзить?
– …
Пример: Face Recognition
– Общаться с продактом на данных
• в идеале – тест-сет
– Постановка – совместная работа ML + Product
• Иначе => куча итераций переделок
Постановка AI-продукта
Постановка задачи – ваша ответственность,
пока вы не научите продакта
AI-продукты
Данные
– Data is fuel
– Clean Data!
Что с данными ?
Data + Model + Clustering = Clean Data
How to make it clean
Face
Detection Pick
largest
FR+
Clustering
Cleaning algorithm
1.Face detection2.Face recognition -> embeddings3.Hierarchical clustering algorithm4.Pick the largest cluster as a personIterate after each model improvement
HowTo: clean
Class 5
Поиск по картинке
– Набрали классы по косвенным признакам
– Семантически похожи
Class 1 Class 2
Class 3
HowTo: merge
Class 4
...
Плохое качество embedding’а
из-за дублей
HowTo: merge
Search NN
Task Embedding
Metric
Learning
200k classses
…
...
Clustering
Dataset
HowTo: merge
Trained NN
…
Merging
Hierarchical clustering: CLink
– Задаем порог дистанции
– Сферические кластера
– O(n2)
Clustering Algorithms
Loop: model Data
Основное
– Неограниченные данные
– Но надо пилить
Generators
Generator: OCR
PIL – самый удобный для OCR
+ Шрифты, цвета
- CPU intensive (3-5s per batch)
Generator: PIL
Generator: товары
Blender
– Opensource
– Отличное PythonAPI
– Rendering: Ray Tracing
– Модели:
– $$
– или сgpeers.com =)
Generator: Blender
Обучение
1. Metric Learning
Обучение: план
Goal: discriminative embeddings space
– Naïve way: Softmax
too close
Metric learning
Стягивает точки к центру кластера
Metric learning: center loss
||X||= 1
||W||= 1
b=0
Angular Softmax
To enforce
larger angle
Angular Softmax
Variations
– CosFace
– ArcFace (SOTA)
Angular Softmax: better
CNN 128 floats
Embedding
Softmax Cross
Entropy
Metric learning: Arcface
20 13
Classify
10
9
Scores
20
– ArcFace > Center loss, Triplet, …
– ArcFace легко интегрируется с Softmax
– Улучшает классификацию
Metric learning: bottom line
1. Metric Learning
2. Transfer learning
Обучение: план
Image search
– Transfer learning from OpenImages
Query Results
Transfer learning: example
Search NN
Task Embedding
Arcface
200k classses
…
– Metric learning from OpenImages-pretrained
Transfer learning example
В процессе обучения модель забывает классы OI
Query Results
Transfer learning: example
Search NN
Task Embedding
Frozen OI NN
OI Embedding
Embedding
Arcface
200k classses
…
…
…
OI class scores
BCE
Transfer with Knowledge distillation
Transfer learning: example
Query Results
Результаты
– Сеть учит семантический embedding
– Не забывает классы OpenImages
Model mAP
Arcface 92.8
+Knowledge Distil 93.8
(+1%)
Transfer with Knowledge distillation
1. Metric Learning
2. Transfer learning
3. Auxiliary heads
Обучение: план
Доп. головы дают доп. сигнал сети
CNN
Embedding
… Person
… Age
… Eye color
Auxiliary heads
Детект людей
Доп. голова:
голова
AP: 73.5 -> 74%
Auxiliary heads: example
Detection
Penguins
Can
FlyRecognition
Pengulns
OCR: recognition
Pengulns -> Penguins ?
Как встроить знания про N-граммы и слова языка в модель ?
OCR: recognition
Byte Pair Encoding
– Алгоритм компрессии
– Частые последовательности заменяются на токены
Byte Pair Encoding
aaabdaaabac
Byte Pair Encoding
aaabdaaabac
Byte Pair Encoding
aaabdaaabac
ZabdZabac Z=aa
Byte Pair Encoding
aaabdaaabac
ZabdZabac Z=aa
Byte Pair Encoding
aaabdaaabac
ZabdZabac
ZYdZYac
Z=aa
Y=ab
Byte Pair Encoding
aaabdaaabac
ZabdZabac
ZYdZYac
Z=aa
Y=ab
Byte Pair Encoding
aaabdaaabac
ZabdZabac
ZYdZYac
XdXac
Статистические зависимости символов
Z=aa
Y=ab
X=ZY
Pengulns
Hidden states
RNNFully CNN
CTC
RNN2 + attention
Hidden states
predict BPE
l -> i
WER: -0.25%
Penguins
OCR: доп. голова
Peng_ul_ns
Pen_gu_ins
≠
– Доп. головы полезны для вашего здоровья
– Выкидываются при inference
Auxiliary heads: bottom line
1. Metric Learning
2. Transfer learning
3. Auxiliary heads
4. FP16
Обучение: план
FP16 Training: gradients
FP32: распределение магнитуды градиентов при обучении SSD (Nvidia)
FP16 Training: gradients
FP16: Mixed precision training
– Кастомная сборка Pytorch с Apex
– Использовать Automatic Mixed Precision
• FP16_Optimizer – больше контроля, гемора и только Adam
…
FP16 Training
0 100 200 300 400 500 600
Inference
Training
Tesla T4, Resnet50, 64 batch
FP16+Apex FP16 FP32
Результаты
– Качество обучения не страдает
– Ускорение: 2x
– 20% от Apex на обучении
ms
FP16 Training
Inference
Options:
– ONNX -> Caffe2
– ONNX -> TensorRT
– Now: Pytorch C++
We use PyTorch
– How to deploy ?
Frameworks
Это боль!
– Отставание версий от pytorch
– Только nearest_neighbor interpolation (upsampling)
– Фиксированный батч
ONNX + Caffe2
– До 100% ускорения на FP16 vs Pytorch
0
0.5
1
1.5
2
2.5
3
3.5
Pytorch TensorRT
Resnet 101, batch=128 (Tesla T4)
FP32 FP16
ms/msg
TensorRT
– Еще больше проблем, чем c Caffe2
– Для Turing карт стоит того
TensorRT
- Бывают баги с производительностью
- Не хватает документации
+ Идентичная работа питону
Pytorch C++ / TorchScript
Recap
– Постановка
– На данных, тест-сет, работаем вместе с продактом
Recap
– Постановка
– На данных, тест-сет, работаем вместе с продактом
– Данные
– Чистим кластеризацией (CLink)
Recap
– Постановка
– На данных, тест-сет, работаем вместе с продактом
– Данные
– Чистим кластеризацией (CLink)
– Обучение
– Metric learning: Arcface
– Knowledge distillation for Transfer learning
– Multi-head
– FP16 Apex
Recap
– Постановка
– На данных, тест-сет, работаем вместе с продактом
– Данные
– Чистим кластеризацией (CLink)
– Обучение
– Metric learning: Arcface
– Knowledge distillation for Transfer learning
– Multi-head
– FP16 Apex
– Inference
– Pytorch C++
Recap
Вопросы

More Related Content

Similar to Опыт моделеварения от команды ComputerVision Mail.ru

Параллельные алгоритмы IBM Research для решения задач обхода и построения кра...
Параллельные алгоритмы IBM Research для решения задач обхода и построения кра...Параллельные алгоритмы IBM Research для решения задач обхода и построения кра...
Параллельные алгоритмы IBM Research для решения задач обхода и построения кра...
Alexander Pozdneev
 
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
Provectus
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
it-people
 
BigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationBigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: Personalization
Anton Gorokhov
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
Dmitry Buzdin
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
Michael Karpov
 
"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и...
"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и..."Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и...
"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и...
it-people
 
лекция1
лекция1лекция1
лекция1
shagore
 
AzovDevMeetup 2016 | Машинное обучение, параллельные и распределённые вычисле...
AzovDevMeetup 2016 | Машинное обучение, параллельные и распределённые вычисле...AzovDevMeetup 2016 | Машинное обучение, параллельные и распределённые вычисле...
AzovDevMeetup 2016 | Машинное обучение, параллельные и распределённые вычисле...
JSC “Arcadia Inc”
 

Similar to Опыт моделеварения от команды ComputerVision Mail.ru (20)

Параллельные алгоритмы IBM Research для решения задач обхода и построения кра...
Параллельные алгоритмы IBM Research для решения задач обхода и построения кра...Параллельные алгоритмы IBM Research для решения задач обхода и построения кра...
Параллельные алгоритмы IBM Research для решения задач обхода и построения кра...
 
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data
 
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиковДмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
 
Deep c slides_oct2011_rus
Deep c slides_oct2011_rusDeep c slides_oct2011_rus
Deep c slides_oct2011_rus
 
BigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationBigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: Personalization
 
Efficiency vvv
Efficiency vvvEfficiency vvv
Efficiency vvv
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
CUDA & CAFFE
CUDA & CAFFE CUDA & CAFFE
CUDA & CAFFE
 
Выявление неполадок в Java приложениях
Выявление неполадок в Java приложенияхВыявление неполадок в Java приложениях
Выявление неполадок в Java приложениях
 
"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и...
"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и..."Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и...
"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и...
 
лекция1
лекция1лекция1
лекция1
 
Машинное обучение на платформе .NET
Машинное обучение на платформе .NETМашинное обучение на платформе .NET
Машинное обучение на платформе .NET
 
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
 
AzovDevMeetup 2016 | Машинное обучение, параллельные и распределённые вычисле...
AzovDevMeetup 2016 | Машинное обучение, параллельные и распределённые вычисле...AzovDevMeetup 2016 | Машинное обучение, параллельные и распределённые вычисле...
AzovDevMeetup 2016 | Машинное обучение, параллельные и распределённые вычисле...
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Microsoft Visual Studio 2010
Microsoft Visual Studio 2010
 
ML on the Edge - Highload++ Siberia 2019
ML on the Edge - Highload++ Siberia 2019ML on the Edge - Highload++ Siberia 2019
ML on the Edge - Highload++ Siberia 2019
 

More from Eduard Tyantov

Эксплуатация ML в Почте Mail.ru
Эксплуатация ML в Почте Mail.ruЭксплуатация ML в Почте Mail.ru
Эксплуатация ML в Почте Mail.ru
Eduard Tyantov
 
Саморазвитие: как я не усидел на двух стульях и нашел третий
Саморазвитие: как я не усидел на двух стульях и нашел третийСаморазвитие: как я не усидел на двух стульях и нашел третий
Саморазвитие: как я не усидел на двух стульях и нашел третий
Eduard Tyantov
 
Project Management 2.0: AI Transformation
Project Management 2.0: AI TransformationProject Management 2.0: AI Transformation
Project Management 2.0: AI Transformation
Eduard Tyantov
 

More from Eduard Tyantov (9)

Эксплуатация ML в Почте Mail.ru
Эксплуатация ML в Почте Mail.ruЭксплуатация ML в Почте Mail.ru
Эксплуатация ML в Почте Mail.ru
 
Саморазвитие: как я не усидел на двух стульях и нашел третий
Саморазвитие: как я не усидел на двух стульях и нашел третийСаморазвитие: как я не усидел на двух стульях и нашел третий
Саморазвитие: как я не усидел на двух стульях и нашел третий
 
Project Management 2.0: AI Transformation
Project Management 2.0: AI TransformationProject Management 2.0: AI Transformation
Project Management 2.0: AI Transformation
 
Kaggle Google Landmark recognition
Kaggle Google Landmark recognitionKaggle Google Landmark recognition
Kaggle Google Landmark recognition
 
Face Recognition: From Scratch To Hatch
Face Recognition: From Scratch To HatchFace Recognition: From Scratch To Hatch
Face Recognition: From Scratch To Hatch
 
Deep Learning: Advances Of The Last Year
Deep Learning: Advances Of The Last Year Deep Learning: Advances Of The Last Year
Deep Learning: Advances Of The Last Year
 
Kaggle review Planet: Understanding the Amazon from Space
Kaggle reviewPlanet: Understanding the Amazon from SpaceKaggle reviewPlanet: Understanding the Amazon from Space
Kaggle review Planet: Understanding the Amazon from Space
 
Ultrasound nerve segmentation, kaggle review
Ultrasound nerve segmentation, kaggle reviewUltrasound nerve segmentation, kaggle review
Ultrasound nerve segmentation, kaggle review
 
Artisto App, Highload 2016
Artisto App, Highload 2016Artisto App, Highload 2016
Artisto App, Highload 2016
 

Опыт моделеварения от команды ComputerVision Mail.ru

Editor's Notes

  1. b2b + столовка чтобы балансить воркеров на кассе
  2. сократить t2m & улучшить качество (interchangeable) когда я думал
  3. основа всего
  4. я хочу чтобы было красиво не привыкли, нет навыка такого
  5. получили интересную задачу, вы радуетесь, звоните маме либо сразу проясните все тонкости, либо в конце и будете переделывать
  6. сделать задачи, а потом выясниться фолз: лицо маладенца vs локоть inclusive
  7. в тест-сет может заложить все то что нужно продакту в процессе работы задача уточняется на edge cases
  8. наша с вами задача обучать, если не мы, то кто чтобы они не учились на вас
  9. а датасеты шумные
  10. их можно почистить
  11. то же самое можно делать для объединения похожих кластеров
  12. TODO: оч мелкие картинки. Надо рассмотреть эти картинки. Возможно спилить слайд
  13. порог один
  14. какая из этих картинок авто-сгенерирована ? пила не хватит, если не приглядитесь то не поймете, что это не реальные данные
  15. 3d моделирование
  16. Про блендер: 1) OpenSource 2) Отличное PythonAPI, доступ почти до всего 3) Два встроенных рендера (движка): 1. встройнный - говно качество, очень быстрый, не работает с популярными форматами моделей (fbx) 2. Cycles - рейтрейс, работает с fbx, довольно медленно, но на нескольких GPU за несколько дней можно нарендерить датасет 4) Скоро будет апдейт - будет новый рендер Eevee, который будет работать качественно, быстро и без рейтрейса, при этом работать с fbx Модели 1) Есть халявные - как правило валяются везде по отельности (типа, там кто-то сделал бутылку с колой, тут на другом сайте кто-то коробку с печеньем, все в разных форматах собирать заколебешься) 2) Есть дорогие - часто поставляются целыми паками (куча объектов в одном паке). Качество моделей намного выше 3) Еще, модели могут требовать ручную обработку, чтобы их использовать для синтетической даты Ручная обработка моделей 1) Модели могу неправильно импортиться, например была проблема, что все прозрачные материалы были тупо черными 2) Несколько объектов могут быть склеены в один, приходится их расклеивать. Автоматически это сделать тяжеловато
  17. на примере распознавания достопримечательностей
  18. То что заходит лучше. На примере FR -В обычном софтмаксе у нас точки разделены плоскостью, в случае двух классов - на основе двух векторов весов.  -Если сделать норму ембеддингов 1 то мы получим картинку справа. Точки лягут на окружность (т.е. на сферу в n-мерном случае). Тут мы видим, что за разделение векторов отвечает угол между векторами. И будем оптимизировать угол между.
  19. Если мы просто перейдем к оптимизации угла, то задача по факту не изменится, т.к. мы ее просто переформулировали в других терминах. Наша цель сделать кластера более компактными. -чтобы достичь этого нужно дополнительно потребовать большего угла между классами.  -Это достигается за счет введение параметра m  который управляет разницей косинусов углов.
  20. вместо линейного слоя
  21. Мы делали поиск похожих картинок
  22. притрейн с OI
  23. Catastrophic forgetting: семантически верно, но расово неверно
  24. не забывай свои корни
  25. доминируют выдачу
  26. crowd human – часто в датасетах есть и связанная разметка ( голова) помимо тушки
  27. byte pair encoding - compression algorithm (that iteratively replaces the most frequent pair of characters in a sequence with a single, unused byte.)
  28. База -> потом хотим учесть слова, это можно сделать если предсказывать доп голову с ними градиент сильнее от bpe через l, гораздо сильнее чем от одной буквы!
  29. С инференсом все понятно, В пайторче half + scale loss в районе нуля FP_optimizer работает только с Adam, да и то только с тем Adam, который есть в Apex (да, у них свой Adam в репозитории, который имеет совершенно другой интерфейс, чем пайторчевый) FP16_opt – больше контроля, но сложнее (just scale loss 128 and you have to use .half()). AMP работает через black/whitelist, которые он проверяет на каждый call и принимает решение есть ли профит от cast в fp16. Реализовано через monkey_patch всех операторов.
  30. У нас куча фреймворков, но в деплое, но для обучения используем пайторч, самый насущный вопрос
  31. переучивать модели, заменять слои docker_image под модель чтобы отконвертить
  32. мы потестили
  33. но сука быстрый ex: лонг инты не поддерживаются, reshape, transpose
  34. не хватает документации: надо смотреть доку питона и .h файлы resnet50 в 2 раза медленее чем на питоне – issue (проблема с линковой cudnn) сабмитили чинтале issue если один раз это пройти, то все ок внутри jit по сути питон
  35. финалочка: надеюсь попробуете эти трюки и это улучшит ваше прод. результаты и скорость