ChatGPTと作ってみた組み込みAI
~Webアプリでじゃんけんポイ~
........
- 更新日
- 2023.09.27
- 公開日
- 2023.07.27
AI初心者のエンジニアが、AIモデルを作成し、時にはコードやコマンド生成にChatGPTを活用しながら、AIじゃんけんのデモ機を制作した過程をまとめています。
AIは良く聞くけど組み込み開発にどう取り込むのだろう?という方も読み進めてイメージをつかんでいただければと思います。
INDEX
1. エンジニア概要
入社以来、約20年間 組み込み開発を経験してきたソフトウェアエンジニアで、大手企業に常駐する事も多く、ソフトウェア開発の顧客支援を行ってきました。プログラミング言語は、C言語がほとんどで、HTML、JavaScriptの経験はなく、AIの知識もほとんどない。そんな中で今回、AIモデル作成、Webアプリケーション開発に挑戦しました。
2. 「AIモデル」を自作してみたい!と思ったきっかけ
顧客開発支援でOpenCVを用いた顔検出の開発経験があり、画像認識に、ある程度の知見がありました。ディープラーニングが話題になった頃、いくつかのセミナに参加し、AIモデルは自作できるという事を知りました。
また、AIといえばクラウドAIという印象を持っていましたが、エッジAIにも興味があり、自作したAIモデルをエッジAIで動作させたいと思いました。
エッジAIとは!?
エッジAIは、デバイスやシステムのエッジ(端末側近く)で処理や分析を行うAIの技術です。クラウドAIと比べて、低遅延(リアルタイム応答)、セキュリティ保護、オフライン対応、ネットワーク負荷軽減といった利点があります。データ分析・学習などには向いていないため、推論実行が中心となります。
3. まずはサンプルアプリケーションを実行
自作したAIモデルをエッジAIで動かすためには、評価ボードが必要となります。
どのような評価ボードがあるか調査を行い、今回はルネサスエレクトロニクス社製 MPU「RZ/V2MA」を搭載した評価ボードキット「RZ/V2MA Evaluation Board Kit」を使用しています。
開発環境の一例
- RZ/V2MA Linux Package
- DRP-AI Translator
- DRP-AI Sample Application(WebSocketを活用したWebアプリケーション)
- 「AI IMPLEMENTATION GUIDE」というお役立ち情報が付属し、AI開発を一から始めるのに役立ちます。
評価ボードを入手後、まずは以下の手順でサンプルアプリケーションを動作させます。
- 1)RZ/V2MA Linux Board Support Package(BSP)のビルド
- 2)Software Development Kit(SDK)のビルド
- 3)サンプルアプリケーション(USB Camera VCD version application)のビルド
- 4)「RZ/V2MA Evaluation Board Kit」上で実行
4. 初めてのAIモデル作成!
次はAIモデル作成に取り組みます。今回は、アプリケーションの応用が利きそうな、「ぐー、ちょき、ぱー」を識別するAIモデルを作成しています。
画像集めに苦戦し、ChatGPTを活用
まずは作業の中でも苦労するといわれる画像収集を行います。ぐー、ちょき、ぱーの各ジェスチャについて100枚ずつ収集し、合計で約300枚を集めることを目指しました。
スマートフォンを左手に持ち、右手を撮影していきますが、このスタンスで300枚撮るのはかなりの作業量です。そこで、ChatGPTでソースコードが作成できることを思い出し活用してみることにしました。あまり期待はしていませんでしたが、試したところ、数秒で見事にプログラムを作成してくれました。
動作しないのでは?との不安もありましたが、試しに実行してみると、一回でプログラムが動きました。ファイル名や画像サイズも期待通りの結果でした。仮に自身で同じプログラムを作ると多くの時間を費やしますので、かなりの作業効率に繋がったと思います。300枚の画像収集も、ChatGPTのおかげでたった30分程度で完了しました。
次に画像にラベルや座標のデータを付与させ、教師データを作ります。(この作業をアノテーションといいます)
続いて、Darknetというフレームワークを使用し、作成した教師データから機械学習を行います。途中、機械学習が失敗するという事もありましたが、今回もChatGPTの力を借りながら、無事AIモデル「モデル構造(*.cfgファイル)と重みパラメータ(*.weightsファイル)」が作成できました。
その後は、ルネサスエレクトロニクス提供の「AI IMPLEMENTATION GUIDE」に従って
- 1)Darknet - PyTorch変換
- 2)PyTorch - ONNX変換
- 3)ONNX - DRP-AI Object files変換(DRP-AI Translator使用)
と進める事で、「RZ/V2MA Evaluation Board Kit」で実行可能なDRP-AI Object files が作成できました。
AIモデル動作確認
早速、自作AIモデルの動作確認を行います。DRP-AI Object files を書き換え、実行すると、見事に認識できました!
5. AIじゃんけんの作成
ぐー、ちょき、ぱーと言えば「じゃんけん」という事で、「絶対に勝てないじゃんけんゲーム」を作ることにしました。
ゲームとして追加が必要な機能は以下の通りです。
- 対戦相手の追加
- 掛け声(最初はぐー、じゃんけんぽん!)の追加
- じゃんけん判定処理
「絶対勝てないじゃんけん」は、ぐー、ちょき、ぱーの3枚のPNG画像を高速に切り替えて、相手の手に必ず勝てる画像で止めるという仕組み(後だし)です。しかし、画像を高速に切り替えるとちらつきが発生するという問題が発生したため。ChatGPTに相談すると動画で作成した方が良さそうとのことで、動画ファイルの作成方法を聞いてみました。
絶対勝てないじゃんけんゲーム完成
ffmpegのコマンドを調べるだけでも結構な時間がかかるはずが、ChatGPTではまたも瞬時にパラメータまで教えてくれました。指示通りコマンドを打つと、動画ファイル(mp4)が作成できました。
あとは、掛け声(最初はぐー、じゃんけんぽん!)の追加、じゃんけん判定処理の追加を行い、絶対勝てないじゃんけんゲームが完成しました。
6. さらなる改良に向けて
当初の目的である「AIモデルを作成する」は達成できたので、ここで区切りをつけるつもりでしたが、より精度の高いAIじゃんけんを色々な人に見てもらいたいと思い、AIじゃんけんの改良に取り組みました。
まずは現状のAIじゃんけんの課題を洗い出します。
- ① 後出ししている感じが強い
- ② 手の誤認識が多い
- ③ AIに絶対勝てないので面白くない
① 後出ししている感じが強い
後だし感については、じゃんけんの判定タイミングを調整しました。また、Webアプリケーションを実行するPCのスペックにも依存する事が分かり、Webアプリケーション実行環境をメモリ2GBのLinuxからメモリ8GBのWindows上で実行できるよう環境を整備。さらにキャラクタの動画は30fpsで作成しましたが、停止する時の後出し感をわかりずらくするためにJavaScriptで1.5倍の45fpsしました。
② 手の誤認識が多い
誤認識については、「手の角度を変える、子供の手、女性の手、左手」などの画像を追加で撮影し、AIモデルの再構築(追加学習)を行いました。
③ AIに絶対勝てないので面白くない
面白いゲーム仕様にするためにじゃんけんゲームとしての仕様を再検討しました。
- 一定の確率でAIが負け、AIが負けると徐々に強くなるようにする(level1~level5)
- AIに表情を追加し、負けると怒る。時間が経過すると怒りが静まる。
- AIキャラクタに吹き出しを追加し、じゃんけんの開始や勝敗をわかりやすくする。
7. 絶対勝てないじゃんけんゲーム改良版が完成
3つの課題を解決することでより良いAIじゃんけんのデモ機が完成しました。
多くのお客様にも実際にデモを体験いただき、新たな課題も見えてきていますので、さらに改良を継続していきたいと思います。
8. まとめ
今回は、AIモデルの作成から、エッジAIでのアプリケーション動作までの過程を親しみやすいじゃんけんというテーマで見ていただきました。組み込みAI(画像認識)では、生産ラインでの不良品検査や、作業員の安全確保(着用物チェック)、危険地帯への侵入防止などへの活用が考えられます。アイデア次第で活用方法は多岐に渡ると思いますので、自社製品で何か活用シーンがないかアイデアを出すきっかけになれば嬉しく思います。AIモデルの生成方法を知りたい、という方も是非お問い合わせください。