С распространением и развитием нейронный сетей все чаще возникает потребность их использования на маломощных устройствах. Устройство Neural Compute Stick 2 в связке с фреймворком OpenVINO от компании Intel позволяет решить эту задачу, беря тяжелые вычисления нейросетей на себя. Благодаря этому можно запустить нейросетевой классификатор или детектор на маломощном устройстве вроде Raspberry Pi практически в реальном времени, при этом не сильно повышая энергопотребление.
Intel Neural Compute Stick 2 (NCS 2) — компактное, производительное и недорогое решение для ускорения нейронных сетей. NCS 2 представляет собой компактное устройство, по габаритам в 2-3 раза больше привычных флешек в больших корпусах. Корпус полностью металлический и обладает некими прорезями для улучшения рассеивания тепла. Подключается к USB 3.0 порту . к вашему компьютеру или Raspberry PI, и предназначено для запуска на нем уже готовых (обученных) нейросетей, обладает очень низким энергопотреблением, порядка 1 Вт.
Основой устройства служит Intel Movidius Myriad X Vision Processing Unit (VPU) — специализированный SoC, содержащий в себе 16 вычислительных ядер общего назначения, а также аппаратные компоненты для ускорения инференса нейронных сетей и компьютерного зрения. По сравнению со своим предшественником Intel Neural Compute Stick 2 обеспечивает 8-кратный прирост производительности в таких задачах, как классификация изображений и определение объектов.
Сфер применения Neural Compute Stick 2 достаточно много — распознание лиц и подсчёт людей, учёт проезжающих автомобилей, распознавание жестов, контроль зон и так далее.
Для создания сценариев работы используется набор библиотек OpenVINO (Open Visual Inference & Neural Network Optimization), в состав которых входят:
— библиотеки OpenCV;
— Intel Deep Learning Deployment Toolkit ;
— Intel Math Kernel Library for Deep Neural Networks (Intel MKL-DNN)
— Compute Library for Deep Neural Networks (clDNN)
— OpenVX;
— примеры кода.
Примеры кода доступны на официальном сайте — https://software.intel.com/ru-ru/openvino-toolkit/documentation/code-samples.
Рассмотрим подключение NCS2 к микрокомпьютеру Raspberry pi 4.
На microSD 32 Гб установим последнюю версию Raspbian Buster, Страница для скачивания образа https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit.
Обновим систему
sudo apt-get update && sudo apt-get upgrade
Необходимо установить следующие пакеты.
Установим пакеты разработчика
sudo apt-get install build-essential cmake unzip pkg-config
Набор библиотек изображений и видео
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get установить libxvidcore-dev libx264-dev
Установим графический интерфейс GTK
sudo apt-get install libgtk-3 -dev
Установим пакет, который может помочь уменьшить количество предупреждений GTK
sudo apt-get install libcanberra-gtk*
Установим два пакета, которые содержат численные оптимизации для OpenCV
sudo apt-get install libatlas-base-dev gfortran
Установим заголовки разработки Python 3
sudo apt-get install python3-dev
Все готово к установке OpenVINO
Установка OpenVINO
Загружаем набор инструментов OpenVINO для ОС Raspbian l_openvino_toolkit_runtime_raspbian_p_<version>.tgz. Загружаем последнюю версию из хранилища пакетов OpenVINO ™ Toolkit,
wget https://storage.openvinotoolkit.org/repositories/openvino/packages/2021.2/l_openvino_toolkit_runtime_raspbian_p_2021.2.185.tgz
Создаем установочную папку
sudo mkdir -p /opt/intel/openvino
Распаковываем архив
sudo tar -xf l_openvino_toolkit_runtime_raspbian_p__2021.2.185.tgz --strip 1 -C /opt/intel/openvino
Компоненты инструментария OpenVINO установлены. Необходимо установить внешние программные зависимости, настроить среду и настроить правила USB.
Установим CMake * версии 3.7.2 или выше
sudo apt install cmake
Перед компиляцией и запуском приложений набора инструментов OpenVINO необходимо обновить несколько переменных среды. Запускаем сценарий для установки переменных среды:
source /opt/intel/openvino/bin/setupvars.sh
Переменные среды OpenVINO удаляются при закрытии оболочки. Как вариант, вы можете навсегда установить переменные среды следующим образом:
echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc
Чтобы проверить изменения, откройте новый терминал. Вы увидите следующее:
Добавить правили USB
Добавляем текущего пользователя Linux в группу users :
sudo usermod -a -G пользователи "$ (whoami)"
Чтобы изменения вступили в силу, необходимо Выйти и заново войти в систему
Чтобы выполнить логический вывод на Intel® Neural Compute Stick 2, установим правила USB:
sh /opt/intel/openvino/install_dependencies/install_NCS_udev_rules.sh
Теперь можно подключить Intel® Neural Compute Stick 2 к USB 3.0.
Проверяем, выполнив команду
dmesg
Установка OpenVINO завершена.
Пример обнаружения лиц с использованием примеров механизма вывода из набора инструментов OpenVINO
Создадим директорию examples1/ObjectDetectionSample
mkdir examples1 && cd examples1 mkdir ObjectDetectionSample && cd ObjectDetectionSample
Скомпилируем пример
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a" /opt/intel/openvino/deployment_tools/inference_engine/samples/cpp make -j2 object_detection_sample_ssd
Загрузим предварительно обученную модель распознавания лиц с помощью Model Downloader
cd ~/examples1/ObjectDetectionSample
git clone --depth 1 https://github.com/openvinotoolkit/open_model_zoo cd open_model_zoo/tools/downloader python3 -m pip install -r requirements.in python3 downloader.py --name face-detection-adas-0001
Местоположение загруженных моделей
Приложение выводит изображение ( out_0.bmp) с обнаруженными лицами, заключенными в прямоугольники.
Загрузим в папку ~/examples1/ObjectDetectionSample несколько изображений и запустим пример
./armv7l/Release/object_ detection_sample_ssd -m open_model_zoo/tools/downloader/intel/face-detection-adas-0001/FP16/face-detection-adas-0001.xml -d MYRIAD -i 06.jpg
Вот примеры распознавания
Распознавание лиц на потоковом видео.
Добавим камеру. Подключаем камеру к Raspberry pi
Добавим поддержку камеры в системе
sudo raspi-config
Выбираем пункт Interface Options —> P1 Camera —> Yes —> Ok —> Finish и перезагружаемся
Проверить работу камеры можно с помощью команды raspistill
$ raspistill -o test.jpg
Команда создаст файл test.jpg в домашнем каталоге
Для записи видео команда raspivid. Например, записать видео длительностью в 30 секунд:
raspivid -o vid.h264 -t 30000
Скачаем скрипт детектирование лиц на потоковом видео с камеры
cd ~/examples1/ObjectDetectionSample git clone https://github.com/BenedictusAryo/OpenVino_face-detection_python
И запускаем скрипт
cd ~/examples1/ObjectDetectionSample/OpenVino_face_detection_python python3 face_detection.py -d MYRIAD
Скрипт использует модель face-detection-adas-0001