Skip to main content

独自のAIモデルをSenseCAP A1101にトレーニングしてデプロイする方法

note

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

独自のAIモデルをSenseCAP A1101にトレーニングしてデプロイする方法

概要

このWikiでは、特定のアプリケーション向けに独自のAIモデルをトレーニングし、それを簡単にSenseCAP A1101 - LoRaWAN Vision AI Sensorにデプロイする方法を説明します。それでは始めましょう!

注意:

現在のデバイスファームウェアはEIと互換性があります。2023年3月30日以降にデバイスを購入した場合、このWikiに従うためにデバイスをデフォルトファームウェアに戻す必要があります。

ハードウェアの紹介

このWiki全体を通じて、主にSenseCAP A1101 - LoRaWAN Vision AI Sensorを使用します。まず、このハードウェアについて理解を深めましょう。

SenseCAP A1101 - LoRaWAN Vision AI Sensorは、TinyML AI技術とLoRaWAN長距離伝送を組み合わせ、屋外使用向けの低消費電力・高性能AIデバイスソリューションを提供します。このセンサーは、Google TensorFlow Liteフレームワークおよび複数のTinyML AIプラットフォームをサポートするHimaxの高性能・低消費電力AIビジョンソリューションを特徴としています。異なるモデルは、害虫検出、人数カウント、物体認識などの異なるAI機能を実現できます。ユーザーはSeeedが提供するモデルを採用したり、AIトレーニングツールを使用して独自のモデルを生成したり、Seeedのパートナーモデルプロバイダーから商用モデルを購入してデプロイすることができます。

ソフトウェアの紹介

このWikiでは以下のソフトウェア技術を使用します。

  • Roboflow - アノテーション用
  • YOLOv5 - トレーニング用
  • TensorFlow Lite - 推論用

Roboflowとは?

Roboflowはオンラインベースのアノテーションツールです。このツールを使用すると、すべての画像を簡単にアノテーションし、これらの画像にさらに処理を加え、YOLOV5 PyTorch、Pascal VOCなどの形式でラベル付きデータセットをエクスポートすることができます。また、Roboflowにはユーザーが利用可能な公開データセットも用意されています。

YOLOv5とは?

YOLOは「You Only Look Once(1度見るだけ)」の略です。これはリアルタイムで画像内のさまざまなオブジェクトを検出・認識するアルゴリズムです。UltralyticsのYOLOv5は、PyTorchフレームワークに基づいたYOLOのバージョンです。

TensorFlow Liteとは?

TensorFlow Liteは、事前にトレーニングされたTensorFlowモデルを、速度やストレージに最適化できる特別な形式に変換するオープンソースの製品対応クロスプラットフォーム深層学習フレームワークです。この特別な形式のモデルは、AndroidやiOSを使用するモバイルや、Raspberry PiやマイクロコントローラーなどのLinuxベースの組み込みデバイスでエッジ推論を行うためにデプロイすることができます。

Wiki構造

このWikiは以下の3つの主要セクションに分かれています。

  1. 公開データセットを使用して独自のAIモデルをトレーニングする
  2. 独自のデータセットを使用して独自のAIモデルをトレーニングする
  3. トレーニング済みのAIモデルをSenseCAP A1101にデプロイする

最初のセクションでは、最小限のステップで独自のAIモデルを構築する最速の方法を紹介します。2番目のセクションでは、独自のAIモデルを構築するために時間と労力が必要ですが、その知識は確実に価値があります。3番目のセクションでは、トレーニング済みのAIモデルをデプロイする方法を説明しており、これは最初のセクションまたは2番目のセクションの後に実行できます。

このWikiを進めるには2つの方法があります:

  1. セクション1を進めた後にセクション3を進める - 簡単に進められる方法
  2. セクション2を進めた後にセクション3を進める - 時間がかかる方法

ただし、最初は1つ目の方法を進め、その後2つ目の方法に進むことをお勧めします。

1. 公開データセットを使用して独自のAIモデルをトレーニングする

オブジェクト検出プロジェクトの最初のステップは、トレーニング用のデータを取得することです。公開されているデータセットをダウンロードするか、独自のデータセットを作成することができます。

