Обнаружение людей с помощью Arduino и машинного обучения на TensorFlow


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

Внешний вид проекта обнаружения людей с помощью Arduino и машинного обучения на TensorFlow

Ранее на нашем сайте мы рассматривали следующие проекты с использованием машинного обучения:

Необходимые компоненты

Аппаратное обеспечение

  1. Плата Arduino Nano 33 BLE Sense.
  2. Камера Arducam Mini 2MP Plus – OV2640.
  3. Соединительные провода.

Программное обеспечение

  1. Arduino IDE.
  2. TensorFlow.

Общие принципы работы проекта

В нашем проекте для обнаружения людей мы будем выполнять следующие основные операции:

  1. Сбор набора данных (VisualWake Words).
  2. Разработка архитектуры модели. В нашем случае это будет сверточная нейронная сеть MobileNet v1.
  3. Тренировка (обучение), проверка и тестирование модели.
  4. Преобразование модели с помощью инструмента TensorFlow Lite Converter.
  5. Выдача результатов работы модели: обнаружено лицо или нет, статистика обнаружений, зеленый/красный светодиод.
  6. Оценка эффективности работы модели.

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

В обычных условиях сервис TensorFlow используется для построения и обучения больших моделей машинного обучения (Machine Learning models). Модель в сервисе TensorFlow – это набор инструкций, которые сообщают интерпретатору, как преобразовать входные данные для получения выходных данных. Чтобы использовать нашу модель, мы будем загружать ее в память и выполнять ее с помощью интерпретатора TensorFlow.

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

Запуск модели

После преобразования модели ее можно разместить в микроконтроллере с помощью библиотеки “TensorFlow Lite forMicrocontrollers C++”. Код принимает необработанные входные данные от датчиков и преобразует их в ту же форму, в которой была обучена (натренирована) модель. Эти преобразованные данные передаются в модель и запускают весь процесс на выполнение.

Результатом работы модели являются выходные данные, содержащие прогнозы. В случае нашей модели “обнаружение человека” результатом будет оценка для каждого из наших классов “человек” и “нет человека”. В этих моделях, которые классифицируют данные, обычно баллы для всех классов суммируются, и класс с наибольшим баллом будет являться прогнозом. Чем больше разница между баллами, тем выше уверенность (степень доверия/достоверности) в прогнозе. В нашем приложении мы используем оценку от -100 до +100. Примеры набранных баллов и оценок степени достоверности прогноза приведены в следующей таблице.

Примеры набранных баллов и оценок степени достоверности прогноза для нашей модели

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

Пример работы модели

Основы обнаружения людей

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

Получение визуального набора данных

Набор визуальных данных (Wake WordsData) может быть получен путем повторной маркировки изображений набора данных COCO метками, указывающими на то, присутствует ли интересующий нас объект или нет. Общедоступный набор данных COCO содержит естественные изображения повседневных сцен, которые содержат несколько объектов. Новые метки создаются на основе следующих критериев:

Метка 1 – по крайней мере, одна ограничивающая рамка, соответствующая объекту (например, человеку)

Метка 0 – не содержит никаких объектов из класса (например, person)

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

Архитектура приложения

Наше встраиваемое в плату Arduino приложение машинного обучения для обнаружения людей выполняет следующую последовательность действий:

  • получение входного сигнала с камеры;
  • предварительная обработка входных данных для извлечения объектов, подходящих для ввода в модель;
  • запуск модели на выполнение;
  • постобработка выходных данных модели;
  • используйте полученной информации для выполнения определенных действий (загораются разные светодиоды).

Данные изображения представлены в виде массива значений пикселей. Мы получаем данные изображения от встроенного модуля камеры (Arducam Mini 2MP Plus), который предоставляет данные в этом формате, поэтому для них не требуется большого количества операций предварительной обработки. Но будет необходимо выполнить преобразование цветного изображения в изображение с оттенками серого. Приложение делает снимок данных с камеры, вводит их в модель и определяет, какой выходной класс был обнаружен, затем отображает результаты в окне монитора последовательной связи и с помощью светодиода.

На рисунке ниже показана структура приложения для обнаружения человека:

Структура нашего приложения для обнаружения человека

Данная модель обнаружения человека использует архитектуру MobileNet, обученную на основе набора данных Visual Wake Words. Модель принимает в качестве входных данных изображение в оттенках серого размером 96x96 пикселей, каждое изображение представляет собой 3D-тензор с формой (96, 96, 1). Конечное измерение (1) - это значение, представляющее один пиксель, изменяющийся от 0 (черный) до 255 (белый).

Модели выводят две вероятности в диапазоне от -100 до +100: одна указывает на то, что во входных данных присутствовал человек, а другая – на то, что человека не было.

Программа проекта разделена на 5 основных частей:

- Main Loop (основной цикл) – встроенное приложение, которое исполняется в бесконечном цикле;

- Image provider – захватывает изображение с камеры и записывает его во входной тензор;

- TensorFlow Lite interpreter – запускает на выполнение модель TensorFlow Lite, которая преобразует входное изображение в набор вероятностей;

- Model – массив данных, который обрабатывается интерпретатором;

- Detection responder (устройство реагирования на обнаружение) – считывает выходные вероятности и отображает их.

Схема проекта

Нам необходимо поместить код нашей программы в плату Arduino Nano 33 BLESense. В нашем проекте мы будем использовать камеру Arducam Mini 2MPPlus, ее схема подключения к плате Arduino Nano 33 BLESense показана в следующей таблице.

Схема соединений камеры Arducam Mini 2MPPlus с платой Arduino Nano 33 BLESense

На следующих двух рисунках показаны результаты тестирования работы проекта. Горящий зеленый светодиод свидетельствует об обнаружении человека в поле действия камеры, а красный – о том, что человек не обнаружен.

Тестирование работы проекта - человек обнаружен

Тестирование работы проекта - человек не обнаружен

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

Источник статьи

(Проголосуй первым!)
Загрузка...
497 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *