Этап 5. Обучение модуля

Это архивная статья, больше не актуальна.

Для создания собственных модулей воспользуйтесь сервисом CapMonster Cloud. Подробную инструкцию можно найти по этой ссылке - Создание пользовательского модуля

После того как, все предыдущие шаги выполнены, Вы можете приступить к обучению нашего модуля распознавания.

Общая концепция обучения

В начале мы рекомендуем выбрать ядро попроще и сделать быстрое обучение с большим количеством (треть) символов для теста. Провести пару десятков итераций обучения и посмотреть что из этого получилось. Скорректировать параметры и обучить ещё раз. Если всё хорошо, то Вы можете обучать сеть более мощной структуре и более качественно.

Три типа ошибок распознавания символа

  1. Неправильное распознавание - это когда символ, действительно есть, но распознаётся он не правильно. Например, мы показываем модулю символ «а», а он находит там символ «с».

  2. Пропуск символа - это когда символ есть, но модуль вообще не видит никакого символа, т.е. мы показываем ему символ «а», а модуль выдает, что тут ничего нет.

  3. Ложное срабатывание - это когда символа нет, например, между двумя символами, но модуль там что-то находит.

Обучение модуля

Настройки ядра

Мощность ядра - чем больше мощность ядра, тем лучше качество распознавания символа, но меньше скорость работы ядра и, в итоге, больше процессорного времени тратиться на распознавание каптчи. Не стоит сразу делать очень мощное ядро, попробуйте с самого слабого, возможно полученного результата распознавания Вам будет вполне достаточно. При изменении этого параметра, рядом Вы можете увидеть оценку сложности ядра. Сложность ядра отражает количество процессорного времени, требуемого на отработку ядра в одной точке. Нет каких-то единиц измерения, просто число, которое поможет Вам сравнить два ядра. Если у одного ядра сложность в два раза больше чем у другого, то это означает, что и работать оно будет в два раза дольше при прочих равных условиях). На сложность ядра, кроме мощности, также очень сильно влияет размер окна распознавания символа. В итоге, управляя этими двумя параметрами Вы сможете создать ядро, которое устроит Вас и по качеству распознавания и по скорости.

Настройки обучения

Скорость обучения - чем медленнее обучение, тем оно более качественно. Но не стоит сразу учить долго и качественно. Попробуйте сначала обучить быстро, вполне возможно, всплывут какие-то ошибки, Вы их исправите и тогда можно будет обучать модуль более качественно. Или, возможно, полученного результата будет вполне достаточно.

Стартовый параметр обучения - параметр, который отвечает за стартовую скорость обучения. Изменять его нужно только в случае, если встречается одна из ошибок обучения, о которых пойдёт речь ниже.

Разброс центров символов - при обучении собранные Вами символы предъявляются ядру и их центр находится в той точке, которую Вы указали. Но можно немного увеличить разброс этой точки. Это может привести к улучшению распознавания, а может и к ухудшению. Ниже, в разделе Тестирования модуля написано когда этот параметр может быть полезен.

Интенсивность обучения на ложных данных - рекомендуется увеличивать значение, если при распознавании или обучении Ложное срабатывание встречается намного чаще других ошибок. Начинать обучение рекомендуется с параметра по-умолчанию: 10.

Доля обучающих символов - собранные Вами символы будут участвовать в обучении ядра, но не все. Часть из них пойдёт на тест ядра во время обучения (первый график). Тест тоже очень важен, он помогает понять как проходит обучение и какие параметры можно исправить, чтобы более качественно переобучить ядро. В тесте должно быть хотя бы 30-50 символов чтобы понять как идёт обучение. Отдавать большую часть символов на тест тоже не стоит, ведь чем больше символов участвует в обучении ядра тем лучше. Рекомендуем сделать так: первый раз обучить с большим количеством тестовых символов, а потом, когда все параметры будут подобраны, переобучить ядро почти на всех собранных символах, оставив на тест минимум из возможного.

Настройки распознавания

Порог распознавания - когда ядру показывают область на каптче (или при обучении), он выдаёт для каждого известного ему символа число в отрезке от 0 - если он не видит никаких признаков этого символа до 1 - если он абсолютно уверен, что здесь, в этой точке, находится этот символ. Но нам нужно не число, а точный ответ, есть тут символ или нет. Для этого и нужен порог распознавания. Все ответы ядра, где он выдаёт для какого-то символа число больше, чем порог распознавания мы считаем за «да, тут есть этот символ». Если ядро выдаёт число меньше, то мы символ не принимаем. Чуть ниже, в разборе ошибок обучения Вы прочитаете как нужно манипулировать этим параметром, чтобы решить некоторые проблемы обучения.

