日々研鑽、日常の楽しいことを書くブログ

社会人エンジニア1年目が考える日々の研鑽、日常について書き、お互いに刺激しあえるようなブログを目指しています。

jetson nanoを用いた工作 ~demo実装編~

#おうち時間

本日は前回の記事に引き続き、jetson nanoを用いた様々なdemoについて書いていきます。

 

www.taketake-1222.work

 

紹介するdemo

本記事で紹介するdemoは私が特に面白いと感じたものを紹介しようと思います。試すのも簡単なので、ぜひ挑戦してみてください。紹介するdemoは、jetson nanoに標準で入っているVision worksとjetson用の画像処理リポジトリであるjetson-inferenceです。

Vision works

まずはVision worksです。

Vision worksではすでに入っているデータを使ってdemoをしていますが、自身で用意したデータでも同様の推論が可能なようなので、興味のある人はぜひ試してみてください。

実装方法に関しては、とても参考になる"Jetson Nano超入門"という本があるので、こちらを参考にしていただきたいです。

 

 

私が試したdemoはFeature tracking, Object tracking, Motion estimation, Stereo matchingです。

feature tracking

feature trackingやobject trackingは自動運転に使用されているような技術です。

正面の自動車に追従する,周辺の認識,動作の予測をするのに重要な技術です。もちろんこれだけでは自動車を走らせることはできませんが、このレベルの推論がjetson nanoで動作するというのはとても驚きです。

以下,feature trackingとobject trackingのデモ写真です。

f:id:bamboomush:20200510130944p:plain

feature tracking

feature trackingでは取得した特徴量がどのように遷移しているかベクトル化しているようです。

これを見ることでこの学習器ではどこを特徴として着目しているのか、なにを重視しているのかが見て取れます。

object tracking

f:id:bamboomush:20200510131017p:plain

object tracking

 

object trackingでは、バウンディングボックスで囲われたものを追跡するといったdemoです。これは、feature trackingのように特徴に着目してバウンディングボックス内の特徴をトラッキングしているようなのですが、時折ボックスがずれてうまくいかなくなります。これは特徴の取り方が最適ではなく、自動車でも他の自動車にあるような特徴を見ていたりとか、電柱にあるような特徴なんかも見ているためうまくいっていないのではないかと考察しています。

 

motion estimation

次に、motion estimationです。これもfeature trackingとやっていることは似ているのですが、おそらく動体認識をしていると思います。そして、1フレーム前とかを使って推論しているといったところではないかと思います。これも30FPS以上で動いているので、監視カメラとかにも使えそうですし、自動ドアなんかにもつけるといいかもしれないですね。

 

f:id:bamboomush:20200510131008p:plain

motion estimation
stereo matching

最後にstereo matchingなのですが、これは正直よくわからなかったです。おそらく、2つの単眼カメラがある想定で、三角法とかを使用した時のステレオカメラを想定していて、距離を算出できるということだとは思うのですが、リアルタイム実装とかができるのかもよくわからないです。

f:id:bamboomush:20200510131022p:plain

stereo matching

ここまでで、Vision worksのdemoの紹介は終わりです。ほかにもスタビライザーなどで手振れ補正をしているdemoなんかもありましたので興味があったらすべて試してみるといいかと思います。

 

jetson-inference

次にjetson-inferenceについてです。こちらは実際にカメラを使用してDeep Learningによる推論を体験することができます。

私が使用したカメラは以下のモノです。

このカメラではなく、raspi cameraでも可能なのですが、その場合v2を買う必要があるので注意が必要です。

 それでは、 実際にgitからリポジトリをクローンするところから説明します。

まず、terminalを起動して以下のコードを実行します。

$ git clone https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ git submodule update --init 

これで、リポジトリをクローンしてきました。また、サブモジュールも使用可能にすることを忘れないでください。サブモジュールについては以下の文献あたりを見るとわかるかと思います。

qiita.com

次に落としてきたリポジトリをビルドして実行可能状態にします。

$ mkdir build
$ cd build
$ cmake ../
$ cd jetson-inference/build
$ make
$ sudo make install

これでサンプルが実行できるようになります。

以下を実行することで、googlenetを用いた物体認識ができます。

 
$ cd jetson-inference/build/aarch64/bin         
$ ./imagenet-camera googlenet

私の場合、実行結果が以下のようになっています。

f:id:bamboomush:20200513192621p:plain

コップ

f:id:bamboomush:20200513192749p:plain

キーボード

コップやキーボードが正確に認識できています。

複数の認識も可能なのですが、出力の表示が荒れるので一つずつ撮ってます。

このgitリポジトリは以下のモノなのですが、この物体認識とは別に、物体検出、セグメンテーションなどもできます。

GitHub - dusty-nv/jetson-inference: Guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.

 

物体検出やセグメンテーションをやった結果は以下のようになりました。

f:id:bamboomush:20200513222634p:plain

person

f:id:bamboomush:20200513222700p:plain

chair

f:id:bamboomush:20200513222647p:plain

bed

人、イス、ベッドと一部しか撮影できていなくても割と性格に推論できていることがわかります。

一方で、以下のような失敗例もあります。

f:id:bamboomush:20200513222559p:plain

person??

f:id:bamboomush:20200513222622p:plain

person?????

イスに服をかけると、93.3%personであると推論しました。

これは、服のかかったイスを学習していないからというのと、背景画像の影響かと思います。

また、屋外での写真に関しては、単純に解像度が悪いというのと、手前にある電線などが悪影響を及ぼしているのだと思いました。

また、セグメンテーションに関しては以下のようになったのですが、これはうまくいっているのかわかりませんね…

f:id:bamboomush:20200513222611p:plain

segmentation...

私が光ってます…

 

まあ、サンプルを実装しただけなので、この程度かな…というのが所感ですね。

実際に使用する場合には、データセットを作り直して、転移学習をするのがいいのかなとは思います。

また、rosの導入も進めているので、それも実現出来たら、記事にします。

機械学習に関しても、追加で記事を書くと思うので、その時は、是非読んでください。

 

以上です。

にほんブログ村 IT技術ブログへ
にほんブログ村