ria-com / nomeroff-net

Nomeroff Net. Automatic numberplate recognition system.
GNU General Public License v3.0
459 stars 159 forks source link

Какого формата должен быть датасет для тренировки OCR? #102

Closed Gerpea closed 4 years ago

Gerpea commented 4 years ago

Тренировочная модель и загруженная модель дают разные результаты.

Тест на тренировочной модели

first

Тест на загруженной модели

first

Так происходит только когда я тренирую на своем датасете, если брать https://nomeroff.net.ua/datasets/autoriaNumberplateOcrRu-2019-08-30.zip, то модели совпадают

Что я делаю не так?

Мой датасет https://drive.google.com/file/d/192MvuVZ6o5fBjzuvrSo6tGMhlrzydl90/view

Пример аннотации и фотографии:

{
  "tags": [],
  "objects": [],
  "state_id": "2",
  "region_id": "6",
  "size": {
    "width": 282,
    "height": 61
  },
  "moderation": {
    "isModerated": 1,
    "moderatedBy": "gerpea",
    "predicted": "B002OP24"
  },
  "description": "B002OP24",
  "name": "B002OP24",
  "count_lines": "0"
}

B002OP24

ApelSYN commented 4 years ago

Есть несколько причин того что вы получаете низкое качество:

  1. (Самая главная) у вас маленький датасет, в трейне желательно иметь хотя бы 10 000 примеров
  2. Вы много поместили в val, обычно там достаточно 10% от train
  3. Вы скорее всего тренируете не на версии 1.0 (она еще не в релизе, но на ней есть шанс получить на маньшем количестве примеров неплохое качество). Это получается за счет возможности бесконесчно аугментировать входящий датасет и ставить несколько эпох. На новом tensorflow RNN-слои реализивованы таким образом что полученная модель будет работать как на GPU так и на CPU.
  4. В вашем датасете есть ошибки, вот примеры из тестовой выборки: B628AB04, C831KY102, P372OK64, O612AO136 . Каждая ошибка ухудшает конечный результат, у вас их относительно много.

Для того чтоб на вашей тестовой выборке получалось хорошее качество я объединил наш и ваш датасет, в резултате получилось accuracy на вашых тестовых данных около 96% (на самом деле качество скорее всего получше, если поправить ошибки). Вычитайте датасет, объедените его с нашим и попробуйте натренировать модель еще раз на версии 1.0, думаю результаты будут получше. Вот новая модель для tensorflow >= 2.3 : https://nomeroff.net.ua/models/ocr/ru/tf2/anpr_ocr_ru_2020_10_07_tensorflow_v2.3.h5

Gerpea commented 4 years ago

Сможете ли вы обновить модель, если вам скинуть подобный датасет, но на 50к номеров? Куда его будет удобнее скинуть?

ApelSYN commented 4 years ago

Да, натренируем, только для версии 1.0, для старой не вижу смысла -- она в 2.5 раза медленее распознает. Расшарте ссылку через Google Disc

ApelSYN commented 4 years ago

Также хотел обратить ваше внимание на то что вы сохраняете полученные фотки в формате BGR (обратите внимане на странный цвет флага РФ :) ), чтоб конвертнуть фотку обратно в RGB можно использовать такой скрипт:

# BGR to RGB converter
# use: ptynon3 BGR2RGB.py <filename>
import cv2
import numpy as np
import sys

if len(sys.argv) < 2:
    sys.exit()
filename=sys.argv[1]

im_bgr = cv2.imread(filename)
im_rgb = cv2.cvtColor(im_bgr, cv2.COLOR_BGR2RGB)
cv2.imwrite(filename, im_rgb)

Запустить массово на конвертацию в нужной папке можно так

#!/bin/bash
for var in `ls your_dir`
do
  python3 BGR2RGB.py your_dir/$var
done
Gerpea commented 4 years ago

Пока что получилось только на 40к, Ссылка: https://drive.google.com/file/d/17HVALyRex3eH43tmGokXbH7MR25CNdNu/view?usp=sharing Мы хотим добиться примерной точности распознавания украинских номеров. Стоит ли собирать еще номера? Или это не будет сильно влиять на качество распознавания?

Не обратил внимания на флаг) Спасибо за скрипт, пробежался по фоткам

ApelSYN commented 4 years ago

Пока что получилось только на 40к, Ссылка: https://drive.google.com/file/d/17HVALyRex3eH43tmGokXbH7MR25CNdNu/view?usp=sharing

Это достаточно большой датасет.

Мы хотим добиться примерной точности распознавания украинских номеров. Стоит ли собирать еще номера? Или это не будет сильно влиять на качество распознавания?

Пока что сложно сказать насколько сильно повлияют дополнительные данные на конечную модель, экспериментально мы установили что после 100 000 качество не улучшается, после 50 000 улучшения идут на доли процента. Украинские номера будут распознаваться всегда лучше русских, по причине специфики строения русского номера (негативным фактором являются слишком маленыкий размер цифр региона в правом верхнем углу, при низком разрешении там могут возникать ошибки, иногда даже человеку сложно понять там 3 или 8, 5 или 6)

Не обратил внимания на флаг) Спасибо за скрипт, пробежался по фоткам

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

ApelSYN commented 4 years ago

Тренировка прервалась, сейчас разбираюсь что не так. Без аугментации 97% точности та вашей тестовой выборке. К сожалению часть времени ушла на вычитку датасета там как и в прошлом есть ошибки (порядка 1%) а с ними высокую точность получить не получиться. Думаю амбициозной целью будет добиться 98% качества Хотел уточнить чтоб не тратить время на проверку: предыдущий датасет входит в состав этого 40K или они не пересекаются. Если не пересекаются то их можно будет объеденить для получения еще лучшего результата тренировки.

Gerpea commented 4 years ago

Тренировка прервалась, сейчас разбираюсь что не так. Без аугментации 97% точности та вашей тестовой выборке. К сожалению часть времени ушла на вычитку датасета там как и в прошлом есть ошибки (порядка 1%) а с ними высокую точность получить не получиться. Думаю амбициозной целью будет добиться 98% качества

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

Хотел уточнить чтоб не тратить время на проверку: предыдущий датасет входит в состав этого 40K или они не пересекаются. Если не пересекаются то их можно будет объеденить для получения еще лучшего результата тренировки.

Да, они пересекаются

ApelSYN commented 4 years ago

Вот линк на "вычитаный" датасет: https://nomeroff.net.ua/exchange/ru_part1.zip Так же я удалил часть примеров с очень низким качеством, т.к. это может работать в худшую строну при обучении. Еще есть одна проблема -- выборка несбаланчирована по букве "M", она встречается крайне редко и модель, как правило, ошибается в сторону "H". На вашем тесте у меня уже 99%. Чтоб компенсировать проблему с буквой "M" я добавлю наш датасет.

ApelSYN commented 4 years ago

Новую модель добавил, датасет также обновил, итоговая точность около 99%.

Gerpea commented 4 years ago

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