Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Equipment >> Промышленный робот

Как реализовать распознавание цифр с помощью TensorFlow Lite с использованием микроконтроллера кроссовера i.MX RT1060

В этой статье рассматривается обнаружение и распознавание цифр с использованием MNIST eIQ в качестве примера, который состоит из нескольких частей - распознавание цифр выполняется моделью TensorFlow Lite , а графический интерфейс пользователя используется для повышения удобства использования устройства i.MX RT1060.

Кроссовер MCU i.MX RT1060 одинаково подходит для экономичных промышленных приложений и высокопроизводительных потребительских товаров с большим объемом данных, которым требуются функции отображения. В этой статье демонстрируются возможности этого микроконтроллера на базе Arm® Cortex®-M7, объясняется, как реализовать встроенное приложение машинного обучения, которое может обнаруживать и классифицировать рукописный ввод пользователя.

С этой целью в данной статье основное внимание уделяется популярному примеру MNIST eIQ, который состоит из нескольких частей:распознавание цифр выполняется моделью TensorFlow Lite, а графический интерфейс пользователя используется для повышения удобства использования устройства i.MX RT1060.

Взгляд на набор данных и модель MNIST

Набор данных, используемый в этой статье, состоит из 60 000 обучающих и 10 000 тестовых примеров центрированных изображений рукописных цифр в оттенках серого. Каждый образец имеет разрешение 28x28 пикселей:

Рисунок 1. Пример набора данных MNIST

Образцы были собраны у учащихся старших классов и сотрудников Бюро переписи населения США. Таким образом, набор данных содержит в основном примеры чисел, как они написаны в Северной Америке. Например, для чисел в европейском стиле необходимо использовать другой набор данных. Сверточные нейронные сети обычно дают лучший результат при использовании с этим набором данных, и даже простые сети могут обеспечить высокую точность. Поэтому TensorFlow Lite был подходящим вариантом для этой задачи.

Реализация модели MNIST, выбранная для этой статьи, доступна на GitHub как одна из официальных моделей TensorFlow и написана на Python. Скрипт использует библиотеку Keras и tf.data, tf.estimator.Estimator и tf.layers API, и он создает сверточную нейронную сеть, которая может обеспечить высокую точность на тестовых образцах:

Рисунок 2. Визуализация используемой модели.

Соответствующее определение модели показано ниже на рисунке 3.

Рисунок 3. Определение модели, соответствующее визуализации модели.

Что такое TensorFlow Lite и как он используется в этом примере?

TensorFlow - это хорошо известный фреймворк глубокого обучения, который широко используется в производстве крупными компаниями. Это кроссплатформенная библиотека глубокого обучения с открытым исходным кодом, разработанная и поддерживаемая Google. Доступны низкоуровневый API Python, который полезен для опытных разработчиков, и библиотеки высокого уровня, подобные тем, которые используются в этом случае. Кроме того, TensorFlow поддерживается большим сообществом и отличной онлайн-документацией, учебными ресурсами, руководствами и примерами от Google.

Чтобы дать машинам с ограниченными вычислительными возможностями, таким как мобильные устройства и встроенные решения, возможность запускать приложения TensorFlow, Google разработал платформу TensorFlow Lite, которая не поддерживает полный набор операций платформы TensorFlow. Это позволяет таким устройствам выполнять логический вывод на предварительно обученных моделях TensorFlow, преобразованных в TensorFlow Lite. В качестве вознаграждения эти преобразованные модели не могут быть обучены дальше, но могут быть оптимизированы с помощью таких методов, как квантование и отсечение.

Преобразование модели в TensorFlow Lite

Обученная модель TensorFlow, описанная выше, должна быть преобразована в TensorFlow Lite, прежде чем ее можно будет использовать на i.MX RT1060 MCU. С этой целью он был преобразован с помощью tflite_convert, и по соображениям совместимости для обучения и преобразования модели использовалась версия 1.13.2 TensorFlow:

tflite_convert

--saved_model_dir =

--output_file =convert_model.tflite

--input_shape =1,28,28

--input_array =заполнитель

--output_array =Softmax

--inference_type =FLOAT

--input_data_type =FLOAT

--post_training_quantize

--target_ops TFLITE_BUILTINS

Наконец, утилита xdd использовалась для преобразования модели TensorFlow Lite в двоичный массив для загрузки приложением:

xxd -i convert_model.tflite> convert_model.h

xdd - это утилита для создания шестнадцатеричного дампа, которую можно использовать для преобразования двоичной формы файла в соответствующее шестнадцатеричное представление дампа и наоборот. В этом случае двоичный файл TensorFlow Lite преобразуется в файл заголовка C / C ++, который можно добавить в проект eIQ. Процесс преобразования и утилита tflite_convert более подробно описаны в руководствах пользователя eIQ. Утилита также описана в официальной документации Google.

Краткое знакомство со Embedded Wizard Studio

