初めてのフィジカルAi。Huggingface の LeRobot の ACT model で学ぶ。#2
LeRobot ACT model で、モーション分割 Datasets で、学習とシミュレーションの inference を学ぶ!!
初めてのフィジカルAi。Huggingface の LeRobot の ACT model で学ぶ。 の続きです。
今回は、オリジナルの データ・セット lerobot/aloha_sim_transfer_cube_human を、各エピソードを、複数モーションに分割して学習させてみました。
オリジナルのデータは、必ず、start - end の決まった流れで、複数エピソードを学習させています。
前回の学習済 ACT model で、シミュレーションでのテストをずっと見ていましたが、
なんとなく、キューブを見つける性能が弱い気がするし、最後の手渡しする部分も弱い気がしました。
できれば、その部分だけ、もっと学習させれば、良い気がしました。
そのためには、いつも1 エピソードを学習させるのでは無くて、部分的に強化した学習が出来ないかと考えた結果、
モーションを区切って学習させたらどうじゃろか? と思って、作ってみました。
1. まずは、2 分割のモーションで試してみます。
オリジナルの lerobot/aloha_sim_transfer_cube_human を分割する python コードを作る必要があります。
例によって、Google Ai の助け(ほとんどだが) で、なんとかできました。
make_3motions_data.py
今回は、これで、 2分割させたモーションデータを使ってみます。
分割した Datasets を、確認するのは、
$ export PYTHONPATH=$PYTHONPATH:/home/your-id/local/git-download/lerobot/src
$ lerobot-dataset-viz --repo-id local/split_dataset_0 --root outputs/split_dataset_0 --episode-index 0
train コードは、前回作成した notebook の train.ipynb を、少し修正すれば、
学習済 ACT model が出来ます。
とりあえず、5 - 6 epochs 学習させてみます。
train.ipynb
use_ex=True
で学習させます。こちらが、train 時間が少ないので...
一応、非分割のデータ・セットと同じ様に、今回の 2モーション分割の場合も、Loss が減っていって、学習できている様です。
Steps 12400 | Loss: 0.175373 | LR: 0.000003
Model saved! (Step Best Loss: 0.1754)
本当は、Loss: 0.11 辺りが良いと思う!!
2. シミュレーションでのテスト。
シミュレーションでのテストは、前回作った、
Act_check_sim_cui.py がそのまま使えます。
一応、うまく動くみたい。
性能は、2分割だから、そうそうか!!
ここまでのコードは、下記、 github に上げています。
tosa-no-onchan/lerobot-my/AlohaTransferCube-multi-motion
3. 3分割モーション学習!!
いよいよ、ここからが、本番じゃ!!
データセットを、3モーションに分割して、さらに、分割する際に、すこしオーバーラップさせてデータセットを作ってみます。
と、思ったけど、オーバーラップがうまく行かないので、ここは、単純に 3 motion 分割で、train させてみます。
1 motion: 133 steps
133 x 3 = 399 steps
train が終わったので、シミュレーションで動作確認しました。
一応、問題なく、動作しました。
精度は、元の Datasets が同じなので、同じかな?
3モーション分割にあわせて、moton1 と motion3 の増量が必要だと思う!!
確認できたのは、3 モーション分割でも、問題なく train が出来て、シミュレーションも問題ない、と言う事。
本当は、さらに、 moton1 と motion3 のデータのみもっと増やせれれば、本来の目的に叶うのだが!!
しかし、データがないので、 3 分割した場合の model の連携動作が出来るかのみの確認のみとなる!!
4. 3分割モーション学習 オーバーラップ有り。
こちらの方も、分割ツールが対応出来たので、試してみました。
オーバーラップ分 レコード数が増えたみたい。
レコード件数: 22,000
あくまで、Dataset が同じなので、基本シミュレーション動作は、あまり違いは無いと思う。
しかし、最近、動作が complete するシーンがちらほらでるかな?
3分割した、 各 moton1 、2 、3 の組み合わせに、 motion1 を追加したらよいかも。
motion1 + motion2 + motion3 + motion1
合計、4 モーションで、train させても良いかも。
まあ、本当は、更に新たな、 motion1、motion3 を追加するのが、本来の手法です。