では実際に動かしてみよう。完成したバイナリは、先ほどのjetson-inference/buildの下にあるaarch64/binの下に置かれている。ここにカレントディレクトを移した上で、
$ ./imagenet-console --network=googlenet orange_0.jpg output_0.jpg
を実行すると(図8)、入力ソース(この場合だとorange_0.jpg)を読み取って分類を実施、結果をoutput_0.jpgに返す(図9)。
ちなみに--networkをresnet18にすればResNet-18が、resnet50にすればResNet-50がそれぞれ利用されることになる。
さて、表1にこれら3つのネットワークを利用してInferenceを実行した場合の所要時間と精度(というか、確率)をまとめた。精度というのは、そのネットワークが何%程度の確率でorange_0.jpgが「オレンジである」と見なしたかを示す。結果から分かるように、ネットワークによって精度や所要時間に結構なバラつきがあることが分かった。
CPU平均所要時間(ms) | CUDA平均所要時間(ms) | Orangeである確率(%) | |
---|---|---|---|
GoogleNet | 113.7 | 112.9 | 97.90 |
ResNet-18 | 99.3 | 98.7 | 99.60 |
ResNet-50 | 133.1 | 132.4 | 99.80 |
表1 各ネットワークでInferenceを実行した場合の所要時間と精度 |
ちなみに、待機時の消費電力は4.5W程度、Inferenceを行っている時の消費電力は6.8W程度であったが、恐らくはまだフルにCUDAコアが動いているという状況ではないので、この先どの程度消費電力が増えてゆくかは引き続きチェックしたいと思う。
なお表1では所要時間の全体をまとめたが、実際にはもう少し細かく数字が出る。例えば、GoogleNetのある実行時間は、
CPU | CUDA | |
---|---|---|
Pre-Process | 0.106ms | 1.711ms |
Network | 116.998ms | 114.749ms |
Post-Process | 0.394ms | 0.391ms |
となっており、両方にそれなりの負荷が掛かっていることが見てとれる。
ところで、表1では「平均」の値を示したが、実は結構変動が大きい。そこでこれら3つのネットワークについて、それぞれ10回ずつInferenceを実行し、合計の所要時間の平均、最大、最小と標準偏差を取ったのが表2である。なんというか、非常にバラつきが大きいのが分かる。まぁ実際には1フレーム単位での処理ではなく、それこそカメラ入力から連続的に画像を取り込んでリアルタイムに分析を行う、といった使い方がむしろ多そうなので、平均フレームレートで測定するのが正しい評価方法なのかもしれない。
プロセッサ | 平均所要時間(ms) | 最小所要時間(ms) | 最大所要時間(ms) | 標準偏差(ms) | |
---|---|---|---|---|---|
GoogleNet | CPU | 113.7 | 61.3 | 189.0 | 39.1 |
CUDA | 112.9 | 60.7 | 188.0 | 39.1 | |
ResNet-18 | CPU | 99.3 | 53.0 | 150.2 | 34.8 |
CUDA | 98.7 | 52.3 | 150.3 | 34.9 | |
ResNet-50 | CPU | 133.1 | 92.9 | 273.3 | 50.7 |
CUDA | 132.4 | 92.2 | 273.0 | 50.8 | |
表2 各ネットワークでInferenceを実行した場合の所要時間の平均、最大、最小と標準偏差 |
Copyright © ITmedia, Inc. All Rights Reserved.