ria-com / nomeroff-net

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

OCR on Coral #138

Closed SergeyLev closed 3 years ago

SergeyLev commented 3 years ago

Добрый день! Есть идея запустить OCR на Coral Edge TPU, чтобы GPU ксавьера не загружать. Сначала решил спросить была ли попытка уже и есть ли смысл!

SergeyLev commented 3 years ago

Попытался конвертировать модель в .tflite uint8, но выскакивает ошибка. ValueError: Failed to parse the model: pybind11::init(): factory function returned nullptr.

Возможно версия tensorflow не подходит, сейчас использую 2.3.1. Которая версия была использована при обучении? Скрипт конвертации

def representative_data_gen():
    dataset_path = 'c:/DNet/nomeroff-net/datasets/autoriaNumberplateOcrEu-2020-10-09/train/img'
    dataset_list = tf.data.Dataset.list_files(dataset_path)
    for i in range(100):
        image = next(iter(dataset_list))
        image = tf.io.read_file(image)
        image = tf.io.decode_jpeg(image, channels=3)
        image = tf.image.resize(image, [1024, 1024])
        image = tf.cast(image / 255., tf.float32)
        image = tf.expand_dims(image, 0)
        yield [image]

converter = tf.lite.TFLiteConverter.from_saved_model(SAVED_MODEL_DIR)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
converter.representative_dataset = representative_data_gen

tflite_model = converter.convert()

from os.path import join

tflite_model_path = join(SAVED_MODEL_DIR, 'eu_ocr_model.tflite' )

with open(tflite_model_path, 'wb') as f:
    f.write(tflite_model)
ApelSYN commented 3 years ago

У меня небыло времени попробовать работу Nomeroff Net на Jetson Xavier. Но на эти выходные я все же запустил все на Jetson Xavier. Все проадейтил до последних обновлений Python 3.6+JetPack4.5 Я поставил:

При запуске необходимо установить некоторые переменные окружения:

OPENBLAS_CORETYPE=ARMV8 CUDA_LAUNCH_BLOCKING=1 python3 ./<ваш скрипт>.py

Если этого не делать то возникает ошибка Segmentation fault (core dumped)

TFLite я не пробовал, если запускать все в TensorFlow 1.4.1 и Torch 1.8.0, то бенчмарк показывает производительность 470ms на обработку одного фото. Это неплохая производительность для такого компактного устройства, которое потребляет всего 30W.

На Jetson Nano можно будет запустить только урезаный вариант, т.к. ему не хватит RAM.

Что касается Coral Edge TPU, у меня нету такого устройства для экспериментов. На первый взгляд, он врядли подойдет, т.к. у него очень мало RAM на борту.

SergeyLev commented 3 years ago

Там с коралом еще другая проблема, он не знает что такое GRU. Я сейчас пишу скрипт конвертации в TensorRT в колабе. Когда закончу, выложу. Тогда можно будет модель запускать в тенсорах, а не кудах. Yolov4 в них в 4 раза быстрее работает.

SergeyLev commented 3 years ago

Ссылка на гист. есть еще проблемы. https://gist.github.com/SergeyLev/6f16ea12795fd54c45c75efdfbaf7ba9

ApelSYN commented 3 years ago

Спасибо, многим кто пробует запустить на компатных устройствах ваша инфа будет полезной.