しかし、オブジェクト検出を始める最速かつ最も簡単な方法は何でしょうか?それは...公開データセットを使用することです。これにより、自分でデータを収集して注釈を付ける時間を大幅に節約できます。これらの公開データセットはすでに注釈が付けられているため、AIビジョンアプリケーションに集中する時間を増やすことができます。

ハードウェア準備

  • SenseCAP A1101 - LoRaWAN Vision AIセンサー
  • USB Type-Cケーブル
  • インターネット接続可能なWindows/Linux/Mac

ソフトウェア準備

  • 追加のソフトウェアを準備する必要はありません

公開されている注釈付きデータセットを使用する

COCOデータセットPascal VOCデータセットなど、多くの公開データセットをダウンロードできます。Roboflow Universeは、幅広いデータセットを提供する推奨プラットフォームであり、90,000以上のデータセットと6,600万以上の画像がコンピュータビジョンモデルの構築に利用可能です。また、Googleで「オープンソースデータセット」を検索することで、さまざまなデータセットから選択できます。

  • ステップ1. このURLにアクセスして、Roboflow Universeで公開されているApple Detectionデータセットにアクセスします。

  • ステップ2. Create AccountをクリックしてRoboflowアカウントを作成します。

  • ステップ3. Downloadをクリックし、YOLO v5 PyTorchFormatとして選択し、show download codeをクリックしてContinueをクリックします。

これにより、後でGoogle Colabトレーニング内で使用するコードスニペットが生成されます。このウィンドウをバックグラウンドで開いたままにしてください。

Google ColabでYOLOv5を使用してトレーニング

公開データセットを選択した後、そのデータセットをトレーニングする必要があります。ここでは、Google Colaboratory環境を使用してクラウド上でトレーニングを実行します。さらに、Colab内でRoboflow APIを使用してデータセットを簡単にダウンロードします。

こちらをクリックして、すでに準備されたGoogle Colabワークスペースを開き、ワークスペースに記載されている手順を確認し、コードセルを1つずつ実行してください。

注意: Google Colabのステップ4のコードセルでは、上記で説明したようにRoboflowからコードスニペットを直接コピーできます。

以下の内容を順に説明します:

  • トレーニング用環境のセットアップ
  • データセットのダウンロード
  • トレーニングの実行
  • トレーニング済みモデルのダウンロード

699枚の画像を含むApple Detectionデータセットの場合、NVIDIA Tesla T4 GPU(16GB GPUメモリ)を使用してGoogle Colab上でトレーニングプロセスを完了するのに約7分かかりました。

上記のColabプロジェクトに従った場合、デバイスに一度に4つのモデルをロードできることがわかります。ただし、1回にロードできるモデルは1つだけです。これはユーザーが指定でき、後ほどこのWikiで説明します。

デプロイと推論

トレーニング済みのAIモデルをSenseCAP A1101にデプロイして推論を実行する方法を説明するセクション3に直接進みたい場合は、こちらをクリックしてください。

2. 独自のデータセットでAIモデルをトレーニングする

特定の物体検出プロジェクトを構築したい場合、公開されているデータセットに検出したい物体が含まれていないことがあります。その場合は、独自のデータセットを作成する必要があります。独自のデータセットを記録する際には、物体の全角度(360度)をカバーし、異なる環境、異なる照明条件、異なる天候条件で物体を配置する必要があります。データセットを記録した後は、データセット内の画像にアノテーションを付ける必要があります。これらの手順はすべてこのセクションで説明します。

データ収集にはスマートフォンのカメラを使用するなど、さまざまな方法がありますが、最も適した方法はSenseCAP A1101に内蔵されたカメラを使用することです。これは、SenseCAP A1101で推論を行う際に色、画像品質、その他の詳細が一致するため、全体的な検出精度が向上するからです。

ハードウェアの準備

  • SenseCAP A1101 - LoRaWAN Vision AIセンサー
  • USB Type-Cケーブル
  • インターネット接続可能なWindows/Linux/Mac

ソフトウェアの準備

