基盤モデル×Robotics Advent Calendar 2022の7日目の記事です。
基盤モデルとは
最近話題の基盤モデルとはなんのことか。要は大量のデータを学習したデカい凄いモデルのことです(乱暴)。詳細は基盤モデル×Robotics Advent Calendar 2022の1日目の以下記事を参照ください。
そのデカいモデルとロボットを組み合わせてうまいことやろうというのが基盤モデル×Robotics Advent Calendar 2022のテーマですが、当然基盤モデルを使ったロボット制御は、最先端の研究でなかなか簡単にできるものではありません。
そんな無茶を、実用性は置いておいてとりあえず動くところまで実機でやってみたので、事例として紹介したいと思います。
基盤モデルでAIルンバを動かす
今回は基盤モデルとして画像生成AIとして話題のStable Diffusionを使います。最終的にはからあげとレモンを見分ける画像認識のAIをルンバに搭載します。やったことの流れは以下になります。
- Stable Diffusionで教師データを生成
- AIの教師あり学習
- AIモデルの軽量化
- AIルンバに搭載
図示すると以下のような感じです。
ポイントとしては、基盤モデルとしては、驚異的に小さいとはいえ4GB以上あるStable Diffusionを使って、教師データを生成することでAIルンバに搭載するシングルボードコンピュータ(今回は、Raspberry Pi 3/4を使用)で動くAIモデルを作り出すことです。アノテーションも不要となります。
やっていることとしてはモデルの小型化なのでAIモデルの蒸留に近い気がしますが、理論的なことはよくわからないのでとりあえず置いておきます。利点としては、Stable Diffusionが動くスペックのPCがあれば(Google Colabでも可)実現できるところですね。とにかく私はAIでルンバを動かしたいのです。
具体的な手順を順に紹介していきます。
Stable Diffusionで教師データを生成
Stable Diffusionを用いて、教師データを生成します。今回は、GUIがついたAutomatic1111版を使います。セットアップ方法は以下記事参照ください。
今回は、教師あり学習として「karaage」「lemon」「etc」という3のクラス分類をします。データの生成は簡単で「karaage」「lemon」をプロンプトとして入力して大量に画像を生成するだけです。今回は、1クラスあたり300枚程度の画像を生成しました。「etc」に関しては、その他としてプロンプトを空欄にして生成しました。
大量に生成される、からあげ画像
生成した画像は、それぞれ「karaage」「lemon」「etc」というフォルダ(ディレクトリ)に格納します。
画像生成AIから教師データを作り出す試みには先行研究*1があります。GANで生成した画像をCLIPでラベル付けをしているようですが、Stable DiffusionのようなText-to-Imageだと、入力したプロンプトがそのまま教師データのラベルになるので、アノテーションの手間がほとんどゼロになり良いですね。
AIの教師あり学習
続いては、生成したデータに対して、単純な教師あり学習を行います。ここは特に新しいところはないので省略します。もし詳しく知りたい人は、宣伝になりますが拙作「からあげ先生のとにかく楽しいAI自作教室」を参考にしていただけましたら幸いです。
書籍では、じゃんけんの「グー」「チョキ」「パー」の3クラス分類をしますが、今回はこれをそのまま「karaage」「lemon」「etc」に置き換えます。
コードに関しては、書籍のサポートサイトのGoogle ColabのNotebookも用意してあります。じゃんけんの例ですが、ディレクトリ名を置き換えればそのまま適用できます。
今回は、MNISTによく使われる小さいCNNと、EfficientNetの両方で試しましたが、両方とも検証データの精度は90%は軽く超えてきました(小さいCNNの方は、Data Augmentationをしています)。
今回は、小さいCNNモデルを用います。これで4GBのStable Diffusionのモデルから、用途に特化した約90MBのAIモデルを生成できます。
本来はテストデータでも検証をしたいところですが、今回は仕事でも研究でもないので省略します。私はただAIでルンバを動かしたいのです。
AIモデルの軽量化
このままでもRaspberry Pi(ラズパイ)で動きますが、速度的に少しつらいので軽量化します。エッジコンピューティングとよばれる分野ですね。こちらに関しても、詳細は割愛しますので、興味ある方は、書籍を参考にしていただけましたら幸いです。
軽量化の手法は色々ありますが、今回はTensorFlow Liteモデルに軽量化します。ノートブックは以下参照ください。
この軽量化で90MBのAIモデルが30MBになります。
ラズパイ4で0.032s(約30fps)で動きます。
Stable Diffusionで生成した画像とプロンプトだけを教師データとして準備。
— からあげ (@karaage0703) November 16, 2022
小さいAIモデルを学習、量子化してラズパイで動かしてみた #stablediffusion #RaspberryPi pic.twitter.com/l3tHQCnOj4
AIルンバに搭載
ロボットとしてルンバを使います。ルンバの改造に関しては、以下ブログ記事参照ください。
自作基板を作って、ラズパイと接続しています。制御には「PyRoombaAdapter」を使っています。
今回は、ソフトとしては先程生成したAIモデルに加えて、顔を検出するAIモデルの2つを組み合わせました。顔検出するAIモデルは、高橋かずひとさんのYuNetのデモを利用しました。
ソフトは、顔検出して顔のある方向にルンバが移動して、一定距離近づいたら(顔サイズで判断)、顔の下にある一定エリアを、先程作った「karaage」「lemon」「etc」を画像認識するAIモデルでクラス分類します。
からあげだったら喜び、レモンだと激怒します。(その他の場合は何もしません)。以下動かしている様子です。
AIルンバ、もちろん自動でも動きます。人懐っこいので、人の顔を認識して追いかけてきますが、レモンを与えると激怒します #OMMF2022 pic.twitter.com/6Ygd77O1BD
— からあげ (@karaage0703) December 2, 2022
AIルンバデモ
作ったAIルンバを12/3,4に開催されたOgaki Mini Maker Faire2022(OMMF2022)で出展しました。
顔検出が、マスクで認識率が低かったり、他の展示の音などで騒がしく、ルンバの音が聞こえづらかったりと、なかなかデモとしては厳しい環境でしたが、なんとか頑張って動いてくれました。
まとめ
基盤モデルでAIルンバを動かす方法に関して紹介しました。新規性や実用性は正直低いですが、Stable Diffusionを使用して、実際にロボットに搭載するAIを作って動かすところまで実施した例は、まだ少ないのではないのかなと思います。
今回は、画像分類のみの例ですが、今後画像検出、音声認識なども、ラズパイで動くようになってくるとより基盤モデル x Roboticsが面白くなってくるのではないかという予感を感じています。この記事が、基盤モデル x Robotics発展のための一助になれば幸いです!
参考リンク
農業の選別機や収穫ロボットの「目」に基盤モデルを応用したらどうなる?
同じアプローチで農作物にStable Diffusionを適用した応用例!このルンバ記事を参考にしていただいたとのこと
Foundation Model and Robotics | 基盤モデルとロボティクス - Speaker Deck
GitHub - mertcookimg/FoundationModel
東大の基盤モデルの講義資料と演習のColabノートブック
関連記事
変更履歴
- 2022/12/21 参考リンク追記