Источник: https://wiki.loginom.ru/articles/clustering.html
Задача распознавания текста не теряет своей актуальности на протяжении последних десятилетий. А сейчас, в период повсеместного введения дистанционного оформления документов, не обойтись без процедуры идентификации личности.
Классическая процедура распознавания текста включает в себя его локализацию, сегментацию и непосредственно распознавание. Методы, использующие сегментацию текста на символы, довольно популярны и хорошо изучены. Однако существуют такие виды текста, где сегментация на символы становится настоящим испытанием. Например, арабская и индийская письменности. Кроме того, различные повреждения изображений текста также затрудняют его сегментацию. Очевидным решением при ограниченном множестве слов является распознавание их целиком, без разбора на символы. При условии наличия полного словаря с этой задачей отлично справляются обычные классифицирующие нейронные сети. Но что же делать в случае, если словарь достаточно большой или вовсе не известен на этапе обучения?
Для решения этой задачи мы предлагаем использовать метрические нейронные сети, они же энкодеры, они же кодировщики. В отличие от классифицирующих нейронных сетей, метрические в качестве ответа возвращают не набор оценок каждого элемента заранее заданного алфавита, а вектор-дескриптор. Иными словами, мы получаем координаты входного объекта в выходном пространстве.
Чтобы по ответу метрической сети определить, к какому из известных классов относится входной объект, его описание сравнивается с описаниями “эталонных” представителей классов, которые формируются после обучения. Тогда самый близкий по некоторой метрике (отсюда и пошло название) эталон и определит класс входного объекта.
Большим преимуществом такого вида сетей, безусловно, является то, что пространство, которое мы получаем на выходе, дает большой простор для анализа. По расположению объектов можно судить о схожести классов между собой. Кроме этого, в отличие от обычных классифицирующих сетей, процедура добавления новых классов в словарь метрической сети не требует запуска обучения “с нуля”. Достаточно сформировать описания новых классов по нескольким их представителям с помощью обученной ранее сети.
В данной статье мы продемонстрируем применимость метрических сетей для задачи распознавания слов, а также приведем сравнение характеристик их работы с характеристиками работы классифицирующих ИНС.
Для обучения метрических сетей используется сиамская архитектура: пара ветвей с идентичными слоями и весами[1]. На последнем слое в такой архитектуре происходит сравнение векторов признаков, полученных от обеих ветвей. Как правило, на вход такой сети подается пара объектов, а также метка, которая обозначает принадлежность объектов к одному или к разным классам. Таким образом, после обучения точки выходного пространства, соответствующие объектам из одного класса, будут находиться ближе, чем точки, соответствующие объектам из разных классов.
Важно отметить, что такая архитектура используется лишь для обучения, непосредственно для распознавания применяется только одна ветвь: на вход приходит объект, а на выходе получается соответствующая ему точка в выходном пространстве.
Данные
Для того, чтобы определить, подходит ли метрическая сеть для распознавания целых слов, мы провели несколько экспериментов, сравнив характеристики работы метрической и классифицирующей сетей на примере распознавания поля “пол” в паспорте гражданина РФ. Здесь всего два класса: “М” и “Ж”, однако вариантов заполнения поля оказалось чуть больше — по 6 на каждый класс. В результате получился такой словарь:
МУЖ | МУЖ. | муж | муж. | Муж. | МУЖСКОЙ |
ЖЕН | ЖЕН. | жен | жен. | Жен. | ЖЕНСКИЙ |
Для наших экспериментов в качестве обучающих мы взяли данные, сгенерированные искусственно [2] по этому словарю. Каждое изображение содержало одно из слов и сопровождалось меткой номера варианта. Чтобы максимально приблизить данные к натуральным, полученным в неконтролируемых условиях съемки, мы применили к ним ряд искажений: смаз, гауссово размытие, проективные искажения. Всего получилось 285421 изображения, из них 142515 для женского пола и 142906 для мужского. На рисунке ниже можно увидеть примеры
Для обучения классифицирующей сети нам потребовалось сгруппировать обучающие данные по двум классам в соответствии с полом который они обозначают: по 6 вариантов на каждый. Метрическая же сеть должна уметь различать входные изображения, относящиеся к разным классам. Поэтому для ее обучения мы сформировали 1500024 пар изображений и пометили их в соответствии с тем, отражают ли они один и тот же вариант написания (“0”, если один вариант, “1” — разные).
В качестве тестовой выборки ввиду отсутствия в общем доступе изображений настоящих паспортов мы использовали сгенерированные синтетические данные, но с использованием дополнительных фонов, которые имитировали наличие подчеркиваний и статических текстов, характерных для настоящих изображений. Всего мы сгенерировали 10000 изображений, поровну каждого класса. Кроме этого, к этим изображениям были применены дополнительные раздутия, имитирующие искажения, возможные в случае получения изображения с малоразмерных цифровых камер и со сканеров.
Используемые модели обучения
Классифицирующая сеть
В качестве классифицирующей мы взяли глубокую сверточную сеть. На выходе у такой сети двухэлементный вектор с оценками вероятностей принадлежности входного объекта к итоговым классам. Функция ошибки классифицирующей сети рассчитывалась по формуле:
где M — размер алфавита сети, pi — идеальная оценка i-ого класса, а ei — оценка i-ого класса сетью.
Метрическая сеть
Исследуемая метрическая сеть переводит входные объекты в десятимерное пространство. Размерность выходного пространства была выбрана эмпирически.
Функция ошибки метрической сети:
где p-значение, указывающие на принадлежность входок одному и тому же классу, e — вектор разности выходных векторов ветвей, ? — порог, начиная с которого увеличение расстояния между разными классами не уменьшает итоговую ошибку. Параметр ? вводится для того, чтобы кластеры выходного пространства не оказались равноудаленными друг от друга, потому что в данной задаче этого не нужно, и более того, не обязательно возможно.
Эксперименты
В ходе первого этапа эксперимента было обучено две сети (метрическая и классифицирующая), решающих задачу распознавания поля “пол” на изображениях паспорта гражданина РФ. Архитектура классифицирующей сети представлена в таблице
№ слоя | Тип | Описание |
---|---|---|
1 | Свёрточный | 4 фильтра 3х3, без отступов, шаг фильтра 1х1 |
2 | Свёрточный | 8 фильтров 5х5, отступ 2х2, шаг фильтра 2х2 |
3 | Свёрточный | 8 фильтров 3х3, отступ 1х1, шаг фильтра 1х1 |
4 | Свёрточный | 12 фильтров 5х5, отступ 2х2, шаг фильтра 2х2 |
5 | Свёрточный | 12 фильтров 3х3, отступ 1х1, шаг фильтра 1х1 |
6 | Свёрточный | 12 фильтров 3х3, отступ 1х1, шаг фильтра 1х1 |
7 | Полносвязный |
Такой же архитектурой обладала и каждая из ветвей сиамской сети. Видно, что при фиксированном размере алфавита, основным отличием сетей является лишь метод обучения, а вместе с ним — свойства ответа. По выходу классифицирующей сети нельзя сказать, как сильно отличаются классы исходного алфавита, в то время как это хорошо видно по кластерам выходного пространства метрической сети.
Вторым этапом мы решили облегчить архитектуры, сократив количество сверточных слоев и удвоив шаги фильтров на последнем слое (см. таблицу ниже).
№ слоя | Тип | Описание |
---|---|---|
1 | Свёрточный | 4 фильтра 3х3, без отступов, шаг фильтра 1х1 |
2 | Свёрточный | 8 фильтров 5х5, отступ 2х2, шаг фильтра 2х2 |
3 | Свёрточный | 8 фильтров 3х3, отступ 1х1, шаг фильтра 2х2 |
4 | Полносвязный |
Так нам удалось с незначительными потерями в качестве уменьшить размер классифицирующей сети практически в 3 раза. Данные сети предполагается использовать в том числе и в мобильных приложениях, а это тот случай, когда размер имеет значение.
На основании тестовой выборки мы провели замеры качества распознавания обоих типов сетей с тяжелыми и легкими архитектурами. Под качеством подразумевается точность распознавания, т.е. отношение числа верно классифицированных объектов к объему тестовой выборки. Результаты замеров представлены в таблице
Тяжёлая архитектура | Лёгкая архитектура | |
Классифицирующая | 98.36% | 98.23% |
Метрическая | 98.05% | 97.86% |
Видно, что метрические сети показывают практически такое же качество распознавания, как и классифицирующие. При этом первые обладают рядом дополнительных свойств, которые позволяют применять их для более широкого класса задач, в частности, задач распознавания по неполному словарю.
Заключение
Сегодня нами было рассмотрено два вида сетей — обычные классифицирующие и метрические. Качество классификации у них практически одинаковое, но благодаря свойствам ответа метрические сети имеют много других преимуществ. Такие сети пригодны для распознавания слов даже в том случае, когда не весь словарь был представлен в обучающей выборке. В то время как классифицирующую сеть придется обучить заново для добавления новых классов, метрической достаточно показать несколько изображений новых элементов словаря, чтоб построить их описания. Кроме того, ответ метрической сети позволяет судить о сходстве различных классов исходя из позиций векторов-описаний объектов в результирующем пространстве.
Литература
- Koch G., Zemel R., Salakhutdinov R. Siamese Neural Networks for One-shot Image Recognition. Proceedings of the 32 International Conference on Machine Learning. 2015. V. 2. 8 p.
- Chernyshova Y., Gayer A., Sheshkus A. Generation method of synthetic training data for mobile OCR system. Proc. SPIE 10696, Tenth International Conference on Machine Vision (ICMV 2017). 2018. P. 1-7. DOI: 10.1117/12.2310119.
mixsture
1) Я бы задрал контраст в максимум. Это привело бы картинки к ч/б. А это ускорило бы обучение нейросети на порядки.
2) Использовал бы на картинках аугментацию поворотом и перспективой. Т.к. врятли вам в боевых условиях предоставят столь хорошо выровненные фотки.
3) Не уверен, что хорошо понимаю «метрическую сеть», но имхо
Вроде на выходе классификатора имеем набор вероятностей, что объект относится к каждому классу. Если дельта между ними высокая => классы сильно отличаются. Дельта низкая => классы слабо отличаются. Не вижу особых различий с результатом-вектором из метрической сети.
4) Имхо, не имеет большого смысла оптимизировать нейросети для смартфонов. Т.к. чаще всего распознанные данные нужно куда-то после этого «загрузить», а значит все равно интернет доступен, а значит можно вынести распознавание на нормальное железо.
SmartEngines Автор
Спасибо за комментарий. Давайте разберемся подробнее с каждым из указанных пунктов =)
1) К сожалению, в реальной жизни любые методы бинаризации приводят к искажению, а в худшем случае — к нечитаемости, входных данных. Данные, приходящие на мобильные системы, очень разнородны в плане искажений — проективные преобразования, смазывания, блики от ламинирующей пленки и защитных элементов паспорта, перепады освещения и затертости текста — в итоге, смешной выигрыш во времени при обучении приводит к ужасным потерям качества в реальной жизни.
2) Вообще, они используются, а также смазывания и шум. Просто в пост добавили четкие и слабо искаженные данные.
3) Короткий ответ: это не так.
Длинный ответ: классифицирующие сети всегда страдают от «излишней уверенности». Это значит, что на довольно хорошей картинке у вас лучший конфиденс сети будет около 1.0, а остальные — фактически по нулям. Например, для уверенно распознанной буквы «и» по нулям получат и «й», и «з», хотя мы (и метрическая сеть) прекрасно понимаем, что «й» похожа на «и», а вот «з» уже не очень. Реально близкие конфиденсы можно иногда увидеть либо если картинка очень плохая (практически нечитаемая), либо если у символов иногда совпадает написание (например, I (ай) и l (эль) в латинице).
4) Безусловно, можно передавать данные на облако для распознавания, а тысячи людей по всему миру оптимизируют сети просто ради самого процесса. Вот представьте, вам надо срочно вернуться домой из отпуска. И в приложении для покупки билетов есть распознавание паспорта. Интернет у вас вряд ли хороший, но как повезет. И вот для заполнения данных вы передаете на сервер множество картинок, ведь распознается видеопоток, а не одна фотография. Связь прерывается, вы теряете драгоценное время, а потом, в лучшем случае, вбиваете данные руками, а в худшем — остаетесь без билета. Ну и правильно, пользоваться распознаванием должны только люди с отличным интернетом, готовые к утечке персональных данных.
P.S. Ну и, конечно, данные всегда нужно передавать, даже если речь об автоматической кассе для продажи именных билетов.
mixsture
4) И все же, я думаю, что лучше в облако. Просто из соображений управления бизнесом. Смотрите, вы на оптимизацию сети потратили немало человекочасов, причем в статье явно описан «удачный вариант», а за кадром, наверное, было еще штук 5 неудачных гипотез, на них тоже ресурсы потрачены — вот это все надо записать в циферку затрат (и она выйдет немаленькая). Как результат вы получили конкурентное преимущество — работа в оффлайне.
Покрытие и качество интернет увеличиваются с каждым годом — тут и моб сети улучшаются, и wimax покрытия встречаются, и спутники как магистральный провайдер дают возможность провести инет туда, где раньше и не думали. Рост этого рынка будет каждый год снижать пользу от «работы в оффлайне» и, думаю, по истечению следующей пятилетки сведет пользу к нулю.
Вы приводите пример — и в нем уже в конце процесса покупка билета — т.е. действие уже в онлайне. Поэтому польза от «работы в оффлайне» уже снижается до вопроса стабильности канала. Передачу данных на нестабильном канале тоже можно программно улучшить (убрать принцип «канал кратковременно упал => вся работа потерялась») — эта задача уже довольно хорошо изучена и не представляет большой сложности (говоря проще, не требует проверки гипотез — сразу можно написать рабочий вариант). Что еще снизит пользу от «работы в оффлайне».
От облака есть еще дополнительные преимущества: возможность сбора больших данных. А значит вы сможете улучшить свой алгоритм методом композиции нейросетей — т.е. выбрать те примеры, где ваша нейросеть справилась неудачно и построить еще одну, которая дораспознает эти ошибки. Из оффлайна делать это невозможно, из полу-оффлайна делать это сложнее.
SmartEngines Автор
Ну, давайте дальше разбираться. Пойдем с конца.
1) Сбор больших данных. Во-первых, сбор паспортов граждан у нас в стране, да и во всем мире — деятельность, строго регулируемая законодательством, поэтому просто так взять и собрать картинки для обучения, а потом еще и отдать их разметку — незаконно. Во-вторых, у любой такой системы гигантский шанс кражи личных данных. Вот нам лично не хочется, чтобы фотографии наших паспортов и банковских карт оказались в открытом доступе.
2) Покрытие, конечно, улучшается. Но, во-первых, вы упорно игнорируете тот факт, что данные передавать надо не всегда. И работа вполне может происходить не на смартфоне, а на устройстве с похожими характеристиками. В предыдущем комментарии мы упоминали кассы для продажи билетов, в которые надо вбить данные, и они его напечатают. Также вполне возможно, что организация, использующая распознавание, не хочет заводить себе облако и вообще не хочет ничего ставить. Ей нужно просто фактически сканер, который наводишь на документ, а на компьютере уже текст. Это как с распознавание штрихкодов — вы же не ожидаете, что кассы в продуктовом подключены к облаку. Во-вторых, в Подмосковье, например, легко найти поселки и снт, где проводного интернета нет, а мобильный работает так себе, то есть, текст вы отправлять можете, а вот картинки — уже не факт.
3) Из соображений бизнеса лучше не попадать под законы о защите персональных данных. Это точно. Ну и не забывайте, что все незаконно собранные данные надо еще руками посмотреть и разметить. И тоже записать это в затраты. И не стоит забывать про переносимость технологий. Как сказано в статье, в такую сеть можно добавить пины, просто посчитав векторы для идеалов. В обычной сети так не получится. И сделать сверточную сеть, а уже тем более MLP с 20к выходных пинов — тоже.