intel neural compute stick 2 что это

Intel Neural Compute Stick 2: компьютер-брелок для систем машинного обучения

Корпорация Intel анонсировала устройство Neural Compute Stick 2 (NCS 2) — компактный вычислительный модуль, предназначенный для выполнения задач, связанных с искусственным интеллектом, машинным обучением и пр.

Летом прошлого года, напомним, дебютировал компьютер-брелок Neural Compute Stick под брендом Movidius (Intel купила эту компанию в 2016 году). Основой гаджета является вычислительный узел Movidius Vision Processing Unit (VPU).

Устройство Neural Compute Stick 2 получило вычислительный блок Intel Movidius Myriad X VPU с шестнадцатью специализированными ядрами SHAVE. Говорится о наличии нейронного движка.

В целом, как утверждается, новое изделие опережает по производительности оригинальный модуль Neural Compute Stick в восемь раз.

Устройство подключается к компьютеру через порт USB 3.0 Type-A, не требуя наличия в системе какого-либо дополнительного оборудования. Более того, нет необходимости в привязке к облачным платформам.

Ожидается, что Neural Compute Stick 2 заинтересует разработчиков, реализующих проекты в области робототехники, беспилотных летательных аппаратов, систем машинного зрения, устройств для «умного» дома и пр. Цена новинки — 100 долларов США.

Источник

Movidius Neural Compute Stick — искуственный разум на флешке

20 июля Intel объявила о выпуске Movidius Neural Compute Stick — миниатюрного ускорителя для решений, связанных с искусственным интеллектом, нейронными сетями и глубоким изучением. Выполненный в формате USB-флешки, ускоритель позволит реализовывать элементы искусственного разума на самых разнообразных платформах и устройствах, что, думаю, по достоинству оценят любители робототехники, летающих аппаратов, а также разработчики разнообразных интеллектуальных устройств.

Компания Movidius, приобретенная Intel в конце прошлого года, специализируется на разработке аппаратных и программных компонентов искусственного разума. Основой Neural Compute Stick является разработанный Movidius Vision Processing Unit (VPU) Myriad 2 — специализированное вычислительное устройство, обладающее малым энергопотреблением (всего 1 Ватт), но при этом приличной производительностью — 100 Гигафлопс. Такие характеристики позволяют Movidius Neural Compute Stick работать полностью автономно, без доступа к интернету и облачным сервисам.

Movidius Neural Compute Stick позволяет быстро и удобно прототипировать, профилировать и настраивать потоки в сверточных нейронных сетях (Convolutional Neural Network, CNN) для нужд конечных приложений. Для разработчиков создан специализированный Neural Compute SDK. Таким образом, устройство, оснащенное USB-портом может стать интеллектуальным, автономным и самообучающимся.

Источник

Под капотом OpenVINO (Intel Neural Stick)

Введение

Привет, Habr! Сегодня я хочу рассказать немного об аппаратном ускорителе Neural Compute Stick. Расскажу с точки зрения hardware-разработчика.

Что внутри OpenVINO

Известно, что OpenVINO взаимодействует с Intel Neural Compute Stick, а сердцем самого стика является чип Movidius Myriad X. Некоторые характеристики данного чипа можно найти в блоге компании Intel. В частности из статьи мы узнаем следующие характеристики Myriad X:

Векторные процессоры: 16

Основные интерфейсы: 16x MIPI lanes, USB 3.1, PCIe 3.0

20+ ускорителей обработки медиа

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

В частности, ресурс wikichip.org повествует о том, что у старых версий чипа есть еще и такие интерфейсы: SDIO, SPI, I2C, I2S, UART, JTAG и датчик температуры. В репозитории OpenVINO, в файле ie_plugin_config.hpp находим крохотное подтверждение информации с wikichip.org, что датчик температуры действительно есть: Metric to get a float of device thermal. String value is «DEVICE_THERMAL». Кроме того, SHAVE (Streaming Hybrid Architecture Vector Engine) имеют возможность отключать тактирование, что в целом интересно для LowPower устройств. Это говорит о том, что возможности чипа куда шире, чем просто ускоритель Deep Neural Network (DNN).

Пожалуй, на этом информация, которая имеет хоть какое-то отношение к hardware, заканчивается.

Интерфейсы

