Roboflow、YOLOv5、TensorFlow Liteを使用して独自のAIモデルをトレーニングおよびデプロイする方法
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
Grove - Vision AIに独自のAIモデルをトレーニングしてデプロイする
産業用センサーへのアップグレード可能
SenseCAP S2110コントローラーとS2100データロガーを使用することで、Groveを簡単にLoRaWAN®センサーに変えることができます。Seeedはプロトタイピングをサポートするだけでなく、SenseCAPシリーズの堅牢な産業用センサーを使用してプロジェクトを拡張する可能性も提供します。
IP66の筐体、Bluetooth設定、グローバルLoRaWAN®ネットワークとの互換性、内蔵19Ahバッテリー、そして強力なAPPサポートにより、SenseCAP S210xは産業用途に最適な選択肢となります。このシリーズには、土壌水分、空気温度と湿度、光強度、CO2、EC、そして8-in-1の気象ステーション用センサーが含まれています。次の成功する産業プロジェクトには最新のSenseCAP S210xを試してみてください。
SenseCAP 産業用センサー | |||
S2100 データロガー | S2101 空気温度 & 湿度 | S2102 光 | S2103 空気温度 & 湿度 & CO2 |
S2104 土壌水分 & 温度 | S2105 土壌水分 & 温度 & EC | S2110 LoRaWAN® コントローラー | S2120 8-in-1 気象ステーション |
概要
このウィキでは、特定のアプリケーション向けに独自のAIモデルをトレーニングし、それをGrove - Vision AI Moduleに簡単にデプロイする方法を説明します。それでは始めましょう!
ハードウェアの紹介
このウィキ全体を通じて、主にGrove - Vision AI Moduleを使用します。まずは、このハードウェアについて理解を深めましょう。
Grove - Vision AI Module
Grove Vision AI Moduleは、親指サイズのAIカメラで、カスタマイズされたセンサーが搭載されており、人検出やその他のカスタマイズモデルのための機械学習アルゴリズムがすでにインストールされています。数分で簡単にデプロイおよび表示でき、超低消費電力モードで動作します。また、2つの信号伝送方法と複数のオンボードモジュールを提供しており、AI対応カメラの入門に最適です。

ソフトウェアの紹介
このウィキでは、以下のソフトウェア技術を使用します。
- 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ベースの組み込みデバイスでエッジ推論を行うためにデプロイできます。
ウィキの構成
このウィキは、以下の3つの主要セクションに分かれています。
- 公開データセットを使用して独自のAIモデルをトレーニングする
- 独自のデータセットを使用して独自のAIモデルをトレーニングする
- トレーニング済みAIモデルをGrove - Vision AI Moduleにデプロイする
最初のセクションでは、最小限の手順で独自のAIモデルを構築する最速の方法を説明します。2番目のセクションでは、独自のAIモデルを構築するために時間と労力が必要ですが、その知識は確実に価値があります。3番目のセクションでは、AIモデルのデプロイ方法を説明しますが、これは最初のセクションまたは2番目のセクションの後に行うことができます。
このウィキを進めるには、以下の2つの方法があります:
ただし、最初は1つ目の方法を進め、その後2つ目の方法に進むことをお勧めします。
1. 公開データセットを使用して独自のAIモデルをトレーニングする
オブジェクト検出プロジェクトの最初のステップは、トレーニング用のデータを取得することです。公開されているデータセットをダウンロードするか、独自のデータセットを作成することができます。
しかし、オブジェクト検出を始める最も速く簡単な方法は何でしょうか?それは...公開データセットを使用することです。これにより、自分でデータを収集して注釈を付ける時間を大幅に節約できます。これらの公開データセットはすでに注釈が付けられているため、AIビジョンアプリケーションに集中する時間を増やすことができます。
ハードウェアの準備
- Grove - Vision AI Module
- USB Type-C ケーブル
- インターネット接続が可能な Windows/ Linux/ Mac
ソフトウェアの準備
- 追加のソフトウェアを準備する必要はありません
公開されている注釈付きデータセットを使用する
COCOデータセット、Pascal VOCデータセットなど、公開されているデータセットをいくつかダウンロードできます。Roboflow Universeは、幅広いデータセットを提供する推奨プラットフォームであり、90,000以上のデータセットと66+百万枚の画像がコンピュータビジョンモデルの構築に利用可能です。また、Googleでオープンソースデータセットを検索し、利用可能なさまざまなデータセットから選ぶこともできます。
ステップ1. このURLにアクセスして、Roboflow Universeで公開されているApple Detectionデータセットにアクセスします。
ステップ2. Create AccountをクリックしてRoboflowアカウントを作成します。

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

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

