🤖

各種基盤モデルとROSの連携を楽にするツールを作った話

2010/12/24に公開

本記事は「基盤モデル×Robotics Advent Calendar 2023」の12/24に投稿されたものです。

https://qiita.com/advent-calendar/2023/robot-ai

はじめに

みなさんこんばんは、ロボット開発、面倒くさいことばかりですよね。
設計して動かしてデータ取って直して、学習回して....
最近ChatGPTとか流行ってて面倒なことは全部ChatGPTに任せたいのにいつ俺のロボット開発は楽になるんだ基盤モデルってやつで楽になるんちゃうんかい!!....と思っているそこのあなた!
僕は楽をするのが大好きです!各種基盤モデルを使って楽をするためのツール、作りました!

この記事で紹介するツールに関しては実は以前ROSJPで発表したことがあります。
その当時の資料はこちらになります。
https://speakerdeck.com/hakuturu583/amber-rosbag-to-pytorchde-hazimeruoshou-qing-maruti-modarurobotutokai-fa

AMBER: Automated annotation and Multimodal Bag Extraction for Robotics

AMBERは自分が趣味で開発したツールです、Apache 2.0ライセンスでgithub上で公開しています。
ご自由にお使いください。

https://github.com/rosbag-sharing-community/amber

開発のきっかけ

ちなみに名前を考えるのは面倒くさかったので全部ChatGPTに任せました、便利ですね。
「ROSBAGからマルチモーダルな情報を抽出したり、アノテーションしたりするロボット向けのツールの名前考えて、アクロニムでいい感じに」みたいな雑な指示で仕事をしてくれました。
ありがたい。

AMBERの開発を始めたきっかけは自分の本業は自動運転系のエンジニアなのですが、自動運転データセットの大御所、nuScenes Datasetをダウンロードして学習を回してみようと思ったらファイルが複数に分割されておりドキュメントを読んでファイルを配置せねばならず「メンドクセ。。。」となったのがきっかけです。

/data/sets/nuscenes
    samples	-	Sensor data for keyframes.
    sweeps	-	Sensor data for intermediate frames.
    maps	-	Folder for all map files: rasterized .png images and vectorized .json files.
    v1.0-*	-	JSON tables that include all the meta data and annotations. Each split (trainval, test, mini) is provided in a separate folder.

nuScenes Datasetのデータ配置、出典

この時脳内にrosbagあるんだからそのままPyTorchに食わせたらいいじゃん、中に必要なデータは入ってるでしょ...??という考えが浮かびました。

ロボット開発するときは自作ロボットで取れたデータからファインチューニングしたい、とりあえず取れた特徴量を可視化してみたい、いろんな要望が出てきます。
特にRoboCupのようなマルチモーダルなセンサ統合を行なうことが前提の競技会となってくるとまず間違いなく大会会場についてから綺麗なデータセットを作り込んでいる時間はありません。
つまりそういった状況下では「取れたrosbagを深層学習モデル等に入力し即座に分析や学習が行えること」が素早い開発サイクルを回す鍵になると考えます。

せっかく基盤モデルなどの発展でマルチモーダルな推論なんかが簡単にできるようになってきたのに、このままではもったいないですよね?というわけで作りました。

設計思想

大きな設計思想は下記の2つです。

ROS 2に依存が無くてもROS 2のrosbagに記録されたデータを読み込めること

AMBERを使った機械学習パイプラインを回そうと思った時、それがローカルにあるとは限りません。
ロボット競技の会場にクソデカGPUマシンを持ち込めるとは限りません。
その場合クラウドや遠隔地に存在する機械学習サーバーで学習を回すことは一つの選択肢に上がってくると思います。
そうするとその環境にROS 2が存在するとは限りません、そのためAMBER自体にROS 2依存が無いことは運用をスムーズにする上で極めて重要であると考えます。

Humble以降で使用可能になったmcap形式のrosbagは内部にスキーマ定義が保持されているため、この要件を満たすことが可能です。

https://foxglove.dev/blog/mcap-as-the-ros2-default-bag-format

mcapには公式実装のpython libraryが存在し簡単にデータを読み取ることができます。

AMBERはfoxgloveの皆様のおかげで作れたと言っても過言ではありません。アリガタヤ🙌

様々な種類のデータをサポートできること

最近の基盤モデルは画像、テキストにとどまらず色々入力できるようになってきています。
画像を入力できるだけではもったいないですよね?
というわけでAMBERでは点群情報も読み込めるようにしています。
将来的には音声情報なんかもサポートしたいと考えています。

AMBERの4大機能

Not Found

AMBERは主に4つの機能をロボット開発者に提供します。
すべての機能はPythonの関数やクラスとして実装されていますので、簡単に連携することが可能です。
部品を組み合わせて君だけのロボット機械学習パイプラインを作ろう!

