いくつか思うことがあって今更ながらMovidius Neural Compute Stickを買ってみた(ちなみにNeural Compute Stick 2も2-3日前に届いた)。
でもって公式にサポートしているのはUbuntuとRaspberry Piだけ? Intelの公式フォーラムだと中の人が公式にはサポートしてない(する気がない?)けどNDK使えば動くんちゃう?的なことを書いてたんやけど、AndroidのUSBはパーミッション周りが独特やしNDK使っただけじゃうまくいかへんで?グルグルしてもAndroidで動かしたって記事はヒットせんし。
ncsdkを見てみるとNeural Compute Stickとの通信にlibusbを使っているみたい。GitHubにあげている自分のUVCCameraってリポジトリでもlibusbは使っているねんけど、Android NDKr15以降では正常に実行でけんのんよね(´・ω・`)
でもまぁUSB接続やしオレオレUSB/UVCライブラリならAndroid NDK r18bでも動くし、ncsdkもApache V2ライセンスになったしAndroidでもいけんちゃうと思って頑張ってみた。
\(^o^)/\(^o^)/\(^o^)/
苦節3日の末(大した苦労じゃないな?)ncsdkのexamplesにあるGoogLeNetの実行に成功した(実際にインポート/実行したのはmultistick.cppの方)
\(^o^)/\(^o^)/\(^o^)/
graphファイルとサンプル映像の読み込み処理を含めて1.2秒ぐらい @ (Moto Z Play + Movidius Neural Compute Stick) googlenet.graphファイルって14MBぐらいあるししゃないんかな。
Neural Compute Stick 2でも試してみたいけどncsdk1.xだと対応していないみたでまだ動かせん。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
2018-11-22 11:39:55.137 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:298:run_test]:begin 2018-11-22 11:39:55.137 10705-10705/com.serenegiant.movidiustest D/movidius: [10705*multistick.cpp:311:run_test]:number of connected device(s) 1 2018-11-22 11:39:55.137 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:92:LoadGraphFile]:begin 2018-11-22 11:39:55.168 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:115:LoadGraphFile]:end 2018-11-22 11:39:56.064 10705-10705/com.serenegiant.movidiustest D/movidius: [10705*multistick.cpp:216:LoadGraphToNCS]:Successfully allocated graph for /storage/emulated/0/Download/MovidiusTest/data/graphs/googlenet.graph 2018-11-22 11:39:56.065 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:218:LoadGraphToNCS]:end (1) 2018-11-22 11:39:56.065 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:339:run_test]:--- NCS 1 inference --- 2018-11-22 11:39:56.065 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:236:DoInferenceOnImageFile]:begin 2018-11-22 11:39:56.065 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:135:LoadImage]:begin 2018-11-22 11:39:56.251 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:187:LoadImage]:end 2018-11-22 11:39:56.266 10705-10705/com.serenegiant.movidiustest D/movidius: [10705*multistick.cpp:259:DoInferenceOnImageFile]:Successfully loaded the tensor for image /storage/emulated/0/Download/MovidiusTest/data/images/nps_electric_guitar.png 2018-11-22 11:39:56.368 10705-10705/com.serenegiant.movidiustest D/movidius: [10705*multistick.cpp:272:DoInferenceOnImageFile]:Successfully got the inference result for image /storage/emulated/0/Download/MovidiusTest/data/images/nps_electric_guitar.png 2018-11-22 11:39:56.368 10705-10705/com.serenegiant.movidiustest D/movidius: [10705*multistick.cpp:290:DoInferenceOnImageFile]:Index of top result is: 546 2018-11-22 11:39:56.368 10705-10705/com.serenegiant.movidiustest D/movidius: [10705*multistick.cpp:291:DoInferenceOnImageFile]:Probability of top result is: 0.994141 2018-11-22 11:39:56.368 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:293:DoInferenceOnImageFile]:end (1) 2018-11-22 11:39:56.369 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:343:run_test]:----------------------- 2018-11-22 11:39:56.369 10705-10705/com.serenegiant.movidiustest V/movidius: [10705*multistick.cpp:364:run_test]:end (0) |
アプリを起動したまま続けて2回実行しようとgraphの読み込みに失敗するとかあってまだまだやけど、これでNeural Networks APIに対応しないAndroid8.1未満の機種でもハードウエアアクセラレーションによってNN推論と訓練済み機械学習モデルの高速実行をできるようになったってことよな✌しかも頑張れば複数のNeural Compute Stick/Neural Compute Stick 2も同時にアクセスできるから…