次にソフトウェアをセットアップします。Windows、Linux、Intel Macのソフトウェアセットアップは同じですが、M1/M2 Macの場合は異なります。

Windows、Linux、Intel Mac

  • ステップ1. コンピュータにPythonがすでにインストールされていることを確認します。インストールされていない場合は、こちらのページから最新バージョンのPythonをダウンロードしてインストールしてください。

  • ステップ2. 以下の依存関係をインストールします。

pip3 install libusb1

M1/M2 Mac

  • ステップ1. Homebrewをインストールします。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • ステップ2. condaをインストールします。
brew install conda
  • ステップ3. libusbをダウンロードします。
wget https://conda.anaconda.org/conda-forge/osx-arm64/libusb-1.0.26-h1c322ee_100.tar.bz2
  • ステップ4. libusbをインストールします。
conda install libusb-1.0.26-h1c322ee_100.tar.bz2
caution

BootLoaderのバージョンが2.0.0以上であることを確認する必要があります。そうでない場合、以下の操作を行う前にファームウェアを変更することはできません。BootLoaderのバージョンが不明な場合は、このセクションに記載されている手順に従ってバージョンを確認してください。バージョンが2.0.0未満の場合は、このセクションに記載されている手順に従ってBootLoaderを更新してください。

データセットの収集

  • ステップ1. USB Type-Cケーブルを使用してSenseCAP A1101をPCに接続します。
  • ステップ2. ブートボタンをダブルクリックしてブートモードに入ります。

これにより、ファイルエクスプローラーにSENSECAPという新しいストレージドライブが表示されます。

.uf2ファイルのコピーが完了すると、ドライブが消えます。これは、uf2がモジュールに正常にアップロードされたことを意味します。

  • ステップ4. このPythonスクリプトをコピーして、PC上でcapture_images_script.pyという名前の新しいファイルに貼り付けます。

  • ステップ5. Pythonスクリプトを実行して画像のキャプチャを開始します。

python3 capture_images_script.py

デフォルトでは、300msごとに画像をキャプチャします。これを変更したい場合は、以下の形式でスクリプトを実行します。

python3 capture_images_script.py --interval <time_in_ms>

例えば、1秒ごとに画像をキャプチャする場合:

python3 capture_images_script.py --interval 1000

上記のスクリプトが実行されると、SenseCAP A1101は内蔵カメラから連続的に画像をキャプチャし、すべてをsave_imgという名前のフォルダに保存します。

また、記録中にプレビューウィンドウが開きます。

十分な画像がキャプチャされたら、ターミナルウィンドウをクリックして以下のキーコンビネーションを押してキャプチャプロセスを停止します。

  • Windows: Ctrl + Break
  • Linux: Ctrl + Shift + \
  • Mac: CMD + Shift + \

画像収集後のデバイスファームウェアの変更

データセット用の画像の記録が完了したら、SenseCAP A1101内のファームウェアを元の状態に戻す必要があります。これにより、物体検出モデルを再度ロードして検出を行うことができます。以下の手順を実行してください。

  • ステップ1. 前述の方法でSenseCAP A1101をブートモードにします。

  • ステップ2. この.uf2ファイルをデバイスに応じてSENSECAPドライブにドラッグ&ドロップします。

.uf2ファイルのコピーが完了すると、ドライブが消えます。これは、uf2がモジュールに正常にアップロードされたことを意味します。

Roboflowを使用したデータセットのアノテーション

独自のデータセットを使用する場合、データセット内のすべての画像にアノテーションを付ける必要があります。アノテーションとは、検出したい各物体の周りに矩形を描き、それにラベルを割り当てることを意味します。ここでは、Roboflowを使用してこれを行う方法を説明します。

Roboflowはオンラインベースのアノテーションツールです。ここでは、記録した動画を直接Roboflowにインポートし、それを一連の画像にエクスポートすることができます。このツールは非常に便利で、データセットを「トレーニング、検証、テスト」に分割するのを助けてくれます。また、ラベル付け後にこれらの画像にさらに処理を追加することも可能です。さらに、このツールはラベル付けされたデータセットをYOLOV5 PyTorch形式で簡単にエクスポートすることができ、これがまさに必要な形式です!