Google ColabでYOLOv5を使用してトレーニングする
公開データセットを選択した後、データセットをトレーニングする必要があります。ここでは、Google Colaboratory環境を使用してクラウド上でトレーニングを実行します。さらに、Roboflow APIをColab内で使用してデータセットを簡単にダウンロードします。
こちらをクリックして、すでに準備されたGoogle Colabワークスペースを開き、ワークスペースに記載されている手順を確認し、コードセルを一つずつ実行してください。
注意: Google Colabのステップ4のコードセルでは、上記で説明したRoboflowから直接コードスニペットをコピーできます。
以下の内容を順に説明します:
- トレーニング環境のセットアップ
- データセットのダウンロード
- トレーニングの実行
- トレーニング済みモデルのダウンロード

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

上記のColabプロジェクトに従った場合、デバイスに一度に4つのモデルをロードできることがわかります。ただし、一度にロードできるモデルは1つだけです。これはユーザーによって指定され、後でこのWikiで説明されます。
デプロイと推論
トレーニング済みAIモデルをGrove - Vision AI Moduleにデプロイして推論を実行する方法を説明するセクション3に直接ジャンプしたい場合は、こちらをクリック。
2. 独自のデータセットでAIモデルをトレーニングする
特定の物体検出プロジェクトを構築したい場合、公開されているデータセットに検出したい物体が含まれていないことがあります。その場合は、自分自身でデータセットを作成する必要があります。独自のデータセットを記録する際には、物体の全方向(360度)をカバーし、異なる環境、異なる照明条件、異なる天候条件で物体を配置する必要があります。データセットを記録した後、データセット内の画像にアノテーションを付ける必要もあります。これらの手順はすべて、このセクションで説明します。
データ収集にはスマートフォンのカメラを使用するなど、さまざまな方法がありますが、最も適した方法はGrove - Vision AI Moduleに内蔵されたカメラを使用することです。これは、Grove - Vision AI Moduleで推論を行う際に、色、画像品質、その他の詳細が類似しているため、全体的な検出精度が向上するからです。
Roboflowを使用してデータセットにアノテーションを付ける
独自のデータセットを使用する場合、データセット内のすべての画像にアノテーションを付ける必要があります。アノテーションとは、検出したい各物体の周りに矩形のボックスを描き、それにラベルを割り当てることを意味します。ここでは、Roboflowを使用してこれを行う方法を説明します。
Roboflowはオンラインベースのアノテーションツールです。ここでは、記録したビデオ映像を直接Roboflowにインポートし、それを一連の画像にエクスポートできます。このツールは非常に便利で、データセットを「トレーニング、検証、テスト」に分割するのを支援してくれます。また、ラベル付け後にこれらの画像にさらなる処理を追加することも可能です。さらに、ラベル付けされたデータセットをYOLOV5 PyTorch形式に簡単にエクスポートできるため、まさに必要な形式となります!
このWikiでは、リンゴを含む画像のデータセットを使用して、後でリンゴを検出し、カウントも行えるようにします。
ステップ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. Grove - Vision AI Moduleを使用してキャプチャした画像をドラッグ&ドロップします。

- ステップ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. 必要に応じてPreprocessingやAugmentationを追加できます。ここでは、Resizeオプションを192x192に変更します。


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

