Pull to refresh

Comments 17

Почему это ошибка второго рода? У вас что, алгоритм выдаёт на выход true/false? Как? Неужели это алгоритм распознавания номера 777?

Если модели распознали разные номера, алгоритм выводит пустое значение, то есть false, если одинаковые true.
Если использовать одну модель, она всегда предсказывает результат, даже если изображение размыто и номер на читаем.
Благодаря использованию композиции мы отсекаем те случаи, когда модели предсказывают разные номера, предполагая, что одна из них ошибается. то есть, отсекаем False Positive случаи, или, другими словами, ошибку второго рода.
В таком случае, мы значительный процент False Positive переводим в True Negative.
Но в таким случаи мы отсекаем еще и небольшой процент верных номеров, то есть появляется False Negative.
Добрый день! Посмотрел код, возникло несколько вопросов…

1) Там Mongo импортируется, для чего?
2) А как использовать уже натренированную модель для распознавания?
1. Спасибо за замечание. MongoDB переехала из другого проекта) Обязательно исправлю.

2. В проекте я не добавил код тестирования модели, но он может быть легко взят из файла train:

preds = self.model_init.model(images)
probs, preds_copy = preds.max(2)
sim_preds = self.model_init.converter.decode(preds_copy.data, preds_size.data, raw=False)

Здесь images — изображения после трансформации
sim_preds — результат в символьном виде

Для загрузки претренированной модели в файле конфигурации пропишите путь в:

[crnn_big_size]
path_pretrained = путь до модели
Еще один повод хранить кредитную карту в чехле и прикладывать к терминалу не вынимая из чехла.
garbidge in garbidge out. Я очень интересуюсь проблемой определения номеров авто, и ваша статья дала надежду. Даже не устранением ошибки второго рода, а возможностью получать хороший результат при такой малой обучающей базе. Если это так, то прошу связаться, у меня она больше.
Я не нашел в статье критерия обучения двух разных сетей, которые потом сравнивают результаты, но он судя по всему должен быть. И сети его выявили. Вопрос, а что будет, если им дать обе выборки? Тоже каждая из них должна ведь выявить? и устранить? То есть две сети не нужды. Ну и все ли ошибки выявлены? Как самый распространенный пример в определении номеров авто — О и 0. В авто они так по ширине не отличаются. Различить их можно только по позиции в знаке — или цифра, или буква.
Я не с целью критики работы, но никакая сеть не заменит базовых принципов информации. Если на входе нет правильных данных, то из них нельзя получить правильные
Критерий обучения для каждой из сетей — CTCLoss. О нем можно почитать из источника 4.

Я не до конца понял вопрос: «Вопрос, а что будет, если им дать обе выборки? Тоже каждая из них должна ведь выявить? и устранить? То есть две сети не нужды.»
Я обучал две сети на одной выборке, с разной аугментацией размера изображения и последовательности семплов. Сделал это для того, чтобы процесс оптимизации моделей немного отличался и конечная решающая функция была немного различна, тогда их предсказания будут более независимыми.
Если на входе нет правильных данных, ты на выходе вероятнее всего не предскажем ничего.

Выявлены все ошибки.

По поводу O и 0. В сети используется LSTM. Рекуррентная сеть позволяет искать зависимости между символами, поэтому, возможно, она обобщится на случаи: если в номере нет символов латиницы, то, если на первом месте либо О либо 0, выбрать О. Я обучал композицию этих моделей на распознавание расшифровки штрихкода. В датасете для всех штрихкодов EAN_13, начинающихся на 0, один этот символ не учитывался в эталонном значении. Модели обучились распознавать EAN_13 и, если в начале 0, обрезать его.
Да, я вот тоже с номерами машин попробовать хочу… Сейчас готовлю картинки номеров со всех парковок Скандинавии… :)
Если я правильно понимаю, то изменение аугментации это разные данные. Все еще не понял из ответа, модели разные у вас или нет. Но что будет, если этим моделям дать все данные? первоначальные и измененные?
Архитектура моделей одинаковая. Отличие только в аугментации данных, изначальной инициализации весов и перемешивании данных при обучении.
Если сделать все идентичным, то обучим две одинаковые модели и их предсказания также будут одинаковыми.
Попробую свою мысль изложить на цифрах. Предположим, что каждая из ваших двух моделей дает ошибку 10%, а после проверки друг другом, ошибка остается 5%. Я предполагаю, что если каждую из моделей обучить на всех данных, включая аугментированные, то ошибка у них станет 5%, то есть конечный результат не изменится.
Добрый день! Сколько времени занимает распознавание одной карты? Применима данная технология для real time проектов?
На GeForce GTX 1070 распознавание номера проходит быстро: примерно 17 мс.
Однако сегментация сетью PSPNet входного изображения размера (512,512) занимает примерно 100 мс.

Так что, для распознавания номера в режиме реального времени можно использовать данную сеть, но нужно будет использовать другую модель сегментации.
А можете еще описать как сгенерировать/получить labels файлы?
Рассмотрим пример классификации номеров автомобилей.
В датасете, в директориях train, val находятся директории классов данных: type_id_0..type_id_n — где type_id_i — к примеру, название страны. Type_id был полезен для дальнейшей статистики, чтобы определить на каких классах данных модель хуже обучилась, почему. Можно это и не использовать и все закинуть в type_id_1.

Формируем файл следующей структуры:
val_labels = {«file_name_1.jpg»: {«number»: «959205766», «type_id»: «type_id_1»}}
Здесь: file_name_1.jpg — название изображения, number — label изображения, type_id — к примеру, название страны.
«number — label изображения» — вот эту часть не очень понял…
это эталонное значение номера, к примеру: «43242343»
Sign up to leave a comment.

Articles