Giter VIP home page Giter VIP logo

Comments (15)

GalymzhanAbdimanap avatar GalymzhanAbdimanap commented on July 25, 2024

Добрый день, в Detector.py в конфигурациях есть строка "IMAGE_MAX_DIM": 1024. Это качество фото, которое принимает нейронка, можете по тестировать уменьшив ее.

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Добрый день, в Detector.py в конфигурациях есть строка "IMAGE_MAX_DIM": 1024. Это качество фото, которое принимает нейронка, можете по тестировать уменьшив ее.

Спасибо, протестирую

from nomeroff-net.

ApelSYN avatar ApelSYN commented on July 25, 2024

Мы используем те же модели, которые выложены открытый доступ на сайте. Возможно у вас неправильно происходит классификация номера и определяется что он не "ru", вы не перетренировывали Options под свои нужды?

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Мы используем те же модели, которые выложены открытый доступ на сайте. Возможно у вас неправильно происходит классификация номера и определяется что он не "ru", вы не перетренировывали Options под свои нужды?

Какой dataset лучше взять, чтобы натренировать по текущему коду?

import os
import sys
import warnings
warnings.filterwarnings('ignore')

# change this property
NOMEROFF_NET_DIR = os.path.abspath('../../')

DATASET_NAME = "options"
VERSION = "2019_11_25"

LOG_DIR = os.path.join(NOMEROFF_NET_DIR, "logs/")
PATH_TO_DATASET = os.path.join(NOMEROFF_NET_DIR, "datasets/", DATASET_NAME)
RESULT_PATH = os.path.join(NOMEROFF_NET_DIR, "models/", 'numberplate_{}_{}.h5'.format(DATASET_NAME, VERSION))

FROZEN_MODEL_PATH = os.path.join(NOMEROFF_NET_DIR, "models/", 'numberplate_{}_{}.pb'.format(DATASET_NAME, VERSION))

sys.path.append(NOMEROFF_NET_DIR)

from NomeroffNet import OptionsDetector
from NomeroffNet.Base import convert_keras_to_freeze_pb

class MyNumberClassificator(OptionsDetector):
    def __init__(self):
        OptionsDetector.__init__(self)
        # outputs 1
        self.CLASS_STATE = ["BACKGROUND", "FILLED", "NOT_FILLED"]

        # outputs 2
        self.CLASS_REGION = ["ru"]

        self.EPOCHS           = 2
        self.BATCH_SIZE       = 10

        self.HEIGHT         = 64
        self.WEIGHT         = 295

# initialize region detector.
numberClassificator = MyNumberClassificator()
numberClassificator.prepare(PATH_TO_DATASET)

# train
model = numberClassificator.train(LOG_DIR, cnn="simple")

numberClassificator.test()

numberClassificator.save(RESULT_PATH)

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

запустил скрипт в options для картинок

for file in `ls *.png`; do
   Orientation=`exiftool -Orientation -n ${file} | awk '{print $3}'`;
   if [[ $Orientation -gt 1 ]]
   then
       echo "Fixing '${file}' - $Orientation "
       exiftool -Orientation=1 -n ${file}
   fi
