0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi AI Cameraで動くオリジナルAIモデルを作ろう①【物体検知モデル】

Last updated at Posted at 2025-09-02

はじめに

本記事では、Raspberry Pi AIカメラでオリジナルの物体検知AIモデルを作成し、実際に動かすまでのステップを、初心者の方でも実践できるように解説します。

Raspberry Pi AIカメラにてオリジナルのAIモデルを動かすには、学習用のコードの準備、学習済みモデルをカメラ向けに小型化・最適化したりと、いくつかのステップが必要になります。
そのため、ややハードルが高く感じられることもあるかもしれません。

そこでRaspberry Pi AIカメラ上で動作可能なAIモデルを簡単に構築できるように、開発者向けにサンプルコードを公開しています。
このサンプルを活用することで、自作の物体検知モデルをAIカメラで実行することが可能になります。

今回はチュートリアルとして、すでに公開されている図形(丸・三角・四角)のデータセットを使用し、学習からデプロイまでの手順をご紹介します。

image.png

ちなみに、本記事の第2弾であるキーポイント検出モデル編はこちらで公開しています。

🎯 この記事の概要

  • サンプルコードを使って、オリジナルAIモデルを作成する手順
  • Dockerあり/なしでの学習環境の構築方法
  • 実際に生成されるモデルファイルとその使い方

image.png

🔧 環境要件

  • Raspberry Pi + AIカメラ

  • 学習用に使用するPC
     - NVIDIA GPU推奨(学習時)
     - OS: Ubuntu 22.04
     - Python 3.10

ローカルでの環境構築

ここではローカル環境に学習環境を構築する場合をご紹介します。
Docker上で学習する場合はレポジトリのREADMEのDockerのセクションをご参照ください。

① まずはリポジトリをクローンします。

git clone https://github.com/SonySemiconductorSolutions/aitrios-rpi-training-samples.git
cd aitrios-rpi-training-samples

image.png

②セットアップ
必要なパッケージをインストールします。

sudo apt update
sudo apt -y install --no-install-recommends
apt-utils build-essential libgl1 libgl1-mesa-glx
libglib2.0-0 python3 python3-pip python3-setuptools git gnupg

③Python3.10の仮想環境の構築・有効化
本チュートリアルではPython3.10を想定しているのでまずは3.10が入っていることを確認しましょう。

インストールするライブラリのバージョン依存関係があるので、必ずPython3.10系を使うようにしましょう

python3.10 --version

このように表示されれば、Python3.10がインストールされています。
image.png

まだの方はたとえば以下の手順でpython3.10をインストールします。

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.10 python3.10-venv python3.10-dev

次に仮想環境を構築します。

python3.10 -m venv .venv
source .venv/bin/activate

image.png

④パッケージのインストール

pip install .
pip install -e third_party/nanodet/nanodet

インストールが正しくできていることを確認します。
image.png

Step 1: モデルを学習する

  • サンプルでは以下の7つの設定ファイルを用意しています。
    image.png

.ini ファイルの役割

本チュートリアルでは、AIモデルの学習・量子化・評価に関する各種設定を .ini ファイルで管理しています。

セクション 内容
[SOLUTION] モデルの再学習や検証の実行可否など、全体の制御設定
[MODEL] モデル構造の指定(入力サイズ、クラス数など)
[DATASET] 使用するデータセットの識別名
[TRAINER] 学習時の設定(エポック数、バッチサイズ、学習率など)
[QUANTIZER] モデル量子化のパラメータ設定
[VALIDATOR] 学習後のモデル検証の条件(スコア閾値など)

✅ ポイント
Pythonコードを直接書き換えることなく、設定値の変更だけで柔軟に学習条件を調整できるのが特徴です。
使用するデータセットやタスクの選択から、パラメータの調整も可能です。

物体検知のAIモデルを作成する

今回は物体検知のAIモデルを作成してみます。
データセットはオリジナルの

image.png

使用するのは、公開されている図形(丸・三角・四角)のデータセットです。

image.png

iniファイルが格納されているsamplesフォルダに移動し、以下のコマンドを実行するとiniファイルを読み込み学習が開始されます。

以下のコマンドでは、指定された .ini ファイルをもとに、モデルの学習および量子化を行います。

cd samples

imx500_zoo imx500_zoo nanodet_plus_card.ini