MIPI-CSI Как указано выше, Myriad X действительно имеет 16 MIPI-CSI lanes, если быть точнее, то 8 MIPI-CSI интерфейсов, которые работают в 2-lane режиме. Так же они могут работать в паре, в 4-lane режиме. Работа с несколькими сенсорами позволяет реализовать стерео зрение. Для его реализации на чипе присутствуют аппаратные ускорители.

MIPI-DSI Кроме того, чип имеет MIPI-DSI интерфейсы, что позволяет использовать Myriad X в проектировании автономных интерактивных устройств с дисплеем. Как пример, первое что приходит в голову: ATM, фотобудка (с поиском лица на фото и т.п.).

I2C Было бы странно, если бы в чипе была реализация MIPI, но не было бы I2C. С этим всё понятно.

I2S Действительно, Myriad X имеет возможность подключения аудио-устройств, что в симбиозе с DNN ускорителем делает его весьма интересным для применения в умных колонках, как например «Яндекс.Станция«

Пример применения (капля пиара)

Мы использовали аппаратные возможности Intel Myriad X в проекте камеры аналитики для ритейла под кодовым названием Jachin.

Камера представляет из себя аппаратную реализацию на базе чипа MA2085 с двумя цветными сенсорами и Ethernet. По своей задумке, камера вешается над входом в магазин или какой-либо другой интересующий нас объект. Один из сенсоров смотрит вниз и один в торговый зал.

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

Сколько человек вошло/вышло из магазина

Сколько времени провел человек в магазине

По косвенным данным производится вывод о посещаемости магазина в зависимости от

Праздничный или будний день

Благодаря встроенному JPEG энкодеру, в устройстве реализован проброс легковесного стрима на сервер: пользователь имеет возможность через личный кабинет посмотреть в режиме реального времени, что у него происходит в торговом зале.

Читайте также:  epic web helper что такое

Мы не стали использовать H.264/H.265 только по той причине, что видеонаблюдение не является основным функционалом камеры.

Это краткое описание функционала, которое я могу рассказать как firmware разработчик. Бизнес, бэкэнд, фронтэнд и прочие составные части проекта в данной статье рассматриваться не будут. Если вам интересно взглянуть на описанную камеру, то вы можете увидеть её в разборе на анимации главной страницы https://smass.tech

Вернемся к процессу разработки на Myriad X.

Firmware

Очевидно, что поддержка работы периферии такого кристалла требует ОС. Когда OpenVINO загружает mvcmd файл внутрь Neural Computer Stick, на этом стике запускается RTEMS. Эта информация подтверждается и в открытых источниках от пользователя walts.

Философия разработки автономных решений на базе Myriad X практически наследует уже знакомую пользователям OpenVINO идею Pipeline’ов. Каждый элемент Pipeline работает в отдельном потоке, обрабатывает информацию, преобразует ее и передает следующему звену через очередь сообщений операционной системы.

Для реализации своих идей в распоряжении разработчика есть стандартные библиотеки C:

И стандартные библиотеки С++:

Конечно, ресурсы чипа ограничены, поэтому разработчикам крайне необходимо знать азы написания эффективного кода: как ведут себя контейнеры в C++, как работать с указателями и т.п.

Из информации на официальном сайте Intel, SDK также включает специализированную инфраструктуру FLIC в разработке конвейеров обработки изображений. FLIC (Frame Level Isp Cv) представляет из себя плагин с конкретным функциональным назначением, который работает в отдельном потоке операционной системы.

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

Оба компонента имеют механизмы связывания между собой.

Камера на Myriad X

Рассмотрим упрощенный пример того, как сделать USB камеру на Myriad X.

У нас есть сенсор, подключенный по MIPI к Myriad X. Для того, чтобы сохранить кадр с сенсора нам нужно сначала выделить для него память. Для этого используется FLIC плагин, который выделяет область памяти фиксированного размера из статического массива.

Подключаем плагин, реализующий работу с MIPI. Упрощенно, у него используется два основных порта. Первый, receiver, связывается с sender плагина из п.1, чтобы получить пустой фрейм. Полученные по MIPI данные заполняют пустой фрейм. Когда будет получен сигнал End Of Frame, во второй порт, sender, будет передан указатель на область памяти, где уже содержатся полезные данные в формате RGRB.

