Skip to main content

NVIDIA® JetsonデバイスでのalwaysAIの始め方

alwaysAIは、NVIDIA® Jetsonデバイスなどのエッジデバイス上で機械学習アプリケーションを作成・デプロイするための重要なコンピュータビジョン開発プラットフォームです。これらのアプリケーションの開発とデプロイは非常に複雑で時間がかかり、一般的な開発者よりも専門家により関連性があり、アクセスしやすい膨大なコンピュータビジョン技術と手法の深い知識が必要です。alwaysAIはこれらの障壁を取り除き、コンピュータビジョンアプリの作成を簡単、高速、効果的にします。

サポートされているハードウェア

alwaysAIは以下のJetson関連ハードウェアでサポートされています:

  • Seeedのキット:

    • Jetson Nanoで構築されたreComputer J1010
    • Jetson Nanoで構築されたreComputer J1020
    • Jetson Xavier NX 8GBで構築されたreComputer J2011
    • Jetson Xavier NX 16GBで構築されたreComputer J2012
  • Seeedのキャリアボード:

    • Jetson Mate
    • Jetson SUB Mini PC
    • Jetson Xavier AGX H01 Kit
    • A203 Carrier Board
    • A203 (Version 2) Carrier Board
    • A205 Carrier Board
    • A206 Carrier Board
  • NVIDIAの公式開発キット:

    • NVIDIA® Jetson Nano Developer Kit
    • NVIDIA® Jetson Xavier NX Developer Kit
    • NVIDIA® Jetson AGX Xavier Developer Kit
    • NVIDIA® Jetson TX2 Developer Kit
    • NVIDIA® Jetson AGX Orin Developer Kit
  • NVIDIAの公式SoM:

    • NVIDIA® Jetson Nano module
    • NVIDIA® Jetson Xavier NX module
    • NVIDIA® Jetson TX2 NX module
    • NVIDIA® Jetson TX2 module
    • NVIDIA® Jetson AGX Xavier module

前提条件

  • 上記のいずれかのJetsonデバイスでJetPack 4.6を実行し、すべてのSDKコンポーネントがインストールされていること(インストールの参考についてはこのwikiを確認してください)
  • Windows、Linux、またはMacのホストPC
  • USBウェブカメラまたはJetsonデバイスでサポートされているMIPI CSIカメラ

始め方

最初のコンピュータビジョンプロジェクトのデプロイは数分しかかかりません!このwikiの終わりまでに、Jetsonデバイスに接続されたカメラからのライブビデオフィードと、事前に読み込まれたビデオファイルでオブジェクトを検出できるようになります。

  1. 開発コンピュータの環境セットアップ
  2. Jetsonデバイスの環境セットアップ
  3. alwaysAIアカウントのサインアップ
  4. alwaysAIダッシュボードを使用したプロジェクトの作成
  5. 開発コンピュータを使用してJetsonデバイス上にプロジェクトをデプロイ
  6. カメラからのライブビデオフィードでのオブジェクト検出
  7. 事前に読み込まれたビデオファイルでのオブジェクト検出

開発コンピュータの環境セットアップ

次に、開発環境をセットアップする必要があります。ここでは、Windows、Linux、またはMacコンピュータのいずれかを使用できます。

note

このガイドでは、Windows開発コンピュータを使用します。ただし、MacまたはLinuxを開発PCとしてセットアップしたい場合は、こちらをご覧ください

  • ステップ1. こちらをクリックして、alwaysAIデスクトップアプリケーションとコマンドラインインターフェースをダウンロードしてインストールします

  • ステップ2. インストールが完了したら、コマンドラインインターフェースを開いて以下を入力します

aai -v

バージョン番号が表示されれば、alwaysAI CLIのインストールが成功しています。この記事執筆時点でのバージョン番号は1.4.3です。

  • ステップ3. お使いのOSにOpenSSHがすでにインストールされているかどうかを確認してください。エッジデバイスに接続し、機械学習プロジェクトをデプロイするために、開発マシンにOpenSSHが必要です。
ssh -V

バージョン番号が表示された場合、OpenSSHは既にインストールされています。例えば OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2 のようになります。2018年後半の時点で、Windows 10はOpenSSHを標準でサポートしています。WindowsでのOpenSSHのインストールについて詳しくは、Microsoftドキュメントサイトのこの記事をご確認ください。

Jetsonデバイスの環境セットアップ

次に、エッジデバイス(この場合はJetsonデバイス)で環境をセットアップする必要があります。

