NVIDIAから、機械学習用シングルボードコンピュータが、性能や価格帯ごとに販売されています。
これから使い始める場合は登場時期が比較的最近のXavier・Nano・Xavuer NXのどれを採用するか?で悩む方が多いのでは?と思います。
それぞれ特徴をさらっとご紹介します、
といった住み分けになるかと思います。
まずXavier NXを試してみて、性能が不足しているようであればXavierを、そこまでの性能が必要ない場合はNanoを検討する。
こんな感じで選ばれると良いと思います。
とはいえ「じゃあそれぞれ具体的にどれくらいのパフォーマンスで動作するの?」となると思うので、今回は当社が活用に力を入れているdarknet YOLOが、Xavier NX上でどれほどの検出性能を発揮するのかを検証をしてみました。
次の条件で検証しました。
検出対象をカメラモジュール(ロジクール C270nで性能は720p=1280×720だと30fps)にし、検出後に画像ファイルを保存しないことで、microSDに対してのI/Oの遅さの影響を除外しました。
60秒間で検出できたフレーム数からFPSを割り出す形で計測したわけですが、この60秒間の中に起動や検出器のロード時間などは含まれないようにしています。
実際にシステムに組み込んだ時に重要とされるのは、起動の速さではなく継続的な検出処理速度だからです。
検証のために作成したプログラムは、かなり長くなってしまったので、計測部分だけをピンポイントに載せます。
def measure(network, class_names, class_colors, darknet_image, cap): """ Parameters ---------- network: darknet.network_ptr class_names: list of str class_colors: list of str darknet_image: darknet.IMAGE cap: cv2.VideoCapture Returns ------- float fps """ detect_count = 0 MEASURE_TIME = 60 before = time.perf_counter() while time.perf_counter() - before < MEASURE_TIME: retval, im = cap.read() darknet.copy_image_from_bytes(darknet_image, im.tobytes()) detections = darknet.detect_image(network, class_names, darknet_image, thresh=0.01) darknet.draw_boxes(detections, im, class_colors) detect_count += 1 return detect_count / MEASURE_TIME
このように、純粋なフレーム取得・検出・BBox描画の部分のみの処理時間の計測となっています。
また、GPU使用率は、別プロセスで1秒ごとにtegrastatsコマンドの結果から取得するプログラムを書きました。
検証した結果、まずまず?そこそこ?の結果となりました。
YOLOv3が7.5fpsでYOLOv4の4.6fpsよりも高速で処理できるという一方で、 YOLOv3とYOLOv3-tinyの差はほとんどありませんでした。
YOLOv3のほうがYOLOv4より高速で動作することはある程度は予想がついていたのですが、YOLOv3とYOLOv3-tinyがほぼ同じ動作速度というのは違和感があります。
そこでGPUの使用率を見てみました。
GPUの使用率は、YOLOv4が予想通りほぼ100%使い切っていたのに対して、YOLOv3は少し余力があるように見え、 YOLOv3-tinyとなるとかなり余力があるように見えます。
こうしてみると、YOLOv3を利用すると、ボトルネックがGPUではなく他の部分である可能性が高そうです。
ちなみに、グラフがギザギザの形になっているのは、カメラからの画像読み込みとGPUを使用した検出処理を交互に行っているためです。
キューにフレームをプッシュするスレッドとキューからフレームを取り出して物体検出をするスレッドで分けて処理することで、グラフの谷がなくなる形でGPUを活用できるかもしれません。
ただ今回は、動作速度の検証が目的なので、何か製品を作るときはそういう構造にしようと思います。
というわけで、まとめです。
▼この記事を書いたひと
R&Dセンター 長尾 賢志
Pythonistaですが、Java、C#、Rubyなども経験があり、オブジェクト指向を得意とします。Djangoを使用したWeb開発をしたことがあるほか、データ解析・可視化なども行なっています。R&Dセンターではエッジコンピューティング、IoT関連を担当しています。保有資格:ソフトウェア開発技術者
●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711 地図
R&Dセンター