【Jetson nano】DetectNetを使った物体検出
はじめに
前回からだいぶ間が空いてしまいました。
jetson-inferenceのチュートリアルを舐めるシリーズ第2弾、今回はDetectNetを使った物体検出を試していきたいと思います。
Jetson nano
の環境やセットアップはこちらから
今回やること
- 画像・動画からオブジェクト検出デモ
- ライブカメラからオブジェクト検出デモ
- オブジェクト検出を実際にコーディングしてみる
画像から検出
以下のコマンドを実行します。
cd jetson-inference/build/aarch64/bin # C++ ./detectnet --network=ssd-mobilenet-v2 images/peds_0.jpg images/test/output.jp # Python ./detectnet.py --network=ssd-mobilenet-v2 images/peds_0.jpg images/test/output.jp
各オプションについては以下です。
名前 | 詳細 | 備考 |
---|---|---|
--network |
検出モデルを指定 | デフォルト:SSD-Mobilenet-v2 |
--overlay |
画像に表示する項目の指定 | デフォルト:box,labels,conf(バウンディングボックス、ラベル、信頼値) |
--alpha |
overlay のアルファ値 |
デフォルト:120 |
--threshold |
検出の最小しきい値 | デフォルト:0.5 |
... [image] loaded '/home/iri/Downloads/Princesses.png' (1920x1080, 3 channels) 4 objects detected detected obj 0 class #1 (person) confidence=0.978219 bounding box 0 (565.865845, 99.381767) (1335.715698, 990.417725) w=769.849854 h=891.035950 detected obj 1 class #1 (person) confidence=0.640411 bounding box 1 (1214.719849, 166.047745) (1887.613647, 1036.154663) w=672.893799 h=870.106934 detected obj 2 class #1 (person) confidence=0.810929 bounding box 2 (6.457014, 203.381561) (618.595398, 1069.588623) w=612.138367 h=866.207031 detected obj 3 class #61 (cake) confidence=0.673406 bounding box 3 (588.501343, 673.810974) (1133.559082, 1016.538818) w=545.057739 h=342.727844 [image] saved 'images/test/princesses.png' (1920x1080, 3 channels) [TRT] ------------------------------------------------ [TRT] Timing Report networks/SSD-Mobilenet-v2/ssd_mobilenet_v2_coco.uff [TRT] ------------------------------------------------ [TRT] Pre-Process CPU 0.08865ms CUDA 3.11979ms [TRT] Network CPU 1351.71216ms CUDA 1347.98914ms [TRT] Post-Process CPU 0.10729ms CUDA 0.10724ms [TRT] Visualize CPU 61.57435ms CUDA 62.08073ms [TRT] Total CPU 1413.48242ms CUDA 1413.29688ms [TRT] ------------------------------------------------ [TRT] note -- when processing a single image, run 'sudo jetson_clocks' before to disable DVFS for more accurate profiling/timing measurements [image] imageLoader -- End of Stream (EOS) has been reached, stream has been closed detectnet: shutting down... detectnet: shutdown complete.
別バージョン pic.twitter.com/u4tWznnHNi
— ki (@ijiwarunahello_) May 4, 2021
ログ通り、3人とケーキ1個が検出されました。
動画から検出
画像と同じように実行できます。
Jetson Nanoの/usr/share/visionworks/sources/data/
以下にサンプルの動画があるので、それを使って試すこともできます。
# C++ ./detectnet /usr/share/visionworks/sources/data/pedestrians.mp4 images/test/pedestrians_ssd.mp4 # Python ./detectnet.py /usr/share/visionworks/sources/data/pedestrians.mp4 images/test/pedestrians_ssd.mp4
DetectNetで物体検出 w/ Jetson Nano pic.twitter.com/cbm6pAWgOk
— ki (@ijiwarunahello_) May 4, 2021
13秒くらいの動画ですが、いい感じに検出できています。
USBカメラからの検出
引数にカメラのタイプを指定します。
今回はUSBカメラを使うので/dev/video0
になります。
./detectnet /dev/video0
Running the Live Camera Detection Demo pic.twitter.com/9SR0mNdBWL
— ki (@ijiwarunahello_) May 4, 2021
めちゃくちゃ検出速度速いですね。最高です!
コーディング
ライブカメラからの検出を例に見てみます。
import jetson.inference import jetson.utils net = jetson.inference.detectNet("ssd-mobilenet-v2", threshold=0.5) camera = jetson.utils.videoSource("/dev/video0") display = jetson.utils.videoOutput("display://0") while display.IsStreaming(): img = camera.Capture() detections = net.Detect(img) display.Render(img) display.SetStatus("Object Detection | Network {:.0f} FPS".format(net.GetNetworkFPS()))
このくらいのコードでサクッと物体検出できちゃうのはありがたいです…🙏
最後に
Jetson nanoで物体検出を実行する手順を一通り実行してみました(チュートリアルまんまコピペなのはご愛嬌)。
SSD Mobilenetは爆速ですね。今後はこれを色々別のことに応用していきたいと思います。