Комментарии 18
Передайте свидетельство вашей сети и покажите её ответ.
А можно где нибудь поиграться, сканы поскармливать? :)
А сколько по времени занимало обучение сети?
Это во многом зависит от разных факторов: каким образом менять скорость обучения, какие раздутия применять, как часто проверять качество на валидационной выборке и т.д. Под конец соревнования на одном Titan X, со всеми раздутиями и без отписывания результатов на валидационной выборке по мере обучения сети время обучения составляло ~ 12 часов. Вечером поставил учиться, утром пришёл и смотришь чему научилась сетка.
А разве работа с данными не происходит на ЦПУ? Как она может влиять на обучение то?
Работа с данными в большей степени происходит на cpu. Именно поэтому, при большом числе раздутий, применяемых к данным, подающимся на обучение нейронной сети, может возникать ситуация, когда предыдущий минибатч уже использовался в обучении, а новый ещё не готов. В такой ситуации gpu простаивает, сетка не учится, время обучения сети увеличивается.
Чудеса прям, только как файнридером начнёшь распознавать, так он свеже-печатный Таймсньюроман размером 22 непонимает.
Спасибо большое за статью.
Скажите пожалуйста, а какие ещё методы бинаризации рассматривали (кроме Отцу и Ниблэка)? Как долго происходит бинаризация с помощью нейронных сетей?
Скажите пожалуйста, а какие ещё методы бинаризации рассматривали (кроме Отцу и Ниблэка)? Как долго происходит бинаризация с помощью нейронных сетей?
Очень рады, что Вам понравилось)
Кроме Отцу и Ниблэка мы так же пробовали алгоритмы Nicholas R. Howe Binarization и Sauvola binarization
Скорость работы алгоритма во многом зависит от целого ряда факторов и здесь можно дать несколько ответов.
Например при среднем соотношении скорость — качество (за счёт частоты нарезки окон, определённая нейронная сеть и т.д.) скорость бинаризации одного изображения составляет около 5 секунд при использованни GPU Titan X.
При необходимости повысить качество — время работы возрастает в десятки раз из-за многократного применения сети / сетей.
При необходимости повысить скорость (или впихнуть этого U-net крокодила на мобильник) можно использовать например многопроходную схему:
На первом этапе можно применить несетевой метод бинаризации.
На втором этапе применить сетевой метод только к тем окнам, где возможно находится текст (результат работы 1-го этапа)
На третьем этапе применить U-net сеть для уточния работы алгоритма на 2ом этапе.
Благодаря подобному подходу возможно многократное ускорение алгоритма бинаризации с помощью сетей.
Кроме Отцу и Ниблэка мы так же пробовали алгоритмы 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).
По поводу методов бинаризации — рекомендую посмотреть не на глобальные методы бинаризации (global Otsu, Sauvola, NICK, Niblack, etc.), а для начала на локальные (хотя бы тот же OpenCV cv::adaptiveThreshold).
Очень интересно! Поздравляю с победой в конкурсе и буду ждать статьи от организаторов.
А вы не рассматривали вариант аугментации данных на GPU? Обрезка, поворот и прочие операции хорошо параллелятся, и можно было бы сразу на устройстве делать.
Спасибо за поздравления)
Вопрос аугментации на GPU обычно рассматривается, когда процесс обучения сетей замедляется из-за недостаточной скорости подготовки данных на лету. Как раз обрезка, поворот, сдвиги, простые яркостные искажения делаются достаточно быстро и на CPU, а вот например маштабирование и проективные искажения иногда переносим на вторую GPU для ускорения раздутия данных.
Вопрос аугментации на GPU обычно рассматривается, когда процесс обучения сетей замедляется из-за недостаточной скорости подготовки данных на лету. Как раз обрезка, поворот, сдвиги, простые яркостные искажения делаются достаточно быстро и на CPU, а вот например маштабирование и проективные искажения иногда переносим на вторую GPU для ускорения раздутия данных.
С GPU есть еще один нюанс: очень часто узкое место не разница производительности CPU/GPU как таковая, но скорость передачи данных из обычной памяти в память GPU.
Сам с этим сталкивался и встречал советы от экспертов NVIDIA — делать как можно больше преобразований данных на GPU, даже если они не сильно быстрее чем на центральном процессоре.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
История победы на международном соревновании по распознаванию документов команды компании SmartEngines