はじめに
Jetsonの記事をまとめます。Jetsonを応用するために、まずはJetsonを勉強するところから始めようと考えています。当面は、cuda環境の構築を行い、特定のAIモデルを選択し、気軽に学習できる環境を構築することを目標とします。
環境
- Jetson Xavier NX
- USBカメラ(Logicool C270)
- NVIDIA A100 Tensor Core GPU
背景
AIのエッジコンピューティング環境を画像処理のために用意したが、実際にどのように使用してよいか、よくわからないというところがあり、現状活用できていない。Jetsonに関係する情報を集め、サンプルプログラムを動作させるところからはじめ、最終的には学習環境(NVIDIA A100 Tensor Core GPU)と推論環境(Jetson)の連携を図ることを模索します。
やりたいこと
遠隔に機械学習環境が準備できたので、以下のNVIDIAが示すネットワークモデルを目標に環境を構築します。
調査概要
Getting Started With Jetson Xavier NX Developer Kitの顔トラッキングができたので、その次のサンプルプログラムを動作させてみたいと思います。
- Jetsonのセットアップ
- (参考)Jetsonの推論結果をRTPでPCに転送する
- サンプルスクリプトを作成し、動作させる
- Jetson内でイメージ分類モデルを学習させる(途中)
- 遠隔の機械学習環境と連携させる(途中)
- サンプルではなく、独自の環境を構築する(途中)
調査詳細
1 Jetsonのセットアップ
NVIDIA公式ページを参考にJetsonのセットアップを行います。VideoWalkThroughsには動画コンテンツもあるのでおすすめできます。
1. 事前にUSBカメラをJetsonに接続しておく
2. まず現在のJetsonのセットアップ状況を確かめる
(1). L4Tバージョンは以下のとおり
$ cat /etc/nv_tegra_release
# R32 (release), REVISION: 6.1, GCID: 27863751, BOARD: t186ref, EABI: aarch64, DATE: Mon Jul 26 19:36:31 UTC 2021
(2). nvidia-l4t-coreバージョンは以下のとおり
$ dpkg-query --show nvidia-l4t-core
nvidia-l4t-core 32.6.1-20210726122859
(3). JetPackのバージョンは以下のとおり
$ sudo apt show nvidia-jetpack
Version: 4.6-b199
3. 次にdocker containerをクローンし、docker上でAI環境セットアップ
$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ docker/run.sh
4. 2のAI環境セットアップで0で接続したカメラを自動でマウントしたことを確認
$ cd build/aarch64/bin
$ ls /dev/video*
$ ./video-viewer /dev/video0
5. USBカメラから取得したストリーミング映像でリアルタイム物体判定
$ detectnet /dev/video0
6. USBカメラから取得したストリーミング映像でリアルタイム物体判定
$ imagenet /dev/video0
7. (参考)
色々な画像、動画、プロトコルに対応している。手持ちのGenie Nanoで動作させるためには、プロトコル変換(ファイル保存、rtp配信等)する必要があるかもしれない(要調査)。
Camera Streaming and Multimedia
- MIPI CSI cameras
- V4L2 cameras
- RTP / RTSP
- Videos & Images
- Image sequences
- OpenGL windows
2 (参考)Jetsonの推論結果をRTPでHostPC(MacOS)に転送する
HostPC(MacOS)のターミナルウインドウをTerminal1, Terminal2と分けて、それぞれで操作します(混乱しやすいので、記載を分けました。)。
1. (Terminal1)HostPC(MacOS)にGStreamerをインストールする
$ brew install gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad
$ brew install gst-plugins-ugly
2. (Terminal1)HostPC(MacOS)からJetsonにssh接続する
$ ssh -XY xxxx@hostname
3. (Terminal1)Jetson上の1-3で起動したdockerコンテナをbashで立ち上げ、detectnetを起動する
$ sudo docker exec -it (containerid) /bin/bash
$ detectnet /dev/video0 rtp://HostPC名(IPアドレス):1234
(注意)sshでリモート接続した後にコンテナをアタッチする必要がある
4. (Terminal2)MacOSでのRTP受信
$ gst-launch-1.0 -v udpsrc port=1234 \
caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! \
rtph264depay ! decodebin ! videoconvert ! autovideosink
- nvidiaの公式ページで説明があるように多少の遅延が生じる
- Jetsonそのものにはモニターをつけずに、遠隔PCから確認することも可能になる
3 サンプルスクリプトを作成し、動作させる
まずは、お手本のとおりmy-recognition.pyスクリプトを作成し、動作させる(nvidiaのページほぼそのまま)。
1. 外部にディスク作成し、それをコンテナからマウントする
$ cd ~/
$ mkdir my-recognition
$ cd my-recognition
$ touch my-recognition.py
$ chmod +x my-recognition.py
$ wget https://github.com/dusty-nv/jetson-inference/raw/master/data/images/black_bear.jpg
$ wget https://github.com/dusty-nv/jetson-inference/raw/master/data/images/brown_bear.jpg
$ wget https://github.com/dusty-nv/jetson-inference/raw/master/data/images/polar_bear.jpg
$ cd jetson-inference
$ docker/run.sh --volume ~/my-recognition:/my-recognition
2. my-recognition.pyを修正する
import jetson.inference
import jetson.utils
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("filename", type=str, help="filename of the image to process")
parser.add_argument("--network", type=str, default="googlenet", help="model to use, can be: googlenet, resnet-18, ect. (see --help for others)")
args = parser.parse_args()
img = jetson.utils.loadImage(args.filename)
net = jetson.inference.imageNet(args.network)
class_idx, confidence = net.Classify(img)
class_name = net.GetClassDesc(class_idx)
print('classified image as {:s} (class ID {:d}, confidence {:f})'.format(class_name, class_idx, confidence))
3. 実行する
一部のモデルは再インストールが必要となる。下記はgooglenetとresnet-18の例
$ python3 ./my-recognition.py polar_bear.jpg
$ python3 ./my-recognition.py polar_bear.jpg --network=resnet-18
推論時間を比較すると圧倒的にgooglenetが速い。
4 Jetson内でイメージ分類モデルを学習させる(途中)
参考記事
- 記事
- youtube
- NVIDIA公式
- 自宅でAIを探求する
- Jetson Xavier NX開発者キット及びモジュール
- Getting Started With Jetson Xavier NX Developer Kit
- NVIDIA TensorRT
- GTC November 2021 Keynote with NVIDIA CEO Jensen Huang
- GTC Spring 2021 Keynote with NVIDIA CEO Jensen Huang
- Related Documentation For Jetson
- Getting Started With Jetson Xavier NX Developer Kit: NextStep
- Qiita