スポンサーリンク

JetsonNanoにdarknet_rosを入れて物体検出する方法

今回はJetsonNanoにdarknet_rosを入れて物体検出する方法について紹介していきます。

こちらを行うとJetsonNano上でYOLOv3などの物体検出を行うことができるようになります。

今回はROSを利用してこちらを実行したいので「darknet_ros」を導入していきます。

前提 ①

ROSのインストールまで完了していること。ROSのインストール方法については以下の記事を参照のこと。

JetsonNanoにROSを入れてJetbotを動かす方法

前提 ②

今回OpenCVのバージョンは3.3.1を利用しています。他のバージョンではdarknet_rosが動かない可能性があるのでエラーの内容によってはOpenCVのバージョンを変更する必要が出てくると思います。私の場合、OpenCVの4.4.0-devを入れているときはdarknet_rosが動きませんでした。

OpenCVのバージョンを確認したい場合は以下のコマンドを実行します。

darknet_rosのインストールと設定

以下の順番でdarknet_rosのインストールと設定を確認していきます。

SSHキーを設定する

以下でdarknet_rosをクローンするためにGitHubにSSHキーを登録する必要があります。こちらのページを参考にして登録を実施します。

Set up an SSH key

上記でSSHキーを取得したらGitHubにサインインして追加しておく。

こちらにSSHキーを追加したら完了です。

darknet_rosのインストール

まずはJetsonNanoのターミナルで以下のコマンドを順番に実行してdarknet_rosをクローンしておきます。ワークフォルダ名は任意なので、私はROSをインストールしたときの「workspace/catkin_ws」をそのまま利用しています。

性能を最大にするためにリリースモードでビルドを実施します。

ROSのパスが通っていることを確認

ROSをインストールした際にパスの設定はしているはずですが、こちらも再度確認しておきます。以下のコマンドでパスを表示します。

~/workspace/catkin_ws/src のパスが表示されていれば今回はOKです。

パスが存在しない場合は以下を実行してROSのパスを追加しておきます。パスは自分の環境に合わせておきます。

毎回手動でワークスペースのパスを追加したい場合は~/workspace/catkin_ws/まで移動してこちらを実行します。

重みをダウンロードする(任意)

クローンした段階ですでにいくつかの重みはダウンロードされていますが、他にも欲しいものがあれば以下を実行して所定の場所に重みをダウンロードしておきます。

独自の物体検出を行う場合(任意)

自分独自の物体検出を行いたい場合は作成した重みとcfgファイルを以下のフォルダにそれぞれ配置します。

さらに物体検出したいものの名前をConfigファイルに定義して以下のフォルダに配置します。

launchファイルには上記のファイルパスを指定して保存します。

USBカメラを利用するとき

今回はUSBカメラを利用しますので以下のファイルの中身を編集します。適当なエディタでファイルを開きます。

カメラの定義の箇所を以下のように編集して保存します。

USBカメラの接続確認

JetsonNanoに接続しているUSBカメラが正しく認識されていることを確認しておきます。

今回はデバイスの0番(video0)にUSBカメラを設定しておきたいため、CSIカメラなどを接続してる場合は外しておきます。

カメラのフォーマットによってはエラーが発生する場合があります。カメラのフォーマットを調べたいときはデバイス番号を指定して以下のコマンドを実行します。デバイス0番を調べたいときは「-d 0」のようにします。

カメラのフォーマットが異なるというエラーが発生した場合は以下のようにしてフォーマットを変更します。

darknet_rosの実行

以下の手順でdarknet_rosを実行しJetsonNanoとWEBカメラによるリアルタイム物体検出を行っていきます。

USBカメラの起動

以下のいずれかを実行してUSBカメラを起動します。launchファイルで実行するときはこちら。

rosrunで実行したいときはこちら。

darknet_rosの起動

次にdarknet_rosを起動します。以下はYOLOv3を実行する場合です。

しばらくするとウィンドウが二つ表示されて片方に物体検出された映像が表示されると思います。

私の場合、ざっと1FPSいかないぐらいの処理速度なのでかなり重たく感じると思います。終了するときはCtrl+Cで終了させます。

次にデフォルト設定のまま実行してみます。デフォルトの設定では「yolov2-tiny」が設定されていますので5FPS~6FPS程度になり少しましになりました。

以上、今回はJetsonNanoにdarknet_rosを入れて物体検出する方法について紹介させていただきました。