Skip to main content

alwaysAIの使い方入門

note

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

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キャリアボード
    • A203 (バージョン2) キャリアボード
    • A205キャリアボード
    • A206キャリアボード
  • NVIDIA公式開発キット:

    • NVIDIA® Jetson Nano開発者キット
    • NVIDIA® Jetson Xavier NX開発者キット
    • NVIDIA® Jetson AGX Xavier開発者キット
    • NVIDIA® Jetson TX2開発者キット
    • NVIDIA® Jetson AGX Orin開発者キット
  • NVIDIA公式SoM:

    • NVIDIA® Jetson Nanoモジュール
    • NVIDIA® Jetson Xavier NXモジュール
    • NVIDIA® Jetson TX2 NXモジュール
    • NVIDIA® Jetson TX2モジュール
    • NVIDIA® Jetson AGX Xavierモジュール

前提条件

  • 上記のいずれかのJetsonデバイスでJetPack 4.6を実行し、すべてのSDKコンポーネントがインストールされていること(インストールに関する参考情報はこちらのWikiを参照)
  • Windows、Linux、またはMacを搭載したホストPC
  • JetsonデバイスでサポートされているUSBウェブカメラまたは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が正常にインストールされています。このWiki執筆時点でのバージョン番号は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デバイス)の環境をセットアップします。

ステップ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 では、mobilenet_ssd がモデルとして使用されており、これは Pascal VOC dataset でトレーニングされています。このため、このアプリケーションは 20種類のオブジェクトクラス(例:人、鳥、猫、牛、犬、馬、羊、飛行機、自転車、ボート、バス、車、オートバイ、電車、ボトル、椅子、ダイニングテーブル、鉢植え、ソファ、テレビ/モニター)を認識できます。

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

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

ステップ 5. Add New Model をクリックし、Go to Model Catalog をクリックして alwaysAI モデルカタログに入ります。

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

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

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

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

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

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

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

aai app configure
note

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

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

ステップ 3. Remote devicedestination として選択します。

ステップ 4. プライベートキー ファイルを作成するために Y を押します。

ステップ 5. Add a new device をクリックして、Jetson デバイスをリモートデバイスとして追加します。

ステップ 6. device modeDevelopment として選択します。

ステップ 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 システムインストールJetson SDK コンポーネントを完了していることを確認してください。これにより、ほとんどの問題を解決できます。

カメラからのライブビデオフィードでの物体検出

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

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

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

aai app start

すると、コマンドラインに以下のような出力が表示されます。

ステップ 3. ウェブブラウザを開き、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 edgeiq.FileVideoStream(
'file name goes here', play_realtime=True) as video_stream, \
edgeiq.Streamer() as streamer:

その後、file name goes here をビデオファイルの名前と拡張子に置き換えます。ファイル名はシングルクォートで囲む必要があります。

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

aai app install

ステップ 4. 最後にアプリを実行します。

aai app start

ここでも、コマンドラインに以前と同じ出力が表示され、前述のアドレスでウェブブラウザを開くと、事前にロードされたビデオで物体検出が実行され、以前と同様の出力が得られます。

検出する物体のフィルタリング

モデルが検出する特定の物体をフィルタリングすることもできます。たとえば、使用した COCO データセットは 80 種類の物体を検出できますが、人だけを検出するようにフィルタリングすることが可能です。

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

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

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

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

ステップ 4. app.pyを開き、モデル名と推論エンジンを変更します。

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

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

aai app configure
note

上記のコマンドを初めて実行する際には、alwaysAIアカウントのユーザー名とパスワードを入力するよう求められます。

ステップ 6. 新しいプロジェクトを作成を選択します。

ステップ 7. プロジェクト名を入力します。

ステップ 8. プロジェクトを空のアプリとして初期化するオプションを選択します。

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

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

aai app start

コマンドラインに以下のような出力が表示されます。

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

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

http://localhost:5000

このデモでは、こちらの2つのビデオで推論が行われています。ビデオストリーム上で車両とナンバープレートが検出され、各ラベルの信頼度がインターフェースに表示されているのが確認できます。

ウェブカメラ推論の使用

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

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

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

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

aai app install

ステップ 4. 最後にアプリを実行します。

aai app start

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

alwaysAI Enterprise Edition

alwaysAIには、以下の機能を備えたエンタープライズ版もあります:

  • 1年間の1つのプロダクションデバイス展開を含むFreemiumへのアクセス
  • alwaysAI Cloudモデルトレーニングの20時間利用
  • alwaysAI Cloudデータセットストレージへの30日間アクセス

alwaysAI Enterprise Editionの詳細については、こちらをご覧ください。

独自のモデルをトレーニングしてデプロイする

ステップ 1. トレーニング用のデータセットを準備します。データセットがPascalVOC形式であることを確認し、すべての画像とラベルを2つのディレクトリに整理して、以下のようにファイルを圧縮してください。

ステップ 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...