Чтобы использовать графические возможности MIMXRT1060-EVK, в этот проект был включен графический интерфейс. Для этой цели использовалась Embedded Wizard Studio, IDE для разработки графических интерфейсов для приложений, которые будут работать на встроенных устройствах. Хотя доступна бесплатная ознакомительная версия IDE, эта версия ограничивает максимальную сложность графического пользовательского интерфейса, а также добавляет водяной знак поверх графического интерфейса.

Одним из преимуществ Embedded Wizard Studio является ее способность создавать проекты MCUXpresso и IAR на основе SDK XNP, а это означает, что после создания пользовательского интерфейса в среде IDE разработчик может немедленно протестировать его на своем устройстве.

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

Однако несколько шагов преобразования должны объединить проект GUI с существующим проектом приложения eIQ, поскольку сгенерированный проект GUI находится на C, а примеры qIQ - на C / C ++. Следовательно, некоторые файлы заголовков должны иметь свое содержимое, окруженное:

#ifdef __cplusplus

extern "C" {

#endif

/ * код C * /

#ifdef __cplusplus

}

#endif

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

Готовое приложение и его функции

Графический интерфейс приложения отображается на сенсорном ЖК-дисплее. Он содержит область ввода для ввода цифр и область, в которой отображается результат классификации. Кнопка запуска вывода выполняет вывод, а кнопка очистки очищает поля ввода и вывода. Приложение выводит результат и достоверность прогноза на стандартный вывод.

Рисунок 4. Графический интерфейс примера приложения содержит поле ввода, поле вывода и две кнопки. Результат и достоверность также выводятся на стандартный вывод.

Точность модели TensorFlow Lite

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

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

Подробности реализации

Embedded Wizard использует слоты в качестве триггеров для реакции на взаимодействия с графическим интерфейсом пользователя, например, когда пользователь проводит пальцем по области ввода. В этом случае слот постоянно рисует под пальцем линию шириной в пиксель. Цвет этой линии определяется константой основного цвета.

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

Поскольку растровые изображения из модели машинного обучения имеют размер всего 28x28 пикселей, а область ввода была создана в виде квадрата 112x112, чтобы сделать использование приложения более удобным, при уменьшении изображения требуется дополнительная предварительная обработка. В противном случае этот процесс слишком сильно исказит изображение.

Сначала создается массив 8-битных целых чисел с размерами области ввода и заполняется нулями. Затем изображение и массив повторяются, и каждый нарисованный пиксель в изображении сохраняется как 0xFF в массиве. При обработке ввода пиксели основного цвета считаются белыми, а все остальное - черным. Кроме того, каждый пиксель расширяется до квадрата 3x3, чтобы сделать линию более толстой, что сделает уменьшение изображения более безопасным. Перед масштабированием изображения до требуемого разрешения 28x28 рисунок обрезается и центрируется, чтобы напоминать изображения MNIST:

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

Модель машинного обучения выделяется, загружается и подготавливается при запуске приложения. При каждом запросе вывода входной тензор модели загружается с входными данными предварительной обработки и передается модели. Входные данные должны быть скопированы в тензорный пиксель за пикселем, а целочисленные значения должны быть преобразованы в значения с плавающей запятой в процессе. Это примечание по применению NXP содержит подробный объем памяти, занимаемый кодом.

TensorFlow Lite:жизнеспособное решение

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

Серия микроконтроллеров кроссовера i.MX RT может быть реализована во множестве встраиваемых приложений, как в примере, приведенном в этой статье. У NXP есть обширная информация о серии микроконтроллеров кроссовера i.MX RT, которые могут помочь преодолеть разрыв между производительностью и удобством использования.

Для получения дополнительной информации о микроконтроллерах i.MX RT Crossover посетите страницу продукта i.MX RT.

Отраслевые статьи - это форма контента, позволяющая отраслевым партнерам делиться полезными новостями, сообщениями и технологиями с читателями All About Circuits, что не подходит для редакционного контента. Все отраслевые статьи подлежат строгим редакционным правилам с целью предлагать читателям полезные новости, технические знания или истории. Точки зрения и мнения, выраженные в отраслевых статьях, принадлежат партнеру, а не обязательно All About Circuits или ее авторам.


Промышленный робот

  1. Как уменьшить количество отходов с помощью автономных роботов
  2. Распознавание цифр AI с помощью PiCamera
  3. Оптимизация управления питанием с помощью микроконтроллера кроссовера i.MX RT500 от NXP
  4. Общие сведения о включении DSP с помощью микроконтроллера кроссовера i.MX RT500 от NXP
  5. Как создать вариационный автоэнкодер с TensorFlow
  6. Использование эпоксидной смолы для художественных работ
  7. Уход за станками с ЧПУ? Вот как это сделать с помощью кобота
  8. Как начать программирование роботов Yaskawa
  9. Как начать работу с RoboDK для Raspberry Pi
  10. Как вызвать функциональный блок из клиента OPC UA с помощью информационной модели