- ステップ 15. Export をクリックし、Format を YOLO v5 PyTorch に選択し、show download code を選択して Continue をクリックします。

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

Google Colab 上で YOLOv5 を使用したトレーニング
データセットのアノテーションが完了したら、次にデータセットをトレーニングする必要があります。こちらのセクションに進み、Google Colab 上で YOLOv5 を使用して AI モデルをトレーニングする方法を確認してください。
3. トレーニング済みモデルをデプロイして推論を実行する
Grove - Vision AI モジュール
トレーニングの最後に取得した model-1.uf2 を Grove - Vision AI モジュールに移動します。ここでは、Grove - Vision AI モジュールを Wio Terminal に接続して推論結果を確認します。
注意: Arduino を初めて使用する場合は、Getting Started with Arduino を参照することを強くお勧めします。また、このウィキ に従って、Arduino IDE で Wio Terminal をセットアップしてください。
ステップ 1. 最新バージョンの Google Chrome または Microsoft Edge browser をインストールして開きます。
ステップ 2. USB Type-C ケーブルを使用して Grove - Vision AI モジュールを PC に接続します。

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

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

- ステップ 4. model-1.uf2 ファイルを GROVEAI ドライブにドラッグ&ドロップします。
uf2 ファイルのコピーが完了すると、ドライブが消えます。これは、uf2 がモジュールに正常にアップロードされたことを意味します。
注意: 4つのモデルファイルが準備できている場合は、各モデルを1つずつドラッグ&ドロップできます。最初のモデルをドロップし、コピーが完了するのを待ち、再度ブートモードに入り、次のモデルをドロップする、という手順を繰り返します。
- ステップ 5. Grove - Vision AI モジュールを USB を介して PC に接続したまま、Grove I2C ポートを介して Wio Terminal に接続します。

ステップ 6. Seeed_Arduino_GroveAI ライブラリ を Arduino IDE にインストールし、object_detection.ino の例を開きます。
ステップ 7. Grove - Vision AI モジュールに1つのモデル(インデックス1)だけをロードした場合、そのモデルがロードされます。ただし、複数のモデルをロードした場合は、使用するモデルを指定 できます。MODELEXT_INDEX[value] を変更し、value に 1, 2, 3, 4 のいずれかを指定します。
// 例:
if (ai.begin(ALGO_OBJECT_DETECTION, MODEL_EXT_INDEX_2))
上記のコードは、インデックス2のモデルをロードします。
- ステップ 8. 私たちはリンゴを検出しているため、コードを こちら で少し変更します。
Serial.print("Number of apples: ");
- ステップ 9. Wio Terminal を PC に接続し、このコードを Wio Terminal にアップロードして、Arduino IDE のシリアルモニターを 115200 のボーレートで開きます。

上記のように、シリアルモニターで検出情報を確認できます。
- ステップ 10. こちらをクリック して、検出結果を含むカメラストリームのプレビューウィンドウを開きます。

- ステップ 11. Connect ボタンをクリックします。すると、ブラウザにポップアップが表示されます。Grove AI - Paired を選択して Connect をクリックします。

- ステップ 12. プレビューウィンドウを使用してリアルタイムの推論結果を確認します!

上記のように、リンゴが検出され、それぞれの周りにバウンディングボックスが表示されています。ここで「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を選択し、FormatでYOLO 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という名前のファイルが生成されます。これが、推論を実行するためにGrove - Vision AIモジュールにロードするファイルです!
リソース
[ウェブページ] YOLOv5 ドキュメント
[ウェブページ] Ultralytics HUB
[ウェブページ] Roboflow ドキュメント
[ウェブページ] TensorFlow Lite ドキュメント
技術サポート & 製品ディスカッション
弊社製品をお選びいただきありがとうございます!お客様が弊社製品をスムーズにご利用いただけるよう、さまざまなサポートをご提供しております。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルをご用意しています。