Qualcomm 製 SoC(QRB2210)を搭載した Arduino UNO Q では、Arduino App Lab と Edge Impulse を組み合わせることで、自分で学習させた AI モデルをボード上で動かすことができます。
昨今は画像認識を活用した AI アプリケーションが身近になっていますが、自分で画像データを集め、モデルを学習し、エッジデバイスにデプロイして動かすところまで行うのは、環境構築やツールの使い分けが必要でハードルが高く感じられます。Arduino UNO Q では、Qualcomm と連携した Edge Impulse のワークフローを使うことで、データの収集、モデルの学習、ボードへのデプロイまでをブラウザと Arduino App Lab 上でスムーズに進められます。
Arduino UNO Q の詳細は、Qualcomm の公式ページをご確認ください。
Arduino UNO Q powered by the Qualcomm Dragonwing
Arduino UNO Q は、Qualcomm Dragonwing を搭載した開発ボードです。公式ページでは、デュアルブレイン構成、開発ツールや学習リソース、プラグアンドプレイで拡張しやすい点が特徴として紹介されています。従来の Arduino のように扱いやすい開発体験を保ちながら、画像分類のような AI 推論アプリケーションにも取り組みやすいボードです。
本記事では、マウスとハサミを識別する画像分類モデル を例に、データ収集からモデルの学習、Arduino UNO Q 上での推論実行までの一連の手順を紹介します。
1. 前提
1-1. この記事でやること
- 1. Arduino App Lab から Edge Impulse プロジェクトを作成する
- 2. USB カメラで学習用の画像データを収集する
- 3. Edge Impulse 上でモデルを設計・学習する
- 4. 学習済みモデルをテストする
- 5. モデルを Arduino UNO Q にダウンロードし、アプリとして実行する
1-2. 事前準備
- Arduino UNO Q 本体 (セットアップ済みで PC から接続できる状態)
- Arduino App Lab (PC にインストール済み)
- USB カメラ (学習データの収集と推論に使用)
- Arduino アカウント (Edge Impulse へのログインに必要)
2. Arduino App Lab から Edge Impulse プロジェクトを作成する
2-1. ボードに接続する
Arduino UNO Q をセットアップし、接続できる状態にします。Arduino App Lab を起動すると、接続可能なボードが表示されるので選択します。
Arduino App Lab の起動画面
2-2. Image Classification Brick を開く
接続したら左メニューから Bricks を選択し、一覧から Image Classification を選択します。
続いて AI models タブを選択し、一番下の Train new AI model ボタンを選択します。
Classification Brick の Overview
AI models タブと Train new AI model ボタン
ここで Qualcomm のユーザー登録・ログインが要求されます。ログインが正常にできると、ブラウザで Edge Impulse のユーザーページが開きます。モデル作成はこの Web サイト上で行います。
2-3. プロジェクトを作成する
右上の Create new project を選択し、プロジェクト名を入力してプロジェクトを作成します。
Edge Impulse のユーザーページ
プロジェクト作成ダイアログ
2-4. ターゲットデバイスを設定する
右上の Target を選択し、Target device 一覧から Arduino UNO Q (Qualcomm QRB2210) を選択して save します。
Target device の選択1
Target device の選択2
また、右下の Project info にある Labeling method から One label per data item を選択します(今回は画像分類なので、1枚の画像に1つのラベルを付ける方式です)。
Labeling method の設定
3. 学習用の画像データを収集する
画像分類モデルを作るには、モデルに「どの画像がどの分類に当たるのか」を学習させるための画像データが必要です。今回であれば、マウス、ハサミ、それ以外の画像をそれぞれ集め、ラベルを付けて学習データとして使います。この画像データの内容によって、学習後のモデルがどれくらい安定して分類できるかが大きく変わります。
画像分類モデルの精度は、学習に使う画像の撮り方に大きく影響されます。実際に推論させたい状況に近い画像を集めつつ、次のようにバリエーションを持たせると、より安定して分類しやすくなります。
- 角度を変える:正面だけでなく、斜め、上下、左右など複数の角度から撮影する
- 背景を変える:同じ机の上だけでなく、紙の上や別の色の背景などでも撮影する
- 明るさを変える:明るい場所、少し暗い場所、影が入る場所など条件を変える
- 対象物の位置を変える:画像の中央だけでなく、少し端に寄せた状態でも撮影する
- 各ラベルの枚数をそろえる:‘mouse’、‘scissors’、‘others’ の画像枚数が大きく偏らないようにする
3-1. データ収集デバイスを接続する
Getting started から Collect new data を選択します。
データ入力のためのデバイスを選択します。左側の QR コードをスマートフォンに読み込ませれば、スマートフォンのカメラから写真を撮ってデータを入力することもできます。今回は中央の Connect to your computer を選択し、PC に接続した USB カメラからデータ入力を行います。
Collect new data のデバイス選択1
Collect new data のデバイス選択2
接続が完了したら Collecting images? を選択し、Give access to the camera を選択して接続しているカメラに許可を与えます。
Collect new data のデバイス選択3
Collect new data のデバイス選択4
3-2. 「mouse」の画像を収集する
今回はまずマウスの画像を収集します。上の Label: ボタンを選択し ‘mouse’ とラベリングしてから、Capture を押すことでマウスの画像を記録します。
角度や背景を変えながら、マウスの画像を 30 枚程度 キャプチャーします。
マウスのキャプチャー画面
ラベルの入力
3-3. 「scissors」の画像を収集する
同様にラベルを ‘scissors’ として、ハサミの画像を角度・背景を変えながら 30 枚程度キャプチャーします。
scissors のラベル付けとキャプチャー1
scissors のラベル付けとキャプチャー2
3-4. 「others」の画像を収集する
次に、ハサミやマウス以外の画像を ‘others’ として 30 枚程度キャプチャーします。分類対象以外のものを「その他」として学習させることで、誤検出を減らせます。
others のラベル付けとキャプチャー1
others のラベル付けとキャプチャー2
4. モデルを設計・学習する(Impulse design)
ここでは、収集した画像データを使って画像分類モデルを作成します。まず Impulse と呼ばれる処理の流れを作成し、画像データをモデルに入力できる形へ変換するための処理ブロックと、分類モデルを学習するための学習ブロックを追加します。次に、画像から特徴量を生成し、最後に Transfer Learning を使って ‘mouse’、‘scissors’、‘others’ を分類するモデルを学習します。
4-1. Impulse を作成する(Create impulse)
左側メニューの Impulse design より Create impulse を選択します。
- Add processing block に Image を Add します
Create impulse 画面とブロックの追加1
Create impulse 画面とブロックの追加2
- Add learning block に Transfer Learning (Images) を Add します
- Save Impulse を選択して保存します
Create impulse 画面とブロックの追加3
Create impulse 画面とブロックの追加4
構成完了後の Impulse
4-2. 特徴量を生成する(Generate features)
左側メニューの Impulse design より Image を選択し、上のメニューから Generate features タブを選択します。表示された画面の Generate features ボタンを選択します。
Generate features の実行1
下のログで Job completed になることを確認します。
Generate features の実行2
4-3. モデルを学習する(Transfer learning)
左側メニューの Impulse design より Transfer learning を選択し、一番下の Save & train を選択します。
学習設定と Save & train
右上のログで Job completed が表示されたら完了です。モデルのパフォーマンスも測定され、ログの下側に Accuracy や混同行列などの結果が表示されます。
学習結果(Accuracy・混同行列)
5. 作成したモデルをテストする(Live classification)
学習したモデルを、実際にカメラ映像で試してみます。
- 1. 左側メニューの Impulse design より Live classification を選択します
- 2. 表示されたメニューの上側にある半導体マーク(Connect a development board)を選択します
Live classification 画面
- 3. データを収集した時と同じようにどのデバイスを用いるか選択します。今回は中央の Connect to your computer を選択します
Live classification 画面
- 4. Give access to the camera を選択し、カメラへの接続を許可します
- 5. Switch to classification mode を選択して推論モードを起動します
Live classification 画面
カメラをマウスに向けると、‘mouse (0.96)’ のように高い信頼度でマウスと推論されていることを確認できます。
推論結果の確認
6. Arduino UNO Q 上でモデルを実行する
6-1. モデルをダウンロードする
Arduino App Lab を起動し、左上メニュー Bricks → Image Classification → AI models タブで、Edge Impulse 上で作成したプロジェクトを確認し、Download を実行します。
これにより、Edge Impulse 上で学習したモデルを Arduino App Lab 上で使えるようになります。
モデルダウンロード
6-2. アプリを作成する
左上メニュー My Apps を選択し、Create new app+ を選択します。プロジェクト名を入力して Create new を選択します。
アプリの新規作成
6-3. Brick を追加する
左上メニューより Add bricks を選択します。左側の一覧より Video Image Classification を選択し、右側の AI models 一覧で先ほど作成したプロジェクトを選択して Add brick で追加します。
Video Image Classification Brick の追加
Video Image Classification Brick の追加
6-4. main.py を書き換える
左側メニューの ‘python’ 以下にある ‘main.py’ の内容を下記に書き換えます。
from arduino.app_utils import App
from arduino.app_bricks.video_imageclassification import VideoImageClassification
classification_stream = VideoImageClassification()
def detected(label):
print(f"Detected: {label}")
classification_stream.on_detect("mouse", lambda: detected("mouse"))
classification_stream.on_detect("scissors", lambda: detected("scissors"))
classification_stream.on_detect("others", lambda: detected("others"))
App.run()
6-5. アプリを実行する
右上の Run ボタンよりデモを起動します。
起動後、ログ表示を Python に切り替えると、USB カメラで写した物体を Classification します。今回は PC のマウスを学習させているので、マウスにカメラを向けるとマウスを検出したログが流れます。
マウス検出ログ
7. まとめ
Arduino UNO Q と Edge Impulse を組み合わせることで、以下の流れで自作の画像分類モデルを簡単に動かすことができました。
- データ収集:USB カメラやスマートフォンから Web ブラウザ上で簡単に収集
- モデル学習:Transfer Learning により少ない枚数(各30枚程度)でも実用的な精度を実現
- デプロイ:Arduino App Lab から数クリックでモデルをダウンロードし、Python 数行で推論アプリを作成
コードをほとんど書かずに、エッジデバイス上でカスタム AI モデルを動かせるのは大きな魅力です。ぜひみなさんも、身の回りのものを学習させて試してみてください。
ネクスティエレクトロニクスの取り組み
株式会社ネクスティ エレクトロニクスは、豊田通商グループのエレクトロニクス事業の中核企業として、カーエレクトロニクスの分野においてトップクラスの規模を誇ります。
技術と商材を核として、幅広い分野でお客さまや世の中のニーズに応え、 社会課題のソリューションを提供し、より善き社会の実現に貢献していきます。
また、ネクスティ エレクトロニクスの開発部隊では、取り扱い商材を活用した自社開発、受託開発(ハードウェア、ソフトウェア開発)なども実施しています。
お客さまの困りごとなどの解決なども含め寄り添って対応いたしますので、お気軽にお問合せください。