このウィキでは、リンゴを含む画像のデータセットを使用して、後でリンゴを検出し、カウントを行う方法を説明します。

  • ステップ 1. こちらをクリックして、Roboflow アカウントにサインアップします。

  • ステップ 2. Create New Project をクリックしてプロジェクトを開始します。

  • ステップ 3. Project Name を入力し、License (CC BY 4.0)Project type (Object Detection (Bounding Box)) をデフォルトのままにします。What will your model predict? の列には、アノテーショングループ名を入力します。例えば、ここでは apples を選択します。この名前はデータセットのすべてのクラスを表す必要があります。最後に、Create Public Project をクリックします。
  • ステップ 4. SenseCAP A1101 を使用してキャプチャした画像をドラッグ&ドロップします。
  • ステップ 5. 画像が処理されたら、Finish Uploading をクリックします。画像がアップロードされるまでしばらくお待ちください。
  • ステップ 6. 画像がアップロードされたら、Assign Images をクリックします。
  • ステップ 7. 画像を選択し、リンゴの周りに長方形のボックスを描画し、ラベルを apple に設定して ENTER を押します。
  • ステップ 8. 残りのリンゴについても同じ操作を繰り返します。

注意: 画像内に見えるすべてのリンゴをラベル付けするようにしてください。リンゴの一部しか見えない場合でも、それをラベル付けするようにしてください。

  • ステップ 9. データセット内のすべての画像にアノテーションを続けます。

Roboflow には Label Assist という機能があり、ラベルを事前に予測してラベル付けをより迅速に行うことができます。ただし、この機能はすべてのオブジェクトタイプに対応しているわけではなく、特定のオブジェクトタイプに限定されています。この機能を有効にするには、Label Assist ボタンを押し、モデルを選択し、クラスを選択して、予測されたラベルとバウンディングボックスを画像で確認します。

上記のように、この機能は80クラスに限定されており、それ以外のオブジェクトクラスが画像に含まれている場合、この機能を使用することはできません。

  • ステップ 10. ラベル付けが完了したら、Add images to Dataset をクリックします。
  • ステップ 11. 次に、画像を「Train, Valid, Test」に分割します。デフォルトの分布割合を維持し、Add Images をクリックします。
  • ステップ 12. Generate New Version をクリックします。
  • ステップ 13. 必要に応じて PreprocessingAugmentation を追加します。ここでは Resize オプションを 192x192 に変更します。

ここで画像サイズを 192x192 に変更する理由は、トレーニング時にこのサイズを使用するためです。この設定によりトレーニングが高速化されます。そうしない場合、トレーニングプロセス中にすべての画像を 192x192 に変換する必要があり、CPU リソースを多く消費し、トレーニングプロセスが遅くなります。

  • ステップ 14. 残りのデフォルト設定を維持し、Generate をクリックします。
  • ステップ 15. Export をクリックし、FormatYOLO v5 PyTorch に設定し、show download code を選択して Continue をクリックします。

これにより、後で Google Colab トレーニング内で使用するコードスニペットが生成されます。このウィンドウをバックグラウンドで開いたままにしてください。

Google Colab で YOLOv5 を使用してトレーニング

データセットのアノテーションが完了したら、次はデータセットをトレーニングする必要があります。こちらのセクションに進み、Google Colab 上で YOLOv5 を使用して AI モデルをトレーニングする方法を確認してください。

3. 訓練済みモデルをデプロイして推論を実行する

次に、訓練の最後に取得した model-1.uf2 を SenseCAP A1101 に移動します。

  • ステップ 1. 最新バージョンの Google Chrome または Microsoft Edge ブラウザ をインストールして開きます。

  • ステップ 2. USB Type-C ケーブルを使用して SenseCAP A1101 を PC に接続します。

  • ステップ 3. SenseCAP A1101 のブートボタンをダブルクリックして、マスストレージモードに入ります。

これにより、ファイルエクスプローラーに SENSECAP という新しいストレージドライブが表示されます。

  • ステップ 4. model-1.uf2 ファイルを SENSECAP ドライブにドラッグ&ドロップします。

