Instructions to use kimtaegyu/TETHER_CVPR with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use kimtaegyu/TETHER_CVPR with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
MAR โ SO-100 ์ค๋ก๋ด 4ํ์คํฌ Continual Learning ์ฒดํฌํฌ์ธํธ (CVPR ์ ์ถ์ฉ)
SO-100/SO-101 ํ(so_follower)์ ์กฐ์ ํ์คํฌ 4๊ฐ๋ฅผ ์์ฐจ๋ก ํ์ตํ DiT-Flow MT ์ ์ฑ
์ฒดํฌํฌ์ธํธ์
๋๋ค.
ํ์คํฌ๊ฐ ๋๋ ๋๋ง๋ค ์ ์ฅํ์ผ๋ฏ๋ก ๋ง๊ฐ์ ์งํ์ ์ฒดํฌํฌ์ธํธ ๋จ์๋ก ๋ณผ ์ ์์ต๋๋ค.
์ ์ ๋ฐฉ๋ฒ MAR (ฮป = 1, 2, 3) ๊ณผ Experience Replay ๊ธฐ์ค์ ์ ๊ฐ์ ์กฐ๊ฑด(๊ฐ์ ์ถ๋ฐ์ ยท๊ฐ์ seedยท๊ฐ์ ๋ฐ์ดํฐ ๋ถํ )์์ ๋น๊ตํฉ๋๋ค. kimtaegyu/TETHER ์ ๊ฐ์ ๊ตฌ์กฐ์ด๊ณ , ๊ทธ ์ ์ฅ์์ ๋ค๋ฅธ ์ ์ ๋งจ ์๋์ ์ ์์ต๋๋ค.
| ๋๋ ํฐ๋ฆฌ | ๋ฐฉ๋ฒ | ์์ค | ๊ณผ๊ฑฐ ๋ณด์กด ๋ฐฉ์ |
|---|---|---|---|
er/ |
Experience Replay (๊ธฐ์ค์ ) | L_FM(ํ์ฌ 24 + ๋ฆฌํ๋ ์ด 8) ํ ๋ฐฐ์น |
๊ณผ๊ฑฐ ํ์คํฌ๋น 5 ์ํผ์๋๋ฅผ ๋ฒํผ์ ์ ์ง |
mar_lam1/ |
MAR, ฮป = 1 | L_FM(ํ์ฌ) + ฮป ยท ฮฃ_j L_j |
๊ณผ๊ฑฐ ํ์คํฌ์ (state, ์๊ฐํน์ง) ์ฝ๋๋ถ์์ ํฉ์ฑ ์ํ์ ๋ง๋ค์ด teacher ์ ์ก์ ๊ณต๊ฐ์์ ๋ง์ถค |
mar_lam2/ |
MAR, ฮป = 2 | ์์ ๊ฐ์ | ์์ ๊ฐ์ |
mar_lam3/ |
MAR, ฮป = 3 | ์์ ๊ฐ์ | ์์ ๊ฐ์ |
MAR ์ ์ต์ปค ์์ค (๊ณผ๊ฑฐ ํ์คํฌ j ๋ง๋ค, N = ๊ณผ๊ฑฐ ํ์คํฌ ์):
โp_S โ p_Tโยฒ = (r_S โ r_T)ยฒ + 2ยทr_Sยทr_Tยท(1 โ cos) = m + e
L_j = (1/N)ยทmean(m) + (1/N)ยทฮฒยทmean( e / (r_Tยฒ + c) ) c = 0.1, ฮฒ = 1
์๋๋ฅผ ํฌ๊ธฐ(m)์ ๋ฐฉํฅ(e)์ผ๋ก ์ชผ๊ฐ๊ณ , ๋ฐฉํฅ ํญ์ teacher ํฌ๊ธฐ์ ์ญ์ ๊ณฑ์ ๊ณฑํด ๋๋ฆฐ ๊ตฌ๊ฐ(์ ๋ฐ ์กฐ์)์ ๋ฐฉํฅ์ด ๊ฐ๋
์ ๋ฐ๊ฒ ํฉ๋๋ค.
๊ณ์๊ฐ (0, 1/c] ๋ก ์ ๊ณ๋ผ ๋ฐฐ์น ํต๊ณ ๊ธฐ๋ฐ ํด๋ฆฌํ์ด ํ์ ์์ต๋๋ค. ์์ธํ ์์ policy_code/L2_V5.py ์ policy_code/cl_train.py ์ ๋จธ๋ฆฌ ์ฃผ์์ ์์ต๋๋ค.
์ด๋ฆ์ ๋ํ์ฌ: ์ฝ๋ยท
task_info.json์๋ ๊ฐ๋ฐ ๋น์ ๋ด๋ถ ์ด๋ฆv5๊ฐ ๋จ์ ์์ต๋๋ค."method": "v5"๊ฐ MAR ์ ๋๋ค.task_info.json์"method_name"์ ๊ฐ์ด ์ ์ด ๋์์ต๋๋ค.
๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ
<run>/
task_0/ config.json model.safetensors task_info.json <- ํ์คํฌ 0 ๊น์ง ๋ฐฐ์ด ๋ชจ๋ธ
task_1/ ... <- ํ์คํฌ 0,1 ๊น์ง
task_2/ ...
task_3/ ... <- 4 ํ์คํฌ๋ฅผ ๋ชจ๋ ๋ฐฐ์ด ์ต์ข
๋ชจ๋ธ
train_config.json ํ์ต์ ์ค์ ๋ก ์ด ์ธ์ ์ ๋ถ
holdout_report.txt hold-out MSE ํ (์๋ ๊ฒฐ๊ณผ์ ๊ฐ์ ๊ฒ)
holdout_mse.csv / .json
summary.json ํ์คํฌ ์์ยทstepยท์์ ์๊ฐ
diag.jsonl 200 step ๋ง๋ค ์์คยท์ต์ปค ๋ด๋ถ๊ฐ
policy_code/ ์ ์ฑ
ยทํ์ต ์ฝ๋ (์๋ "๋ก๋" ์ฐธ๊ณ )
task_info.json ์:
{"task_index": 1, "task_dir": "pick_a_block_and_drop_on_the_box_2",
"instructions": ["pick a block and drop on the box"], "steps_done": 10000,
"method": "v5", "method_name": "MAR"}
ํ์คํฌ ์์์ ์ง์๋ฌธ
| k | ๋ฐ์ดํฐ์
(asdl-unist/โฆ) |
์ง์๋ฌธ (๊ทธ๋๋ก ์ ๋ ฅ) | ์ํผ์๋ | ํ๋ ์ |
|---|---|---|---|---|
| 0 | put_the_ring_on_the_stick |
Put the ring on the stick. |
50 | 7,767 |
| 1 | pick_a_block_and_drop_on_the_box_2 |
pick a block and drop on the box |
50 | 10,464 |
| 2 | new_aicp_carrot |
Pick up the carrot and put it in the basket. |
50 | 14,137 |
| 3 | stack_cup |
Pick up the left paper cup and stack it onto the right paper cup. |
50 | 12,397 |
ํ์คํฌ๋ง๋ค ๋ค์ชฝ 5 ์ํผ์๋๋ ํ์ต์์ ์ ์ธํ๊ณ hold-out ํ๊ฐ์๋ง ์ผ์ต๋๋ค (ํ์ต 45 / hold-out 5).
ํ์ต ์ค์ (๋ค ๋ฐ ๊ณตํต)
| ๊ฐ | |
|---|---|
| ์ถ๋ฐ์ | svla_so100_pretrained_clare (SO-100 3 ํ์คํฌ joint ์ฌ์ ํ์ต) โ ๊ฐ์ค์น๋ง ์ฝ๊ณ ์ ๊ทํ ๋ฒํผ๋ ASDL ํต๊ณ ์ฌ์ฉ |
| ํ์คํฌ๋น step | 10,000 (์ด 40,000), ์ฝ์ฌ์ธ ์ค์ผ์ค์ ํ์คํฌ๋ง๋ค ์๋ก ์์ |
| ๋ฐฐ์น / seed | 32 / 42 |
| ์ ๊ทํ | 4 ํ์คํฌ pooled min/max โ ๋ค ๋ฐ์ ์ ๊ทํ ๋ฒํผ๊ฐ ๋์ผ |
| ์ตํฐ๋ง์ด์ | AdamW (lerobot ๊ธฐ๋ณธ) |
| ER | ํ์ฌ 24 + ๋ฆฌํ๋ ์ด 8 ์ ํ ๋ฐฐ์น๋ก ์ด์ด ๋ถ์ฌ ์์ค ํ๋ (--er_replay_bs 8, LIBERO scripts/er.py ์ ๊ฐ์ ๋ฐฉ์). ๋ฒํผ = ๊ณผ๊ฑฐ ํ์คํฌ๋น ์์ชฝ 5 ์ํผ์๋ |
| MAR | --anchor_c 0.1 --beta 1.0 --dir_space act --anchor_reduce mean --pose_dims 5 --speed_mode diff, ์ฝ๋๋ถ K = max(8, 2 ร ๋ฐ๋ชจ ์) |
์ค์ ์ธ์๋ ๊ฐ ํด๋์ train_config.json ์ ์ ๋ถ ๋ค์ด ์์ต๋๋ค.
๊ฒฐ๊ณผ โ hold-out action MSE (๋ฎ์์๋ก ์ข์)
์ ๊ทํ ๊ณต๊ฐ์์ ์คํ ๊ตฌ๊ฐ 8 ์คํ (๋ก๋ด์ด ์ค์ ๋ก ๋ด๋ณด๋ด๋ ์ก์ )์ MSE, ํ์คํฌ๋น 256 ์ฐฝ. ๋กค์์ ์ฑ๊ณต๋ฅ ์ด ์๋๋๋ค.
์ต์ข
(4 ํ์คํฌ๋ฅผ ๋ชจ๋ ๋ฐฐ์ด ๋ค, task_3/ ์ฒดํฌํฌ์ธํธ)
| ํ์คํฌ | ER | MAR ฮป=1 | MAR ฮป=2 | MAR ฮป=3 |
|---|---|---|---|---|
| t0 ring | 0.00843 | 0.01066 | 0.01068 | 0.01096 |
| t1 box | 0.01418 | 0.01360 | 0.01400 | 0.01438 |
| t2 carrot | 0.01562 | 0.01256 | 0.01239 | 0.01272 |
| t3 stack_cup | 0.01162 | 0.01042 | 0.01039 | 0.01064 |
| ํ๊ท | 0.01246 | 0.01181 | 0.01187 | 0.01218 |
๋ง๊ฐ (์ต์ข โ ๋ฐฐ์ด ์งํ, ์์ = ์คํ๋ ค ๊ฐ์ )
| ํ์คํฌ | ER | MAR ฮป=1 | MAR ฮป=2 | MAR ฮป=3 |
|---|---|---|---|---|
| t0 ring | โ0.00116 | +0.00106 | +0.00109 | +0.00137 |
| t1 box | โ0.00049 | โ0.00150 | โ0.00144 | โ0.00182 |
| t2 carrot | +0.00197 | โ0.00058 | โ0.00055 | โ0.00035 |
| ํ๊ท | +0.00008 | โ0.00025 | โ0.00023 | โ0.00020 |
์ ์ฒด ํ๋ ฌ (ํ = ํ์คํฌ k ๊น์ง ๋ฐฐ์ด ๋ค, ์ด = ํ๊ฐ ํ์คํฌ)
ER MAR ฮป=1
after t0 t1 t2 t3 after t0 t1 t2 t3
0 0.00959 0 0.00959
1 0.00886 0.01466 1 0.01098 0.01510
2 0.00851 0.01302 0.01365 2 0.00928 0.01382 0.01313
3 0.00843 0.01418 0.01562 0.01162 3 0.01066 0.01360 0.01256 0.01042
MAR ฮป=2 MAR ฮป=3
0 0.00959 0 0.00959
1 0.01035 0.01544 1 0.01021 0.01620
2 0.00886 0.01396 0.01294 2 0.00981 0.01391 0.01306
3 0.01068 0.01400 0.01239 0.01039 3 0.01096 0.01438 0.01272 0.01064
์ฝ์ ๋
- t0 ์ "์งํ" ๊ฐ(0.00959)์ด ๋ค ๋ฐ์์ ์ ํํ ๊ฐ์ต๋๋ค. ์ฒซ ํ์คํฌ์๋ ๊ณผ๊ฑฐ๊ฐ ์์ด ๋ฆฌํ๋ ์ด๋ ์ต์ปค๋ ๊ฑธ๋ฆฌ์ง ์์ผ๋ฏ๋ก ๊ฐ์์ผ ์ ์์ด๊ณ , ๋ค ๋ฐ์ด ๊ฐ์ ์ถ๋ฐ์ ยทseed ๋ฅผ ์ผ๋ค๋ ํ์ธ์ ๋๋ค.
- ER ์ t0 ๋ฅผ ๊ฐ์ฅ ์ ์งํค์ง๋ง t2(carrot)๋ฅผ ๊ฐ์ฅ ๋ง์ด ์๊ณ (+0.00197), MAR ์ t2ยทt3 ๊ฐ ์ข๊ณ t0 ๋ฅผ ์กฐ๊ธ ์์ต๋๋ค. ์ต์ข ํ๊ท ์ MAR ฮป=1 ์ด ๊ฐ์ฅ ๋ฎ์ต๋๋ค.
- seed 1 ๊ฐ, ํ์คํฌ ์์ 1 ๊ฐ์ ๋๋ค. ๋ฐ ๊ฐ ์ฐจ์ด(์ต๋ 0.0007)๊ฐ seed ๋ณ๋๋ณด๋ค ํฐ์ง๋ ์ด ๋ค ๋ฐ๋ง์ผ๋ก ์ ์ ์์ต๋๋ค.
- ํ๋ ์์ธก ์ค์ฐจ์ด์ง ์ฑ๊ณต๋ฅ ์ด ์๋๋๋ค. ์ค๋ก๋ด ๋กค์์๊ณผ ํจ๊ป ์ฝ์ด์ผ ํฉ๋๋ค.
๋ก๋
config.json ์ "type": "ditflow_mt" ๋ ์
์คํธ๋ฆผ lerobot ์ ์๋ ์ปค์คํ
์ ์ฑ
์ด๋ผ lerobot ํฌํฌ(lerobot_lsy) ๊ฐ ํ์ํฉ๋๋ค.
policy_code/ ์ modeling_dit_flow_mt.pyยทconfiguration_dit_flow_mt.py ๊ฐ ๊ทธ ์ ์ฑ
์์ค์ด์ง๋ง lerobot ์ฝ์ด์ ์์กดํ๋ฏ๋ก ๋จ๋
์ผ๋ก๋ ๋์ํ์ง ์์ต๋๋ค.
import sys; sys.path.insert(0, "<์ด ์ ์ฅ์๋ฅผ ๋ฐ์ ๊ฒฝ๋ก>/policy_code")
from asdl_data import AsdlMeta
from lerobot.configs.policies import PreTrainedConfig
from lerobot.policies.factory import make_policy
path = "<์ด ์ ์ฅ์๋ฅผ ๋ฐ์ ๊ฒฝ๋ก>/mar_lam1/task_3" # 4 ํ์คํฌ๋ฅผ ๋ชจ๋ ๋ฐฐ์ด MAR (ฮป=1)
cfg = PreTrainedConfig.from_pretrained(path)
cfg.pretrained_path = path
cfg.device = "cuda"
policy = make_policy(cfg=cfg, ds_meta=AsdlMeta("<ASDL ๋ฐ์ดํฐ์
ํ๋์ ๊ฒฝ๋ก>"))
policy.eval()
- ์ ๊ทํ ํต๊ณ๋ ์ฒดํฌํฌ์ธํธ ์์ ๋ค์ด ์์ด(๋ฒํผ 10 ๊ฐ) ๋ก๋ ์ ๋ฎ์ด์๋๋ค.
ds_meta๋ feature ํ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ง ํ์ํฉ๋๋ค. - ๋ฐ์ดํฐ์
์ LeRobot v3.0 ์ด๋ผ ํฌํฌ์
LeRobotDatasetMetadata(v2.1) ๋ก๋ ๋ชป ์ฝ๊ณ ,policy_code/asdl_data.py์AsdlMeta๋ฅผ ์จ์ผ ํฉ๋๋ค.
์ ์ฒ๋ฆฌ ๊ท์ฝ (์ด๊ธ๋๋ฉด ์กฐ์ฉํ ์ฑ๋ฅ์ด ๋จ์ด์ง๋๋ค)
| ๊ท์ฝ | |
|---|---|
| ์ด๋ฏธ์ง | observation.images.top, observation.images.wrist ๋ ์นด๋ฉ๋ผ, 480ร640 โ 256ร256 ์ข
ํก๋น ๋ฌด์ ๋ฆฌ์ฌ์ด์ฆ, [0,1] float. ๊ด์ธก 2 ํ๋ ์(tโ1, t) |
| state | ๊ด์ ์ ๋ ์์น 6 ์ฐจ์ ๋ ๊ฒ (์ ๊ทํ๋ ์ ์ฑ ๋ด๋ถ) |
| action | 6 ์ฐจ์, ์ฒญํฌ 16, ์คํ ๊ตฌ๊ฐ = ์์ธก index 1..8 (index 0 ์ tโ1) |
| ์ธ์ด | task_info.json ์ ์ง์๋ฌธ ๋ฌธ์์ด ๊ทธ๋๋ก (CLIP ํ
์คํธ ์ธ์ฝ๋, ๋๊ฒฐ) |
| fps | 30 |
policy_code/asdl_data.py ๊ฐ ํ์ต ๋ ์ด ๋ณํ ๊ทธ ์์ฒด์ด๋ฏ๋ก, ์ถ๋ก ์ ์ฒ๋ฆฌ๋ ์ด ํ์ผ์ ๊ธฐ์ค์ผ๋ก ๋ง์ถ๋ฉด ๋ฉ๋๋ค.
policy_code/
| ํ์ผ | ์ญํ |
|---|---|
cl_train.py |
์ด ์ฒดํฌํฌ์ธํธ๋ค์ ๋ง๋ ํ์ต ๋๋ผ์ด๋ฒ (ER / MAR). --er_replay_bs ํฌํจ |
L2_V5.py |
MAR ์ต์ปค ์์ค (speedinv_coef, ํฌ๊ธฐยท๋ฐฉํฅ ๋ถํด) |
L2_V4.py |
์ฝ๋๋ถ ์์ฑยท์ํ๋ฌยทteacher ๋ฑ ์ต์ปค ๊ณตํต ๋ถ๋ถ (cl_train.py ๊ฐ import) |
asdl_data.py |
v3.0 ๋ฐ์ดํฐ ๋ก๋ + AsdlMeta + ํ๋ ์ ์บ์ |
modeling_dit_flow_mt.py, configuration_dit_flow_mt.py |
์ ์ฑ
๋ณธ์ฒดยท์ค์ (ํฌํฌ lerobot_lsy ์ ๊ฒ) |
์ฌํ (ํ๋ ์ ์บ์๋ฅผ ๋จผ์ ๋ง๋ ๋ค):
T=put_the_ring_on_the_stick,pick_a_block_and_drop_on_the_box_2,new_aicp_carrot,stack_cup
python asdl_data.py --tasks $T
python cl_train.py --method er --er_replay_bs 8 --tasks $T --init_from <svla_so100_pretrained_clare> --norm_stats pooled --seed 42 --out results/er
python cl_train.py --method v5 --anchor_c 0.1 --beta 1.0 --dir_space act --anchor_reduce mean --lambda_level 1.0 \
--pose_dims 5 --speed_mode diff --tasks $T --init_from <svla_so100_pretrained_clare> --norm_stats pooled --seed 42 --out results/mar_lam1
kimtaegyu/TETHER ์ ๋ค๋ฅธ ์
| kimtaegyu/TETHER | ์ด ์ ์ฅ์ | |
|---|---|---|
| ํ์คํฌ 2 | block_on_the_box |
pick_a_block_and_drop_on_the_box_2 (์ฌ์์ง ๋ฐ์ดํฐ) |
| ์ ์ ๋ฐฉ๋ฒ | TETHER (v4, ์๋ ๊ณต๊ฐ ์ต์ปค + speedinv ๊ฐ์ค) |
MAR (v5, ์ก์
๊ณต๊ฐ, ํฌ๊ธฐยท๋ฐฉํฅ ๋ถํด, ฮฒ=1 c=0.1), ฮป 1/2/3 |
| ER ๋ฐฐ์น | ํ์ฌ 32 + ๋ฆฌํ๋ ์ด 32 ๋ฅผ ๋ฐ๋ก forward | ํ์ฌ 24 + ๋ฆฌํ๋ ์ด 8 ํ ๋ฐฐ์น (LIBERO ER ๊ณผ ๋์ผ) |
| ์ถ๋ฐ์ ยท์ ๊ทํยท๋ถํ | *_pre ๋ฐ๊ณผ ๊ฐ์ (์ฌ์ ํ์ต ์ถ๋ฐ, pooled) |
๊ฐ์ |
์๋ ค์ง ํ๊ณ
- ๋๋ฆฌ ์งํ์ ๋๋ค. hold-out MSE ๋ ์ฑ๊ณต๋ฅ ์ ๋์ ํ์ง ๋ชปํฉ๋๋ค.
- seed 1 ๊ฐ์ ๋๋ค. ๋ค ๋ฐ ์ฌ์ด์ ์ฐจ์ด๋ฅผ ํต๊ณ์ ์ผ๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
- ํ์คํฌ 4 ๊ฐ, ์์ 1 ๊ฐ๋ฟ์ ๋๋ค.
- pooled ์ ๊ทํ๋ ๋ฏธ๋ ํ์คํฌ์ min/max ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๋ ์ ์ ๋๋ค(๊ฐ์ ํ์ต์ ์ ์ฐ์ด๊ณ ์ถ์ฒ๋ง ์ ํฉ๋๋ค). ๋ค ๋ฐ์ ๋๊ฐ์ด ์ ์ฉ๋์ต๋๋ค.
๋ฐ์ดํฐ
๋ค ๋ฐ์ดํฐ์
๋ชจ๋ asdl-unist ์ LeRobot v3.0 ํ์(parquet + mp4)์
๋๋ค. 50 ์ํผ์๋์ฉ, 30 fps, ์นด๋ฉ๋ผ 2 ๋, ๊ด์ 6 ์ถ.