Step 1. Jetsonデバイスで機械学習プロジェクトを実行する際、edgeIQランタイムが使用されます。これはdockerイメージとして利用可能です。Dockerをインストールする必要はありません。JetPackに既にプリインストールされているためです。ただし、Dockerにアクセスするためにroot権限(sudo)を必要としないよう、ユーザーに「docker」グループを追加する必要があります。Jetsonデバイスにアクセスし、ターミナルで以下を実行してください。

sudo usermod -aG docker $USER

ステップ2. 新しいグループメンバーシップを適用するには、Jetsonデバイスからログアウトして再度ログインするか、以下を入力してください

su - $USER

ステップ 3. sudo なしで docker インストールをテストする

docker run hello-world

alwaysAIアカウントにサインアップ

  • ステップ1. このページにアクセスしてalwaysAIアカウントにサインアップします

  • ステップ2. フォームに記入し、Sign Up for Freeをクリックしてサインアップ手続きを完了します

alwaysAIダッシュボードを使用してプロジェクトを作成

開発マシンとJetsonデバイスでの環境設定を完了し、alwaysAIアカウントにサインアップした後、alwaysAIダッシュボードを使用して新しい物体検出プロジェクトの作成を開始できます。

ステップ1. alwaysAIダッシュボードにアクセスし、New Projectボタンをクリックして新しいプロジェクトを作成します

ステップ2. 開始テンプレートとしてObject Detectionを選択し、プロジェクト名を入力してCreate Projectをクリックします

ステップ3. Click Here To View Your Projectをクリックして、新しく作成されたプロジェクトに入ります

これで、使用されているモデルやその他の有用な詳細など、新しく作成されたプロジェクトに関する情報が表示されます

デフォルトのObject Detection Projectでは、Pascal VOCデータセットで訓練されたmobilenet_ssdがモデルとして使用されています。これは、このアプリケーションが人、鳥、猫、牛、犬、馬、羊、飛行機、自転車、ボート、バス、車、オートバイ、電車、ボトル、椅子、ダイニングテーブル、鉢植え植物、ソファ、テレビ/モニターなどの20のオブジェクトクラスを認識できることを意味します。

しかし、このモデルはJetsonハードウェアで実行するために最適化されておらず、非常に低いfpsで実行されます。そのため、TensorRTサポートを備えたJetson Xavier NX用に最適化されたモデルを選択します。

ステップ4. モデルの横にある3つの点をクリックし、Deleteをクリックします

ステップ5. Add New Modelをクリックし、Go to Model CatalogをクリックしてalwaysAI Model Catalogに入ります

ステップ6. 検索ボックスにssd_mobilenet_v1_coco_2018_01_28_xavier_nxと入力し、+ Use this Modelをクリックします

このモデルはCOCOデータセットで訓練されており、人、自転車、車、オートバイ、飛行機、バス、電車、トラック、ボート、信号機、消火栓、停止標識、パーキングメーター、ベンチ、鳥、猫、犬、馬、羊、牛、象、熊、シマウマ、キリン、バックパック、傘、ハンドバッグ、ネクタイ、スーツケース、フリスビー、スキー、スノーボード、スポーツボール、凧、野球バット、野球グローブ、スケートボード、サーフボード、テニスラケット、ボトル、ワイングラス、カップ、フォーク、ナイフ、スプーン、ボウル、バナナ、りんご、サンドイッチ、オレンジ、ブロッコリー、にんじん、ホットドッグ、ピザ、ドーナツ、ケーキ、椅子、ソファ、鉢植え植物、ベッド、ダイニングテーブル、トイレ、テレビ、ラップトップ、マウス、リモコン、キーボード、携帯電話、電子レンジ、オーブン、トースター、シンク、冷蔵庫、本、時計、花瓶、はさみ、テディベア、ヘアドライヤー、歯ブラシなどの80のオブジェクトクラスを認識できます

ステップ7. 以前に作成したプロジェクト(この場合はMy First Project)を選択し、Add To Projectをクリックします

これで、プロジェクトにモデルを正常に追加できました!

開発コンピューターを使用してJetsonデバイスにプロジェクトをデプロイ

次に、開発コンピューターを使用してSSH経由で、以前に作成したプロジェクトをJetsonデバイスにデプロイします

ステップ1. 開発マシンで新しいフォルダを作成し、新しいフォルダ内でコマンドラインインターフェースを開き、以下を入力します

aai app configure
note

上記のコマンドを初回実行時に、alwaysAIアカウントのユーザー名とパスワードの入力を求められます

ステップ 2. alwaysAIダッシュボードで以前作成したプロジェクトを選択します

ステップ 3. 宛先としてリモートデバイスを選択します

ステップ 4. Yを押してプライベートキーファイルを作成します