uf2 ファイルのコピーが完了すると、ドライブが消えます。これは、uf2 がモジュールに正常にアップロードされたことを意味します。

注意: 4つのモデルファイルが準備されている場合は、各モデルを1つずつドラッグ&ドロップできます。最初のモデルをドロップし、コピーが完了するのを待ち、再度ブートモードに入り、次のモデルをドロップするという手順を繰り返します。SenseCAP A1101 に1つのモデル(インデックス1)のみをロードした場合、そのモデルがロードされます。

  • ステップ 5. SenseCAP Mate App を開きます。まだインストールしていない場合は、OSに応じてモバイル端末にダウンロードしてインストールしてください。

  • ステップ 6. アプリを開き、Config 画面で Vision AI Sensor を選択します。

  • ステップ 7. SenseCap A1101 の設定ボタンを3秒間押し続けて、Bluetooth ペアリングモードに入ります。
  • ステップ 8. Setup をクリックすると、近くの SenseCAP A1101 デバイスをスキャンし始めます。
  • ステップ 9. 見つかったデバイスをクリックします。
  • ステップ 10. Settings に移動し、Object Detection が選択されていることを確認します。選択されていない場合は選択して Send をクリックします。
  • ステップ 11. General に移動して Detect をクリックします。
  • ステップ 12. こちらをクリックしてカメラストリームのプレビューウィンドウを開きます。
  • ステップ 13. Connect ボタンをクリックします。するとブラウザにポップアップが表示されます。SenseCAP Vision AI - Paired を選択して Connect をクリックします。
  • ステップ 14. プレビューウィンドウを使用してリアルタイムの推論結果を確認します!

上記のように、リンゴが検出され、周囲にバウンディングボックスが表示されています。ここで「0」は同じクラスの各検出を表します。複数のクラスがある場合、それらは 0, 1, 2, 3, 4 のように名前が付けられます。また、検出されたリンゴの信頼度スコア(上記のデモでは 0.8 と 0.84)が表示されています!

ボーナスコンテンツ

さらに冒険したい場合は、このWikiの残りの部分を続けてみてください!

自分のPCでAIモデルをトレーニングできますか?

自分のPCを使って物体検出モデルをトレーニングすることも可能です。ただし、トレーニングのパフォーマンスは使用するハードウェアに依存します。また、トレーニングにはLinux OSを搭載したPCが必要です。このWikiではUbuntu 20.04 PCを使用しています。

  • ステップ1. yolov5-swiftリポジトリをクローンし、Python>=3.7.0環境でrequirements.txtをインストールします。
git clone https://github.com/Seeed-Studio/yolov5-swift
cd yolov5-swift
pip install -r requirements.txt
  • ステップ2. このWikiの以前の手順に従った場合、Roboflowでアノテーションを行った後にデータセットをエクスポートしたことを覚えているかもしれません。また、Roboflow Universeでデータセットをダウンロードしました。どちらの方法でも、以下のようなウィンドウが表示され、データセットのダウンロード形式を選択するよう求められました。この時、download zip to computerを選択し、FormatYOLO v5 PyTorchを選択してContinueをクリックしてください。

その後、.zipファイルがコンピュータにダウンロードされます。

  • ステップ3. ダウンロードした.zipファイルをyolov5-swiftディレクトリにコピーして解凍します。
# 例
cp ~/Downloads/Apples.v1i.yolov5pytorch.zip ~/yolov5-swift
unzip Apples.v1i.yolov5pytorch.zip
  • ステップ4. data.yamlファイルを開き、trainおよびvalディレクトリを以下のように編集します。
train: train/images
val: valid/images
  • ステップ5. トレーニングに適した事前学習済みモデルをダウンロードします。
sudo apt install wget
wget https://github.com/Seeed-Studio/yolov5-swift/releases/download/v0.1.0-alpha/yolov5n6-xiao.pt
  • ステップ6. 以下のコマンドを実行してトレーニングを開始します。