Подключаем третий плагин, в котором производится дебаеризация данных. Receiver плагина подключается к sender из п.2. Полученный фрейм из п.2 переводится в формат YUV и передается в sender.

На практике, нам необходим еще один плагин, который выделит память под дебаеризованный фрейм (тоже самое, что в п.1). По большому счету, всегда, когда происходит преобразование данных, нам необходимо выделять новые пустые фреймы: вычитываем из области памяти данные в формате RGRB, преобразуем, записываем в другую область памяти результат в YUV формате. Но для упрощения статьи такие детали далее будут опускаться.

Подключаем плагин H.264 энкодера. Он принимает данные в формате YUV от sender в плагине п.3, производит кодирование и отправляет указатель на закодированные данные в sender.

Подключаем плагин вывода данных по USB. Как уже говорилось в начале статьи, в SDK реализован протокол коммуникации XLink, что используется в OpenVINO. Хорошо, берем плагин XLink. Он не имеет порта sender, но имеет receiver. Его мы подключаем к sender плагина H.264 энкодера. Как только от энкодера придут данные в плагин XLink, они будут переданы по USB хосту.

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

MIPI генерирует фреймы с фиксированным FPS, пусть для примера он будет равен 20, то есть период следования фреймов 50мс. За 50мс программа должна успеть принять данные, передать их в энкодер и далее по USB. Предположим, возникли проблемы с USB, и весь цикл обработки одного фрейма занял 62мс. В такой ситуации фрейм, выделенный в п.1, не успеет вовремя вернуться обратно в пул, и тогда новый кадр с сенсора будет пропущен. Как правило, плагин из п.1 использует статический массив, в котором умещается сразу несколько пустых фреймов.

DEBUG

Стоит отметить, что отладка кода представляет из себя не менее увлекательный процесс, чем его написание. К счастью или нет, но мне очень нравится среда разработки Visual Studio, ну вот нравится и всё, что бы мне не говорили про VIM, Sublime, gedit и прочее. Соответственно, после Visual Studio, со всеми ее брейкпоинтами и пошаговой отладкой было довольно непривычно отлаживать код через CLI интерфейс:

Запуск отладки через консольную команду для утилиты, работающей через JTAG (тут ничего удивительного)

Установка breakpoint через консольную команду для утилиты, работающей через JTAG. В качестве аргумента указывается номер строки конкретного файла проекта.

Пошаговая отладка тоже через консоль

Заключение

Я не планировал в рамках данной статьи давать исчерпывающие ответы на аппаратные и программные возможности Myriad X, а лишь хотел рассказать разработчикам, что Intel Myriad X может найти более широкое применение, нежели просто USB ускоритель DNN.

Подводя промежуточные итоги, хотел бы сказать, что Myriad X довольно интересный чип при своем энергопотреблении. Огромное количество документации поражает воображение. Но, если изучить эту документацию, то с Myriad X перед разработчиками открываются довольно мощные возможности в проектировании AI устройств: от интеллектуальных беспилотников на аккумуляторном питании, до банкоматов с распознаванием лиц.

Читайте также:  с какими начинками сочетается шоколадный бисквит

Источник

Raspberry Pi 4 и Intel Neural Compute Stick 2

С распространением и развитием нейронный сетей все чаще возникает потребность их использования на маломощных устройствах. Устройство Neural Compute Stick 2 в связке с фреймворком OpenVINO от компании Intel позволяет решить эту задачу, беря тяжелые вычисления нейросетей на себя. Благодаря этому можно запустить нейросетевой классификатор или детектор на маломощном устройстве вроде Raspberry Pi практически в реальном времени, при этом не сильно повышая энергопотребление.

Основой устройства служит 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;
— примеры кода.

Рассмотрим подключение NCS2 к микрокомпьютеру Raspberry pi 4.

На microSD 32 Гб установим последнюю версию Raspbian Buster, Страница для скачивания образа https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit.

Необходимо установить следующие пакеты.

Установим пакеты разработчика

Набор библиотек изображений и видео

Установим графический интерфейс GTK

Установим пакет, который может помочь уменьшить количество предупреждений GTK

Установим два пакета, которые содержат численные оптимизации для OpenCV

Установим заголовки разработки Python 3

Все готово к установке OpenVINO

