【Jetson Nano】ImageNetを使った画像分類
前回のエントリーでJetson nanoをセットアップしました。
次は順番通りに、ImageNetを使った画像分類をやってみます。
ImageNetとは
自然画像の教師ラベル付き画像データベースのこと
いわゆる、MNIST(手書き数字のデータセット)の自然画像版という理解です。
チュートリアルでできること
https://github.com/dusty-nv/jetson-inference/blob/master/docs/imagenet-console-2.md
- ImageNetのモデルに基づいた画像の認識
TensorRT
とImageNet
クラスを使って推論を実行
お手軽に画像認識を試すことができるみたい
画像認識のお試し
以前Dockerで環境構築したので、コンテナにログインする
$ cd jetson-inference $ docker/run.sh
チュートリアルにもあるように、オレンジとストロベリーの画像認識を実行
C++とPython2つでスクリプトが用意されています。デフォルトのニューラルネットワークはGoogleNetが使われます。
# 以下Dockerでの操作です $ cd build/aarch64/bin $ ./imagenet images/orange_0.jpg images/test/output.jpg # C++ $ ./imagenet.py images/orange_0.jpg images/test/output.jpg # Python
出力画像はimages/test
フォルダを指定していますが、このフォルダはホスト側のjetson-inference/data/images/test
にリンクしているので、簡単にホスト側でも出力画像をチェックすることができます。
動画を処理することもできます。こちらはResNet-18を指定して実行しています。ちょっと時間がかかります。
# Download test video (thanks to jell.yfish.us) $ wget https://nvidia.box.com/shared/static/tlswont1jnyu3ix2tbf7utaekpzcx4rc.mkv -O jellyfish.mkv # C++ $ ./imagenet --network=resnet-18 jellyfish.mkv images/test/jellyfish_resnet18.mkv # Python $ ./imagenet.py --network=resnet-18 jellyfish.mkv images/test/jellyfish_resnet18.mkv
もちろんJetsonにつなげたカメラからのフレームも処理できます。
カメラを使う場合の引数については以下のドキュメントが参考になります。
https://github.com/dusty-nv/jetson-inference/blob/master/docs/aux-streaming.md
USBカメラだけの場合は/dev/video0
を指定します(ラズパイ用カメラなど他のデバイスが接続されている場合はvideo1
になっていたりします)
$ ./imagenet v4l2:///dev/video0
v4l2://
は省略しても大丈夫です。
着ていたユニクロのフリースをfur coatやcardiganと認識されてました。
最後に
今回はImageNet
のモデルを使った画像認識をテストしてみました。
全然理解できてなくてもコマンド一発でやれちゃいますね。
次はコードを書いて少しづつ中身を理解しながら進めていきたいと思います。