Начало работы с новым оборудованием Google Edge TPU

Я также упоминаю Практикум с Coral Dev Board в сопутствующей статье.

На прошлогодней конференции Google Next в Сан-Франциско компания Google анонсировала два новых готовящихся аппаратных продукта, оба построены на основе Edge TPU от Google, их специализированной ASIC, предназначенной для выполнения логических выводов машинного обучения на периферии.

Были объявлены как плата для разработки, так и USB-ускоритель с форм-фактором, аналогичным Neural Compute Stick от Intel, что позволяет пользователям самостоятельно выполнять логические выводы предварительно обученных моделей TensorFlow Lite. аппаратное обеспечение.

Оборудование теперь доступно и запущено в публичную бета-версию под названием Coral, и перед запуском мне удалось заполучить некоторое оборудование для раннего доступа. Я уже познакомился с Coral Dev Board, но я также хотел взглянуть на новый Coral USB Accelerator.

Открытие коробки

Как и Coral Dev Board, USB Accelerator поставляется в небольшой довольно невзрачной коробке. У меня было предсерийное оборудование, и на коробке была наклейка с надписью Маркировка и упаковка не окончательная, что вполне может объяснить брендинг AIY Projects на моем USB-ускорителе. Может быть, ребрендинг на Коралл был принят совсем недавно?

Внутри коробки находится USB-накопитель и короткий кабель USB-C - USB-A, предназначенный для подключения к вашему компьютеру. USB-ускоритель размером 65 × 30 мм имеет примерно такую ​​же площадь, что и Intel Neural Compute Stick, однако при глубине всего 8 мм ускоритель намного более тонкий.

Размер USB-ускорителя не кажется таким уж важным, пока вы не поймете, что карта Intel была настолько большой, что имела тенденцию блокировать близлежащие порты, а с некоторыми компьютерами ее вообще трудно использовать.

Сбор припасов

В отличие от Coral Dev Board, которая требует большой работы по настройке, прежде чем вы сможете приступить к работе, USB Accelerator спроектирован так, чтобы работать по принципу подключи и работай, все, что вам нужно, - это компьютер с Linux со свободным USB-портом.

Компьютер должен работать под управлением Debian 6.0 или выше или любой производной версии Ubuntu 10.0+, а ускоритель работает нормально при подключении к компьютеру с архитектурой x86_64 или ARM64.

К счастью, по крайней мере для тех из нас, кто работает во всех магазинах Apple, это означает, что вы можете использовать USB-ускоритель с платой Raspberry Pi, и все должно просто работать. Таким образом, помимо того, что идет в комплекте, Абсолютный минимум, который вам понадобится, - это плата Raspberry Pi, кабель micro USB - USB-A, блок питания на 2,5 А и карта micro SD.

Настройка вашего компьютера

Первое, что вам нужно сделать, это настроить компьютер с Linux. Если вы используете для этого Raspberry Pi, вероятно, неплохо было бы установить свежую версию операционных систем и работать с чистого листа. Скачайте последний выпуск Raspbian Lite и настройте Raspberry Pi. ».

Если вы не используете проводную сеть или не подключили к Raspberry Pi дисплей и клавиатуру, вам нужно как минимум подключить Raspberry Pi к беспроводной сети и включить SSH.

После того, как вы настроили Raspberry Pi, включите его, а затем откройте окно терминала на своем ноутбуке и подключитесь к Raspberry Pi по SSH.

% ssh [email protected]

После входа в систему вы, возможно, захотите изменить имя хоста на что-нибудь менее общее, чтобы вы могли отличать его от всех других плат Raspberry Pi в вашей сети, я выбрал coral.

Питание вашего Raspberry Pi

Если вы, как и я, решили подключить USB-ускоритель к Raspberry Pi, вам понадобится хороший источник питания. Более современные платы Raspberry Pi, особенно последняя модель Raspberry Pi 3, Model B +, нуждаются в источнике питания USB, который будет обеспечивать постоянное напряжение + 5 В при токе от 2 до 2,5 А. Это может быть проблемой в зависимости от того, какие периферийные устройства должны поддерживать плата.

