見出し画像

リアルデバイスでProject Bonsaiを動かしてみた ー詳細編ー

こんにちは、アバナード関西オフィスの小林です。

今回は前回の予告どおり「達成させたい目標」の3つの内容とBonsai部分の実装やトレーニングについて説明していきたいと思います。

特定の画像を判断させ、特別な挙動をおこなう


今回はAvaKansaiでお馴染みのこの2つの画像を使用します。

弊社 代表取締役 
我らが関西所長

この画像がBonsai Carに搭載されているカメラの視界(画角)に入ると、寄ってきたり、離れたりと一定の距離を保つようになっています。

前回のシステム構成図でもお見せしました通り、学習済みのCustom VisionもRaspberry PiのDocker上に乗っており、Bonsai Carのカメラで取得した映像をインプットさせることで判定しています。

とはいえ、Custom Visionは判定はしてくれるものの、距離や方角まではわかりませんので、その部分は処理内で一工夫しています。

発見した画像の位置やサイズはCustom Visionから返ってきますので、発見した画像の開始位置と幅でカメラの映像の幅との比率から角度(方角)を特定します。
また、同じくCustom Visionから返ってきたサイズで元画像とのサイズの比率でおおよその奥行き(遠さ)を計算しています。

発見した画像の情報を元に方角と距離を逆算


Bonsaiのシミュレーターについて


Bonsaiの学習精度に最も大きな影響を与えるのがシミュレーターです。
しかし、シミュレーターは用意されていないため、利用者が自分で構築する必要があります。
具体的な内容についてはトレーニングの項目で説明しますが、Bonsaiとシミュレーターを接続してトレーニングを行います。

シミュレーターを自分で用意するとなると、かなりハードル高いように感じられるかもしれません。
しかし、逆から言えばかなり自由な環境と設定で構築することができるという大きなメリットがあります。

また、現実社会では実際に行う事はできないことでも、シミュレーター上に現実社会を再現させる事でより精度が高いトレーニングを行うことができます。つまり、こちらも今流行りのデジタルツインやメタバースとも相性が良いと言えます。

今回Bonsai Carを学習させるにあたり、2D空間上に縦横4000mm~6000mmの部屋をランダムで生成し、その中でシミュレートさせました。
内容としては

1.各種モデルをランダムで配置
2.モデルをランダムに移動
3.各種判定を実施

の繰り返しになります。

Bonsai Carのシミュレート内容


Bonsaiのトレーニングについて


Bonsaiのゴール設定はInklingという言語で設定し、そのゴール条件に合うようトレーニングを行います。
Bonsaiのトレーニングは前項でもご説明しました通り、トレーニングからシミュレーターを呼び出して(実行して)繰り返し学習を進めることになりるため、シミュレーターは外部から接続可能な環境であることが必要となります。

また、トレーニングに要する時間はシミュレーターの性能の依存するため規模や複雑度によってはローカルマシン上での実行はありまり現実的ではありません。
そのため、シミュレーターのデバッグはローカルマシンで行って、正常に動作することが確認できればVM上で行う方法をオススメします。

今回Bonsai Carにおいてもネットワーク帯域にかかるレイテンシやマシン処理速度の都合上、仮想マシンを立ててシミュレーターを設置してトレーニングを実施しました。(1コア、メモリ1GB)
これはAzure VMで新たにマシンを追加するのではなくBonsaiでシミュレーターを追加する際に選択が可能となっており、インスタンス数も設定できるのでより緻密に、早くトレーニングを行いたい!といったニーズに応えてくれます。

シミュレーターのスペック設定



後は以下の繰り返しトレーニングさせ、Bonsaiを学習させます。

Ⅰ.シミュレーターから情報を取得
Ⅱ.取得した情報を基に現状を採点
Ⅲ.ハンドルの向きとアクセルの向きを生成
Ⅳ.シミュレーターの情報を更新し、Ⅰに戻る



現時点でのBonsaiの課題


一点、重要なのはProject Bonsaiは現時点で限定プレビュー中のサービスだということです。
そのため、まだ改善の余地があると感じられる部分があることも確かです。
その中でも今回Bonsai Carを作成するにあたりハードルとなった部分をご紹介します。

A.Bonsaiへの引数として数値しか渡せない
今回、Custom Visionの結果もBonsai に渡しているのですが、各数値をカンマで区切って渡しています。配列や画像等のStreamをそのまま渡すことができればもう少し実装的に楽になったり、使用できる幅が広がるのではないかと思いました。

B.Bonsaiの再学習ができない
一度学習が終わったBrainに対して、再度学習を行うことができません。Brain側の設定(ゴール条件や優先度)の変更を行った場合には再学習が可能ですが、シミュレーターに変更を加えても再学習させることができません。
前述の通り、学習精度にはシミュレーターの影響が大きな要素となっているため、再学習の結果精度が上がるようであれば採用可能といったオプションが追加されることが望まれます。


最後に


2回にわたってBonsaiについて記事を書きましたが、いかがだったでしょうか?
Bonsaiの特徴や、実際の使い方についてかなり駆け足で説明しましたが、少しでも参考になれば幸いです。

まだまだ詳細に書ききれていない内容がありますので、別途資料としてこちらにUPさせていただきました。


また、今後の予定としましては、Bonsai周りの詳細記事、ラジコン(Python)側の詳細記事、実際のBonsai Carの映像と、どのような形になるかはまだはっきりとお約束できませんが、このブログで公開させていただきたいと思います!!


最後まで読んでいただき、ありがとうございました!

【2022/06/28追記】
Bonsai周りの詳細について新しい記事が公開されましてので、こちらもぜひお読みください!

アバナード関西 小林 直樹
naoki.kobayashi(@)avanade.com

この記事が気に入ったらサポートをしてみませんか?