Минимальное расстояние между символами в каптче - это очень полезный параметр, не позволяющий находить в районе уже найденного символа другие символы, тем самым сильно уменьшая ошибки распознавания символа. Откройте в Paint каптчу, отмасштабируйте её согласно Вашим фильтрам и посчитайте минимальное расстояние (в пикселях) между двумя символами. Примерно посчитайте минимально возможное такое расстояние среди всех каптч. Если Вы ошибётесь, то в тесте модуля распознавания Вы узнаете как правильно скорректировать этот параметр. Переобучение при этом не требуется.

Число каптч для тестирования - во время обучения постоянно будет проводиться тест распознавания каптч, чтобы узнать текущий процент распознавания модуля. Много каптч - долгие тесты, но правильно подсчитанный процент, мало каптч - быстрые тесты, но не очень качественная оценка модуля. Проведя пару-тройку обучений Вы поймёте, как Вам ставить этот параметр, до того момента его можно не трогать.

Частота тестирования - чтобы не тратить время зря, тестирование процента проводится не каждый цикл обучения, а  раз в несколько таких циклов. Через сколько циклов обучения проводить тестирование устанавливается этим параметром.

Быстрое распознавание - у очень сложных каптч (символы записаны вместе в одну строку без пробелов, сильно искажены, много помех, много видов символов) приходится выбирать большой масштаб, делать очень сложное ядро, выбирать большой разброс центов масс. Всё это приводит к тому, что модуль распознавания работает очень долго. Этот параметр включает некоторые механизмы оптимизации и помогает ускорить распознавание таких каптч в 5-10 раз. Но может немного пострадать процент распознавания. Этот параметр можно установить сразу перед обучением - это ускорит тесты распознавания каптч, но может не совсем правильно показывать процент распознавания. Можно попробовать эту оптимизацию уже на стадии тестирования модуля. Для исправления процента распознавания, возможно, придётся немного изменить настройки поиска центра масс. Вообще, советуем не включать эту оптимизацию на стадии обучения модуля, без неё Вы узнаете максимальный возможный процент распознавания, который можно получить на каптче.

Ход обучения

После установки всех параметров можно запустить само обучение, в этом случае откроется окно с графиками и прогресс барами, отражающими текущий ход обучения. Графиков всего три.

  1. На первом отображаются результаты тестирования модуля на Ваших собранных символах.
    Зелёная линия графика показывает сколько всего символов было распознано верно.
    Жёлтая - на скольких символах ядро не нашло ничего (вторая ошибка распознавания символов).
    Красная - сколько символов было распознано не правильно (первая ошибка распознавания символов).

  2. Второй график показывает результаты теста на ложное срабатывание:
    Зелёная линия показывает количество правильных ответов (в этих случаях ядро не нашло ничего и это правильно).
    Жёлтая линия показывает, сколько раз ядро проявило подозрительную активность.
    Красная линия показывает, сколько раз ядро ошиблось (третья ошибка распознавания символа).

  3. Третий график показывает примерный предварительный процент распознавания модуля.

Остановка обучения

Обучение можно прервать в любой момент, когда Вы поняли, что ничего лучше уже не получится.

После прерывания обучения или его естественной остановки (после 300 циклов) необходимо выбрать какое ядро Вы собираетесь использовать в модуле:

  1. С лучшим процентом распознавания - в этом случае будет взято не последнее ядро, а то, на котором процент распознавания был максимальным.

  2. Последнее - если у Вас в тесте распознавания использовалось мало каптч для теста (меньше 50), а процент распознавания у последних ядер не намного меньше чем у ядра с максимальным процентом, то лучше взять последнее ядро.

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

Как должно быть

При хорошем обучении графики должны выглядеть так:

На первом графике (Распознавание символов) зелёная линия поднимается к максимуму, а жёлтая и красная опускаются к 0.

На втором графике (Ложные срабатывания) зелёная линия всегда на верху, красная чуть выше 0, а жёлтая раз в 5-10 выше красной. В редких случаях жёлтая линия может превышать зелёную, главное, чтобы красная была близка к 0.

На третьем графике постепенно растёт процент распознавания. Сначала он вырастет быстро, потом будет расти всё медленнее.