Обычно Raspberry Pi использует от 500 до 1000 мА в зависимости от текущего состояния платы. Однако для подключения монитора к порту HDMI требуется 50 мА, для добавления модуля камеры требуется 250 мА, а клавиатуры и мыши могут потреблять всего 100 мА или более 1000 мА в зависимости от модели. С самим USB-ускорителем, требующим минимум 500 мА.

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

Если к вашей плате Raspberry Pi подключен монитор, это точка, где вы увидите желтую молнию в правом верхнем углу экрана. Однако, если вы используете Raspberry Pi без головы, вы все равно можете проверить из командной строки с помощью vcgencmd.

$ vcgencmd get_throttled

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

$ ./throttled.sh
Status: 0x50005
Undervolted:
   Now: YES
   Run: YES
Throttled:
   Now: YES
   Run: YES
Frequency Capped:
   Now: NO
   Run: NO
$

В то время как текущее потребление при загрузке с подключенным USB-ускорителем составляет стандартные 500 мА, когда USB-ускоритель работает, вы можете получить потухшие выходы, если у вас плохой источник питания или дешевый USB-кабель низкого качества.

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

Если вы действительно не уверены, я бы порекомендовал вам выбрать официальный блок питания Raspberry Pi USB. Он был разработан для стабильного обеспечения + 5,1 В, несмотря на резкие колебания потребляемого тока. К нему также прилагается кабель micro USB, а это значит, что вы случайно не воспользуетесь кабелем плохого качества, а это может стать проблемой.

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

Установка программного обеспечения

Вы готовы установить программное обеспечение, необходимое для поддержки Edge TPU.

В настоящее время оборудование Coral все еще находится на стадии выпуска «бета», поэтому вполне вероятно, что инструкции по установке программного обеспечения изменятся. Однако на данный момент вы можете загрузить комплект для разработки программного обеспечения, используя wget,

$ wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz
$ tar -xvzf edgetpu_api.tar.gz

а затем запустите сценарий установки.

$ cd python-tflite-source
$ bash ./install.sh

Сценарий запустится, но затем остановится со следующим предупреждением.

«Во время нормальной работы Edge TPU Accelerator может нагреваться в зависимости от вычислительных нагрузок и рабочей частоты. Прикосновение к металлической части устройства после того, как оно проработало длительное время, может вызвать дискомфорт и / или ожоги кожи. Таким образом, при работе с рабочей частотой по умолчанию устройство предназначено для безопасной работы при температуре окружающей среды 35 ° C или ниже. Или при работе на максимальной рабочей частоте он должен работать при температуре окружающей среды 25 ° C или ниже ».

Другими словами, ручка нагревается, если работает в течение длительного периода времени. Однако Google предупреждает нас о том, что температура окружающей среды, в которой вы находитесь, не должна быть выше 35 ° C (95 ° F) или 25 ° C (77 ° F), если вы выберете ' максимальная рабочая частота 'при появлении запроса.

Это может показаться легко достижимым, пока вы не подумаете, что это периферийное вычислительное устройство, и его легко можно было бы использовать привязанным к фонарному столбу в центре Тусона, где средние летние температуры регулярно достигают 37 ° C (100 ° F).

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

После завершения установки подключите USB-ускоритель с помощью короткого кабеля USB-C - USB-A, который прилагается к USB-накопителю в коробке. Если вы уже подключили его, вам необходимо удалить его и снова подключить, поскольку сценарий установки добавляет несколько udev правил, позволяющих программному обеспечению, работающему на Raspberry Pi, распознавать наличие оборудования Edge TPU.

Запуск вашей первой модели машинного обучения

В отличие от Coral Dev Board, которая поставляется с довольно красивым начальным демонстрационным приложением, которое запускает веб-сервер с видеопотоком трафика автострады с выводом данных в реальном времени, сделанным на плате, наложенной сверху, ваша первая модель будет немного больше скромный.

В комплект программного обеспечения, который мы загрузили, входит модуль Edge TPU Python, который предоставляет простые API-интерфейсы, которые выполняют классификацию изображений, обнаружение объектов и печать веса - иначе известную как обучение передачи - на Edge TPU.