ここでは、いくつかの引数を指定できます:

  • img: 入力画像サイズを定義
  • batch: バッチサイズを指定
  • epochs: トレーニングエポック数を定義
  • data: yamlファイルのパスを設定
  • cfg: モデル構成を指定
  • weights: カスタムウェイトのパスを指定
  • name: 結果の名前
  • nosave: 最終チェックポイントのみ保存
  • cache: 画像をキャッシュしてトレーニングを高速化
python3 train.py --img 192 --batch 64 --epochs 100 --data data.yaml --cfg yolov5n6-xiao.yaml --weights yolov5n6-xiao.pt --name yolov5n6_results --cache

987枚の画像を含むリンゴ検出データセットでは、NVIDIA GeForce GTX 1660 Super GPU(6GB GPUメモリ)を搭載したローカルPCでトレーニングプロセスを完了するのに約30分かかりました。

上記のColabプロジェクトに従った場合、デバイスに一度に4つのモデルをロードできることを知っているかもしれません。ただし、1回にロードできるモデルは1つだけです。これはユーザーが指定でき、このWikiの後半で説明されます。

  • ステップ7. runs/train/exp/weightsに移動すると、best.ptという名前のファイルが表示されます。これがトレーニングから生成されたモデルです。
  • ステップ8. トレーニング済みモデルをTensorFlow Liteにエクスポートします。
python3 export.py --data {dataset.location}/data.yaml --weights runs/train/yolov5n6_results/weights/best.pt --imgsz 192 --int8 --include tflite
  • ステップ9. TensorFlow LiteをUF2ファイルに変換します。

UF2はMicrosoftによって開発されたファイル形式です。Seeedはこの形式を使用して.tfliteを.uf2に変換し、Seeedが発売したAIoTデバイスにtfliteファイルを保存できるようにしています。現在、Seeedのデバイスは最大4つのモデルをサポートしており、各モデル(.tflite)は1M未満です。

対応するインデックスにモデルを配置するには、-tオプションを使用します。

例:

  • -t 1: インデックス1
  • -t 2: インデックス2
# モデルをインデックス1に配置
python3 uf2conv.py -f GROVEAI -t 1 -c runs//train/yolov5n6_results//weights/best-int8.tflite -o model-1.uf2

一度にデバイスに4つのモデルをロードできますが、1回にロードできるモデルは1つだけです。これはユーザーが指定でき、このWikiの後半で説明されます。

  • ステップ10. model-1.uf2という名前のファイルが生成されます。これが、SenseCAP A1101モジュールにロードして推論を実行するためのファイルです!

ブートローダーバージョンの確認

  • BOOTボタンをダブルクリックし、リムーバブルドライブがマウントされるのを待ちます。
  • リムーバブルドライブ内のINFO_UF2.TXTを開きます。

ブートローダーの更新

もしSenseCAP A1101がコンピュータに認識されず、ポート番号が表示されない場合は、ブートローダーを更新する必要があるかもしれません。

  • ステップ 1. Windows PCにブートローダー .bin ファイルをダウンロードします。

以下のリンクから最新バージョンのブートローダーファイルをダウンロードしてください。ブートローダーの名前は通常 tinyuf2-sensecap_vision_ai_vx.x.x.bin です。

このファームウェアはBL702チップを制御し、コンピュータとHimaxチップ間の接続を構築します。最新バージョンのブートローダーでは、Vision AIがMacやLinuxで認識されない問題が修正されています。

  • ステップ 2. BLDevCube.exe ソフトウェアをダウンロードして開き、BL702/704/706 を選択し、Finish をクリックします。
  • ステップ 3. View をクリックし、まず MCU を選択します。その後、Image file に移動し、Browse をクリックして先ほどダウンロードしたファームウェアを選択します。
  • ステップ 4. 他のデバイスがPCに接続されていないことを確認します。その後、モジュールのBootボタンを押しながらPCに接続します。

  • ステップ 5. PC上のBLDevCubeソフトウェアに戻り、Refresh をクリックして適切なポートを選択します。その後、Open UART をクリックし、Chip EraseTrue に設定してから Create&Program をクリックし、プロセスが完了するのを待ちます。

リソース

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


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

Loading Comments...