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

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


ru:addons:capmonster:learning:module-teach

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
ru:addons:capmonster:learning:module-teach [2014/08/26 12:22]
adminsama
ru:addons:capmonster:learning:module-teach [2017/09/20 14:16] (текущий)
copper12
Строка 1: Строка 1:
-==== Общая концепция обучения ​====+====== 5. Создание и тестирование модуля ====== 
 + 
 +После того как все предыдущие шаги выполнены,​ мы можем приступить к обучению нашего модуля распознавания.\\ 
 + 
 +{{youtube>​FeWbKhkw9dw?​medium}} 
 + 
 +** Общая концепция обучения ​**  
 В начале рекомендуется выбрать ядро по-проще и сделать быстрое обучение с большим количеством (треть) символов для теста. Быстренько провести пару десятков итераций обучения и посмотреть что получилось. Скорректировать параметры и обучить еще раз. Если все хорошо,​ можно обучать сеть более мощной структуры и более качественно.\\ В начале рекомендуется выбрать ядро по-проще и сделать быстрое обучение с большим количеством (треть) символов для теста. Быстренько провести пару десятков итераций обучения и посмотреть что получилось. Скорректировать параметры и обучить еще раз. Если все хорошо,​ можно обучать сеть более мощной структуры и более качественно.\\
  
-==== Настройки ядра ==== +** Три типа ошибок распознавания символа ** 
-**Мощность ядра** - чем больше мощность ядра, тем лучше качество распознавания символа. Но меньше скорость работы ядра и, в итоге, больше процессорного времени тратится на распознавание каптчи. ​\\ + 
-Не стоит сразу делать очень мощное ядро, попробуйте с самого слабого,​ возможно полученного результата распознавания вам будет вполне достаточно.\\ +1) Неправильное распознавание - это когда символ,​ действительно есть, но распознается он не правильно. Например мы показываем модулю символ "​а",​ а он находит там символ "​с"​.\\ 
-При изменении этого параметра рядом вы можете увидеть оценку сложности ядра.\\ +2) Пропуск символа - это когда символ есть, но модуль вообще не видит никакого символа. Т.е. мы показываем ему символ "​а",​ а модуль выдает,​ что тут ничего нет.\\ 
-Сложность ядра отражает количество процессорного времени,​ требуемое на отработку ядра в одной точке. Нет каких-то единиц измерения,​ просто число, которое поможет вам сравнить два ядра. Если у одного ядра сложность в два раза больше чем у другого,​ это значит,​ что и работать оно будет в два раза дольше при прочих равных условиях ).\\ +3) Ложное срабатывание - это когда символа нет, например между двумя символами,​ но модуль там что-то находит.\\ 
-На сложность ядра, кроме мощности,​ также очень сильно влияет размер окна распознавания символа.\\  + 
-В итоге, управляя этими двумя параметрами вы сможете создать ядро, которое устроит вас и по качеству распознавания и по скорости.\\+====  Настройки ядра ====  
 + 
 +{{:​ru:​addons:​6c123421f6208dc73d61bad8a95fd190.png|}} 
 + 
 +**Мощность ядра** - чем больше мощность ядра, тем лучше качество распознавания символа. Но меньше скорость работы ядра и, в итоге, больше процессорного времени тратится на распознавание каптчи. Не стоит сразу делать очень мощное ядро, попробуйте с самого слабого,​ возможно полученного результата распознавания вам будет вполне достаточно. При изменении этого параметра рядом вы можете увидеть оценку сложности ядра. Сложность ядра отражает количество процессорного времени,​ требуемое на отработку ядра в одной точке. Нет каких-то единиц измерения,​ просто число, которое поможет вам сравнить два ядра. Если у одного ядра сложность в два раза больше чем у другого,​ это значит,​ что и работать оно будет в два раза дольше при прочих равных условиях ). На сложность ядра, кроме мощности,​ также очень сильно влияет размер окна распознавания символа. В итоге, управляя этими двумя параметрами вы сможете создать ядро, которое устроит вас и по качеству распознавания и по скорости.\\ 
 + 
 +==== Настройки обучения ==== 
  
 +{{:​ru:​addons:​2a240142a7649f35823baf33854a0d9f.png|}}
  
