Как стать автором
Обновить

История победы на международном соревновании по распознаванию документов команды компании SmartEngines

Время на прочтение11 мин
Количество просмотров10K
Всего голосов 32: ↑32 и ↓0+32
Комментарии18

Комментарии 18

Передайте свидетельство вашей сети и покажите её ответ.


Сетка полностью убрала рамку, поскольку рамка мало похожа на рукопись или печатный текст =). Есть некоторые артефакты при бинаризации 7-ки в «2017» на второй строке — но они есть и в оригинальном изображнении.
А можно где нибудь поиграться, сканы поскармливать? :)
Организаторы соревнования вместе с оригинальной статьей планировали выложить ещё и некоторые решения, насколько я знаю. Думаю, что можно будет взять оттуда и от души наиграться =)
А сколько по времени занимало обучение сети?
Это во многом зависит от разных факторов: каким образом менять скорость обучения, какие раздутия применять, как часто проверять качество на валидационной выборке и т.д. Под конец соревнования на одном Titan X, со всеми раздутиями и без отписывания результатов на валидационной выборке по мере обучения сети время обучения составляло ~ 12 часов. Вечером поставил учиться, утром пришёл и смотришь чему научилась сетка.
А разве работа с данными не происходит на ЦПУ? Как она может влиять на обучение то?
Работа с данными в большей степени происходит на cpu. Именно поэтому, при большом числе раздутий, применяемых к данным, подающимся на обучение нейронной сети, может возникать ситуация, когда предыдущий минибатч уже использовался в обучении, а новый ещё не готов. В такой ситуации gpu простаивает, сетка не учится, время обучения сети увеличивается.
НЛО прилетело и опубликовало эту надпись здесь
Чудеса прям, только как файнридером начнёшь распознавать, так он свеже-печатный Таймсньюроман размером 22 непонимает.
Спасибо большое за статью.

Скажите пожалуйста, а какие ещё методы бинаризации рассматривали (кроме Отцу и Ниблэка)? Как долго происходит бинаризация с помощью нейронных сетей?
Очень рады, что Вам понравилось)
Кроме Отцу и Ниблэка мы так же пробовали алгоритмы Nicholas R. Howe Binarization и Sauvola binarization
Скорость работы алгоритма во многом зависит от целого ряда факторов и здесь можно дать несколько ответов.
Например при среднем соотношении скорость — качество (за счёт частоты нарезки окон, определённая нейронная сеть и т.д.) скорость бинаризации одного изображения составляет около 5 секунд при использованни GPU Titan X.
При необходимости повысить качество — время работы возрастает в десятки раз из-за многократного применения сети / сетей.
При необходимости повысить скорость (или впихнуть этого U-net крокодила на мобильник) можно использовать например многопроходную схему:
На первом этапе можно применить несетевой метод бинаризации.
На втором этапе применить сетевой метод только к тем окнам, где возможно находится текст (результат работы 1-го этапа)
На третьем этапе применить U-net сеть для уточния работы алгоритма на 2ом этапе.
Благодаря подобному подходу возможно многократное ускорение алгоритма бинаризации с помощью сетей.
К сожалению, идея с применением какого-то алгоритма будет очень сильно зависеть от того, насколько плохая картинка к нам пришла на вход. Так как уже бинаризованное изображение при подаче на нейронную сети не будет иметь столько информации (ибо оно будет с одним каналом), как исходное (цветное).

По поводу методов бинаризации — рекомендую посмотреть не на глобальные методы бинаризации (global Otsu, Sauvola, NICK, Niblack, etc.), а для начала на локальные (хотя бы тот же OpenCV cv::adaptiveThreshold).
Хотя тут надо смотреть, нужна ли нам информация о цвете вообще :-)
НЛО прилетело и опубликовало эту надпись здесь

Очень интересно! Поздравляю с победой в конкурсе и буду ждать статьи от организаторов.


А вы не рассматривали вариант аугментации данных на GPU? Обрезка, поворот и прочие операции хорошо параллелятся, и можно было бы сразу на устройстве делать.

Спасибо за поздравления)
Вопрос аугментации на GPU обычно рассматривается, когда процесс обучения сетей замедляется из-за недостаточной скорости подготовки данных на лету. Как раз обрезка, поворот, сдвиги, простые яркостные искажения делаются достаточно быстро и на CPU, а вот например маштабирование и проективные искажения иногда переносим на вторую GPU для ускорения раздутия данных.

С GPU есть еще один нюанс: очень часто узкое место не разница производительности CPU/GPU как таковая, но скорость передачи данных из обычной памяти в память GPU.


Сам с этим сталкивался и встречал советы от экспертов NVIDIA — делать как можно больше преобразований данных на GPU, даже если они не сильно быстрее чем на центральном процессоре.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий