NVIDIA製の組み込みコンピュータ「Jetson TX1」に、以前作成した「看板検出」デモを移植し、動作させてみました。
看板検出デモについては、以前の記事を参照してください。
『ダイレクトなR-CNN』で物体検出する。
by Nagasawa Kazuki 2016/2/16

環境構築
基本的には、NVIDIAから配布されている標準的なOS・ミドルウェアを利用しています。
OS | Ubuntu 14.04 (LTS) |
---|---|
CUDA | 7.0 |
cuDNN | version 4 |
OpenCV | 3.0.0 |
Python | 2.7 |
Deep Learning framework | Caffe (2015/12/18 時点でgit cloneしたもの) |
OpenCVについては、看板検出のデモで使用したUSB接続Webカメラのデバイスを取得できなかったため、OpenCV4Tegraを使用せず、Linux版のOpenCVを使用しました。
時間切れのため未検証となりましたが、Jetson TX1用のCameraモジュールをインストールしておく必要があったのかもしれません。

(http://www.nvidia.com/object/jetson-tk1-embedded-dev-kit.htmlより)
デモ移植までの苦労あれこれ
デモの速度とニューラルネットワーク調整
元の看板検出デモは、Geforce 980M というハイエンドなノートPC用GPUを利用し、256×256ピクセルの画像をニューラルネットワーク (= NN) に与えて看板検出を行っていました。
この構成をそのままJetson TX1移植したところ、1回の検出に2秒程度かかり、とてもデモには使用できない速度でした。(Jetson TK1と比べたら格段に速いのですが。)
そこで、NNの構成を変えて試行錯誤するのは時間がかかるため、NNの構成は元と同じGoogLeNetのまま、入力画像を128×128と1/4サイズにすることで対応しました。
これにより、検出の精度はある程度犠牲になりましたが、1回の検出が0.3秒程度となり、それなりに“見せられる”デモの形にすることができました。
SDカードのサイズ容量
今回使用したのは16GBのSDカードでした。通常のJetson TX1の使い方であれば十分と思われるサイズでしたが、今回は容量ぎりぎりになってしまいました。デモの用途に応じて多めに見積もっておくべきでした。特に容量を割いたのが以下2つでした。
- OpenCV本体。Linux版を用いたため、ビルド先サイズは2GB!!SDカードの容量からすると重量級ミドルウェアに。
- デモ用途で、看板検出関係の動画も一緒にSDカードに入れた。合わせて 1GB程度。
デモ中にフリーズ発生
看板検出デモを長時間動かしていると何故か画面がフリーズし、その後の操作を一切受け付けなくなる現象が頻発しました。ネットワーク経由のリモートコンソールも落とされてしまうため、リブートするしかなくなります。
CUDA、cuDNN、OpenCV 等のミドルウェアを疑い、様々なバージョンを入れ替え試してみましたが、時間切れで原因は不明のままでした。原因特定して、正しく使えるようにしたいところです。
未だ原因不明なのですが、1つ怪しい点が、ディスプレイへの描画です。
- 2Kディスプレイだと、長時間稼働して落ちる。
- 4Kディスプレイだと、デモ起動後わずか数秒で落ちる。
状態となっていて、OpenCVによる描画が起因しているのかもしれません。
デモ展示
2016/1/5開催の「つくばチャレンジシンポジウム」、2016/1/22開催の「NVIDIA Jetson プラットフォーム Meet-up #01」にて展示しました。Jetson TX1効果もあり、多くの人にデモを見てもらうことができました。
(フリーズする問題は解決しないままでしたが、お客さんが集まる時間帯には持ちこたえてくれました。セッション中に何度かリブートしましたが…。)

参照
『ダイレクトなR-CNN』で物体検出する
NVIDIA Jetson プラットフォーム Meet-up #01 の様子 (Togetter)