Давайте посмотрим на демонстрационный код обнаружения объектов. Вы можете найти демонстрационный код в каталоге /home/pi/python-tflite-source/edgetpu/demo.

Этот скрипт предназначен для распознавания объектов на изображении. На самом деле я пошел дальше и немного изменил исходную версию демонстрационного кода, поставляемого с комплектом программного обеспечения для USB Accelerator. Я добавил код, чтобы сделать рамки, нарисованные вокруг обнаруженных объектов, немного толще, чтобы их было легче увидеть, и добавил метки к каждому полю обнаружения. Я также просто уронил все обнаруженные объекты, если показатель достоверности обнаружения меньше 0,45.

Вы можете либо взять мою версию кода с GitHub, либо использовать версию, поставляемую с платой по адресу /home/pi/python-tflite-source/edgetpu/demo.

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

$ python3 ./object_detection.py --model python-tflite-source/edgetpu/test_data/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite --label python-tflite-source/edgetpu/test_data/coco_labels.txt --input fruit.jpg --output out.jpg
banana score =  0.839844
apple score =  0.5
Saved to out.jpg
$

Вы можете скопировать выходное изображение с платы на свой портативный компьютер с помощью команды scp. На вашем ноутбуке

$ scp [email protected]:out.jpg .
pi@coral's password:
out.jpg                              100% 1249KB   9.9MB/s   00:00
$

замените coral именем вашего Raspberry Pi, чтобы передать файл обратно на свой ноутбук.

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

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

banana score =  0.839844
apple score =  0.5
book score =  0.210938
apple score =  0.210938
book score =  0.210938
dining table score =  0.160156
dining table score =  0.121094
banana score =  0.121094
apple score =  0.121094
book score =  0.121094

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

Однако я запустил ту же сеть на аналогичном изображении, когда вчера взялся за Coral Dev Board, и на этот раз был немного удивлен низкой достоверностью обнаружения как банана, так и яблока.

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

banana score =  0.964844
apple score =  0.789062

Воспроизводимость в науке хорошая.

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

Также следует иметь в виду, что демонстрационные модели, входящие в комплект поставки Coral, не настроены. Другими словами, это не модели производственного качества. Точность обнаружения зависит от обучения модели, и Google ожидает, что пользователи будут обучать свои модели в соответствии со своими потребностями.

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

Прежде всего, нам нужно создать экземпляр механизма обнаружения с помощью нашей обученной модели, где args.model - это путь к выбранной нами модели, переданный в командной строке.

engine = DetectionEngine(args.model)

Затем мы запускаем вывод, указывая его на входное изображение, где hereimg - объект PIL.Image.

ans = engine.DetectWithImage(img, threshold=0.05, keep_aspect_ratio=True, relative_coord=False, top_k=10)

Вы можете видеть здесь, что мы действительно можем настроить наш порог достоверности и максимальное количество объектов-кандидатов, которые движок должен сообщать выше этого порога. Так что я мог бы фильтровать вещи здесь, в исходном вызове, вместо того, чтобы вставлять этот оператор if в код, если бы я хотел это сделать.

Вот и все. Вот как легко обнаруживать объекты.

Вызов DetectWithImage() возвращает список DetectionCandidate объектов, который представляет собой структуру данных для каждого обнаружения кандидатов. Каждый обнаруженный объект будет иметь соответствующий номер метки, возвращаемый моделью, поэтому нам нужен файл метки, чтобы мы могли преобразовать номер метки во что-то более удобное для человека.

Мы использовали модель MobileNet SSD v2, обученную с помощью набора данных Общие объекты в контексте (COCO), который определяет местоположение 90 типов объектов. Итак, файл метки для нашей модели содержит 90 соответствующих объектов, включая банан и яблоко.

0  person
1  bicycle
2  car
3  motorcycle
4  airplane
5  bus
6  train
7  truck
8  boat
    .
    .
    .
51  banana
52  apple
    .
    .
    .
87  teddy bear
88  hair drier
89  toothbrush

