Я люблю делать всякие странные штуки с Computer Vision. Из того, что я выкладывал на Хабре — умная кормушку для птиц и камера для слежения за ребенком. По работе примерно тем же занимаюсь. Так что слежу за актуальным рынком embedded устройств для ComputerVision. Прошлый обзор я делал полтора года назад. Для Embedded это долго. В этом я сосредоточусь на устройствах которые вышли недавно + некоторый анализ что из этих устройств можно использовать дома/для хобби.
Рассказ будет построен следующим образом:
-
Продуктовые железки которые стали классикой продакшна / железки которые почти доросли до таких. Их можно взять и запустить из коробки. Большие OpenSource комьюнити/персональные фреймворки. Время развертывания обученной сети на такой железке в 1-2 дня.
-
Продуктовые железки которые почти стали классикой, но по которым слишком мало открытых проектов/документации/где часть проекта закрыта. В таких проектах сложно ожидать большой подставы, и скорее всего все будет более-менее будет работать. Но вот что нужно будет сделать для работы сети, и как её сконвертировать, как перенести — нельзя будет оценить заранее.
-
Железки которые выглядят интересно, но нет ни гайдов по ним, ни историй успехи, ни подробной документации.
-
Железка есть информации почти нет/нельзя получить без запросов. На рынке нет истории использования/успеха.
Сразу несколько дисклеймеров, чтобы не возвращаться к ним:
-
Далеко не все из перечисленного я лично использовал/тестировал
-
Далеко не все перечислено. Я уверен что забыл/не знаю многое. И очень надеюсь что в комментарии накидаете чего-нибудь интересного
-
Я фокусируюсь на устройствах где есть GPU/NPU или прочие ускорители инференса. Безусловно, есть всякие FPGA, и прочее, но я не считаю их применимыми для хоббийных проектов. (что такое NPU GPU TPU и другие аббревиатуры — можно прочитать в этой замечательной статье)
Часть 1. Ближе всего к продукту
С одной стороны, весь этот раздел можно было бы свести к простому перечислению:
-
Jetson
-
Intel
-
Coral
-
Android телефоны
-
Прочие Embedded, устройства с хорошим процессором, без NPU/GPU
И в этом списке за последние 2 года появился бы лишь Coral. Но, в реальности, все сильно интереснее. Появились не только и не столько новые архитектуры, как имплементации/доработки старых. О чем мы и поговорим.
В мире Jetson’ов новинок нет. Сейчас в продаже:
-
jetson nano
-
jetson xavier nx
-
jetson agx
-
jetson tx2
12ого началась конференция GTC от NVIDIA, но ничего нового на ней не объявили, так что, скорее всего, на следующий год ничего нового не будет.
Встречаются имплементации Jetson’а, под другие экосистемы. Самое известное — AWS Panorama. Jetson находящийся внутри экосистемы Амазона.
Jetson, безусловно, одна из самых удобных плат для хобби. Есть разводка GPIO, много кода который работает из коробки. Нейронные сети можно никуда не конвертировать, используя в оригинальном фреймворке.
Cтоит понимать, что из всех четырех Jetson’ов для хобби лучше всего подходит Nano. Он стоит лишь 100$, что значительно меньше следующего в серии NX, стоящего 400$. В теории, TX2в середине, но его почти нет в продаже + менее удобная плата. Проектов на Jetson очень много. Например из того что было в медийном пространстве — 1, 2. Вот тут есть неплохая подборка.
Лично я участвовал где-то в 5-7 проектах где Jetson был основной платформой. 2-3 из них переросли в полноценные продукты. Но, вынужден сказать, что для хобби его не использовал ни разу. Почему? Какая-то совокупность факторов всегда. Nano у меня был первой серии, там были баги по питанию. Иногда была не нужна производительность дополнительная. Иногда хотелось опробовать чего-то нового.
В отличие от Jetson, на базе Movidius появляются интересные штуки. В первую очередь это M.2 и mPCIe карты. Какие-то даже уже были, когда я писал прошлый обзор: 1, 2, 3.
Сейчас их очень много от разных производителей.
Удобны ли ли они для каких-нибудь прототипов и хобийных проектов? Мне кажется, что ниша есть, но очень узкая:
-
Когда надо много производительности (есть сборки где есть несколько мовидиусов)
-
Когда USB соединение слишком нестабильно, но M.2/PCIe хватит (переносные устройства)
Во вторую очередь — это ряд устройств от luxonis. Они устраивали большую компанию на кикстартере про OAK и OAK-D. OAK это платы где movidius воткнут не на материнскую плату, а на плату с камерой. Кроме того, у них есть несколько устройств с movidius когда он стоит на плате 1, 2. Я не буду вдаваться подробнее тут, кому интересно — про них я делал более подробный обзор у себя в блоге/на Youtube:
Кому лень читать/смотреть — вот краткая выдержка:
-
+ Минус одно USB соединение + к стабильности — для части проектов полезно
-
— От USB все равно не уйти — до прода скорее всего не дойдет
-
+ Неплохой дизайн, неплохой корпус
-
— Заменили хороший OpenVino на какой-то мутный DepthAI
-
— Дорого. Дороже чем собрать такое с оригинальным Movidius’ом, дороже чем с Jetson Nano
-
— В камере хорошее разрешение, но провален куда более полезный функционал для машинного зрения (ИК диапазон, нормальное управление выдержкой/частотой, синхронизация с вспышкой, и.т.д.)
Мне куда больше понравились эти две платы 1, 2. Но тут сразу понятно, что на первой оочень слабый процессор, а вторая дорогая и там есть лишнее соединение.
Кроме luxonis до movidius’а в камере догадался FLIR, достаточно крупный производитель камер. Они выпустили FireFly DL, который явно на порядки более продуктовый чем OAK, а стоит только на 100$ дороже (+объектив).
Чтобы закончить с Movidius окончательно. По простоте использования/наличию документации/комментариям и поддержке — на мой взгляд Movidius — это один из самых разумных ускорителей для своих проектов на нейронных сетях. Его минус — сложный переход с продакшну, и необходимость конвертации сети. То что вышло за последние годы — расширяет возможности использования. Но все же мне не хватает плат сравнимых с RPi3 где мовидиус бы стоял напрямую на плате.
Google Coral. Вот тут много нового. В своем прошлом обзоре я был крайне недоволен им — очень ограниченные платы, очень бажные. Но прогресс. Баги пофикшены, выпущена новая линейка. Есть почти все то же самое что и в movidius, только напрямую от производителя — отдельные платы, стики, M.2, pci-e, чистые чипы, и.т.д..
В качестве основного фреймворка — специальный tflite, где уже сильно меньше потерь на конвертации. Но, как видно, слоев все равно сильно меньше чем в том же ONNX.
Из плюсов, про которые не сказал — на базе Coral уже сторонние производители создают свои решения. Например Asus. Из минусов — считанные разы слышал что его использовали в продакшене. И, обычно, для каких-то простых задач.
Для себя я понимаю почему я избегаю Coral — при прочих равных не хочу трогать TensorFlow. А по текущим характеристикам он нигде не превосходит вариантов выше.
Телефоны. Так же, стоит отметить, многие телефоны получили поддержку из плат сопроцессоров для нейронных сетей. Есть несколько фреймфорков для инференса моделей на них. Например тут и тут описывал. Зачастую телефон стал удобнее чем embedded для пилота и хобби. Основной минус — отсутствие периферии. Второй серьезный минус для меня — внутренняя инфраструктура приложений. Конечно, Unity и Flutter упрощают логику использования. Но все же, лично для меня, телефоны сильно сложнее чем Linux-системы.
С другой стороны, в телефоне уже есть и камера и акселерометр, и интернет.
Прочее. Под «прочим» я в первую очередь подразумеваю системы где заход в нейронные сети идет со стороны процессора. Например в процессорах Intel за счет OpenVino можно сильно оптимизировать сети. На некоторых процессорах, например на RaspberryPI есть оптимизация под инструкции Neon. RPi4 вполне может справляться с какими-то задачами детекции и трекинга в реальном времени. Так что если вам нужно с помощью машинного зрения раз в день проверять рассаду — думаю подойдет.
Часть 2. Работает, но мало информации
Есть такая забавная штука. В ML сейчас 90% знаний открыто. Есть статьи, большая часть публикаций с OpenSource. Подробнейшие фреймворки на Nvidia и Intel. Но рынок аппаратных платформ был исторически не такой. Хотите подключить камеру по csi-mpi к своей платформе? Будьте добры купите дорогущий мануал по протоколу. Хотите разрабатывать на нашей платформе? Для этого вам нужно специальное программное обеспечение которое просто так вы не скачаете. И много фирм по производству железа по-другому и не мыслят. Как результат мы имеем полтора гайда на платформу до её покупки. Невозможность протестировать до покупки. Отсутствие форумов по теме. И проблему с каждой функцией где что-то пошло не так.
При этом платформы становятся популярнее и популярнее, реализовать можно все больше и больше. К таким платформам я в первую очередь отношу:
-
RockChip
-
Gyrfalcon
Обе платформы я видел в проде. Даже немного экспериментировал. Но у обоих платформ крайне неудобный фреймворк переноса сетей/использования.
RochChip. Основная платформа на которой все делается — Rockchip 3399Pro. Самая популярная реализация, наверное — Firefly, RockPiN10 или Toybrick.
Что забавно, у того же ASUS есть версия не только на базе Google Coral, но и на базе RockChip.
Сейчас разрабатывается новая версия — 1, 2.
В целом, плюс RockChip’а — это плата которую любят все разработчики железа. Есть референсный дизайн, комплектующие, и.т.д. Собрать продукт проще и быстрее чем на Jetson.
Но перенос сети весьма непредсказуем. Документация куцая и полукитайская. Как поддерживается — не понятно. Я видел несколько проектов где сети все же перенесли. Но, гарантировать что это всегда можно, нельзя.
Gyrfalcon. Вторым примером закрытой архитектуры, но на базе которой я видел проекты — является Gyrfalcon
Забавно, что платы на его базе в продаже почти отсутствуют. Что-то из того что есть: 1, 2, 3 .
Если я правильно понимаю, Gyrfalcon ориентирован на корпоративный рынок. Отсюда и закрытость инфраструктуры и мало число девайсов в продаже. Глобально, с прошлой моей статьи ничего особо не поменялось.
Делать ли свои проекты на базе этих платформ? Подходят ли они для хобби? В целом, такое мне кажется возможным. Главное чтобы были простые сетки. Классификация/базовая детекция, и.т.д.
По цене такие платформы достаточно дешевы и сравнимы с OpenVino|Jetson вариантами.
Но надо серьезно понимать зачем так делать. Это может быть:
-
желание сделать продукт из своей разработки
-
желание распаять свою систему
-
нехватка в Jetson|RPi каких-то возможностей
Я ни разу не испытывал такой необходимости. Но это может быть логичным для кого-то.
Часть 3. Внешне все выглядит неплохо, есть какая-то документация, но примеров нет
Пожалуй, сюда я отнесу только одну плату Khadas VIM3 . Много кто о ней знает, но не видел ни одного человека который бы что-то на ней сделал. Есть в открытой продаже, просто купить. Заявлены неплохие параметры по скорости.
Судя по документации перенос моделей достаточно простой. Но, так как никто не пробовал/не тестировал, — не понятны ограничения. Сама плата собрана на базе процессора Amlogic A311D, который содержит NPU модуль. Amlogic многие позиционируют как конкурент RockChip, сравнивая их. Но сравнений именно NPU модулей — нет.
Все что я говорил в прошлом раздели про проекты — глобально справедливо и тут. Единственное, внешне мне приятнее подход Khadas — документация открыта, поддерживаемые гиты, вроде все на русском английском. Возможно как-нибудь возьму попробовать, но пока лень. По цене выглядит неплохо, на уровне Jetson.
Часть 4. Железки есть, информации нет
Большая часть плат тут имеет очень слабую документацию. Часть плат — это отладочные платы для мобильных платформ. Другая часть — платы специально под ML, но по которым очень мало информации и данных в интернете.
BeagleV. Плата которая пока не вышла, но выглядит неплохо. Разработана на базе процессора U74 от SiFive. Используется RISC-V архитектура.
BeagleBoard — странная плата с комьюнити вокруг. Именно вокруг этого комьюнити частично построена плата BeagleV. Плата сделана на базе NPU модуля от Texas Instruments. Вроде даже какие-то репозитории есть:
-
Фреймворк от TI для обучения нейронных сетей. Аж 55 звезд на гитхабе.
-
Репозиторий платы. Аж 88 звезд.
Считать ли это «популярным» решением — не уверен. Но, возможно, какие-то базовые сети запустить будет можно.
Пример настоящего Edge (минимальное использование ЦПУ и энергоэффективности) это — Sipeed Maixduino и Grove AI Hat. Но, разработка на них, судя по отзывам, которые я слышал, ужасна. Сети плохо поддерживаются, мало производительности. Вот тут пример использования. Ну, по сути все проблемы обычного Arduino.
Я видел людей которые делали и адекватные проекты на их базе, и хоббийные. Но я не готов:)
Глобально, Qualcomm — это, конечно, производитель процессоров для мобильных. Но, на их же базе, есть какое-то количество именно embedded платформ. При этом, Qualcomm — имеет свой SDK, и свою платформу для исполнения нейронных сетей. Года 2.5 назад я сталкивался с ней. И тогда там была жесть. Простейший слой сложения не поддерживался. Что там говорить про сплиты или объединения. По сути работал лишь VGG на трехканальный вход.
Сейчас, судя по слухам все лучше. К тому же, должен нормально работать Tensorflow lite.
Но вот с платами под эмбеддед у Qualcomm плохо. Есть вот такое (но стоит почти 500 баксов). Или вот такое (мало информации, но выглядит прикольно, за 300 баксов камера + корпус + ускоритель = неплохо).
Примерно так же себя ведет Huawei. Есть фреймворк. Не пользовался, и не знаю. Есть какое-то количество плат. Должен работать Tensorflow lite.
Но, мне сложно придумать где такая плата будет иметь смысл на использование.
Наверное, стоит добавить и Модуль. Как никак отечественные производители. Но, понятно, вся документация открыто не выложена, не слышал про успешное применение, и.т.д.
Но, наверное, для госсектора кто-то применять может.
В целом, вся группа последних девайсов, очень на любителя. Иногда они могут иметь смысл для прода. Иногда, для получения новых навыков. В любом случае, чем больше платформ и вариантов развития — тем интереснее и больше выбор.
P.S.
Про девайсы которые попадают мне в руки/про которые я читаю — иногда пишу у себя в блоге (telegramm, vk). Наверное, через год-два проапдейчу тут что накопится.
Прошлый апдейт делал на ютубе.