-==== Настройки обучения ==== 
 **Скорость обучения** - чем медленнее обучение тем оно более качественно. Но не стоит сразу учить долго и качественно. Попробуйте сначала обучить по-быстрому,​ вполне возможно,​ всплывут какие-то ошибки,​ вы их исправите и тогда можно будет обучить модуль более качественно. А, возможно,​ полученного результата будет вполне достаточно.\\ **Скорость обучения** - чем медленнее обучение тем оно более качественно. Но не стоит сразу учить долго и качественно. Попробуйте сначала обучить по-быстрому,​ вполне возможно,​ всплывут какие-то ошибки,​ вы их исправите и тогда можно будет обучить модуль более качественно. А, возможно,​ полученного результата будет вполне достаточно.\\
  
-**Разброс центров символов** - при обучении собранные вами символы предъявляются ядру и их центр находится в той точке, ​которую вы указали. Но можно ​немного можно ​увеличить разброс этой ​точки. Это может привести к улучшению распознавания, а может ​и к ухудшению. В разделе тестирования ​модуля написано когда этот параметр может быть полезен.\\+**Стартовый параметр обучения** - параметр, который отвечает за стартовую скорость обученияИзменять ​его ​нужно ​только в том случае, если встретится одна из ошибок обученияо которых речь пойдет ниже.\\
  
-**Интенсивность ​обучения на ложных данных** - рекомендуется увеличить, если при ​распознавании ​или обучении ошибка ​распознавания ​символа (3) - ложное срабатывание встречается намного ​чаще других ​ошибок.\\+**Разброс центров ​символов** - при ​обучении собранные ​вами символы предъявляются ядру и их центр находится ​в той точке, которую вы указали. Но можно немного можно ​увеличить ​разброс этой точки. Это может ​привести к улучшению распознавания, а может ​и к ухудшению. Нижев разделе "Тестирования модуля" ​написано когда этот параметр может ​быть полезен.\\
  
-**Доля обучающих символов** - собранные вами ​символы будут участвовать  ​в ​обучении ядрано не все. Часть из них пойдет ​на тест ядра ​во время обучения (первый график). Тест тоже очень важен, он помогает понять как проходит обучение и какие параметры можно исправить, чтобы более качественно переобучить ядро. В тесте должно быть хотя бы 30-50 символов чтобы понять как идет обучение.\\ +**Интенсивность обучения ​на ложных ​данных** - рекомендуется ​увеличить, ​если при распознавании или ​обучении ​ошибка распознавания символа (3) - ложное срабатывание встречается намного чаще других ошибок. Начинать обучение рекомендуется с параметра по-умолчанию: 10.\\
-Отдавать большую ​часть символов на тест тоже не стоит, ведь чем больше символов участвует в обучении ядра тем лучше.\\ +
-Можно сделать так: первый раз обучить с большим количеством тестовых ​символов,​ а потом, когда все ​параметры будут подобраны, переобучить ядро почти на всех собранных символов, оставив ​на тест минимум из возможного.\\+
  
 +**Доля обучающих символов** - собранные вами символы будут участвовать ​ в обучении ядра, но не все. Часть из них пойдет на тест ядра во время обучения (первый график). Тест тоже очень важен, он помогает понять как проходит обучение и какие параметры можно исправить,​ чтобы более качественно переобучить ядро. В тесте должно быть хотя бы 30-50 символов чтобы понять как идет обучение.Отдавать большую часть символов на тест тоже не стоит, ведь чем больше символов участвует в обучении ядра тем лучше. Можно сделать так: первый раз обучить с большим количеством тестовых символов,​ а потом, когда все параметры будут подобраны,​ переобучить ядро почти на всех собранных символов,​ оставив на тест минимум из возможного.\\
  
 ==== Настройки распознавания ==== ==== Настройки распознавания ====