Наряду с номером метки обнаружение кандидата будет иметь оценку достоверности и ограничивающую рамку вокруг обнаруженного объекта, которая передается как numpy.array.

Добавление камеры

Хотя Coral Dev Board имеет свой собственный модуль камеры для предоставления видео в реальном времени, вы можете сделать то же самое с USB-ускорителем, используя официальный модуль камеры Raspberry Pi. Хотя модуль Raspberry Pi расположен вокруг 8-мегапиксельного сенсора Sony IMX219, а не 5-мегапиксельного сенсора Omnivision OV5645, используемого камерой Coral Dev Board, это дополнительное разрешение не является необходимым бонусом - в зависимости от что вы делаете с видео, вам может потребоваться уменьшить выборку данных перед их передачей в вашу модель.

Чтобы прикрепить модуль камеры к Raspberry Pi, переверните модуль камеры лицевой стороной вниз и потяните черную защелку наружу. Затем вставьте ленточный кабель под защелку так, чтобы синяя полоса была обращена к вам. Ленточный кабель должен плавно проходить под ним t, и вам не нужно прилагать к нему силу. Затем нажмите на черную защелку, чтобы зафиксировать кабель на месте.

Если ваш Raspberry Pi включен и работает, вам необходимо выключить его перед установкой модуля камеры. В сеансе SSH вы должны продолжить и выключить плату с помощью команды shutdown, чтобы полностью остановить ее.

$ sudo shutdown -h now

Отсоедините кабель питания, а затем потяните вверх черную защелку разъема камеры на плате, расположенную справа от разъема 3,5 мм и разъема Ethernet. Выполните ту же процедуру, что и для модуля камеры, на этот раз синяя полоса должна быть обращена к разъему Ethernet. После этого снова включите плату и войдите в систему через SSH.

Теперь, когда камера физически подключена, вам нужно включить ее. Для этого вы можете использовать утилиту raspi-config.

$ sudo raspi-config

Прокрутите вниз и выберите «Параметры интерфейса», а затем выберите «Камера» в следующем меню. При появлении запроса нажмите «Да», а затем «Готово», чтобы полностью выйти из инструмента настройки. На вопрос, хотите ли вы перезагрузить компьютер, выберите «Да».

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

$ raspistill -o testshot.jpg

это оставит файл с именем testshot.jpg в домашнем каталоге, вы можете использовать scp, чтобы скопировать его с Raspberry Pi обратно на свой ноутбук.

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

Сценарию потребуется доступ к камере из Python, а модуль Python picamera может быть не установлен на вашем Raspberry Pi. Поэтому перед запуском демонстрационного кода мы должны сделать это.

$ sudo apt-get install python3-picamera

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

$ cd ~
$ wget https://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/mobilenet_v2_1.0_224_quant_edgetpu.tflite
$ wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/imagenet_labels.txt

Затем перейдите в исходный каталог и запустите демонстрацию classify_capture.py.

$ cd ~/python-tflite-source/edgetpu
$ python3 demo/classify_capture.py \
--model test_data/mobilenet_v2_1.0_224_quant_edgetpu.tflite \
--label test_data/imagenet_labels.txt 

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

Обновление: чтобы вы могли просматривать выходные данные с помощью VNC, если вы включили Экспериментальный режим прямого захвата в меню ПараметрыУстранение неполадок, убедившись, что вы подключаетесь к отображению :0, а не по умолчанию режим виртуального рабочего стола и дисплей :1. Вам следует заглянуть в эту ветку, если у вас все еще есть проблемы. (Спасибо Марки Марку за подсказку!)

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

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

Когда USB-ускоритель бездействовал, температура корпуса составляла около 25 ° C (77 ° F), то есть всего на пару градусов выше температуры окружающей среды в моем офисе. После непрерывной работы демонстрации в течение 30 минут температура повысилась до 35 ° C (95 ° F).

