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

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


ru:addons:capmonster:learning:module-teach

Различия

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

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

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