ステップ 5. 新しいデバイスを追加をクリックして、Jetsonデバイスをリモートデバイスとして追加します

ステップ 6. デバイスモードとして開発を選択します

ステップ 7. デバイス名を入力します

ステップ 8. 以下のようにJetsonデバイスのユーザー名ホスト名/IPアドレスを入力します

note

ここでJetsonデバイスのユーザー名はlakshanthadで、IPアドレスは192.168.2.156です

ステップ 9. プロンプトが表示されたら、Jetsonデバイスのパスワードを入力します

ステップ 10. アプリを実行する場所を尋ねられたら、デフォルトの場所のままにしてENTERを押します。ここではデフォルトの場所がalwaysai/testに設定されています。これはJetsonデバイス内のプロジェクトディレクトリです

これで、開発用コンピューターからSSH経由でJetsonデバイス上のプロジェクトを正常に初期化できました

Jetsonデバイスにアプリをインストールする前に、メインコードでモデル名と推論エンジンタイプを変更するために小さな変更を行う必要があります。

ステップ 11. PC上でalwaysAI用に作成したディレクトリで、app.pyを開き、以下のようにモデル名と推論エンジンタイプを変更します

def main():
obj_detect = edgeiq.ObjectDetection("alwaysai/ssd_mobilenet_v1_coco_2018_01_28_xavier_nx")
obj_detect.load(engine=edgeiq.Engine.TENSOR_RT)

ステップ 12. 以下を入力してアプリをインストールします

aai app install

正常にインストールされた場合、以下の出力が表示されます

note

この段階でエラーが発生した場合は、まず aai app install --clean メソッドを使用して再デプロイを試すことができます。jetpackバージョンが要求されたバージョン4.6であることを再確認してください。これは sudo apt-cache show nvidia-jetpack コマンドを入力することで確認できます。バージョン番号が正しい場合は、Jetson SDKコンポーネントと共にJetsonシステムのインストールを完了したことを確認してください。これにより、ほとんどの問題を解決できます。

カメラからのライブビデオフィードでのオブジェクト検出

次に、Jetsonデバイスに接続されたUSBカメラからのライブビデオフィードでオブジェクト検出を実行します。使用しているJetsonデバイスでサポートされているMIPI CSIカメラも使用できます

ステップ1. USBカメラ/ MIPI CSIカメラをJetsonデバイスに接続します

ステップ2. 以下を実行します

aai app start

コマンドラインで以下の出力が表示されます

ステップ 3. Webブラウザを開き、http://localhost:5000 と入力してビデオストリームを開きます

http://localhost:5000

ご覧のように、人物がリアルタイムで検出され、各ラベルの信頼度パーセンテージがインターフェースに表示されています。また、Jetson Xavierでの推論時間は0.009秒で、約111 fpsです。

上記は同じモデルを使用した別のデモです。

事前読み込み済み動画ファイルでの物体検出

ここでは、事前読み込み済みの動画ファイルで物体検出を実行します。

ステップ 1. JetsonデバイスのalwaysAIプロジェクトディレクトリ内に動画ファイルを配置します。この例では、/home/<username>/alwaysai/testです。

ステップ 2. 開発用コンピューターで、以前作成したtestフォルダー内のapp.pyファイルを開き、コードのこの部分を置き換えます。

with edgeiq.WebcamVideoStream(cam=0) as video_stream, \
edgeiq.Streamer() as streamer:

with this one

with edgeiq.FileVideoStream(
'file name goes here', play_realtime=True) as video_stream, \
edgeiq.Streamer() as streamer:

そして、file name goes here をビデオファイルの名前とファイル拡張子に置き換えます。ファイル名は単一引用符で囲む必要があります。

ステップ 3. アプリを再度インストールします

aai app install

Step 4. Finally run the app

aai app start

ここでは、以前と同じコマンドライン出力が表示され、前述と同じアドレスでWebブラウザを開くと、事前に読み込まれた動画でオブジェクト検出が実行され、以前と同様の出力が得られます。

検出するオブジェクトのフィルタリング

モデルに検出させたい特定のオブジェクトをフィルタリングすることもできます。例えば、上記で使用したCOCOデータセットは80種類のオブジェクトタイプを検出できます。しかし、人のみを検出するようにフィルタリングすることができます。

app.pyファイルのresultsの後にresults.predictions行を追加するだけです