Повышение температуры на + 10 ° C намного меньше, чем я изначально предполагал, учитывая отсутствие радиатора. Итак, я предполагаю, что на данный момент демонстрационное приложение не так сильно работает с USB Accelerator. Просто он не иссякает. Так что, хотя это умеренное повышение температуры приятно видеть, я все же буду учитывать эти предупреждения о максимальной температуре окружающей среды при развертывании в дикой природе.

Сравнение с Coral Dev Board

Обладая аналогичным форм-фактором Intel Neural Compute Stick, новый Coral USB Accelerator упаковывает Edge TPU в гораздо меньший корпус, чем Coral Dev Board.

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

Однако, вероятно, это не причина сравнительной медленности вывода на Raspberry Pi с USB-ускорителем по сравнению с тем, что мы видели с с доской разработчиков.

Выполнение логических выводов относительно нашего вчерашнего изображения фруктов на Raspberry Pi намного медленнее, чем на Dev Board, при этом вывод занимает чуть менее 6,6 секунды.

$ time python3 ./object_detection.py --model python-tflite-source/edgetpu/test_data/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite --label python-tflite-source/edgetpu/test_data/coco_labels.txt --input fruit.jpg --output out.jpg
banana score =  0.964844
apple score =  0.789062
Saved to  out.jpg
real 0m6.586s
user 0m3.089s
sys 0m0.161s
$

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

$ time python3 ./object_detection.py --model /usr/lib/python3/dist-packages/edgetpu/test_data/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite --label /usr/lib/python3/dist-packages/edgetpu/test_data/coco_labels.txt --input fruit.jpg --output out.jpg
banana score =  0.964844
apple score =  0.789062
Saved to  out.jpg
real 0m1.505s
user 0m1.372s
sys 0m0.104s
$

Я предполагаю, что логический вывод затруднен из-за времени, необходимого для передачи изображения с Raspberry Pi через USB-соединение на USB-ускоритель. В то время как USB Accelerator поддерживает скорость USB 3, Raspberry Pi не поддерживает и ограничен скоростью USB 2. В то время как USB 2 предлагает скорость передачи 480 Мбит / с, USB 3 предлагает скорость передачи 4,8 Гбит / с, что в десять раз быстрее. Существует также узкое место в хранилище: в то время как Raspberry Pi работает с SD-карты, Dev Board работает со встроенным хранилищем eMMC. Те же флеш-чипы, но не в конце шины данных.

Я использую изображение в формате JPG прямо с моего iPhone и имеет размер 3888 × 2916 пикселей и около 3 МБ. Масштабирование до 640 × 480 пикселей уменьшает размер изображения до 147 КБ.

Повторно запустив наши тесты, мы получаем время вывода 5,6 секунды с Raspberry Pi и USB-ускорителем и 0,82 секунды с Dev Board. Это значительное ускорение, и, возможно, неудивительно, что это не сильно влияет на надежность обнаружения обнаружений.

banana score =  0.953125
apple score =  0.839844

Фактически, как вы, наверное, уже заметили, модель более уверена в том, что яблоко - это яблоко, чем до того, как мы уменьшили масштаб изображения.

Дальнейшее уменьшение изображения до 240 × 180 и всего 33 КБ, а также повторный запуск логического вывода не сильно влияют на время работы Raspberry Pi и USB Accelerator. Мы снова получаем время вывода 5,6 секунды. Однако это немного снижает время вывода с помощью Dev Board, при этом время выполнения составляет 0,79 секунды с меньшим изображением.

Однако достоверность обнаружения яблока несколько снижается.

banana score =  0.933594
apple score =  0.660156

Очевидно, что сейчас тяжелые времена, которые раздуваются из-за накладных расходов, не связанных напрямую с логическим выводом. Как мы знаем из гладкого начального демонстрационного приложения, поставляемого с Dev Board, Edge TPU вполне способен выполнять логический вывод для полнокадрового видео со скоростью ›70 кадров в секунду, в то время как основной ЦП на плате обрабатывает аннотации этого видео в в режиме реального времени с результатами.

Таким образом, помимо размера изображения, на синхронизацию приложений также влияет количество времени, необходимое для настройки и разрыва самого скрипта. Учитывая, что демонстрация камеры показала, что Raspberry Pi и USB Accelerator способны обрабатывать логический вывод

