Эта статья написана в соавторстве с моим коллегой и товарищем Дэниелом.

В Части 1 нашей серии мой коллега Дэниел объяснил теорию импринтинга веса. Теперь перейдем к практическому применению.

Создание камеры безопасности с питанием от Edge TPU

Вступление

Вдохновленные проектом обучаемая машина, мы думаем, что Weight Imprinting - это захватывающая технология для создания интеллектуальных камер видеонаблюдения. Хотя интеграция специальной модели обнаружения на основе нейронной сети в систему может гарантировать высокую предсказательную мощность, она также делает систему очень негибкой с точки зрения пользователя. Адаптация системы к новым сценариям использования требует сбора данных, повторного обучения и повторного развертывания модели. Шаги, которые требуют не только времени, но и экспертных знаний. С другой стороны, использование Weight Imprinting позволяет системе легко адаптироваться к новым сценариям использования, сохраняя при этом точность системы. Чтобы дать вам представление, вот несколько возможных вариантов использования такой системы:

  • Определите, если кто-то войдет в вашу квартиру.
  • Определите, заблокирована ли ваша парковка.
  • Определите, выходят ли ваши домашние животные из дома.

Мы хотели создать систему, которую не только легко настроить, но и интегрировать в существующую экосистему. Вот почему наша камера совместима с Apple HomeKit. Прежде чем углубляться в подробности проекта, давайте сделаем общий обзор замечательного оборудования, которое мы используем на протяжении всего проекта: Coral Edge TPU.

Коралловый край TPU

Edge TPU бывает двух видов. Вы можете купить самодостаточную плату для разработки или USB-ускоритель (мы будем использовать этот), который подключается к существующим системам, таким как Raspberry Pi или ПК. Магия Edge TPU - это специализированный ASIC от Google, который позволяет выполнять высокопроизводительный логический вывод по конкурентоспособной цене (80 долларов США). Ниже представлена ​​диаграмма производительности. Как видите, Edge TPU легко превосходит настольные процессоры. Учитывая невысокую цену, это довольно привлекательная упаковка.

Edge TPU поддерживает только TensorFlow. Чтобы запустить свои модели, вам нужно сделать три вещи:

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

Использование Edge TPU

Настроить Coral на Raspberry Pi очень просто. Просто запустите сценарий установки, и все готово:

wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz
tar xzf edgetpu_api.tar.gz
cd python-tflite-source
bash ./install.sh

Имейте в виду, что не все аппаратные архитектуры поддерживаются. При попытке установить пакет на Raspberry Pi Zero W мы получили ошибку
платформа не поддерживается. API Python находится на ранней стадии разработки. Реализовано только самое важное. Документация немного скудна.

К счастью, сделать Отпечаток веса на Коралле очень просто! Библиотека Python предлагает высокий уровень абстракции. Вам нужно написать всего пару строк кода. Ниже приведен пример игрушки.

# Imprint weights and save model
from edgetpu.learn.imprinting.engine import ImprintingEngine
train_dict = <YOUR TRAINING DATA>
engine = ImprintingEngine(<YOUR EMBEDDING EXTRACTOR>)
label_map = engine.TrainAll(train_dict)
engine.SaveModel("classify_model.tflite>)
# Now use it on new pictures
from edgetpu.classification.engine import ClassificationEngine
predictions=self.engine.ClassifyWithImage(<IMAGE>)

Первый шаг - загрузить соответствующий экстрактор встраивания в ImprintingEngine. Вы можете скачать экстрактор на базе MobileNetV1 здесь. Затем мы предварительно обрабатываем наши обучающие данные, создавая словарь, где ключи - это имена классов, а значения - списки уплощенных массивов NumPy изображений с измененным размером. Печать весов - это всего лишь одна строка кода: engine.TrainAll(). Полученная и сохраненная модель может быть использована ClassificationEngine для прогнозирования изображений.

Прямо сейчас можно создать новую модель классификации только на основе экстрактора встраивания. Расширение существующего классификатора новыми классами с использованием Weight Imprinting невозможно.

Камера видеонаблюдения с питанием от Coral

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

  • Raspberry Pi 3 B +
  • Камера Raspberry Pi v2.1 CSi
  • Coral Edge TPU USB-ускоритель
  • (Необязательно) для корпуса: алюминиевые профили Makerbeam и некоторые специально разработанные детали, напечатанные на 3D-принтере.

Чтобы настроить камеру, вам нужно только клонировать репо, указанное в конце этой статьи. Установите необходимые пакеты Python и запустите приложение. Введите ключ устройства, отображаемый в терминале, чтобы добавить камеру в домашнее приложение iOS. Затем откройте веб-интерфейс и укажите несколько примеров того, что он должен обнаруживать. Кроме того, не забудьте добавить фоновые изображения, на которых не должен срабатывать будильник. Наконец, нажмите кнопку веса отпечатка, и система готова к работе! Ниже вы можете увидеть процесс обучения в действии. В этом примере мы обучили систему определять, уводят ли нашего любимого Pedelec из офиса.

Теперь давайте проверим, работает ли система так, как задумано. Как видите, сигнал тревоги срабатывает, как только Pedelec покидает зону обзора, и на наш iPhone отправляется сообщение. Если модель не работает должным образом: не беспокойтесь! Соберите несколько дополнительных примеров и снова распечатайте веса.

Заключительные мысли и практическая оценка

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

Отпечаток веса, конечно, не решение для каждой задачи машинного обучения. Но если для вас жизненно важны гибкость и обучение на устройстве, взгляните на это: это стоит изучить! В ближайшие дни мы опубликуем исходный код на Github. Кроме того, не стесняйтесь делиться своими собственными проектами на основе Edge TPU в разделе комментариев ниже. 🤓