ゼロショット検出をJetson Platform Serciesを用いてreComputerで実行する

イントロダクション

CLIPのような生成AI Vision Transformerにより、Open Vocabulary物体検出(未知のラベルを検出するもの)が可能なゼロショット検出モデルをビルドできるようになりました。 つまり、このモデルにより定義済みのクラスセットによって制限されず、物体を検出することができます。 検出する物体は、実行時にユーザーによって構成されます。 Jetsonのゼロショット検出AIサービスにより、ビデオのストリーミング入力に対してOpen Cocabulary検出を行う生成AIを、迅速にデプロイすることが可能になります。 ゼロショット検出AIサービスは、ストリーミング入力と検出物体を制御するための、REST APIエンドポイントを公開しています。

このWikiでは、reComputer J4012(Jetson Orin NX 16GB)でゼロショット検出を実行する方法のチュートリアルを提供します。

Running Zero Shot detection

前提条件

  • Ubuntu22.04以降を実行するreComputer J4012 (Orin NX 16GB)
    • ドライバーバージョン:535.113.01
    • JetPack:6.0
    • CUDAバージョン:12.2
  • JetPackと関連するJetsonサービスパッケージをインストール済み
sudo apt-get install nvidia-jetpack
sudo apt install nvidia-jetson-services
  • RTSP経由でストリーム可能なIPカメラ、またはローカルビデオ
    RTSPストリーミングはNVStreamer tutorial(Seeed Wiki原文)の使用がおすすめです

はじめに

ステップ1

NGC Reference Workflow and Resourceより、NGCからアプリケーションパッケージzero_shot_detection-1.1.0.tar.gzをダウンロードします。 その際、NGC の資格情報を入力する必要があります。 ページ右上のDownloadメニューにある、使用可能なオプションの一つを使用します。

tar -xvf zero_shot_detection-1.1.0.tar.gz
cd ~/zero_shot_detection/example_1

ステップ2

ゼロショット検出AIサービスは、jetson-ingressjetson-redisサービスを使用します。 ゼロショット検出REST APIを公開するには、jetson-ingressサービスを構成する必要があります。 提供されているデフォルトの構成を、対応するサービスの構成ディレクトリにコピーします。

sudo cp config/zero_shot_detection-nginx.conf /opt/nvidia/jetson/services/ingress/config

ステップ3

基本サービスを実行します。

sudo systemctl start jetson-monitoring
sudo systemctl start jetson-sys-monitoring
sudo systemctl start jetson-gpu-monitoring

ステップ4

次のファイルの中で、(モニタリングサービスに使用する)プラットフォームの入力構成ファイルの全行がコメントアウト解除されていることを確認します。

/opt/nvidia/jetson/services/ingress/config/platform-nginx.conf

ステップ5

APIゲートウェイを起動して、モニタリングダッシュボードにアクセスします。

sudo systemctl restart jetson-ingress
sudo systemctl restart jetson-redis
sudo systemctl restart jetson-vst

ステップ6

ゼロショット検出AIサービスを開始します。

sudo docker compose up -d

必要なコンテナが全て起動しているか確認する場合、次のコマンドを実行します。

sudo docker ps

sudo docker ps実行結果

RTSPストリーム入力を追加する

次のcurlコマンドで、ゼロショット検出モデル向けのRTSPストリームを追加します。 ストリーミングにはNVStreamer tutorial(Seeed Wiki原文)の使用がおすすめです。

ステップ1

0.0.0.0を自身のreComputerのIPアドレスに置き換え、liveStreamUrlリンクをRTSPリンクに置き換え、ターミナルに次のコマンドを入力します。

bash
curl --location 'http://0.0.0.0:5010/api/v1/live-stream' \
--header 'Content-Type: application/json' \
--data '{
"liveStreamUrl": "rtsp://0.0.0.0:31554/nvstream/root/store/nvstreamer_videos/car.mp4"
}' 

補足: curlコマンドのほかにも、ゼロショット検出サービス開始時に、APIドキュメントページ(http://0.0.0.0:5010/docs)で確認できるREST APIで直接テストすることも可能です。

ステップ2

ステップ1を実行すると、IDが返されます。 今後のステップで使用するため、このIDをメモしてください。

{"id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"}

次のコマンドでIDを取得することもできます。

curl --location 'http://0.0.0.0:5010/api/v1/live-stream'

このIDでストリームを削除するには、次のコマンドを使用します。

curl --location --request DELETE 'http://0.0.0.0:5010/api/v1/live-stream/{id}'

検出クラスを追加する

ゼロショット検出モデルは、実行時に検出クラスを更新することが可能です。 このエンドポイントは、検出する物体のリストと関連する閾値を受け取ります。 閾値とは検出の感度のことです。 値が高いほど誤検出が減少し、値が低いほど誤検出が増加します。 このサービスでは現在、一つのストリームのみをサポートしていますが、将来的にはこのAPIでマルチストリームをサポートできるようになります。

ステップ1

次のコマンドを実行する前に、下記項目を書き換える必要があります。

  • 0.0.0.0:自身のreComputerのIPアドレスに置き換えます。
  • objects:検出する必要のある物体(最大10個)を含めるために変更します。
  • thresholds:各カテゴリで設定します。
  • id:前のステップでメモしたIDに置き換えます。

書き換えたコマンドを実行します。

curl -X 'POST' \
'http://0.0.0.0:5010/api/v1/detection/classes' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"objects": [
    "a car", "a people"
],
"thresholds": [
    0.2, 0.04
],
"id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"
}'

RTSPストリームの結果を確認する

検出された出力はrtsp://reComputer_ip:5011/outにストリーミングされます。 ビデオストリーム出力を可視化するため、Pythonスクリプトを提供しています。 opencv-pythonライブラリがインストールされた状態で、次のPythonスクリプトを実行する必要があります。

ステップ1

opencv-pythonライブラリをインストールします。

pip install opencv-python

ステップ2

次のPythonスクリプトを実行します。

import cv2
rtsp_url = "rtsp://reComputer_ip:5011/out"
cap = cv2.VideoCapture(rtsp_url)
if not cap.isOpened():
    print("Cannot open RTSP stream")
    exit()
while True:
    ret, frame = cap.read()
    if not ret:
        print("Failed to retrieve frame")
        break
    cv2.imshow('RTSP Stream', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

シャットダウンする

ゼロショット検出サービスを終了するには、compose.yamlファイルと同じディレクトリで、次のコマンドを入力します。

sudo docker compose down

詳細な情報

Jetson Platform Servicesによるゼロショット検出

https://docs.nvidia.com/jetson/jps/inference-services/zero_shot_detection.html

テクニカルサポートと製品に関するフォーラム

ご購入いただいた製品をスムーズにお使いいただけるよう、Seeedでは様々なサポートを提供しています。ご希望に合わせてコンタクトの方法をお選びください。


出典 : Seeed Studio資料 Wiki - How to Run Zero-Shot Detection on reComputer with Jetson Platform Services

https://wiki.seeedstudio.com/run_zero_shot_detection_on_recomputer/

*このガイドはSeeed Studioの許可を得て、スイッチサイエンスが翻訳しています。