-**Порог распознавания** - Когда ядру показывают область на капче (или при обучении),​ он выдает для каждого известного ему символа число в отрезке от 0 - если он не видит никаких признаков этого символа и до 1 - если он абсолютно уверен,​ что здесь в этой точке находится этот символ. \\ 
-Но нам нужно не число, а точный ответ, есть тут символ или нет. Для этого и нужен порог распознавания. Все ответы ядра, где он выдает для какого-то символа число больше,​ чем порог распознавания мы считаем за "да, тут есть этот символ"​. Если ядро выдает число меньше,​ то мы символ не принимаем. 
  
 +{{:​ru:​addons:​112bb6b24a396133780c7cb800d66a19.png|}}
  
 +**Порог распознавания** - Когда ядру показывают область на капче (или при обучении),​ он выдает для каждого известного ему символа число в отрезке от 0 - если он не видит никаких признаков этого символа и до 1 - если он абсолютно уверен,​ что здесь в этой точке находится этот символ. Но нам нужно не число, а точный ответ, есть тут символ или нет. Для этого и нужен порог распознавания. Все ответы ядра, где он выдает для какого-то символа число больше,​ чем порог распознавания мы считаем за "да, тут есть этот символ"​. Если ядро выдает число меньше,​ то мы символ не принимаем. Чуть ниже, в разборе ошибок обучения вы прочитаете как нужно манипулировать этим параметром,​ чтобы решить некоторые проблемы обучения.
  
 +**Минимальное расстояние между символами в каптче** - это очень полезный параметр,​ который не позволяет находить в районе уже найденного символа другие символы,​ тем самым сильно уменьшая ошибки распознавания символа (3). Откройте в Paint каптчу,​ отмасштабируйте ее  согласно вашим фильтрам и посчитайте минимальное расстояние (в пикселах) между двумя символами. Примерно посчитайте минимально возможное такое расстояние среди всех каптч. Полученное числом инициализируйте этот параметр. Если вы ошибетесь,​ то в тесте модуля распознавания вы узнаете как правильно скорректировать этот параметр. Переобучение при этом не требуется.\\
  
-**Минимальное расстояние ​между символами в каптче** +**Каптч для теста** - во время обучения постоянно будет проводится тест распознавания ​каптч, чтобы узнать текущий процент распознавания модуля. Много каптч ​долгие ​тесты, но правильно подсчитанный процент, мало каптч - быстрые ​тесты, но не очень хорошая оценка модуля. Проведя пару-тройку обучений вы поймете,​ как вам ​ставить этот ​параметр,​ до того момента его можно ​не трогать.\\
-**Каптч для теста** +
-**Частота тестирования** +
-***быстрое распознавание*+
  
 +**Частота тестирования** - чтобы не тратить время зря тестирование процента проводится не каждый цикл обучения,​ а  раз в несколько таких циклов. Через сколько циклов обучения проводить тестирование устанавливается этим параметром.
 + 
 +**Быстрое распознавание** - у очень сложных каптч (символы записаны вместе в одну строку без пробелов,​ сильно искажены,​ много помех, много видов символов) приходится выбирать большой масштаб,​ делать очень сложное ядро, выбирать большой разброс центов масс. Все это приводит к тому, что модуль распознавания работает очень долго. Этот парамтр включает некоторые механизмы оптимизации и помогает ускорить распознавание таких каптч в 5-10 раз. Но может немного пострадать % распознавания. Этот параметр можно установить сразу перед обучением - это ускорит тесты распознавания каптч, но может не совсем правильно показывать % распознавания. Можно попробовать эту оптимизацию уже на стадии тестирования модуля. Для исправления % распознавания,​ возможно,​ придется немного изменить настройки поиска центра масс. Вообще,​ советуем не включать эту оптимизацию на стадии обучения модуля,​ без нее вы узнаете максимальный возможный % распознавания,​ который можно получить на каптче. \\
  
 +==== Ход обучения ====
 +После установки всех параметров можно запустить само обучение,​ в этом случае откроется окно с графиками и прогресс барами отражающими текущий ход обучения. Графиков всего три.\\
  
 +{{:​ru:​addons:​69096bba1b9da843b9244390ec1df43d.png?​400|http://​wiki.zennolab.com/​lib/​exe/​fetch.php?​media=ru:​addons:​69096bba1b9da843b9244390ec1df43d.png}}
  
 +1) На первом отображаются результаты тестирования модуля на ваших собранных символах.\\
 +Зеленая линия графика показывает сколько всего символов было распознано верно.\\
 +Желтая - на скольких символах ядро не нашло ничего (вторая ошибка распознавания символов).\\
 +Красная - сколько символов было распознано не правильно (первая ошибка распознавания символов)\\
 +2) Второй график показывает результаты теста на ложное срабатывание\\
 +Зеленая линия показывает количество правильных ответов (в этих случаях ядро не нашло ничего и это правильно)\\
 +Желтая линия показывает,​ сколько раз ядро проявило подозрительную активность :)\\
 +Красная линия показывает,​ сколько раз ядро ошиблось (третья ошибка распознавания символа). \\
 +3) Третий график показывает примерный предварительный процент распознавания модуля. \\
  
 +==== Остановка обучения ====
  
 +{{:​ru:​addons:​c7e7430a4d021bc9a0e864beb1169579.png|}}
  
 +Обучение можно прервать в любой момент,​ когда вы поняли,​ что ничего лучше уже не получится.\\
 +После прерывания обучения или его естественной остановки (после 300 циклов) нужно выбрать какое ядро вы собираетесь использовать в модуле:​\\
 +1) С лучшим % распознавания - в этом случае будет взято не последнее ядро, а то, на котором % распознавания был максимальным.\\
 +2) Последнее - если у вас в тесте распознавания использовалось мало каптч для теста (меньше 50) а % распознавания у последних ядер не намного меньше чем у ядра с максимальным %, то лучше взять последнее ядро.\\
 +3) Оставить ядро от прошлого обучения,​ если с прошлыми настройками вы получали больший процент распознавания. \\
  
  
