目的
あ〜
— nb.o (@Nextremer_nb_o) June 14, 2022
去年にlibedgetpu、bazel使わないmakefileをアップしていたのね。
全然気が付かなかった…
やっでみるかな
"libedgetpu/makefile_build at master · google-coral/libedgetpu · GitHub" https://t.co/p8cq8w3iab
libedgetpuのレシピ
レシピ化するときにつまづいた点
ビルドのワーキングディレクトリの指定
abseil-cppの必要なリンクするライブラリの不足
gold リンカーを指定するとリンクエラー(risc-v)
TensorFlow v2.9への対応
xxd: command not foundの解決
libedgetpu-maxとlibedgetpu-std
- レシピはlibedgetpu-std、libedgetpu-maxとする。
- 共通部分をcommon.incに切り出して、EXTRA_OEMAKEに指定するフラグとインストールパス(do_install)を定義
- お互いのレシピは同時に指定されたくないので、RCONFLICTSでコンフリクトするように指定。
ターゲットのBSP
- meta-raspberrypi
- Raspberry Pi 4
-
meta-riscv
- Sipeed Lichee RV Dock
イメージの作成
Raspberry Pi 4
$ git clone -b kirkstone git://git.yoctoproject.org/poky.git $ git clone -b kirkstone git://git.yoctoproject.org/meta-raspberrypi $ git clone -b kirkstone git://git.openembedded.org/meta-openembedded $ git clone https://github.com/NobuoTsukamoto/meta-tensorflow-lite.git $ source poky/oe-init-build-env rpi-build $ bitbake-layers add-layer ../meta-openembedded/meta-oe/ $ bitbake-layers add-layer ../meta-openembedded/meta-python/ $ bitbake-layers add-layer ../meta-openembedded/meta-networking/ $ bitbake-layers add-layer ../meta-openembedded/meta-multimedia/ $ bitbake-layers add-layer ../meta-raspberrypi/ $ bitbake-layers add-layer ../meta-tensorflow-lite/
FORTRAN:forcevariable = ",fortran" MACHINE ?= "raspberrypi4-64" IMAGE_INSTALL:append = " \ python3-tensorflow-lite \ libedgetpu-max \ opencv \ " VIDEO_CAMERA = "1"
$ bitbake core-image-weston ... Build Configuration: BB_VERSION = "2.0.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "universal" TARGET_SYS = "aarch64-poky-linux" MACHINE = "raspberrypi4-64" DISTRO = "poky" DISTRO_VERSION = "4.0.1" TUNE_FEATURES = "aarch64 armv8a crc cortexa72" TARGET_FPU = "" meta meta-poky meta-yocto-bsp = "kirkstone:4aeda14352a9fa9dd5ba50cf940a2b514fd1ac3c" meta-oe meta-python meta-networking meta-multimedia = "kirkstone:fcc7d7eae82be4c180f2e8fa3db90a8ab3be07b7" meta-raspberrypi = "kirkstone:0135a02ea577bd39dd552236ead2c5894d89da1d" meta-tensorflow-lite = "main:4299e649292a9471732e1fff2dc0eb776aba68f5" ...
Sipeed Lichee RV Dock
$ git clone -b kirkstone git://git.yoctoproject.org/poky.git $ git clone -b kirkstone https://github.com/openembedded/openembedded-core.git $ git clone -b kirkstone https://github.com/openembedded/meta-openembedded.git $ git clone -b kirkstone_licheerv https://NobuoTsukamoto/riscv/meta-riscv.git $ git clone https://github.com/NobuoTsukamoto/meta-tensorflow-lite.git $ source poky/oe-init-build-env licheerv-build $ bitbake-layers add-layer ../meta-openembedded/meta-oe/ $ bitbake-layers add-layer ../meta-openembedded/meta-python/ $ bitbake-layers add-layer ../meta-openembedded/meta-networking/ $ bitbake-layers add-layer ../meta-openembedded/meta-multimedia/ $ bitbake-layers add-layer ../meta-riscv/ $ bitbake-layers add-layer ../meta-tensorflow-lite/
FORTRAN:forcevariable = ",fortran" MACHINE ?= "licheerv" IMAGE_INSTALL:append = " \ python3-tensorflow-lite \ libedgetpu-std \ opencv \ "
$ bitbake core-image-minimal ... Build Configuration: BB_VERSION = "2.0.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "universal" TARGET_SYS = "riscv64-poky-linux" MACHINE = "licheerv" DISTRO = "poky" DISTRO_VERSION = "4.0.1" TUNE_FEATURES = "riscv64" meta meta-poky meta-yocto-bsp = "kirkstone:4aeda14352a9fa9dd5ba50cf940a2b514fd1ac3c" meta-oe meta-python meta-networking meta-multimedia = "kirkstone:fcc7d7eae82be4c180f2e8fa3db90a8ab3be07b7" meta-riscv = "kirkstone_licheerv:9083c701acede92b2378eb3f0df77fefb8ae29a0" meta-tensorflow-lite = "main:4299e649292a9471732e1fff2dc0eb776aba68f5" ...
動作確認
Raspberry Pi 4
いまさらですが、、、
— nb.o (@Nextremer_nb_o) June 23, 2022
libedgetpuをYoctoのレシピにすることができました。
Raspberry Pi 4のcore-image-westonでTensorFlow Lite v2.9とCoral USB Acceleratorの組み合わせです。
EdgeTPU Delegateが無事うごきました👍 pic.twitter.com/Yb1cXd8iCU
Sipeed Lichee RV Dock
-
USBの電力供給の関係で動作しないので、電源供給つきのUSB-HUBが必要。
device descriptor read/64, error -71 が発生した場合は、電力の不足を疑う。
(libedgetpu-stdの場合はHUBがなくてもいけるかもしれない) - 画像分類モデルはうまく動きそうだが、物体検出やセマンティクス・セグメンテーションのモデルはうまく動作しない。。。
- 物体検出は結果がすべてNG。
- セマンティクス・セグメンテーションはポツポツと点のように結果がおかしい。
SiPEED LICHEE RV DOCK + Coral USB AcceleratorでMobileNet V2のEdge TPU Modelが動いたようです🎉
— nb.o (@Nextremer_nb_o) July 4, 2022
TensorFlow Liteのサンプル画像を"military uniform"と分類してくれました👍
RISC-V CPUのSBC + Edge TPUの組み合わせ。
BSPとlibedgetpu、Tensorflow Liteはyoctoのレシピにしています。 pic.twitter.com/aUkGRJoBSw
なお、物体検出モデルは⬇️のスレッドでつぶやいているとおり、うまく動いていない...
— nb.o (@Nextremer_nb_o) July 4, 2022
分類モデルはうまく動きそうな状況...https://t.co/sF62RSliPc
SiPEED LICHEE RV DOCK + Coral USB AcceleratorでAutosegEdgeTPUのSemantic segmentationをやってみた...
— nb.o (@Nextremer_nb_o) July 7, 2022
...けど、このポツポツはなんだ???
detectionもそうだったけど、結果がおかしい。
なんだろうか🤔 pic.twitter.com/Mwuh3p9WoJ