Dataset機能

rosbagに記録されたメッセージをTorch.Tensor型に変換し、PyTorchに入力することができます。
使い方の詳細はこちらのドキュメントをご確認ください。

今月はじめ、バッチ処理を行うためのサンプラーも実装しました。
現在は経過時間ごとにバッチを作成するTimeStampSamplerものしかありませんが、将来的にはtfトピックの情報を監視し、一定以上の距離を移動するたびにサンプリングをしたり、一定の範囲内で取得されたデータのみをサンプリングする機能を実装していきたいと考えています。

Not Found

Automation機能

自分でアノテーションしたり、検索したり、3D Modelつくってみたりって超絶面倒くさいですよね。
面倒なことはMLにやらせましょう。
本機能ではそれを行います。

各機能の詳細を知りたい場合はこちらのドキュメントを参照ください。

現在実装できているのは以下の3点です。

Deticによる画像アノテーション機能

https://www.youtube.com/watch?v=OPR3ZVzRXCM&t=1s

Deticは21Kクラスを識別可能でさらにOpen-Vocabularyな物体認識が可能なモデルです。
本機能ではailia-modelsで公開されているonnx変換されたDeticモデルを動作させて出力された物体クラスをアノテーションのラベルとしてrosbagに書き込む機能を提供しています。

https://github.com/axinc-ai/ailia-models/tree/master/object_detection/detic

ailia-modelsの開発者の皆様、使いやすいモデルを公開いただきありがとうございます。

CLIPによる画像フィルタリング機能

これは実装してみたもののあまりに低クオリティすぎて「見せられないよ!」状態だったのでそのうち消すと思います。
どのくらい低クオリティだったかは「基盤モデル×Robotics Advent Calendar 2023」の12/25に投稿される記事、「CLIP/CLIP4CLIP/BLIP2を使ってrosbagの画像検索できるようにした話、プロンプトと検索結果の比較を添えて」を見るとなんとなく想像がつくと思います。

NeRFによる三次元再構成

https://www.youtube.com/watch?v=NgEIB4TRRTo

NeRFでシミュレータの3D Modelほしい!!ので実装しました。
というのは建前で学生時代のデスマーチ会場を3次元再構成して眺めたかっただけです。

本機能はNeRF Studioを利用して開発しました。

https://docs.nerf.studio/

NeRF Studioの作者様、ありがとうございます。

建前を守るためにマーチングキューブ法によるメッシュ再構成できるようにしましたが、実用レベルではありません。

Importer機能

ロボット競技会場で偶然ビデオ取ってたら貴重なシーンが取れてしまった....
ってことありませんか?
この機能はそういった事態に備えて提供されています。
Importer機能は非rosbagデータをmcap形式のrosbagに変換します。
これによってその場で起きた問題を拾ってより良いロボットが作れると考えます。

現在はmp4の動画ファイルのみインポートをサポートしています。

本機能の詳細はドキュメントをご覧ください。

Visualization機能

CLIPなどのVision & Language Modelでは言語、画像情報からembeddingと呼ばれるベクトルを作ります。

Not Found

プロンプトを工夫して物体を見つける場合、「見つけたい物体の画像のembeddingとだいたい同じになる言語表現を探す」といういわゆるプロンプトエンジニアリングが発生します。
めんどくさいですよね、そもそもロボット競技会という人手が最も貴重な環境でそんな作業をやらせるのは効率が良くないと思います。
自動化したいところではありますが、完全な自動化は難しいです。

では、可視化して楽をすることはできないでしょうか?

TensorBoardにはEmbedding Projectionという機能があり、画像やテキストから得られたembeddingを可視化することが可能です。

https://note.com/npaka/n/n0741bdca11f5

実際に可視化されたデータはこのようになります。

https://www.youtube.com/watch?v=RbLG4dcH23U

本機能で作った画像検索?システムはROSJP #52仙台の陣において発表しました。
ある程度ちゃんと動く画像検索システムは「基盤モデル×Robotics Advent Calendar 2023」の12/25に投稿される記事、「CLIP/CLIP4CLIP/BLIP2を使ってrosbagの画像検索できるようにした話、プロンプトと検索結果の比較を添えて」をご覧ください。

https://speakerdeck.com/hakuturu583/clipderosbagno-detawojian-suo-sitemiruhua

本機能の詳細はドキュメントをご覧ください。

まとめ

今回は、各種基盤モデルの強大なパワーを使って楽をするツールROS 2 x PyTorchでマルチモーダルなロボットを開発するための便利ツール、AMBERを紹介しました。
本ツールがRoboCupperやつくばチャレンジ参加者などの助けになることを祈ります。

Discussion