DashCamNet と PeopleNet を使用した Jetson Xavier NX マルチカメラ
はじめに
現在、自動運転、車載記録、違反監視の分野では、車両情報、車両ナンバープレート、周囲の障害物を識別するために人工知能を活用することが多くなっています。Nvidia NGC が提供する大量の事前訓練済みモデルのおかげで、これらの複雑なタスクをより簡単に実行できるようになりました。
AI/機械学習モデルをゼロから作成するには、多くの時間とコストがかかります。転移学習は、既存のニューラルネットワークモデルから学習した特徴を新しいモデルに抽出するために使用できる人気の技術です。NVIDIA TAO(Train, Adapt, and Optimize)Toolkit は、NVIDIA TAO の CLI および Jupyter ノートブックベースのソリューションで、AI/深層学習フレームワークの複雑さを抽象化し、ゼロから訓練する場合と比較してわずかなデータ量で高品質な NVIDIA 事前訓練済み AI モデルを微調整できます。
TAO Toolkit は、EfficientNet、YOLOv3/v4、RetinaNet、FasterRCNN、UNET など、100 以上の NVIDIA 最適化モデルアーキテクチャとバックボーンの組み合わせもサポートしています。
NVIDIA のリポジトリと Tomasz のプロジェクトのおかげで、Jetson Xavier NX にデプロイされたマルチカメラで車両と人物を検出します。Jetson SUB Mini PC はこのデモに適しています。
NVIDIA TAO Toolkit は以前 NVIDIA Transfer Learning Toolkit(Tlt)と呼ばれていました。
必要な材料
ハードウェアセットアップ
- USB ウェブカメラ / Raspberry Pi Camera V2.1 / IMX219-130 8MP カメラ / 高品質 12.3MP IMX477 カメラ
- HDMI、DP または eDP インターフェースを持つディスプレイ
- Linux ディストリビューション OS を搭載した PC
ソフトウェアセットアップ
- Jetson Xavier NX 用 Jetpack 4.5 または 4.6
- Docker
- DeepStream
- TAO Toolkit
- Pypi(python3-pip)と仮想環境を含む Python3.6
- NVIDIA Container Toolkit
ソフトウェアのインストール方法は以下の手順で説明します。
事前インストール
プロジェクトを開始する前に、Ubuntu に Docker Engine をインストールする必要があります。Docker Engine をインストールする方法はいくつかあり、ニーズに応じていずれかの方法を選択できます。すでにセットアップしている場合は、この手順をスキップできます。
- ほとんどのユーザーは、インストールとアップグレードタスクを簡単にするために Docker のリポジトリをセットアップ してそこからインストールします。これが推奨されるアプローチです。
- 一部のユーザーは DEB パッケージをダウンロードして 手動でインストール し、アップグレードを完全に手動で管理します。これは、インターネットにアクセスできないエアギャップシステムに Docker をインストールする場合などに有用です。
- テストおよび開発環境では、一部のユーザーは自動化された 便利スクリプト を使用して Docker をインストールすることを選択します。
ここでは最初の方法を使用します。docker をインストールする前に、そのバージョンが最新であることを確認する必要があります。古いバージョンの名前は docker
、docker.io
、または docker-engine
である可能性があり、以下のコマンドを使用して確認できます:
sudo apt-get purge docker docker-engine docker.io containerd runc
Dockerをアンインストールする際、/var/lib/docker/
の内容(イメージ、コンテナ、ボリューム、ネットワークを含む)はすべて保持されます。クリーンインストールから始めたい場合は、このページの下部にあるDocker Engineのアンインストールセクションを参照してください。
リポジトリを使用したDockerのインストール
新しいホストマシンにDocker Engineをインストールする前に、Dockerリポジトリをセットアップする必要があります。その後、リポジトリからDockerをインストールおよび更新できます。
- ステップ1.
apt
パッケージでリポジトリをセットアップ
apt
パッケージインデックスを更新し、apt
がHTTPS経由でリポジトリを使用できるようにするパッケージを以下のコマンドでインストールします:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
DockerのオフィシャルGPGキーを追加:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
以下のコマンドを使用してstableリポジトリを設定してください。nightlyまたはtestリポジトリを追加するには、以下のコマンドのstable
という単語の後にnightly
またはtest
(または両方)という単語を追加してください。nightlyおよびtestチャンネルについてはこちらで詳しく学ぶことができます。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- ステップ 2. Docker エンジンをインストールする
apt
パッケージインデックスを更新し、以下のコマンドで Docker エンジンと containerd の最新バージョンをインストールします:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
hello-world
イメージを実行してDocker Engineが正しくインストールされているかどうかを確認できます。
sudo docker run hello-world
- ステップ 3. 以下のプロセスで非rootユーザーとしてDockerを管理します。
docker
グループを作成します。
sudo groupadd docker
ユーザーを docker
グループに追加します。
sudo usermod -aG docker $USER
ログアウトして再度ログインし、グループメンバーシップを再評価してください。
hello-world
を実行して、sudo
なしでdocker
コマンドを実行できることを確認してください
docker run hello-world
- ステップ 4. 以下のプロセスでNVIDIA Container Toolkitをセットアップします:
stable
リポジトリとGPGキーをセットアップします:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
Update the package listing and install the nvidia-docker2
package (and dependencies):
sudo apt-get update
sudo apt-get install -y nvidia-docker2
デフォルトランタイムを設定した後、インストールを完了するためにDockerデーモンを再起動します:
sudo systemctl restart docker
はじめに
NVIDIA GPU Cloud CLI ARM64 Linux のインストール
NVIDIA GPU Cloud (NGC) CLI は、NGC Container Registry 内の Docker コンテナを管理するための Python ベースのコマンドラインインターフェースです。NGC CLI を使用すると、ジョブの実行や組織およびチーム空間内の Docker リポジトリの表示など、NGC ウェブサイトから利用可能な多くの同じ操作を実行できます。
- ステップ 1. Download CLI ページに移動し、バイナリを含む zip ファイルをダウンロードします。ARM64 用の NGC CLI バイナリは Ubuntu 18.04 以降のディストリビューションでサポートされています。
- ステップ 2. zip ファイルを権限のあるディレクトリに転送し、解凍して最後にバイナリを実行します。
また、実行権限のあるディレクトリに移動してから以下のコマンドを実行することで、コマンドラインからダウンロード、解凍、インストールを行うこともできます:
wget -O ngccli_arm64.zip https://ngc.nvidia.com/downloads/ngccli_arm64.zip && unzip -o ngccli_arm64.zip && chmod u+x ngc
バイナリのmd5ハッシュをチェックして、ダウンロード中にファイルが破損していないことを確認します:
md5sum -c ngc.md5
- ステップ 3. 現在のディレクトリをパスに追加します:
echo "export PATH=\"\$PATH:$(pwd)\"" >> ~/.bash_profile && source ~/.bash_profile
NGC CLIを使用してコマンドを実行するために、設定を行う必要があります。
- ステップ4. 以下のコマンドを入力し、プロンプトが表示されたらAPIキーを含めてください:
ngc config set
NGC API キー生成
NGC CLI を設定するには API キーが必要です。NGC ウェブサイトから生成できます。
- ステップ 1. ウェブサイトに移動し、「Sign In/Sign Up」をクリックします。
- ステップ 2. NVIDIA 開発者としてアカウントを登録します。
- ステップ 3. 続行するアカウントを選択します。
- ステップ 4. ページの右上角にある「Setup」をクリックします。
- ステップ 5. 「Get API Key」を選択します。
- ステップ 6. 「Generate API Key」をクリックします。
- ステップ 7. API キーがページの下部に表示されます。
TAO Toolkit のインストール
最初に Python3 と python3-pip をインストールする必要があります:
sudo apt install -y python3 python3-pip
TAO Toolkitは、NVIDIA PyIndexでホストされているPython pipパッケージです。このパッケージは、内部でdocker restAPIを使用してNGC Dockerレジストリと連携し、基盤となるdockerコンテナをプルして実行します。前のステップで、すでにNGCアカウントを設定し、それに関連付けられたAPIキーを生成しました。インストール前提条件セクションについて詳しく知りたい場合は、NGCアカウントの作成とAPIキーの取得に関する詳細をクリックして確認できます。
仮想環境 - Virtualenv
仮想環境は、Pythonの独立した作業コピーであり、他のプロジェクトに影響を与えることなく特定のプロジェクトで作業することができます。例えば、Django 1.0を必要とするプロジェクトを処理しながら、Django 1.3を必要とするプロジェクトで作業することができます。独立したPython環境を作成するには、こちらをクリックしてください。
まず仮想環境を設定してからTAO Toolkitをインストールすることを強く推奨します。
- pipを使用してvirtualenvをインストールできます:
pip install virtualenv
- Create a virtual environment:
virtualenv venv
Pythonのコピーを、コマンドを実行したディレクトリに作成し、venv
という名前のフォルダに配置します。
- 仮想環境をアクティベートします:
source venv/bin/activate
- If you are done working in the virtual environment for the moment, you can deactivate it:
deactivate
これにより、システムのデフォルトPythonインタープリターとそのインストール済みライブラリに戻ります。
仮想環境を削除するには、そのフォルダを削除するだけです。
virtualenvwarpper
しかし、しばらくすると、システム全体に多くの仮想環境が散らばってしまい、それらの名前や配置場所を忘れてしまう可能性があります。そのため、virtualenvwrapperを使用します。virtualenvwrapperは、仮想環境での作業をより快適にするコマンドセットを提供します。また、すべての仮想環境を一箇所に配置します。
インストールできます(virtualenvが既にインストールされていることを確認してください):
pip install virtualenvwrapper
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
より詳細な情報については、Full virtualenvwrapper install instructions を参照してください。)
virtualenvwrapperを使用してPython virtualenvを設定するには、このリンクの手順に従ってください。
仮想環境でのPythonバージョンの設定
-
ステップ 1.
virtualenv
とvirtualenvwrapper
のインストール手順に従った後、virtualenv
でPythonバージョンを設定します。これは以下のいずれかの方法で実行できます: -
VIRTUALENVWRAPPER_PYTHON という環境変数を定義します。この変数は、ローカルマシンにpython3バイナリがインストールされているパスを指す必要があります。デフォルトでPython
virtualenv
を設定するために、.bashrc
または.bash_profile
に追加することもできます。
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
virtualenvwrapper
ラッパーを使用してvirtualenv
を作成する際に python3 バイナリのパスを設定する
mkvirtualenv launcher -p /path/to/your/python3
- ステップ 2.
virtualenv
にログインすると、コマンドプロンプトに仮想環境の名前が表示されるはずです
(launcher) py-3.6.9 desktop:
- ステップ 3. セッションが完了したら、
deactivate
コマンドを使用してvirtualenv
を無効化できます:
deactivate
-
Step 4. You may re-instantiate this created
virtualenv
env using theworkon
command.workon launcher
TAOパッケージのインストール
-
ステップ1. 必要な環境はすでに設定済みです。次のコマンドで
nvidia-tao
というTAO Launcher Pythonパッケージをインストールできます。pip3 install nvidia-pyindex
pip3 install nvidia-tao -
ステップ 2.
tao
コマンドを使用してエントリーポイントを呼び出します。
tao --help
上記コマンドのサンプル出力は以下の通りです:
usage: tao [-h]
{list,stop,info,augment,bpnet,classification,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,gesturenet,
heartratenet,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,
retinanet,speech_to_text,ssd,text_classification,converter,token_classification,unet,yolo_v3,yolo_v4,yolo_v4_tiny}
...
Launcher for TAO
optional arguments:
-h, --help show this help message and exit
tasks:
{list,stop,info,augment,bpnet,classification,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,gesturenet,heartratenet
,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,retinanet,speech_to_text,
ssd,text_classification,converter,token_classification,unet,yolo_v3,yolo_v4,yolo_v4_tiny}
-
ステップ 3. タスクの下で、ランチャーから呼び出し可能なすべてのタスクを確認できることに注意してください。以下は、TAO Launcherを使用して起動されたコマンドの処理に役立つ具体的なタスクです:
- list
- stop
- info
注意: ターミナルで「bash: Cannot find tao」と表示される場合は、次のコマンドを使用してください:
export PATH=$PATH:~/.local/bin
tao --help
DeepStream5のインストール
- ステップ1.
/etc/apt/sources.list.d/nvidia-l4t-apt-source.list
を編集し、.6を.5に置き換えます:
deb https://repo.download.nvidia.com/jetson/common r32.5 main
#deb https://repo.download.nvidia.com/jetson/common r32.6 main
deb https://repo.download.nvidia.com/jetson/t194 r32.5 main
#deb https://repo.download.nvidia.com/jetson/t194 r32.6 main
- ステップ 2.
sudo apt update
と入力し、再度 DeepStream 5.1 のインストールを試してください。
その後、以下のコマンドでインストールしてください:
sudo -H pip3 install pyds-ext
詳細については、以下のリンクをご確認ください:
Jetson Multicamera Pipelines のインストールとクイックスタート
最後に、典型的なマルチカメラパイプライン、つまり N×(capture)->preprocess->batch->DNN-> your application logic here ->encode->file I/O + display
を構築します。内部で gstreamer と deepstream を使用し、jetmulticam パッケージを通じて Python でパイプラインを設定するプログラマティックアクセスを提供します。
このプロジェクトは、最小限の CPU 使用量で Nvidia HW アクセラレーションを活用します。例えば、わずか 16.5% の CPU 使用量で 6 つのカメラストリームでリアルタイムオブジェクト検出を実行できます。画像データ(np.array 経由)およびオブジェクト検出結果にアクセスすることで、Python で独自のロジックを簡単に構築できます。
- ステップ 1. 以下のコマンドで Jetson Multicamera Pipelines をインストールします:
git clone https://github.com/NVIDIA-AI-IOT/jetson-multicamera-pipelines.git
cd jetson-multicamera-pipelines
bash scripts/install_dependencies.sh
sudo -H pip3 install Cython
sudo -H pip3 install .
- Step 2. Run example with your cameras:
source scripts/env_vars.sh
cd examples
sudo -H python3 example.py
これは 'example.py' です。単眼カメラまたはマルチカメラのどちらにも適用できます。
import time
from jetmulticam import CameraPipelineDNN
from jetmulticam.models import PeopleNet, DashCamNet
if __name__ == "__main__":
pipeline = CameraPipelineDNN(
cameras=[2, 5, 8],
models=[
PeopleNet.DLA1,
DashCamNet.DLA0,
# PeopleNet.GPU
],
save_video=True,
save_video_folder="/home/nx/logs/videos",
display=True,
)
while pipeline.running():
arr = pipeline.images[0] # np.array with shape (1080, 1920, 3), i.e. (1080p RGB image)
dets = pipeline.detections[0] # Detections from the DNNs
time.sleep(1/30)
これは以下のようなマルチカメラの結果です:
その他
サポートされているモデル/アクセラレータがさらにあります:
pipeline = CameraPipelineDNN(
cam_ids = [0, 1, 2]
models=[
models.PeopleNet.DLA0,
models.PeopleNet.DLA1,
models.PeopleNet.GPU,
models.DashCamNet.DLA0,
models.DashCamNet.DLA1,
models.DashCamNet.GPU
]
# ...
)
注意: ターミナルで "EGL Not found" と表示される場合は、EGLDeviceを確認してください。
技術サポート & 製品ディスカッション
弊社製品をお選びいただき、ありがとうございます!お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルをご用意しています。