Установка OpenVINO

Создаем установочную папку

Компоненты инструментария OpenVINO установлены. Необходимо установить внешние программные зависимости, настроить среду и настроить правила USB.

Установим CMake * версии 3.7.2 или выше

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

Переменные среды OpenVINO удаляются при закрытии оболочки. Как вариант, вы можете навсегда установить переменные среды следующим образом:

Чтобы проверить изменения, откройте новый терминал. Вы увидите следующее:

Добавить правили USB

Добавляем текущего пользователя Linux в группу users :

Чтобы изменения вступили в силу, необходимо Выйти и заново войти в систему

Чтобы выполнить логический вывод на Intel® Neural Compute Stick 2, установим правила USB:

Теперь можно подключить Intel® Neural Compute Stick 2 к USB 3.0.

Проверяем, выполнив команду

Установка OpenVINO завершена.

Пример обнаружения лиц с использованием примеров механизма вывода из набора инструментов OpenVINO

Создадим директорию examples1/ObjectDetectionSample

Загрузим предварительно обученную модель распознавания лиц с помощью Model Downloader

Местоположение загруженных моделей

Приложение выводит изображение ( out_0.bmp) с обнаруженными лицами, заключенными в прямоугольники.

/examples1/ObjectDetectionSample несколько изображений и запустим пример

Вот примеры распознавания

Распознавание лиц на потоковом видео.

Добавим камеру. Подключаем камеру к Raspberry pi

Добавим поддержку камеры в системе

Проверить работу камеры можно с помощью команды raspistill

Команда создаст файл test.jpg в домашнем каталоге

Для записи видео команда raspivid. Например, записать видео длительностью в 30 секунд:

Скачаем скрипт детектирование лиц на потоковом видео с камеры

И запускаем скрипт

Скрипт использует модель face-detection-adas-0001

Источник

Робот-танк на Raspberry Pi с Intel Neural Computer Stick 2

Вот и наступил новый этап в развии Raspberry-танка.

В предыдущей серии оказалось, что семантическая сегментация из коробки не по зубам Raspberry.

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

Несколько дней — и интеловская чудо-железка у меня в руках.

Она довольно большая, и в нижний USB разъем малинки ее не воткнешь. Учитывая, что правые USB порты были заслонены штативом камеры, а верхний левый занят GPS модулем, вариантов оставалось не то, чтобы много.

В итоге, GPS был посажен на кабель, переведен вниз, и кабель обернут вокруг штатива, а на его место зашел NCS.

На этом hardware часть была завершена.

Intel NCS

Интел недавно выпустил вторую версию NCS, причем API оказался полностью несовместим с предыдущей версией, о чем пользователи излили немало боли в интернете.

Как следствие, вся база знаний о предыдущей версии в настоящее время является просто информационным мусором.

В новой редакции предлагается фреймворк OpenVino, который включает в себя OpenCV и много всякого другого, в том числе и различные инструменты для работы с нейросетями.

Вот несколько вводных статей по NCS2 и OpenVino:

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

Приятным бонусом оказалось, что в OpenVino входит OpenCV 4.1, это экономит время, так как предыдущие версии OpenCV мне пришлось собирать на Raspberry самостоятельно.

Вот как выглядит NCS2 сам по себе:

Дальше оказалось интереснее.

NCS поддерживает только свой собственный формат нейросетей, а Интел предоставляет инструмент Model Optimizer в составе OpenVino для конвертации графов самых популярных фреймворков: Tensorflow, Caffe, Torch. Подробнее про это будет дальше.

Читайте также:  Что значит текущее сальдо в карточке счета

Кроме того, Интел также предоставляет model zoo — набор готовых моделей на многие случаи жизни.

Среди них были две модели для дорожной сегментации:

Нейросети на NCS

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

Инициализировать девайс

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

Загрузить модель

Дальше надо загрузить модель на девайс.

Это тяжелая операция. Та небольшая модель, которую я использовал для сегментации, грузится порядка 15 секунд.

Хорошие новости в том, что загружать модель нужно только раз и можно загрузить несколько моделей.

Запустить расчет

Теперь модель можно использовать.

Однопроцессность

Внезапно оказалось, что нельзя использовать NCS из двух разных процессов одновременно.
Тот кто опоздал, не может загрузить модель:

