Инструменты пользователя

Инструменты сайта


Боковая панель

Перевод этой страницы:

ru:addons:capmonster:learning:module-teach

5. Создание и тестирование модуля

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

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

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

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

1) Неправильное распознавание - это когда символ, действительно есть, но распознается он не правильно. Например мы показываем модулю символ «а», а он находит там символ «с».
2) Пропуск символа - это когда символ есть, но модуль вообще не видит никакого символа. Т.е. мы показываем ему символ «а», а модуль выдает, что тут ничего нет.
3) Ложное срабатывание - это когда символа нет, например между двумя символами, но модуль там что-то находит.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ход обучения

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

http://wiki.zennolab.com/lib/exe/fetch.php?media=ru:addons:69096bba1b9da843b9244390ec1df43d.png

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

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

Обучение можно прервать в любой момент, когда вы поняли, что ничего лучше уже не получится.
После прерывания обучения или его естественной остановки (после 300 циклов) нужно выбрать какое ядро вы собираетесь использовать в модуле:
1) С лучшим % распознавания - в этом случае будет взято не последнее ядро, а то, на котором % распознавания был максимальным.
2) Последнее - если у вас в тесте распознавания использовалось мало каптч для теста (меньше 50) а % распознавания у последних ядер не намного меньше чем у ядра с максимальным %, то лучше взять последнее ядро.
3) Оставить ядро от прошлого обучения, если с прошлыми настройками вы получали больший процент распознавания.

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

http://wiki.zennolab.com/lib/exe/fetch.php?media=ru:addons:4f5f8964ce8cdbc92994eafa7bbd07e7.png

При хорошем обучении графики должны выглядеть так:
На первом графике (распознавание символов) зеленая линия поднимается к максимуму, а желтая и красная опускаются к 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. В этом случае капча будет обрабатываться как многострочная.

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

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

ru/addons/capmonster/learning/module-teach.txt · Последние изменения: 2017/09/20 14:16 — copper12