2025年4月30日
025-1.SPIKEプライム+ラズパイ+AIカメラを組み合わせてロボットを作る-第2回「AIカメラで物体を検出する」
この記事では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」とRaspberry Pi(以下、ラズパイ)とAIカメラを組み合わせたロボットを作る方法について紹介します。(文/松原拓也)
◆ データセットを作成する
前回に引き続き、公式のAIカメラ「Raspberry Pi AI Camera」を使って画像を認識します。
前回、物体検出のプログラム「imx500_object_detection_demo.py」を実行しましたが、実は正しく認識ができていない部分もありました。ラージハブは「laptop」、ミニフィグが「person」という見当違いな名前で表示されます。
本来なら「large_hub」や「minifig」と表示されるべきです。
この問題を解決するにはオリジナルのモデルを自作しないといけません。
モデルを自作するには、AITRIOSのWebサイトで公開されている「IMX500 Converter」というパッケージのツール(「imxconv-pt」や「imxconv-tf」)を使います。ただし、このツールは扱いが非常に難しいので、まずは「PyTorch」を使った画像認識から始めてみたいと思います。
データセット作成中の様子です。
モデルを作ります。モデルをどうやって作ったらいいのか見当がつかないので、ChatGPTに質問してみました。邪道かもしれませんが、頼る手段がこれしか思い付きません。
https://chatgpt.com/
入力したプロンプトは次の通りです。
(ここから)
PyTorceを使って画像認識のモデルを作成するためのPythonのコードを教えてください。モデルのアーキテクチャはMobileNetV2とします。データセットの画像ファイルは「train」フォルダに格納します。画像ファイルの形式はJPEGとします。学習後のモデルは量子化を行って、最後にpthファイルとして保存してください。
(ここまで)
モデルには数多くの種類がありますが、「MobileNetV2」を選択しました。理由は物体認識のサンプルプログラムのモデルが「imx500_network_ssd_mobilenetv2_fpnlite_320x320_pp.rpk」だからです。「量子化」したのはファイルサイズを小さくするためです。PyTorch公式サイトによると「量子化とは、浮動小数点精度よりも低いビット幅でテンソルの計算と保存を行う手法を指します。」と解説しています。
プロンプトを入力すると、コードが表示されますので、それをテキストエディタにコピペして「train_model.py」というファイル名で保存します。
「PyTorch」を「PyTorce」とタイプミスしてしまったのですが、正しく認識されました。
生成されたコードをそのまま実行すると「models.mobilenet_v2」メソッドの行でワーニングが表示されてしまいます。「pretrainedという引数は将来削除される可能性があるので、weightsという引数を使用してください。」という警告が出ます。ChatGPTの学習データが古いのが原因だと思います。ここは手作業でコードを修正しました。
◆ PyTorchをインストールする
◆ 物体を認識する
◆ Windowsでも学習や画像認識ができます
PyTorch公式サイトのトップページにインストールをするためのコマンドが書かれています。このコマンドをコピペして、ターミナル(Windowsの場合、コマンドプロンプトやPowerShell)で実行しましょう。
https://pytorch.org/
コマンドはPCの動作環境によって変化します。ここでは「Windows」「Pip」「Python」を選択します。「CUDA」というのはビデオカードのGPUを使って並列処理をする仕組みのことです。CUDA対応のビデオカードを持っていない場合には設定に意味はありません。
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。