Skip to main content

DashCamNet と Jetson Xavier NX マルチカメラ

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

DashCamNet と PeopleNet を使用した Jetson Xavier NX マルチカメラ

はじめに

近年、自動運転、車載録画、違反監視の分野では、人工知能を活用して車両情報、車両ナンバープレート、周囲の障害物を特定することが一般的になっています。Nvidia NGC が提供する多数の事前学習済みモデルのおかげで、これらの複雑なタスクをより簡単に実行できるようになりました。

AI/機械学習モデルをゼロから作成するには、多くの時間と費用がかかる可能性があります。転移学習は、既存のニューラルネットワークモデルから学習済みの特徴を新しいモデルに抽出するために使用できる人気のある手法です。NVIDIA TAO (Train, Adapt, and Optimize) Toolkit は、NVIDIA TAO の CLI および Jupyter Notebook ベースのソリューションであり、AI/ディープラーニングフレームワークの複雑さを抽象化し、ゼロからの学習と比較してわずかなデータで高品質な NVIDIA 事前学習済み AI モデルを微調整できるようにします。

TAO Toolkit はまた、EfficientNet、YOLOv3/v4、RetinaNet、FasterRCNN、UNET など、NVIDIA に最適化されたモデルアーキテクチャとバックボーンの 100 以上の組み合わせをサポートしています。

NVIDIA の リポジトリ と Tomasz の プロジェクト に感謝し、Jetson Xavier NX にマルチカメラを展開して車両と人を検出します。Jetson SUB Mini PC は、このデモに適しています。

NVIDIA TAO Toolkit は以前、NVIDIA Transfer Learning Toolkit (Tlt) と呼ばれていました。

pir

必要な材料

ハードウェアセットアップ

pir

pir

  • HDMI、DP、または eDP インターフェースを備えたディスプレイ
  • Linux ディストリビューションのオペレーティングシステムを搭載した 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 をインストールする前に、バージョンが最新であることを確認する必要があります。古いバージョンの名前は dockerdocker.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 Engine をインストール

apt パッケージインデックスを更新し、以下のコマンドを使用して Docker Engine と 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

グループメンバーシップを再評価するためにログアウトして再ログインします。

sudo を使用せずに docker コマンドを実行できることを確認するために、hello-world を実行します。

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

パッケージリストを更新し、nvidia-docker2 パッケージ(および依存関係)をインストールします:

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 コンテナレジストリ内の Docker コンテナを管理するための Python ベースのコマンドラインインターフェースです。NGC CLI を使用すると、ジョブの実行や組織およびチームスペース内の Docker リポジトリの表示など、NGC ウェブサイトで利用可能な多くの操作を実行できます。

  • ステップ 1. CLI ダウンロード ページに移動し、バイナリを含む zip ファイルをダウンロードします。ARM64 用の NGC CLI バイナリは、Ubuntu 18.04 以降のディストリビューションでサポートされています。

pir

  • ステップ 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」をクリックします。

pir

  • ステップ 2. NVIDIA 開発者としてアカウントを登録します。

pir

  • ステップ 3. アカウントを選択して続行します。

pir

  • ステップ 4. ページの右上にある「Setup」をクリックします。

pir

  • ステップ 5. 「Get API Key」を選択します。

pir

  • ステップ 6. 「Generate API Key」をクリックします。

pir

  • ステップ 7. API キーがページの下部に表示されます。

pir

TAO Toolkit のインストール

まず Python3 と python3-pip をインストールします:

sudo apt install -y python3 python3-pip

TAO Toolkit は NVIDIA PyIndex にホストされている Python pip パッケージです。このパッケージは、NGC Docker レジストリとやり取りするために Docker の restAPI を使用して、基盤となる Docker コンテナをプルしてインスタンス化します。前の手順で、NGC アカウントを設定し、それに関連付けられた API キーを生成しました。インストール前提条件 セクションの詳細については、リンクをクリックして NGC アカウントの作成と API キーの取得に関する詳細を確認してください。

仮想環境 - Virtualenv

仮想環境は、Python の作業コピーを分離して特定のプロジェクトで作業できるようにするものです。他のプロジェクトに影響を与えることを心配せずに作業できます。例えば、Django 1.3 を必要とするプロジェクトと Django 1.0 を必要とするプロジェクトを同時に処理できます。こちら をクリックして、分離された Python 環境を作成できます。

まず仮想環境を設定してから TAO Toolkit をインストールすることを強くお勧めします。

  • pip を使用して virtualenv をインストールします:
pip install virtualenv
  • 仮想環境を作成します:
virtualenv venv

このコマンドを実行したディレクトリに Python のコピーが作成され、venv というフォルダに配置されます。

  • 仮想環境を有効化します:
source venv/bin/activate
  • 仮想環境での作業を一時的に終了する場合は、次のコマンドで無効化できます:
deactivate

これにより、システムのデフォルトの Python インタープリタとそのすべてのインストール済みライブラリに戻ります。

仮想環境を削除するには、そのフォルダを削除するだけです。

virtualenvwrapper

時間が経つと、システム全体に仮想環境が散らばり、その名前や場所を忘れる可能性があります。そのため、virtualenvwrapper を使用します。virtualenvwrapper は、仮想環境での作業をより快適にする一連のコマンドを提供します。また、すべての仮想環境を一箇所にまとめます。

インストールするには(virtualenv がすでにインストールされていることを確認してください):

pip install virtualenvwrapper
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh

詳細については、virtualenvwrapper の完全なインストール手順 を参照してください。

このリンクの指示に従って、virtualenvwrapperを使用してPythonの仮想環境をセットアップしてください。

仮想環境でPythonバージョンを設定する

  • ステップ 1. virtualenvvirtualenvwrapperをインストールする指示に従った後、virtualenv内でPythonバージョンを設定します。以下のいずれかの方法で設定できます:

  • 環境変数VIRTUALENVWRAPPER_PYTHONを定義します。この変数は、ローカルマシンにインストールされているpython3バイナリのパスを指す必要があります。また、.bashrcまたは.bash_profileに追加して、デフォルトでPythonのvirtualenvを設定することもできます。

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
  • ステップ 4. 作成したvirtualenv環境を再度有効化するには、workonコマンドを使用します。
workon launcher

TAOパッケージをインストールする

  • ステップ 1. 必要な環境がすでにセットアップされています。次に、以下のコマンドを使用してTAO Launcher Pythonパッケージnvidia-taoをインストールします。
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で呼び出せるすべてのタスクが表示されます。以下は、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マルチカメラパイプラインとクイックスタートをインストールする

最後に、典型的なマルチカメラパイプライン、すなわちN×(capture)->preprocess->batch->DNN-> your application logic here ->encode->file I/O + displayを構築します。これは、gstreamerとdeepstreamを使用して行われ、Python経由でjetmulticamパッケージを使用してパイプラインをプログラム的に構成できます。

このプロジェクトは、Nvidiaのハードウェアアクセラレーションを利用してCPU使用率を最小限に抑えます。例えば、6つのカメラストリームでリアルタイムの物体検出を行う際、CPU使用率をわずか16.5%に抑えることができます。画像データ(np.array経由)や物体検出結果にアクセスすることで、Pythonで簡単にカスタムロジックを構築できます。

  • ステップ 1. 以下のコマンドでJetsonマルチカメラパイプラインをインストールします:
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 .
  • ステップ 2. カメラを使用して例を実行します:
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を確認してください。

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品をご利用いただく際にスムーズな体験を提供するため、さまざまなサポートを提供しております。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルをご用意しています。

Loading Comments...