while True:
frame = video_stream.read()
results = obj_detect.detect_objects(framconfidence_level=.5)
results.predictions = edgefilter_predictions_by_label(resulpredictions, ['person'])
frame = edgeiq.markup_image(

GitHub上のalwaysAIアプリケーション

alwaysAIは、alwaysAI GitHubリポジトリで幅広いすぐに使用できるアプリケーションを提供しています。さまざまなアプリケーションはこちらで確認できます。

ナンバープレート検出器

デモ目的で、これらのアプリケーションの1つであるナンバープレート検出器をJetsonデバイスにデプロイする方法を説明します。他のアプリケーションについても同じ手順を繰り返すことができます。

ステップ1. 開発コンピューター上で、プロジェクト用の新しいフォルダーを作成し、そこに入ります

ステップ2. このリポジトリを**.zipとしてダウンロードするか、PCにGit**がインストールされている場合はクローンします

デフォルトでは、この例で使用されるモデルはJetson Nanoで実行するように最適化されていません。そのため、最初にJetson nano最適化モデルを読み込みます。

ステップ3. 新しくダウンロード/クローンしたリポジトリに入り、その中でコマンドラインを開いて以下を実行します

aai app models add alwaysai/vehicle_license_mobilenet_ssd_nano

Step 4. Open app.py, change the model name and inference engine

def main():
obj_detect = edgeiq.ObjectDetection(
"alwaysai/vehicle_license_mobilenet_ssd_nano")
obj_detect.load(engine=edgeiq.Engine.TENSOR_RT)

Step 5. Execute the following

aai app configure
note

初回実行時には、alwaysAIアカウントのユーザー名とパスワードの入力が求められます

ステップ 6. Create new project を選択します

ステップ 7. Project Name を入力します

ステップ 8. プロジェクトを As an empty app として初期化することを選択します

ステップ 9. 開発用コンピューターを使用してJetsonデバイスにプロジェクトをデプロイする セクションと同じ手順を、ステップ 3 から ステップ 11 まで繰り返します

ステップ 10. アプリがJetsonにインストールされたら、以下のコマンドを実行してアプリを開始します

aai app start

コマンドラインで以下の出力が表示されます

ご覧のように、vehicle_license_mobilenet_ssd model を使用しており、このモデルは車両とナンバープレートを識別することができます。

ステップ 11. PC でウェブブラウザを開き、以下を入力してビデオストリームを開きます

http://localhost:5000

このデモでは、こちらの2つの動画で推論が実行されており、ご覧のように、動画ストリーム上の車両とナンバープレートが検出され、各ラベルの信頼度パーセンテージがインターフェースに表示されています。

ウェブカメラ推論を使用する

ウェブカメラからのリアルタイム動画ストリームで上記と同じ推論を実行したい場合は、以下の手順に従ってください

ステップ 1. 以前にプロジェクト用に作成したフォルダに移動し、app.py を開きます

ステップ 2. こちらからコードをコピーして貼り付けます

ステップ 3. アプリを再度インストールします

aai app install

Step 4. Finally run the app

aai app start

ここでは、以前と同じコマンドライン出力が表示され、前述と同じアドレスでWebブラウザを開くと、Webカメラからのリアルタイム映像ストリームに対してオブジェクト検出が実行され、以前と同様の出力が表示されます。

alwaysAI Enterprise Edition

alwaysAIには、以下の機能を持つエンタープライズエディションもあります:

  • 1年間の本番デバイス1台のデプロイメントを含むFreemiumへのアクセス
  • 20時間のalwaysAI Cloudモデルトレーニング
  • 30日間のalwaysAI Cloudデータセットストレージへのアクセス

alwaysAI Enterprise Editionの詳細については、こちらで確認できます。

独自モデルの訓練とデプロイ

ステップ1. 訓練用のデータセットを準備します。データセットがPascalVOC形式であることを確認し、すべての画像とラベルを2つのディレクトリに配置して、以下のようにファイルをzipします

ステップ2. alwaysAIダッシュボードに移動し、左側のナビゲーションペインでDatasetsをクリックし、Upload a Datasetをクリックします

ステップ3. データセットのアップロードが完了したら、Trainをクリックします

ステップ4. ここで、お好みに応じて訓練設定を変更し、Start trainingをクリックします

訓練が完了すると、以下の出力が表示されます

これで、訓練されたモデルがアカウントで利用可能になりました。このモデルを以下のようにオブジェクト検出プロジェクトで使用できます

ステップ5. Models > My Modelsに移動し、先ほど訓練したモデルをクリックします

ステップ6. ご覧のとおり、オブジェクト検出アプリのルートディレクトリで以下のコマンドを使用できます

aai app models add lakshanthad/roadsign-mobilenet

ステップ 7. その後、app.py でモデル名を変更し、アプリを再度実行します

lakshanthad/roadsign-mobilenet

リソース

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

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

Loading Comments...