-==== Три типа ошибок распознавания символа ==== +==== Как должно быть ​====
-Есть три основных типа ошибок при распознавании символа:​\\ +
-1) Неправильное распознавание - это когда символ, действительно есть, но распознается он не правильно. Например мы показываем модулю символ "​а",​ а он находит там символ "​с"​.\\ +
-2) Пропуск символа - это когда символ есть, но модуль вообще не видит никакого символа. Т.е. мы показываем ему символ "​а",​ а модуль выдает,​ что тут ничего нет.\\ +
-3) Ложное срабатывание- это когда символа нет, например между двумя символами,​ но модуль там что-то находит.\\+
  
 +{{:​ru:​addons:​4f5f8964ce8cdbc92994eafa7bbd07e7.png?​400|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 начали колебаться примерно у одних и тех же значений.\\
 +Остановите обучение,​ перейдите на вкладку тестирования модуля и запустите тест. Смотрите какие ошибки распознавания возникают и в разделе справки по тестирования модуля читайте как эти ошибки исправить.\\
 +
 +==== Настройки теста модуля ==== 
 +{{:​ru:​addons:​capmonster:​learning:​настройка_1.png|}}
 +
 +**Потоков** - количество потоков,​ в которых происходит тестирование капч.
 +
 +**Дистанция** - минимальное расстояние между символами в капче.
 +
 +**Тип сравнения** - если в тесте совпадает несколько слов, то тест считается успешным.
 +
 +**Минимальное расстояние между словами** - минимальное расстояние между словами в капче.
 +
 +**Многострочная капча** - параметр,​ необходимый для таких популярных капч как Solvemedia. В этом случае капча будет обрабатываться как многострочная.
 +
 +**Минимальное расстояние** - расстояние между левым нижним и правым верхним углом символов разных строк.
 +
 +**Ограничение длины ответа** - в зависимости от длины ответа некоторые ответы будут отбрасываться. Данное ограничение устанавливается только в Тесте модулей. После каждого изменения данного параметра необходимо заново делать подбор параметров.
  
-==== Интерфейс обучения ==== 
  
  
-==== Ход обучения ==== 
  
  
-==== Проблемы обучения и их исправление ==== 
ru/addons/capmonster/learning/module-teach.1409055775.txt.gz · Последние изменения: 2015/07/14 15:50 (внешнее изменение)