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

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

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

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

Реализация идеи на cAInvas - здесь!

Набор данных

On Kaggle от Gaurav Rajesh Sahani

Набор данных содержит 195 изображений 7 категорий индийских денежных знаков - Tennote, Fiftynote, Twentynote, 2Thousandnote, 2Hundrednote, Hundrednote, 1Hundrednote.

В наборе данных есть 2 папки - тренировочная и тестовая, каждая с 7 подпапками, соответствующими категориям валют.

Загляните в количество изображений в папках -

Это сбалансированный набор данных.

Набор данных загружается с помощью функции image_dataset_from_directory модуля keras.preprocessing, указывая путь к папкам поездов и тестов. Параметр функции указывает, что метки должны быть загружены в категориальном режиме (горячая кодировка, поэтому мы будем использовать потерю категориальной кроссентропии в нашей модели позже).

Обучающий набор содержит 153 изображения, а тестовый набор данных содержит в общей сложности 42 изображения.

Метки классов хранятся в формате списка для последующего сопоставления.

Визуализация

Давайте посмотрим на примеры из набора данных, с которым мы имеем дело -

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

Нормализация

Значения пикселей этих изображений - целые числа в диапазоне 0–255. Нормализация значений пикселей уменьшает их до значений с плавающей запятой в диапазоне [0, 1]. Это делается с помощью функции изменения масштаба модуля keras.layers.experimental.preprocessing.

Это помогает ускорить сходимость функции потерь модели.

Модель

Трансферное обучение - это применение предварительно обученной структуры модели (и веса, необязательно) для решения поставленной задачи. Модель может быть обучена на наборах данных, отличных от текущей проблемы, но полученные знания доказали свою эффективность при решении задач в областях, отличных от тех, которые использовались для обучения.

Здесь мы будем использовать модель DenseNet121 после удаления ее последнего слоя (уровня классификации) и присоединения нашего собственного, если это необходимо для текущей проблемы.

Вес модели останется неизменным, а слои, которые мы добавили в конце, будут обучены.

Модель использует категориальную кросс-энтропийную потерю модуля keras.losses, поскольку это проблема классификации с однократно закодированными метками классов (загрузка набора данных с использованием label_mode как категориального выше). Использовался оптимизатор Adam из модуля keras.optimizers, и метрика точности модели отслеживалась для проверки ее производительности.

Функция обратного вызова EarlyStopping модуля keras.callbacks используется для отслеживания метрик (по умолчанию, val_loss) и остановки обучения, если метрика не улучшается (увеличивается или уменьшается в зависимости от указанной метрики) непрерывно в течение 5 эпох (параметр терпения). Параметр restore_best_weights имеет значение true, чтобы гарантировать, что модель загружена с весами, соответствующими контрольной точке с наилучшим значением метрики в конце процесса обучения.

Модель обучается со скоростью обучения 0,01 и достигает точности ~ 83% на тестовом наборе.

Лучшие изображения или методы увеличения могут помочь улучшить производительность модели.

Матрица путаницы выглядит следующим образом -

Метрики

Прогноз

Давайте посмотрим на случайное изображение из тестового набора вместе с предсказанием модели для того же самого -

deepC

Библиотека, компилятор и среда вывода deepC предназначены для включения и выполнения нейронных сетей с глубоким обучением путем сосредоточения внимания на функциях устройств малого форм-фактора, таких как микроконтроллеры, eFPGA, процессоры и другие встроенные устройства, такие как raspberry-pi, odroid, Arduino, SparkFun Edge, RISC-V, мобильные телефоны, портативные компьютеры x86 и другие.

Компиляция модели с использованием deepC -

Перейдите на платформу cAInvas (ссылка на записную книжку указана ранее), чтобы запустить и сгенерировать свой собственный файл .exe!

Авторы: Ayisha D