Скриншот сделан на простой каптче с правильно подобранными параметрами, имейте ввиду что графики у Вас могут быть другими, начальный процент может быть меньше, подъём зелёной линии, снижение жёлтой и красной на первом графике может быть медленнее. Это всё зависит от настроек обучения, сложности каптчи. Главное - тенденция.

Проблемы обучения и их исправление

Самое первое правило - если что-то долго не получается и советы, написанные ниже, не особо помогают, просто спросите на форуме в разделе программы. Не тратьте своё время впустую!

Есть несколько проблем, которые Вы можете встретить при обучении. Диагностировать их можно по графикам, отражающим текущий ход обучения:

1. После начала обучения прошло уже несколько десятков циклов, а зелёная и красная линии на первом графике не поднимаются.

Ядро не учится. Слишком маленький стартовый параметр обучения, запустите обучение заново, увеличив этот параметр в 10 раз. Повторите пока линии на графиках не начнут расти.

2. При обучении красная полоса поднялась над зелёной и доминирует на первом графике.

  • Возможно Вы поставили слишком большой стартовый параметр. Уменьшайте в 10 раз, и начинайте обучение снова и так несколько раз пока положение не улучшится или не появится предыдущая ошибка. Если появилась предыдущая ошибка значит проблема не только в стартовом параметре или вообще, он тут ни при чём.

  • Возможно слишком мало символов для обучения или фильтры для символов настроены не правильно и их нужно перенастроить.

  • Возможно Вы что-то напутали при вырезании символов и указывали им не правильные названия. Проверьте коллекцию в разделе фильтров (там есть кнопка Показывать текст, нажав её Вы сможете проверить соответствует ли нарисованный символ символу под ним написанному текстом).

3. Красная линяя на первом графике довольно далека от 0.

Слишком много ошибок распознавания символа типа (1).

Причин может быть много:

  • Собрано мало символов.

  • Очень сложная каптча.

  • Сеть слишком простая.

  • Слишком быстрый режим обучения.

  • Слишком большой разброс центра при обучении.

  • Очень много видов символов.

4. Самая первая проверка ещё перед первым циклом обучения показывает слишком большое число Bad результатов (красная линия).

Ничего страшного в этом нет, просто Вы установили порог распознавания 0,5 или ниже. Положение должно исправиться уже после первого цикла обучения.

5. Количество циклов перевалило за 100, а жёлтая линяя на первом графике всё ещё не падает к нулю.

Ядро не видит слишком много символов - ошибка распознавания символов (2).

Возможные причины:

  • Слишком большой порог обучения. Нормальный порог обучения 0,5-0,6.

  • Слишком маленький стартовый параметр обучения. Попробуйте увеличить в 3-5 раз.

  • Мало символов обучения, при том, что они сильно искажены.

  • Слишком сложная сеть.

  • Слишком быстрый режим обучения.

6. На втором графике красная линяя поднялась слишком высоко.

Ядро слишком часто видит символы там где их нет - третья ошибка распознавания символов.

Увеличьте интенсивность обучения на ложных данных.

7. На третьем графике процент распознавания 0 и не растёт, причём все остальные графики в порядке.

Обучение идёт хорошо, но каптча почему-то не распознаётся. Нужно смотреть что выдаёт модуль распознавания при тесте.

Доучите модуль так, чтобы графики 1 и 2 выравнялись примерно у одних и тех же значений.

Остановите обучение, перейдите на вкладку тестирования модуля и запустите тест. Смотрите какие ошибки распознавания возникают и в разделе справки по тестированию модуля читайте как эти ошибки исправить.

Настройки теста модуля

Потоков - количество потоков, в которых происходит тестирование каптч.

Дистанция - минимальное расстояние между символами в каптче.

Тип сравнения - если в тесте совпадает несколько слов, то тест считается успешным.

Минимальное расстояние между словами - минимальное расстояние между словами в каптче.

Многострочная каптча - параметр, необходимый для таких популярных каптч, как SolveMedia. В этом случае каптча будет обрабатываться как многострочная.

Минимальное расстояние - расстояние между левым нижним и правым верхним углом символов разных строк.

Ограничение длины ответа - в зависимости от длины ответа, некоторые ответы будут отбрасываться. Данное ограничение устанавливается только в Тесте модулей. После каждого изменения данного параметра необходимо заново делать подбор параметров.

Видеоинструкция по ссылке на YouTube.