/MobileNet_FPGA_MNIST_letters

Primary LanguageVerilogApache License 2.0Apache-2.0

Выполнение работы

Часть 1

Подготовительная работа

Необходимо провести предварительную подготовку системы. Для того, чтобы все работало сразу после загрузки, необходимо установить Python версии 3.6.1 (это важно, именно эта версия). ссылка: https://www.python.org/downloads/release/python-361/

Если на компьютере присутствует другая версия Python, то ее необходимо удалить, либо изменить настройки системных переменных и поставить версию 3.6.1 по умолчанию.

После загрузки Python необходимо установить следующий пакет команд, указанный в Таблице 1, при помощи следующей команды (обязательно указывать версию):

pip install [название библиотеки]==[версия]

Keras 2.1.5 matplotlib 3.1.1 numpy 1.17.3 opencv-python 4.1.1.26 pandas 0.25.3 Pillow 6.2.1 tensorboard 1.10.0 tensorflow 1.5.0 tensorflow-estimator 2.0.1

После настройки системы необходимо скачать проект из репозитория при помощи следующей команды в Git консоли: git clone git@github.com:ZFTurbo/Verilog-Generator-of-Neural-Net-Digit-Detector-for-FPGA.git

Выполнение

После успешной загрузки системы необходимо последовательно запустить в консоли файлы из списка при помощи команды: python [имя файла]

  • r01_train_neural_net_and_prepare_initial_weights.py
  • r02_rescale_weights_to_use_fixed_point_representation.py
  • r03_find_optimal_bit_for_weights.py
  • r04_verilog_generator_grayscale_file.py
  • r05_verilog_generator_neural_net_structure.py

В результате выполнения программ можно будет получить информацию, описанную на рисунках.

При первом запуске файла под номером 2 будет загружен датасет MNIST, который представляет собой набор из 70000 картинок с изображением рукописных цифр от 0 до 9. Затем будет осуществлена подгонка весов нейронной сети.

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

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

Часть 2

Подготовка

Так как задание предполагает переобучение нейронной сети, то необходимо провести исследование программного кода. Из названия первого файла, можно сделать вывод, что обучение проходит в нем. Переходим в часть if name == 'main': , где происходит выполнение основного кода. Из следующей строки:

if not os.path.isfile(final_model_path) or continue_training == 1:

можно сделать вывод, что при отсутствии файлов с расширением .h5 в директории \weights происходит переобучение на основе датасета, возвращаемого функцией

def load_mnist_data(type='channel_last')

Исходя из этого, приходим к выводу что в этой функции необходимо подменить загружаемый датасет.

Устанавливаем пакет emnist, который содержит в себе популярный датасет из рукописных букв A-Z и a-z размером 130000 картинок, используя команду

pip install emnist

Выполнение

Производим замену функции на функцию представленную в Приложении 1 в главе Приложения

Также необходимо изменить архитектуру нейронной сети в функции:

def keras_model_low_weights_digit_detector()

Заменив выходной слой размерности 10 на 26, чтобы нейронная сеть распознавала 26 классов.

Затем запускаем первый файл и ждем 7 часов.

После успешной тренировки сети, проверяем ее работу на тестовом датасете из первых 10 букв алфавита сгенерированном при помощи кода, указанного в Приложении 2 в главе Приложения.

Точность снизилась на некоторое значение, но можно сказать, что сеть натренирована удачно.

После этого выполняем те же действия, что и в первой части. На камере должны выводиться цифры от 0 до 9 обозначающие следующие буквы:

0 1 2 3 4 5 6 7 8 9

A B C D E F G H I J