image.png

このような形で学習が開始されます。
image.png

学習とモデルの量子化が完了すると以下のようにメトリクスが表示されます。
mAPが0.84,AP@50で0.99となっており学習がうまくできていることがわかります。
image.png

完了すると以下のようなモデルファイルが生成されます。

./samples/model/nanodet_plus_card/
├── nanodet_plus_card.keras # floatモデル
└── nanodet_plus_card_quantized.keras # 量子化済みモデル(IMX500にデプロイ可)

Step 2: 学習済みモデルを量子化・変換する

次に量子化済みのモデルをAI Cameraにデプロイできる形にコンバート・パッケージを行います。

ここの作業は引き続きvenvの環境内で行ってください。
AIモデルの量子化はモデルを作成したときと同じTensorFlowのバージョンで行う必要があります。

pip install edge-mdt[tf]

次に

cd ./samples/model/nanodet_plus_card/
imxconv-tf -i nanodet_plus_card_quantized.keras -o convert_result

image.png

image.png

Step 3: AIカメラ用にパッケージ化する

⭐️ここからはRaspberry Piでの操作になります⭐️

先ほどのコンバートしたフォルダをRaspberry Piに移動します。
今回はconvert_resultにあたります。

sudo apt install imx500-tools

image.png

このステップを実行する前に、convert_result/packerOut.zip が正しく生成されている必要があります。

imx500-package -i convert_result/packerOut.zip -o rpk_output_folder

image.png

Step 4: Raspberry Pi上で実行する

Raspberry Pi上で必要なライブラリをインストールします。

sudo apt install python3-opencv python3-munkres
git clone https://github.com/raspberrypi/picamera2.git
cd picamera2/examples/imx500/
  • 物体検知用のクラスファイルを作成します。 custom_label.txtを作成し以下の内容を記載します。
pi@raspberrypi:~/Desktop/Tutrial/picamera2/examples/imx500 $ cat custom_label.txt
circle
triangle
rectangle

オリジナルモデルを AI Cameraで実際に動かしてみます。
モデルは作成したnetwork.rpkを選択し、ラベルは上記で作成したcustom_label.txtを選択します。

python3 imx500_object_detection_demo.py --model rpk_output_folder/network.rpk --labels custom_label.txt

実行結果

以下のようにオブジェクトを検出することができています。
今回のデータセットサンプルでは丸、四角、三角を対象としており、以下のように正しく検知できていることがわかります。
circle_crop.gif

rectangle_crop.gif

triangle_crop.gif

応用:自作データセットに置き換えるには?

.ini ファイル内の以下の項目を書き換えることで、任意のデータで学習が可能です。

  • [DATASET] NAME = YourDatasetName
  • [MODEL] CLASS_NUM = クラス数
  • [TRAINER] CONFIG = あなたのYAML設定ファイル

また、custom_label.txt も新しいクラスに応じて変更してください。

よくあるエラーとその対策

最後によくあるエラーについてまとめました。もし他に遭遇したエラーなどありましたらお気軽にコメントいただければと思います。

  • モデルのコンバート時にエラーになってしまう
    • 原因: sdsp.app.AppKt は Java 17 (class file version 61.0) でコンパイルされているため。
    • 対処方法: Javaのバージョンを Java 17 以上にアップデートする必要があります
Error: LinkageError occurred while loading main class sdsp.app.AppKt  
java.lang.UnsupportedClassVersionError: sdsp/app/AppKt has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

エラー発生時に以下のようにJava のバージョンを確認するとJava 17以下が使用されているかと思います。
image.png

その場合、以下のようにアップデートをする必要があります。

sudo apt install openjdk-17-jdk

困った時は

もし、記事の途中でうまくいかなかった場合は、気軽にこの記事にコメントいただければと思います。

もしRaspberryPiに関連する疑問がある場合は下記フォーラムも確認、活用できます。

まとめ

Raspberry Pi AI カメラで利用できるAIモデルの学習チュートリアルを一通り試してみました。
オリジナルの画像やデバイスに合わせてモデルを再学習・展開することで、さまざまなエッジAIアプリケーションに応用可能です。

ぜひ、あなた自身のユースケースにもチャレンジしていただければと思います。

最後まで記事を読んでいただきありがとうございました。
もしこの記事が参考になりましたらいいねしていただければと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?