前回
ディープラーニングの学習済みデータを使って、iPhoneXやJetson TX2を使っていろいろ試してみましたが、Tiny YOLO単一環境では一体どのくらいの差があるかどうかざっとテストしてみました。
Tiny YOLOを使った理由は、iPhone環境でYOLOを使ったサンプルはTiny YOLOしかないからなんですが、同じデータセットを使って実際認識試験をしたら一体どのくらいの差があるんでしょうか?非常に興味深いところです。TX2の方はDARKNETの標準インストールです。
当然GPUはON、CUDNNもONです。Tiny YOLOは20クラス同時に認識しますが
まずはTX2から。
YOLO: Real-Time Object Detection
で、Tiny YOLOをインストールしてdarknetフォルダの中で次のコマンドを実行します。当然クロックを最大にする./jetson_clock.sh を実行させてから。
./darknet detector demo cfg/voc.data cfg/tiny-yolo-voc.cfg tiny-yolo-voc.weights -c 0
大体15~16FPSってとこでしょうか。ちなみにGPUもCUDNNも外してmakeした実行結果は0.4FPSなので、GPU環境じゃないと動画の認識は不可能でした。つまりCPU単独実行の場合の38倍ぐらい早くなってます。
次にiPhone7 plus
をダウンロードして、この中の「TinyYOLO-CoreML」をビルドします。すでにTineYOLOデータが入っていますのですぐにビルドできます。このサンプルはiPhone のカメラを使うので実機でしかテストできませんが、現状のXCODE9.2は簡単に実機テストできます。詳しくは他の記事を参考にしてください。エラーが出るとすればSigningの設定変更だけです。
11~13FPSです。やはりTX2よりはいくらか遅い。
そしてiPhoneX
28FPS前後!!なんてこっちゃ。早すぎる。iPhone8でも同じくらいのスピードってことですね。1/30追記:このソフトはマルチスレッドで動いているようで、28FPSはどうやらカメラ画像のみのスピードのようです。実際の認識スピードは0.07秒=14.3FPSってところです。この後openFrameworksに移植したところ20〜22FPSまで上げることができました。
Nvidia Jetson TX2は、ディープラーニングに特化していて、一般的なこの種のボードでは最上位のはずです。しかもNvidia公表では単精度の浮動小数点演算で2Tflopsを達成してることになっています。それでも画像の学習には能力不足で、母艦の最速GPUが必要。TX2は学習結果の認識に特化してるはずです。この結果は何を意味するんでしょうか?。方やCUDA+CUDNN、方やMETAL。同じデータセットを使って同数の20クラスを同時認識。結果はiPhoneXが圧倒的に早い。METALなんか発展途上で....なんて考え方は捨てた方が良さそうです。
また、いくらTiny YOLOでも、前述の通りGPU無しでは実用に耐えるスピードまでは行き着きません。問題は開発環境だけって事になります。性能についてAppleはかなり控えめに報道してるって感覚。
アプリを使う側は、プログラムの過程なんかどうでも良いわけで、この結果から見る限りiPhoneXはTX2の遙か上を行ってるって事になりますが、どう思います?
では、また。