Поэтому было бы интересно посмотреть, есть ли все еще такая значительная разница между ними, между Coral Dev Board и USB Accelerator, то есть, если наш компьютер Linux не был Raspberry Pi, или все эти сроки действительно связаны с накладные расходы на установку и демонтаж.

Создание собственных моделей

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

Затем вам нужно будет преобразовать вашу модель TensorFlow в оптимизированный формат FlatBuffer для представления графиков, используемых TensorFlow Lite. Оттуда вам нужно будет скомпилировать свою модель TensorFlow Lite для совместимости с Edge TPU с веб-компилятором Google.

В текущий период бета-тестирования компилятор Edge TPU имеет некоторые ограничения. Но эти ограничения должны быть сняты, когда Coral выйдет из бета-тестирования в следующем месяце.

Использование веб-компилятора - изящный ход со стороны Google, позволяющий обойти проблему, с которой вы сталкиваетесь при работе с оборудованием на базе Intel Movidius с платой на базе ARM, такой как Raspberry Pi, где вам требовалась дополнительная машина для разработки на базе x86 для компиляции вашего модели, чтобы вы могли развернуть их на оборудовании ускорителя.

Прямо сейчас, на этапе бета-тестирования, веб-компилятор EdgeTPU ограничен несколькими модельными архитектурами; либо модель MobileNet V1 / V2 с максимальным размером входа 224 × 224 и максимальным множителем глубины 1,0, модель Inception V1 / V2 с фиксированным размером входа 224 × 224, либо, наконец, модель Inception V3 / V4 с размером 224 × 224 фиксированный размер ввода. Все эти модели должны быть квантованной моделью TensorFlow Lite (файл .tflite) размером менее 100 МБ.

Эти архитектурные ограничения будут удалены в будущем обновлении, и будет разрешена любая квантованная модель TensorFlow Lite при условии, что модель использует 1-, 2- или 3-мерные тензоры с размерами тензорных элементов и параметрами модели, фиксированными во время компиляции. . Хотя Google предупреждает, что могут применяться «… другие ограничения, связанные с операциями», они пока не ясны.

Ограничения для моделей INT8 и небольшие размеры кеш-памяти для оборудования Coral вполне понятны, плата рассчитана на относительно низкое энергопотребление. Поскольку требуемый уровень энергопотребления намного ниже, чем у некоторых других аппаратных средств, например недавно выпущенной платы Jetson Nano от NVIDIA, прямое сравнение не совсем справедливо.

Резюме

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

Хотя и Coral Dev Board, и USB Accelerator сильно отличаются от предыдущих наборов машинного обучения Google, выпущенных под брендом AIY Projects, USB Accelerator также ощущается как совершенно другой продукт, чем Dev Board. Совершенно очевидно, что новое оборудование на базе Edge TPU нацелено на более профессиональную аудиторию, чем предыдущие комплекты Raspberry Pi.

Dev Board почти наверняка задуман как оценочная плата для System-on-Module (SoM), которая будет доступна в объеме позже в этом году, а не автономная доска, предназначенная для разработки. Он предназначен для малых и средних компаний, а также профессиональных разработчиков оборудования, желающих добавить машинное обучение в существующие или новые продукты.

Однако USB-ускоритель - нет. Хотя не совсем ясно, какова основная стратегия, я на самом деле думаю, что USB Accelerator нацелен на ученых и производителей данных, а не на разработчиков встроенного оборудования. Хотя, вероятно, он хорошо подходит в качестве инструмента для создания прототипа версии PCI-e Edge TPU, которая также появится позже в этом году.

Специалисты по обработке данных будут использовать ускоритель со своим ноутбуком Linux для обработки своих данных, а производители будут использовать его с Raspberry Pi для создания роботов и автономных транспортных средств.

Есть много проектов, построенных вокруг Raspberry Pi и его модуля камеры, я думаю, мы можем с уверенностью предсказать, что многие из них будут добавлять сопроцессор Edge TPU для вывода видео в реальном времени.

Этот пост спонсируется Кораллом из Google.