Ни Гугл, ни форум поддержки Интела не позволили понять, в чем же дело — или девайс и правда эксклюзивный или я просто не умею его готовить.

Сегментация OpenVino

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

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

Enet работал лучше, но запустить Enet под NCS надо еще постараться, так что попробуем с тем что есть.

Что интересно, узнать больше о модели из OpenVino и переобучить ее не так то просто.

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

По скорости преимущество очень значительно:
Если у Enet сегментация занимала 6 секунд, то у этой модели на обработку одной картинки уходило 0.8 секунд (при этом 14 секунд занимала загрузка модели на девайс, но это делается единовременно).

Классификация направлений

Для принятие решений о направлении движения танк использует простую нейросеть, как описано в соотвествующей статье.

Нейросеть обучена на Keras и работает на Raspberry через Tensorflow, который имеет встроенный адаптер для этого формата.

Модель очень простая и даже на Raspberry показывает приемлемые по скорости результаты.
(0.35 секунд на картинку).

Тем не менее, имея интеловскую железку, можно рассчитывать добиться лучших результатов.
Среди форматов, которые принимает интеловский Model Optimizer для конвертации, есть Tensorflow, но нет Keras.

Преобразование Keras в TF вещь довольно популярная, материала на эту тему хватает, я руководствовался этой статьей.

У этого же автора есть более обширная статья, как раз на тему, как модель Keras запустить на OpenVino.

В общем, скомпилировав источники, я получил такой скрипт для преобразования модели Keras в TF:

Получившуюся TF-модель дальше перегоняем в OpenVino формат:

Тесты показали, что классификация картинки проходит за 0.007 секунд.
Такой результат очень радует.

Все обученные модели (Keras, TF, OpenVino) также выложены на гитхаб.

Распознавание объектов

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

В начале был детектор кота, который потом вырос в универсальный детектор на основе MobileSSD и OpenCV-DNN.

Теперь пришла пора покрутить эту же задачу на NCS.

В интеловском model_zoo достаточно детекторов более узкой специфики на основе MobileSSD, но точный аналог отсутствует.

Тем не менее, эта сеть указана как совместимая в списке поддерживаемых моделей TF.

Что интересно, на момент написания статьи здесь указана версия MobileSSD 2018_01_28.

Однако, читать эту модель OpenCV отказывается:

(Зато мы узнали, что они используют Jenkins).

При этом, конвертация в OpenVino проходит успешно.

Если же попробовать сконвертировать версию Mobile SSD, совместимую с OpenCV-DNN (11_06_2017), то получаем такое:

Как-то так, технически OpenVino и OpenCV-DNN в одной поставке, но несовместимы по версиям используемых нейросетей.

То есть, если хочется использовать одновременно оба подхода, надо тащить две версии MobileSSD.

По скорости сравнение конечно же в пользу NCS: 0.1 секунды против 1.7.

По качеству. (Хотя это вопрос не к NCS, а к эволюции Mobile SSD).

Классификация картинок

Танк умеет классифицировать картинки через Tensorflow, используя Inception на Imagenet.
Причем я использовал Inception 2015-12-05, когда она была еще одна.

Оказалось, я сильно отстал от жизни, ибо ребята из Гугла не даром едят свой хлеб и уже наплодили аж 4 версии!

Но ребята из Интела от них не отстают и все 4 версии поддержали в OpenVino.

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

Классифицируем картинку с котом и лаптопом на столе.

Запоминаем результаты работы текущей версии:

Конвертация проходит успешно, запускаем классификатор на NCS:

Заключение

Таким образом, все сценарии, требовавшие Tensorflow, были воспроизведены с помощью NCS, и это означает что от использования Tensorflow можно отказаться.

Все таки этот фрейморк тяжеловат для Raspberry.

Скорость, с которой NCS переваривает нейросети позволяет его расширить горизонты его применения.

Есть задачи, которые робот уже делает, например, семантическая сегментация и классификация, но есть и другие вроде объектной сегментации или передачи видео с детектированными объектами в реальном времени. (о чем нельзя было и помыслить на голой Raspberry).

Несколько смущают проблемы с многопроцессностью, но даже если их не удастся решить, то всегда остается выход в виде оборачивания NCS отдельным сервисом.

Источник

Сказочный портал