done

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Скачал датасет https://nomeroff.net.ua/datasets/autoriaNumberplateOptions3Dataset-2019-10-04.zip
поправил скриптом (#61 (comment)), ничего не выявилось.

Получаю ошибку
Ошибка IndexError: index 6 is out of bounds for axis 1 with size 2

Код options.py

import os
import sys
import warnings
warnings.filterwarnings('ignore')

# change this property
NOMEROFF_NET_DIR = os.path.abspath('../../')

DATASET_NAME = "options"
VERSION = "2019_11_25"

LOG_DIR = os.path.join(NOMEROFF_NET_DIR, "logs/")
PATH_TO_DATASET = os.path.join(NOMEROFF_NET_DIR, "datasets/", DATASET_NAME)
RESULT_PATH = os.path.join(NOMEROFF_NET_DIR, "models/", 'numberplate_{}_{}.h5'.format(DATASET_NAME, VERSION))

FROZEN_MODEL_PATH = os.path.join(NOMEROFF_NET_DIR, "models/", 'numberplate_{}_{}.pb'.format(DATASET_NAME, VERSION))

sys.path.append(NOMEROFF_NET_DIR)

from NomeroffNet import OptionsDetector
from NomeroffNet.Base import convert_keras_to_freeze_pb

class MyNumberClassificator(OptionsDetector):
    def __init__(self):
        OptionsDetector.__init__(self)
        # outputs 1
        self.CLASS_STATE = ["BACKGROUND", "FILLED", "NOT_FILLED"]

        # outputs 2
        self.CLASS_REGION = ["xx-unknown", "ru"]

        self.EPOCHS           = 2
        self.BATCH_SIZE       = 10

        self.HEIGHT         = 64
        self.WEIGHT         = 295

# initialize region detector.
numberClassificator = MyNumberClassificator()
numberClassificator.prepare(PATH_TO_DATASET)

# train
model = numberClassificator.train(LOG_DIR, cnn="simple")

numberClassificator.test()

numberClassificator.save(RESULT_PATH)
#model = numberClassificator.load(RESULT_PATH)

import keras
keras.backend.clear_session()
model = numberClassificator.load(RESULT_PATH)
convert_keras_to_freeze_pb(numberClassificator.MODEL, FROZEN_MODEL_PATH)

from nomeroff-net.

ApelSYN avatar ApelSYN commented on July 25, 2024

Вы не поняли как это работает. Датасет прийдется пофиксить.

  1. В вашем датасете не должно быть картинок не с "ru" номерами.
  2. Индекс "ru" номеров уже будет иметь индекс 1, так как вы все другое удалили, в нашем примере у него индекс другой. Это надо самостоятельно пофиксить в json-файлах.

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Спасибо! Все погрохал, индексы поменял, натренировал!

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Явно указывал в options.py self.CLASS_REGION = ["xx-unknown", "ru"]

Почему-то у меня на этой картинке определяется другой регион - "eu-ua-2015"

сама картинка:
img

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Ваша демка детектит ['ru']

from nomeroff-net.

ApelSYN avatar ApelSYN commented on July 25, 2024

Фиксить список надо не только в обучающей выборке но и в коде распознавания NomeroffNet/OptionsDetector.py

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Фиксить список надо не только в обучающей выборке но и в коде распознавания NomeroffNet/OptionsDetector.py

Оставил нужные регионы, натренировал. Теперь вообще не определяет "eu-ua-2015", "xx-unknown", "ru". Возвращает пустой массив...

from nomeroff-net.

ApelSYN avatar ApelSYN commented on July 25, 2024

Модель "Options" возвращает не один а несколько масивов значений, которые классифицирет модель после детекции зон.
Возьмем этот пример examples/demo3.ipynb, вот в этой части:

regionIds, stateIds, countLines = optionsDetector.predict(zones)

Если на входе есть зоны, то на выходе будет столько же елементов в списках
regionIds, stateIds, countLines

Если зоны есть а списки пустые, значит вы что-то сделали неправильно, ищите ошибку.

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Модель "Options" возвращает не один а несколько масивов значений, которые классифицирет модель после детекции зон.
Возьмем этот пример examples/demo3.ipynb, вот в этой части:

regionIds, stateIds, countLines = optionsDetector.predict(zones)

Если на входе есть зоны, то на выходе будет столько же елементов в списках
regionIds, stateIds, countLines

Если зоны есть а списки пустые, значит вы что-то сделали неправильно, ищите ошибку.

Получается плохо натренилась модель mask_rcnn_numberplate_0100.h5 ?

from nomeroff-net.

flash1nho avatar flash1nho commented on July 25, 2024

Все, нашел ошибку у себя, извиняюсь, все ок - отрабатывает и возвращает ['ru']

from nomeroff-net.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.