Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Распознавание текста на мемах

5d08ba0cd07942f2ddbf82e5b21ba5e7?s=47 FunCorp
February 08, 2019

Распознавание текста на мемах

5d08ba0cd07942f2ddbf82e5b21ba5e7?s=128

FunCorp

February 08, 2019
Tweet

Transcript

  1. Распознавание текста на мемах Гриша Кузовников, FunCorp 1

  2. FunCorp: цифры и факты • Основана в 2004 году •

    100+ сотрудников • Офисы LA, Лимассол, Москва • iFunny • Мемы и большое коммьюнити с 2011 • Входим в TOP10 развлекательных приложений в США • 50kk установок в США, 570kk просмотров • 350+ серверов 2
  3. План презентации • Описание бизнес-задачи • Два варианта нейронной сети

    для поиска текста на картинках • Обучение модели • Сервис для распознавания текста • Нейронная сеть для проверки качества распознавания • Увеличение количества распознаваемых мемов 3
  4. • Что-то пробовал, когда учился в универе • Coursera —

    Machine Learning (Andrew Ng) • Из интереса читал разные статьи • Подбирал коэффициенты для системы массового обслуживания 4 Что я знал про ML
  5. • Поисковики • Внутренний поиск • Автотегирование и категоризация 5

    Зачем нам извлекать текст
  6. • Извлекает текст • Лучше всего работает с документами •

    Может извлечь текст из любой картинки, но с ошибками 6
  7. Распознаём с помощью Tesseract Запускаем: 7 tesseract img.jpg stdout -l

    eng --oem 1 --psm 3 Результат: 9 mm“ #ifunny
  8. Ещё пример Picture of J. Robert Oppenheimer taken as he

    completed the final design
 of the atomic bomb. (1944) % F. $41"? B /y _ l" _ :iunnV-CG 8
  9. Область с главным текстом 9

  10. Нейронная сеть для поиска главного текста 10

  11. • Не существует готовой системы которая, извлекает текст шутки с

    картинки • Есть готовое решение для распознавания рукописных цифр • Наверное, можно использовать этот же подход для поиска текста? Пробуем 11 Ищу готовое решение
  12. 12 Подготовка • Считаем руками виды мемов — принимаем решение,

    что достаточно извлекать один блок текста с картинки • Для разметки используем Microsoft VoTT • Размечем 1000 шт. контента • Пишем обвязку для чтения датасета и обучения. Модель будет на tensorflow
  13. 13 Первый вариант нейронной сети FC Layers RNN FC Layers

    0/1
  14. 14 Второй вариант нейронной сети 1/0 CONV Layer 1 CONV

    Layer 2 CONV Layer 3 20 40 5 5 5 8 MAX 5 RNN RNN FC Layer img height 1 px … 5
  15. 15 Второй вариант нейронной сети 1/0 CONV Layer 1 CONV

    Layer 2 CONV Layer 3 20 40 5 5 5 8 MAX 5 RNN RNN FC Layer img height 1 px …
  16. 16 Второй вариант нейронной сети 1/0 CONV Layer 1 CONV

    Layer 2 CONV Layer 3 20 40 5 5 5 8 MAX 5 RNN RNN FC Layer img height 1 px …
  17. 17 Второй вариант нейронной сети 1/0 CONV Layer 1 CONV

    Layer 2 CONV Layer 3 20 40 5 5 5 8 MAX 5 RNN RNN FC Layer img height 1 px …
  18. 18 Второй вариант нейронной сети 1/0 CONV Layer 1 CONV

    Layer 2 CONV Layer 3 20 40 5 5 5 8 MAX 5 RNN RNN FC Layer img height 1 px …
  19. 19 Второй вариант нейронной сети 1/0 CONV Layer 1 CONV

    Layer 2 CONV Layer 3 20 40 5 5 5 8 MAX 5 RNN RNN FC Layer img height 1 px …
  20. 20 Результат работы 1 1 0 0 0 0 0

    0 0 0 0 0 0 0 0 0 0 + =
  21. 21 Ошибки 0 0 0 1 1 1 0 0

    0 + = обрезан текст 0 0 1 1 1 1 1 0 0 + =
  22. 22 Итоги первого этапа • Второй вариант нейронной сети работает

    • Есть предположение, что нужно больше размеченных картинок • Качество приходится оценивать вручную
  23. 23 Подбор коэффициентов • Заказываю мощный сервер • Создаю 8

    конфигов и запускаю обучение параллельно • Обучение выполняется пару часов • Руками считаю качество каждого конфига, меняю коэффициенты и запускаю заново
  24. 24 Сервис для извлечения текста • Добавляю в код команду

    listen
  25. 25 Сервис для извлечения текста • Добавляю в код команду

    listen • Сервис 
 
 a. слушает SQS очередь b. скачивает картинки c. распознаёт d. результат кладёт в другую очередь
  26. 26 Сервис для извлечения текста • Добавляю в код команду

    listen • Сервис 
 
 • Делаю сервис частично многопоточным a. слушает SQS очередь b. скачивает картинки c. распознаёт d. результат кладёт в другую очередь
  27. 27 Сервис для извлечения текста • Добавляю в код команду

    listen • Сервис 
 
 • Делаю сервис частично многопоточным • Покрываю код statsd метриками a. слушает SQS очередь b. скачивает картинки c. распознаёт d. результат кладёт в другую очередь
  28. 28 Сервис для извлечения текста • Добавляю в код команду

    listen • Сервис 
 
 • Делаю сервис частично многопоточным • Покрываю код statsd метриками • Пакую в docker контейнер и настраиваю деплой a. слушает SQS очередь b. скачивает картинки c. распознаёт d. результат кладёт в другую очередь
  29. 29 Первый запуск: результаты • Распознаётся 42% картинок с текстом,

    однако часть текстов содержит ошибки, 10% из них содержат ошибки • Периодическое зависание сервиса при многопоточном скачивании картинок — пришлось заменить библиотеку • В целом всё гладко
  30. 30 Проверка качества текста FC RNN Encoder A new scientiiic

    stuoy claims tnat fertiiity is hereditary. If your parents didn’t have any children, chances are vou vvon’t either AA AB AC ABA ABB … ZZZ [0 0 0 1 3 … 0] [1 5 0 1 0 … 1] [0 1 0 0 2 … 0] ~1500 коэффициентов на каждую строку is_en is_pt is_bad
  31. 31 Проверка качества текста FC RNN Encoder A new scientiiic

    stuoy claims tnat fertiiity is hereditary. If your parents didn’t have any children, chances are vou vvon’t either AA AB AC ABA ABB … ZZZ [0 0 0 1 3 … 0] [1 5 0 1 0 … 1] [0 1 0 0 2 … 0] ~1500 коэффициентов на каждую строку is_en is_pt is_bad
  32. 32 Проверка качества текста FC RNN Encoder A new scientiiic

    stuoy claims tnat fertiiity is hereditary. If your parents didn’t have any children, chances are vou vvon’t either AA AB AC ABA ABB … ZZZ [0 0 0 1 3 … 0] [1 5 0 1 0 … 1] [0 1 0 0 2 … 0] ~1500 коэффициентов на каждую строку is_en is_pt is_bad
  33. 33 Проверка качества текста FC RNN Encoder A new scientiiic

    stuoy claims tnat fertiiity is hereditary. If your parents didn’t have any children, chances are vou vvon’t either AA AB AC ABA ABB … ZZZ [0 0 0 1 3 … 0] [1 5 0 1 0 … 1] [0 1 0 0 2 … 0] ~1500 коэффициентов на каждую строку is_en is_pt is_bad
  34. 34 Обучение • Размечаю 3000 распознанных текстов • Снова есть

    проблемы с отнесением текста к той или иной группе • Обучаю на мощном сервере, подбираю коэффициенты • Выбираю лучшую модель
  35. 35 Что получилось • Хорошо распознаёт 30% картинок с текстом

    • Мусора практически нет • Сервис стабильно работает • Пачка картинок обрабатывается в среднем за 1с • Максимум 200 картинок в минуту на одном инстансе
  36. 36 Нужно больше текстов Воронка продаж распознавания мемов total downloaded

    Text regions found Text regions recognized Text check Text ok Меняем местами
  37. • Tesseract возвращает текст и его координаты на картинке •

    Возвращает «коэффициент уверенности» • Рисуем блоки на чёрном фоне, чем выше коэффициент, тем ярче блок 37 Ищу готовое решение
  38. Если блок текста хотя бы частично выделен — берём этот

    блок 38 Отсутствует проблема с обрезанным текстом
  39. 39 Качество работы последнего варианта • Хорошо распознаём 64% картинок

    с текстом (было 30%) • Структура модели точно такая же как и раньше, только на входе уже несколько слоёв, вместо одного
  40. 40 Планы • Увеличить обучающую выборку • Подобрать оптимальные коэффициенты

    модели • Извлекать текст из видео
  41. 41 It will be years before humanity develops a realistic

    robotic humanoid Boston Dynamics: