Instructions to use kimtaegyu/TETHER with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use kimtaegyu/TETHER with LeRobot:
- Notebooks
- Google Colab
- Kaggle
- TETHER โ SO-100 ์ค๋ก๋ด 4ํ์คํฌ Continual Learning (DiT-Flow MT, vs. Experience Replay)
- โ ๏ธ ์ด๋๋ก๋ stock lerobot ์ผ๋ก ๋ก๋๋์ง ์์ต๋๋ค
- ๋ก๋
- โ ์ ์ฒ๋ฆฌ ๊ท์ฝ โ ์ด๊ธ๋๋ฉด ์กฐ์ฉํ ์ฑ๋ฅ์ด ๋จ์ด์ง๋๋ค
- ํ์คํฌ ์์์ ์ง์๋ฌธ
- ํ์ต ์ค์
- ๊ฒฐ๊ณผ (hold-out action MSE, ๋ฎ์์๋ก ์ข์)
- clare ๋ณธ ์คํ(LIBERO / LOTUS)์์ ๋ฐ๊พผ ๊ฒ
- ์๋ ค์ง ํ๊ณ
- ๋ฐ์ดํฐ
TETHER โ SO-100 ์ค๋ก๋ด 4ํ์คํฌ Continual Learning (DiT-Flow MT, vs. Experience Replay)
SO-100/SO-101 ํ(so_follower)์ 4๊ฐ ์กฐ์ ํ์คํฌ๋ฅผ ์์ฐจ๋ก ํ์ตํ ์ฒดํฌํฌ์ธํธ์
๋๋ค.
ํ์คํฌ๊ฐ ๋๋ ๋๋ง๋ค ์ ์ฅํ์ผ๋ฏ๋ก, ๋ง๊ฐ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง๋ฅผ ์ฒดํฌํฌ์ธํธ ๋จ์๋ก ๋ณผ ์ ์์ต๋๋ค.
์ ์ ๋ฐฉ๋ฒ TETHER ์ Experience Replay ๊ธฐ์ค์ ์ ์์ ํ ๊ฐ์ ์กฐ๊ฑด์์ ๋น๊ตํฉ๋๋ค.
| ๋ฐฉ๋ฒ | ๋๋ ํฐ๋ฆฌ | ์์ค | ๊ณผ๊ฑฐ ๋ณด์กด ๋ฐฉ์ |
|---|---|---|---|
| Experience Replay (๊ธฐ์ค์ ) | er/ |
L_FM(ํ์ฌ) + L_FM(๋ฆฌํ๋ ์ด) |
๊ณผ๊ฑฐ ํ์คํฌ๋น 5 ์ํผ์๋๋ฅผ ๋ฒํผ์ ์ ์ง |
| TETHER (์ ์) | v4/ |
L_FM(ํ์ฌ) + ฮป_aยทฮป_lvlยทL_anchor |
๊ณผ๊ฑฐ ํ์คํฌ์ (state, ์๊ฐํน์ง) ์ฝ๋๋ถ์์ ํฉ์ฑ ์ํ์ ๋ง๋ค์ด teacher ์๋์ฅ์ ๋ง์ถค |
| TETHER + ๊ทธ๋ฆฌํผ ์ ์ธ | v4_grip5/ |
์์ ๊ฐ์ | ์์ ๊ฐ์. --pose_dims 5 ๋ง ๋ค๋ฆ |
| TETHER + ์ฐจ๋ถยท๊ทธ๋ฆฌํผ ์ ์ธ | v4_diff5/ |
์์ ๊ฐ์ | ์์ ๊ฐ์. --pose_dims 5 --speed_mode diff |
๋ค์ ๋ ๋ฐ์ ์๋ "์๋ ค์ง ํ๊ณ 1" ์์ ์ง์ ํ ๋ฒ๊ทธ๋ฅผ ์ค์ ๋ก ๊ณ ์ณ ๋ค์ ๋๋ฆฐ ๊ฒ์ ๋๋ค. ์ต์ข ํ๊ท ๊ณผ ๋ง๊ฐ ๋ชจ๋์์ ๊ฐ์ฅ ์ข์ ๊ฒ์
v4_diff5/์ ๋๋ค โ "ablation" ์ ์ ๋ณด์ธ์.
์ด๋ฆ์ ๋ํ์ฌ: TETHER ๋ ์ด ๋ฐฉ๋ฒ๋ก ์ ์ด๋ฆ์ด๊ณ , ์ฝ๋ยทํ์ผ๋ช ์๋ ๊ฐ๋ฐ ๋น์์ ๋ด๋ถ ์ด๋ฆ์ธ
v4(=L2_codebook๊ณ์ด 4์ฐจ ๋ฒ์ )๊ฐ ๋จ์ ์์ต๋๋ค. ์ ์ฅ์์v4/๋๋ ํฐ๋ฆฌ,task_info.json์"method": "v4",policy_code/L2_V4.py,--sampler_mode/--anchor_weightํ๋๊ทธ๊ฐ ๋ชจ๋ TETHER ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ฒดํฌํฌ์ธํธ์์ ๋์กฐ๋ฅผ ์ํด ๊ทธ๋๋ก ๋์์ต๋๋ค.
ฮป_a = 1.0, ฮป_lvl = 3.0 โ ์ต์ปค์ ์คํจ ๊ณ์๋ 3.0์
๋๋ค. ์ต์ปค๋ ๊ณผ๊ฑฐ ํ์คํฌ๋ง๋ค ์ฆ์
backward ํ๋ฏ๋ก ๊ทธ๋๋์ธํธ๋ ๊ณผ๊ฑฐ์ ๋ํ ํฉ์
๋๋ค(ํ๊ท ์ด ์๋๋๋ค).
๋จผ์ ์ฝ์ด์ผ ํ ๊ฒ: ์ด ์คํ์ ์๋ LIBERO ์ค์ ์์ ๊ฐ๋ฐ๋ ๋ฐฉ๋ฒ์ ์ค๋ก๋ด์ผ๋ก ์ฎ๊ธด ๊ฒ์ด๊ณ , ์ฎ๊ธฐ๋ ๊ณผ์ ์์ ์๋์น ์๊ฒ ์๋ฏธ๊ฐ ๋ฐ๋ ๋ถ๋ถ์ด ์์ต๋๋ค. ์๋ "clare ๋ณธ ์คํ(LIBERO / LOTUS)์์ ๋ฐ๊พผ ๊ฒ" ์ ๊ณผ "์๋ ค์ง ํ๊ณ 1" ์ ๊ฒฐ๊ณผ ํ๋ณด๋ค ๋จผ์ ์ฝ์ด ์ฃผ์ธ์.
โ ๏ธ ์ด๋๋ก๋ stock lerobot ์ผ๋ก ๋ก๋๋์ง ์์ต๋๋ค
config.json ์ "type": "ditflow_mt" ๋ ์
์คํธ๋ฆผ lerobot ์ ์๋ ์ปค์คํ
์ ์ฑ
์
๋๋ค.
์ด ์ฒดํฌํฌ์ธํธ๋ lerobot ํฌํฌ(lerobot_lsy)์ DiTFlowMTPolicy ๋ฅผ ์ ์ ํฉ๋๋ค.
from lerobot.policies.factory import make_policy # stock lerobot
# ValueError: Policy type 'ditflow_mt' is not available.
ํด๊ฒฐ: ํฌํฌ๋ฅผ ์ค์นํ์ธ์. ์ฐธ๊ณ ์ฉ์ผ๋ก policy_code/ ์ ์์ค๋ฅผ ํจ๊ป ๋ฃ์ด ๋์์ง๋ง,
PreTrainedPolicy, Normalize/Unnormalize, AdamConfig ๋ฑ lerobot ์ฝ์ด์ ์์กดํ๋ฏ๋ก
๋จ๋
์ผ๋ก๋ ๋์ํ์ง ์์ต๋๋ค.
git clone <ํฌํฌ ์ ์ฅ์>
pip install -e <ํฌํฌ ๊ฒฝ๋ก>
policy_code/ ์ ๋ค์ด ์๋ ๊ฒ
| ํ์ผ | ์ญํ |
|---|---|
modeling_dit_flow_mt.py |
์ ์ฑ
๋ณธ์ฒด (DiTFlowMTPolicy, DiTFlowModel) |
configuration_dit_flow_mt.py |
ditflow_mt ์ค์ ํด๋์ค |
asdl_data.py |
v3.0 ๋ฐ์ดํฐ ๋ก๋ + AsdlMeta โ ์๋ ๋ก๋ ์ ์์ ํ์ํฉ๋๋ค |
cl_train.py |
์ด ์ฒดํฌํฌ์ธํธ๋ค์ ๋ง๋ ํ์ต ๋๋ผ์ด๋ฒ |
L2_V4.py |
TETHER ์๊ณ ๋ฆฌ์ฆ (์ฝ๋๋ถยท์ต์ปคยท์๋ ๊ฐ์ค). cl_train.py ๊ฐ import ํฉ๋๋ค |
policy_code/ ์ L2_V4.py ยท cl_train.py ๋ ablation ๋ฐ๊น์ง ๋ฐ์ํ ๋ฒ์ ์
๋๋ค.
--pose_dims ์ --speed_mode ์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ ์์(6, abs)๋ผ, ์ด ์ฝ๋ ํ๋๋ก
๋ค ๋ฐ์ ๋ชจ๋ ์ฌํํ ์ ์์ต๋๋ค โ v4/ ๋ ํ๋๊ทธ ์์ด, v4_grip5/ ๋ --pose_dims 5,
v4_diff5/ ๋ --pose_dims 5 --speed_mode diff ์
๋๋ค. ๊ฐ ํด๋์ train_config.json
์ ์ค์ ๋ก ์ด ์ธ์๊ฐ ์ ๋ถ ๋ค์ด ์์ต๋๋ค.
โ ๏ธ modeling_dit_flow_mt.py ์ ์ฃผ์์ LIBERO ๊ธฐ์ค์ผ๋ก ์ฐ์ฌ ์์ต๋๋ค(์ํ 8์ฐจ์,
์ก์
7์ฐจ์, 1์คํ
0.05์ด). ์ด ์ฒดํฌํฌ์ธํธ๋ ์ํ 6 / ์ก์
6 / 1์คํ
1/30์ด์
๋๋ค.
์ฝ๋๋ ์ค์ ์์ ์ฐจ์์ ์ฝ์ผ๋ฏ๋ก ๋์์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง, ์ฃผ์์ ์ซ์๋ฅผ ๊ทธ๋๋ก ๋ฏฟ์ผ๋ฉด ์ ๋ฉ๋๋ค.
๋ก๋
import sys; sys.path.insert(0, "<์ด ์ ์ฅ์๋ฅผ ๋ฐ์ ๊ฒฝ๋ก>/policy_code")
from asdl_data import AsdlMeta # policy_code/asdl_data.py
from lerobot.configs.policies import PreTrainedConfig
from lerobot.policies.factory import make_policy
path = "<์ด ์ ์ฅ์๋ฅผ ๋ฐ์ ๊ฒฝ๋ก>/v4_diff5/task_3" # 4๊ฐ ํ์คํฌ๋ฅผ ๋ชจ๋ ๋ฐฐ์ด TETHER (๊ฐ์ค ์์ ๋ณธ)
# ์๋ณธ ๋ฐ์ ์ฐ๋ ค๋ฉด ".../v4/task_3" โ ๋ ํด๋๋ ๊ตฌ์กฐ๊ฐ ๊ฐ๋ค
cfg = PreTrainedConfig.from_pretrained(path)
cfg.pretrained_path = path
cfg.device = "cuda" # config.json ์ "cuda" ๊ฐ ๋ฐํ ์์ต๋๋ค
policy = make_policy(cfg=cfg, ds_meta=AsdlMeta("<ASDL ๋ฐ์ดํฐ์
ํ๋์ ๊ฒฝ๋ก>"))
policy.eval()
ds_meta ๋ feature ํ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ง ํ์ํฉ๋๋ค. ์ ๊ทํ ํต๊ณ๋ ์ฒดํฌํฌ์ธํธ ์์
๋ค์ด ์์ด ๋ก๋ ์ ๋ฎ์ด์๋๋ค(์ ๊ทํ ๋ฒํผ ํ
์ 10๊ฐ = normalize_inputs 6๊ฐ
[์ด๋ฏธ์ง mean/std ร2 ์นด๋ฉ๋ผ, ์ํ min/max] + normalize_targets 2๊ฐ + unnormalize_outputs
2๊ฐ). ๋ฐ๋ผ์ ํต๊ณ ๋ชฉ์ ์ผ๋ก ํ์ต ๋ฐ์ดํฐ์
์ด ํ์ํ์ง๋ ์์ต๋๋ค.
โ ๏ธ ํฌํฌ์ LeRobotDataset ์ v2.1 ์ ์ฉ์ธ๋ฐ(CODEBASE_VERSION = "v2.1") ์ด ๋ฐ์ดํฐ์
๋ค์
v3.0 ์
๋๋ค. ๊ทธ๋์ LeRobotDatasetMetadata ๋ก๋ ๋ฉํ๋ฅผ ๋ง๋ค ์ ์๊ณ , ์์ฒ๋ผ
policy_code/asdl_data.py ์ AsdlMeta ๋ฅผ ์จ์ผ ํฉ๋๋ค. ๋ค๋ฅธ v2.1 ๋ฐ์ดํฐ์
์ผ๋ก ๋์ ํ๋ ค๋ฉด
์ํยท์ก์
์ด ๋ชจ๋ 6์ฐจ์์ด์ด์ผ feature ํ๊ฐ ๋ง์ต๋๋ค.
๊ฐ์ค์น๋ ์๊ธฐ์๊ฒฐ์ ์ ๋๋ค โ ๋๊ฒฐ ๋ฐฑ๋ณธ์ธ DINOv2(86.6M)์ CLIP ํ ์คํธ(63.2M)๋ safetensors ์์ ๋ค์ด ์์ต๋๋ค(ํ ์ 593๊ฐ, 193.6M ํ๋ผ๋ฏธํฐ). ํ์ผ์ด 774 MB ์ธ ์ด์ ์ ๋๋ค.
โ ๏ธ ๋ค๋ง ๋ชจ๋์ ๋ง๋๋ ์์ ์๋ ๋ ๋ ํฌ๊ฐ ํ์ํฉ๋๋ค. ์ ์ฑ
__init__ ์ด
CLIPTokenizer.from_pretrained("openai/clip-vit-base-patch32"),
CLIPTextModel.from_pretrained(...), AutoModel.from_pretrained("facebook/dinov2-base") ๋ฅผ
ํธ์ถํ ๋ค ๊ทธ ์์ ์ฒดํฌํฌ์ธํธ ๊ฐ์ค์น๋ฅผ ๋ฎ์ด์ฐ๋ ๊ตฌ์กฐ์
๋๋ค. ํนํ ํ ํฌ๋์ด์ ๋ ์ฒดํฌํฌ์ธํธ์
์์ ์์ต๋๋ค. ์ฆ ์ฒซ ๋ก๋์๋ ๋คํธ์ํฌ(๋๋ ์ฑ์์ง HF_HUB_CACHE)๊ฐ ํ์ํ๊ณ , ํ ๋ฒ
์บ์๋๋ฉด ์ดํ์๋ HF_HUB_OFFLINE=1 ๋ก ๋ ์ ์์ต๋๋ค. "๊ฐ์ค์น๋ฅผ ์ ๋ฐ์๋ ๋๋ค"๋ ๋ป์ด์ง
"๋ ๋ ํฌ๊ฐ ํ์ ์๋ค"๋ ๋ป์ด ์๋๋๋ค.
โ ์ ์ฒ๋ฆฌ ๊ท์ฝ โ ์ด๊ธ๋๋ฉด ์กฐ์ฉํ ์ฑ๋ฅ์ด ๋จ์ด์ง๋๋ค
ํ์ต ๋์ ์ ํํ ๊ฐ์ ์ ์ฒ๋ฆฌ๋ฅผ ์ถ๋ก ์์๋ ํด์ผ ํฉ๋๋ค.
์ด๋ฏธ์ง
์๋ณธ 480ร640 โ 256ร256. ํ์ต ํ์ดํ๋ผ์ธ์ด ํ ๊ทธ๋๋ก๋ฅผ ์ฎ๊ธฐ๋ฉด ์ด๋ ์ต๋๋ค
(asdl_data.py:187-190):
t = torch.from_numpy(im).permute(2, 0, 1)[None].float() / 255.0 # uint8 RGB -> [0,1]
t = F.interpolate(t, size=(256, 256), mode="bilinear",
align_corners=False).clamp(0, 1) # antialias ๊ธฐ๋ณธ๊ฐ False
frame = (t[0].permute(1, 2, 0) * 255).round().to(torch.uint8) # uint8 ๋ก ์์ํํด ์บ์
...
img = frame.permute(0, 3, 1, 2).float() / 255.0 # ๋ก๋ ์ ๋ค์ [0,1]
์ฌ๊ธฐ์ ํ๋ฆฌ๊ธฐ ์ฌ์ด ์ธ ๊ฐ์ง:
- ์ข ํก๋น๋ฅผ ๋ง์ถ์ง ์์ต๋๋ค. letterbox ๋ crop ๋ ์๋๊ณ 480ร640 ์ ๊ทธ๋ฅ ์ ์ฌ๊ฐ์ผ๋ก ์ฐ๊ทธ๋ฌ๋จ๋ฆฝ๋๋ค. (LIBERO ํ์ดํ๋ผ์ธ์ 256 ์ ์ฌ๊ฐ์ DINOv2 ์ฐ์ฐ๋์ ๋ง์ถ๋ ค๊ณ ์ด๋ ๊ฒ ํ์ต๋๋ค)
antialias=False์ ๋๋ค.F.interpolate์ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. ๋ค์ด์ํ๋ง์ธ๋ฐ๋ ์ํฐ์์ผ๋ฆฌ์ด์ฑ์ ๋ ์ํ๋ผ,torchvision.transforms.Resize(๊ธฐ๋ณธantialias=True), PIL,cv2.INTER_LINEAR๋ ๋ชจ๋ ๋ค๋ฅธ ํฝ์ ์ ๋ ๋๋ค. ์ถ๋ก ์ฝ๋๋ฅผ ์๋ก ์ฐ๋ฉด ๊ฑฐ์ ํ์คํ ์ฌ๊ธฐ์ ์ด๊ธ๋ฉ๋๋ค.- uint8 ๋ก ํ ๋ฒ ์์ํ๋ฉ๋๋ค. ๋ฆฌ์ฌ์ด์ฆ๋ float ์์ ํ๊ณ
round()ํ uint8 ๋ก ์บ์ํ ๋ค ๋ค์/255ํฉ๋๋ค. ์ ํํ ์ฌํํ๋ ค๋ฉด ์ด ์๋ณต๊น์ง ๋ฐ๋ผ์ผ ํฉ๋๋ค.
๊ฐ์ [0,1] float ๋ก ๋ฃ์ต๋๋ค. ImageNet mean/std ์ ๊ทํ๋ ์ ์ฑ
๋ด๋ถ(normalize_inputs)๊ฐ ํฉ๋๋ค.
์นด๋ฉ๋ผ ํค๋ ๋ ๊ฐ: observation.images.top, observation.images.wrist.
๊ด์ธก / ํ๋
observation.state (B, 2, 6) # [t-1, t] ๋ ํ๋ ์
action (B, 16, 6) # ํ์ต ์. ์ถ๋ก ์ generate_actions ๊ฐ 8๊ฐ๋ฅผ ๋๋ ค์ค
6์ฐจ์์ ๊ด์ ์ ๋ ๋ชฉํ ์์น์ ๋๋ค (delta ๊ฐ ์๋๋๋ค):
[shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos]
๊ทธ๋ฆฌํผ๋ ๊ด์ ์
๋๋ค. ๋ณ๋์ ๊ฐํ ์ฑ๋์ ์๊ณ , index 5 ์ ์ ๋ ์์น๊ฐ ๊ทธ๋๋ก ์ง๊ฒ
๋ฒ์ด์ง์
๋๋ค. ๋ฐ์ดํฐ์์ ๋ซํ์ด โ0~3, ์ด๋ฆผ์ด โ41~54(ํ์คํฌ๋ณ ์ต๋๊ฐ)์ด๊ณ ๋ถํฌ๋
์ด๋ดํ์
๋๋ค (carrot ๊ธฐ์ค 68% ๊ฐ 10 ๋ฏธ๋ง, 5% ๊ฐ 40 ์ด๊ณผ, ๋๋จธ์ง๊ฐ ์ ์ด ๊ตฌ๊ฐ).
์ฅ๋ ํ์ ์์น ๋ช
๋ น์ด ์๋๋ผ
์๋ณด์ ํ ํฌ ๋ฆฌ๋ฐ์ด ๋ง๋ญ๋๋ค โ ๋ฌผ์ฒด์ ๋งํ ๋ชฉํ์ ๋ชป ๊ฐ๋ฉด์ ํ์ง๋ ฅ์ด ๊ฑธ๋ฆฌ๊ณ , ๊ทธ๋์ ๋ฐ์ดํฐ์
mean |action โ state| ๊ฐ ๊ทธ๋ฆฌํผ์์ 4.09 ๋ก ํฝ๋๋ค.
ํ๋ ์ฒญํฌ ์ฌ๋ผ์ด์ฑ
predict_action_chunk ๋ 16์คํ
์ ๋ง๋ ๋ค [n_obs_steps-1 : n_obs_steps-1+n_action_steps]
= index 1..8 ์ ๋๋ ค์ค๋๋ค. index 0 ์ t-1(์ด๋ฏธ ์ง๋ ์์ )์ด๋ฏ๋ก ๋ฒ๋ ค์ผ ํฉ๋๋ค.
[0:8] ์ ์ฐ๋ฉด ๋ก๋ด์ด ํ ์คํ
(1/30์ด) ๋ค์ฒ์ง๋๋ค.
30 fps ์์ 8์คํ
์ 0.27์ด ๋ถ๋์
๋๋ค. num_inference_steps = 100 ์ด๋ฏ๋ก ์ฒญํฌ ํ๋๋น
velocity_net ์ 100๋ฒ ์ ๋ถํฉ๋๋ค โ ์ค์๊ฐ์ผ๋ก ๋๋ฆฌ๋ ค๋ฉด ์ด ๋น์ฉ์ด 0.27์ด ์์ ๋ค์ด๊ฐ๋์ง
ํ๋์จ์ด์์ ๋จผ์ ํ์ธํ์ธ์. (config.json ์ ๊ณ ์ณ ์ค์ผ ์ ์์ง๋ง ํ์ต ์กฐ๊ฑด๊ณผ ๋ฌ๋ผ์ง๋๋ค)
์ธ์ด ์กฐ๊ฑด
batch["task"] ์ ์ง์๋ฌธ ๋ฌธ์์ด์ด ๋ฐ๋์ ๋ค์ด๊ฐ์ผ ํฉ๋๋ค. ์ ์ฑ
์ด CLIP ์ผ๋ก ์ธ์ฝ๋ฉํด
์กฐ๊ฑด ๋ฒกํฐ์ ์ 512์ฐจ์์ ๋ฃ์ต๋๋ค. ์๋ ํ์คํฌ ํ์ ๋ฌธ์์ด์ ๊ทธ๋๋ก ์ฐ์ธ์.
ํ์คํฌ ์์์ ์ง์๋ฌธ
ํ์ต ์์๋๋ก์
๋๋ค. task_k ์ฒดํฌํฌ์ธํธ๋ ํ์คํฌ 0..k ๋ฅผ ์์ฐจ๋ก ๋ฐฐ์ด ๋ชจ๋ธ์
๋๋ค.
| k | ๋ฐ์ดํฐ์ | ์ง์๋ฌธ |
|---|---|---|
| 0 | asdl-unist/new_aicp_carrot |
Pick up the carrot and put it in the basket. |
| 1 | asdl-unist/cup_bowl_match |
Place the blue cup into the blue bowl. / Place the green cup into the green bowl. |
| 2 | asdl-unist/stack_cup |
Pick up the left paper cup and stack it onto the right paper cup. |
| 3 | asdl-unist/paprika |
Pick up the pot, pour the paprika inside into the basket, then place the pot down onto the plate. |
task_1 ์ ๋ฐ์ดํฐ์
ํ๋์ ์ง์๋ฌธ์ด 2๊ฐ์
๋๋ค(ํ๋/์ด๋ก). ์ธ์ด ์กฐ๊ฑด์ผ๋ก ๊ตฌ๋ถ๋๋ฉฐ, TETHER ๋
์ง์๋ฌธ๋ง๋ค ์ฝ๋๋ถ์ ๋ฐ๋ก ๋ง๋ญ๋๋ค(ํฉ์น๋ฉด "green ์ฅ๋ฉด + blue ์ง์๋ฌธ" ๊ฐ์ ์กฐํฉ์ด ์ต์ปค์์
์ํ๋ง๋ฉ๋๋ค).
er/task_0 ๊ณผ v4/task_0 ์ ๋ฐ์ดํธ ๋จ์๋ก ๋์ผํ ํ์ผ์
๋๋ค (md5 77ac6add03e33d69bf78e7ee91556351).
ํ์คํฌ 0 ์์๋ ๊ณผ๊ฑฐ๊ฐ ์์ด ๋ฆฌํ๋ ์ด๋ ์ต์ปค๋ ์๋ํ์ง ์๊ณ , ๊ฐ์ ์๋ยท๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ธฐ
๋๋ฌธ์
๋๋ค. ๊ฒ์ฆ ์ ํ ๋ฒ๋ง ์ฌ๋ฉด ๋ฉ๋๋ค.
ํ์ต ์ค์
- from scratch (์ฌ์ ํ์ต ์ฒดํฌํฌ์ธํธ ์์). DINOv2/CLIP ์ ๋๊ฒฐ ์ฌ์ ํ์ต์ด๋ผ ์ค์ ํ์ต ๋์์ 43.87M ํ๋ผ๋ฏธํฐ(velocity_net + ํฌ์)๋ฟ์ ๋๋ค
- ํ์คํฌ๋น 10,000 step, batch 32, AdamW lr 1e-4 ์ฝ์ฌ์ธ(ํ์คํฌ๋ง๋ค ๋ฆฌ์ ), warmup 500
- ํ์คํฌ๋น 50 ์ํผ์๋ ์ค ๋ค์ชฝ 5 ์ํผ์๋(45~49)๋ฅผ ํ์ต์์ ์ ์ธ โ 45 ํ์ต / 5 hold-out
- ER ๋ฒํผ๋ ๊ณผ๊ฑฐ ํ์คํฌ์ ์์ชฝ 5 ์ํผ์๋(0~4) โ ํ์ต ์คํ๋ฆฟ ์์ด๋ผ hold-out ๋์๋ ์์ต๋๋ค. ๋ฆฌํ๋ ์ด ๋ฐฐ์น๋ 32
cond_dim = 2572= ์ธ์ด 512 + (์ํ 6 + ์ด๋ฏธ์ง 512ร2) ร 2ํ๋ ์- seed 42, ๋ ๋ฐฉ๋ฒ ๋์ผ
- TETHER (
v4/):sampler_mode=hard_linear,anchor_weight=speedinv,kappa=1.0,w_clip=20.0,lambda_level=3.0, ์ฝ๋๋ถK = max(8, 2 ร demo)(45 demo โ K=90, ์ง์๋ฌธ์ด 2๊ฐ์ธ t1 ์ ์ง์๋ฌธ๋น ~22 demo โ Kโ45) - hold-out ํ๊ฐ: ํ์คํฌ๋น ๋ฌด์์ ์ฐฝ 256๊ฐ, ์ฐฝ ์ถ์ถ ์๋ 42
๊ฒฐ๊ณผ (hold-out action MSE, ๋ฎ์์๋ก ์ข์)
๋ก๋ด์ด ์ค์ ๋ก ์คํํ๋ 8์คํ ์ ์ ๊ทํ ๊ณต๊ฐ MSE ์ ๋๋ค. ๋กค์์์ด ์๋๋ผ ๋๋ฆฌ ์งํ์ด๋ฉฐ, ์ฑ๊ณต๋ฅ ์ ๋์ ํ์ง ๋ชปํฉ๋๋ค.
์ ์ฒด ํ๋ ฌ (ํ = ํ์คํฌ k ๊น์ง ๋ฐฐ์ด ๋ค, ์ด = ํ๊ฐ ํ์คํฌ)
er/holdout_mse.csv, v4/holdout_mse.csv ์ ๊ฐ์ ๊ฐ์
๋๋ค.
ER
| after | t0 carrot | t1 cup_bowl | t2 stack_cup | t3 paprika |
|---|---|---|---|---|
| 0 | 0.022227 | |||
| 1 | 0.023385 | 0.015514 | ||
| 2 | 0.024157 | 0.017834 | 0.011285 | |
| 3 | 0.021806 | 0.018340 | 0.015437 | 0.018610 |
TETHER
| after | t0 carrot | t1 cup_bowl | t2 stack_cup | t3 paprika |
|---|---|---|---|---|
| 0 | 0.022227 | |||
| 1 | 0.019451 | 0.016878 | ||
| 2 | 0.016782 | 0.014036 | 0.011839 | |
| 3 | 0.016018 | 0.012713 | 0.011902 | 0.017463 |
์ต์ข (4๊ฐ ํ์คํฌ๋ฅผ ๋ชจ๋ ๋ฐฐ์ด ๋ค)
| t0 | t1 | t2 | t3 | ํ๊ท | |
|---|---|---|---|---|---|
| ER | 0.02181 | 0.01834 | 0.01544 | 0.01861 | 0.01855 |
| TETHER | 0.01602 | 0.01271 | 0.01190 | 0.01746 | 0.01452 |
๋ง๊ฐ (๋ฐฐ์ด ์งํ ๋๋น ์ฆ๊ฐ๋ถ, ์์ = ๊ฐ์ )
t3 ๋ ๋ง์ง๋ง ํ์คํฌ๋ผ ์ ์์ 0 ์ ๋๋ค. ํ๊ท ์ ์ด 0 ์ ํฌํจํ 4ํ์คํฌ ํ๊ท ์ด๊ณ , 3ํ์คํฌ ํ๊ท ๋ ๊ฐ์ด ์ ์์ต๋๋ค โ ์ด๋ ์ชฝ์ผ๋ก ์ฝ์ด๋ ๋ถํธ๋ ๋ฐ๋์ง ์์ง๋ง ํฌ๊ธฐ๊ฐ ๋ค๋ฆ ๋๋ค.
| t0 | t1 | t2 | t3 | ํ๊ท (4๊ฐ) | ํ๊ท (t0~t2) | |
|---|---|---|---|---|---|---|
| ER | โ0.00042 | +0.00283 | +0.00415 | 0 | +0.00164 | +0.00219 |
| TETHER | โ0.00621 | โ0.00416 | +0.00006 | 0 | โ0.00258 | โ0.00343 |
์ต๋ ์ฑ๋ฅ (๋๊ฐ์ ) โ ์ฌ๊ธฐ์๋ ER ์ด ์ฐ์ธํฉ๋๋ค
| ๋๊ฐ์ | ER | TETHER | |
|---|---|---|---|
| t0 | 0.02223 | 0.02223 | ๋์ผ ํ์ผ |
| t1 | 0.01551 | 0.01688 | ER 8.8% ์ฐ์ธ |
| t2 | 0.01129 | 0.01184 | ER 4.9% ์ฐ์ธ |
| t3 | 0.01861 | 0.01746 | TETHER 6.2% ์ฐ์ธ |
์ ํ์คํฌ๋ฅผ ๋ฐฐ์ฐ๋ ๋ฅ๋ ฅ์ ER ์ด t1ยทt2 ์์ ์์๊ณ t3 ์์๋ง TETHER ๊ฐ ์์ญ๋๋ค. ์ฆ TETHER ์ ์ต์ข ์ฐ์๋ "์ ํ์คํฌ๋ฅผ ๋ ์ ๋ฐฐ์์"๊ฐ ์๋๋ผ "๊ณผ๊ฑฐ๋ฅผ ์ ์งํ๋ฉด์ ๋ฐฐ์์" ์๊ธด ๊ฒ์ ๋๋ค.
ablation โ POSE_DIMS ๋ฅผ ๊ณ ์น๋ฉด (2026-09-14 ์ถ๊ฐ)
ํ๊ณ 1 ์์ ์ง์ ํ ๋ ๋ฌธ์ ๋ฅผ ๊ฐ๊ฐ ๊ณ ์ณ ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ๋ค์ ๋๋ ธ์ต๋๋ค(์๋ 42, ํ์คํฌ๋น
10,000 step, ๋๋จธ์ง ํ์ดํผํ๋ผ๋ฏธํฐ ์ ๋ถ ๋์ผ). v4_grip5/ ๋ ์ฐจ์๋ง ๊ณ ์ณค๊ณ
(--pose_dims 5), v4_diff5/ ๋ ์ฐจ์๊ณผ ์๋ฏธ๋ฅผ ๋ชจ๋ ๊ณ ์ณค์ต๋๋ค
(--pose_dims 5 --speed_mode diff).
| ์ต์ข MSE | t0 | t1 | t2 | t3 | ํ๊ท | ๋ง๊ฐ ํ๊ท |
|---|---|---|---|---|---|---|
| ER | 0.02181 | 0.01834 | 0.01544 | 0.01861 | 0.01855 | +0.00164 |
TETHER (v4/) |
0.01602 | 0.01271 | 0.01190 | 0.01746 | 0.01452 | โ0.00258 |
+ ๊ทธ๋ฆฌํผ ์ ์ธ (v4_grip5/) |
0.01596 | 0.01261 | 0.01227 | 0.01812 | 0.01474 | โ0.00242 |
+ ์ฐจ๋ถยท๊ทธ๋ฆฌํผ ์ ์ธ (v4_diff5/) |
0.01519 | 0.01218 | 0.01227 | 0.01767 | 0.01433 | โ0.00285 |
v4_diff5 ๊ฐ ์ต์ข
ํ๊ท ๊ณผ ๋ง๊ฐ ๋ชจ๋์์ ๊ฐ์ฅ ์ข์ต๋๋ค. ์ด๋์ด ์ ๋ถ ๊ณผ๊ฑฐ ํ์คํฌ์ ๋ชฐ๋ ค
์๊ณ (t0 โ5.2%, t1 โ4.2%) ๋ค์ชฝ ํ์คํฌ๋ ์คํ๋ ค ์ํด๋ฅผ ๋ด
๋๋ค(t2 +3.1%, t3 +1.2%). ๊ฐ์ค์ด
์ ๋๋ก ๊ฑธ๋ฆฌ๋ฉด์ ์ต์ปค๊ฐ ์ธ์ง๊ณ ๊ทธ๋งํผ ์ ํ์คํฌ ํ์ต์ด ๋๋ฆฐ, ์ ํ์ ์ธ ์์ ์ฑ-๊ฐ์์ฑ
ํธ๋ ์ด๋์คํ์
๋๋ค.
v4_grip5 ๋ ์๋ณธ๋ณด๋ค ์คํ๋ ค ๋๋นด์ต๋๋ค(+1.5%). ๊ทธ๋ฆฌํผ๋ง ๋นผ์๋ rho ๊ฐ ์ฌ์ ํ ๊ด์
์ ๋ ์์น๋ผ ์๋ ์๋ฏธ๊ฐ ๋์์ค์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค(ํ๊ณ 1 ์ ์ค์ธกํ). ์ฐจ์ ์์ ๋ง์ผ๋ก๋
ํด๊ฒฐ๋์ง ์๋๋ค๋ ๊ฒ์ ํ์ต ๊ฒฐ๊ณผ๋ก๋ ๋ณด์ฌ์ค๋๋ค.
โ ๏ธ ์๋ ํ๋์ง๋ฆฌ์
๋๋ค. ์ธ ๋ฐ์ด ๊ฐ์ ์๋๋ผ ์ฐจ์ด์ ์์ธ์ด ์ฝ๋ ๋ณ๊ฒฝ์ธ ๊ฒ์ ๋ง์ง๋ง,
์๋ ๊ฐ ๋ถ์ฐ์ ๋ชจ๋ฅด๋ฏ๋ก ํ๊ท ์์(ํนํ v4_grip5 ์ +1.5%)๋ ๋ค์งํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด
v4_diff5 ์ "๊ณผ๊ฑฐ ๊ฐ์ / ํ์ฌ ์
ํ" ํจํด์ t1ยทt2ยทt3 ๋ชจ๋ ์์ ์์ ์ผ๊ด๋๊ณ ํ๊ณ 1 ์
๊ฐ์ค ๋ถํฌ ์ธก์ ๊ณผ๋ ๋ง์๋จ์ด์ง๋ฏ๋ก, ํ๊ท ๊ฐ๋ณด๋ค ์ ๋ขฐํ ๋งํฉ๋๋ค.
๋ค ๋ฐ์ task_0 ์ ๋ชจ๋ ๋ฐ์ดํธ ๋จ์๋ก ๋์ผํฉ๋๋ค
(md5 77ac6add03e33d69bf78e7ee91556351). ํ์คํฌ 0 ์์๋ ๋ฆฌํ๋ ์ด๋ ์ต์ปค๋ ์๋ํ์ง
์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ฐ ํด๋์ holdout_mse.csv, holdout_report.txt, train_config.json(์ค์ ๋ก ์ด ์ธ์
์ ์ฒด)์ ๊ฐ์ด ๋ฃ์ด ๋์์ต๋๋ค.
clare ๋ณธ ์คํ(LIBERO / LOTUS)์์ ๋ฐ๊พผ ๊ฒ
์ด run ์ L2_V4.py ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ทธ๋๋ก ์ฐ๋ฉด์ ๋ฐ์ดํฐ์ ๋๋ผ์ด๋ฒ๋ง ์ค๋ก๋ด์ผ๋ก ๋ฐ๊พผ ๊ฒ์
๋๋ค.
๋ฐ๊พผ ๊ฒ๊ณผ ๋ฐ๊พธ์ง ์์์ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง ๊ฒ์ ๋๋ ์ ์ ์ต๋๋ค.
์๋์ ์ผ๋ก ๋ฐ๊พผ ๊ฒ
| clare ๋ณธ ์คํ (LIBERO / LOTUS) | ์ด ์ค๋ก๋ด run | |
|---|---|---|
| ์ก์ | 7์ฐจ์ EEF delta + ๊ทธ๋ฆฌํผ | 6์ฐจ์ ๊ด์ ์ ๋ ์์น (๊ทธ๋ฆฌํผ ํฌํจ) |
| ์ํ | 8์ฐจ์ | 6์ฐจ์ |
cond_dim |
2576 | 2572 |
| ์ ์ด ์ฃผ๊ธฐ | 20 fps (1์คํ 0.05s) | 30 fps (1์คํ 0.033s), ์ฒญํฌ 8์คํ = 0.27s |
| ์ฌ์ ํ์ต | LOTUS base phase | ์์ (from scratch) |
| ํ์คํฌ ์ | 10 | 4 |
| ๋ฐ์ดํฐ ํฌ๋งท | LeRobot v2.1 | v3.0 + ์ปค์คํ
๋ก๋ (asdl_data.py) |
| ํ๊ฐ | ์๋ฎฌ๋ ์ดํฐ ๋กค์์ ์ฑ๊ณต๋ฅ | hold-out action MSE (๋๋ฆฌ ์งํ, ๋กค์์ ๋ถ๊ฐ) |
| seed | 1000 | 42 |
| ๋๋ผ์ด๋ฒ | L2_V4.py (LIBERO) |
cl_train.py (์ค๋ก๋ด) |
๋ฐ๊พธ์ง ์์์ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง ๊ฒ โ ์ค์
L2_V4.py:482 ์ POSE_DIMS = 6 ์ ๊ทธ๋๋ก ๋์ต๋๋ค. LIBERO ์ก์
๊ท์ฝ
([x,y,z,roll,pitch,yaw,gripper] โ 0..5 pose, 6 gripper)์ ์ ์ ํ ์์์
๋๋ค.
์ด ๋ฐ์ดํฐ๋ 6์ฐจ์์ด๊ณ ๊ทธ๋ฆฌํผ๊ฐ index 5 ๋ผ์, [..., :POSE_DIMS] ๊ฐ 6์ฐจ์ ์ ์ฒด๋ฅผ ๋ฎ์ต๋๋ค.
๊ฒฐ๊ณผ๋ ์๋ ํ๊ณ 1์ ์์ธํ ์ ์์ต๋๋ค. ER ์ ์ต์ปค๋ฅผ ์ฐ์ง ์์ผ๋ฏ๋ก ์ํฅ์ด ์์ต๋๋ค.
์๋ ค์ง ํ๊ณ
1. speedinv ๊ฐ์ค์ด ์ด ๋ฐ์ดํฐ์์ ์๋ ์๋ฏธ๋ฅผ ์์์ต๋๋ค (TETHER ๋ง ํด๋น)
TETHER ์ ๋ ๋ณ๊ฒฝ ์ค ํ๋์ธ ์๋ ์ญ์ ๊ณฑ ๊ฐ์ค์ speed_weights(L2_V4.py:508)๊ฐ ๊ณ์ฐํฉ๋๋ค.
rho = (v_ref + eps_noise)[..., :POSE_DIMS].norm(dim=-1) # "pose ์ฑ๋ถ์ ์คํ
์๋"
w = 1.0 / (rho.pow(2) + c) # c = kappa x speed_med2
w = torch.minimum(w, w.median() * w_clip) # ์๋ก๋ง ์๋ฅธ๋ค
w = w / w.mean() # ๋ฐฐ์น ํ๊ท 1
v_ref + eps_noise ๋ de-noised ํ๋ ์์ด๋ผ rho โ โรข[..., :POSE_DIMS]โ โ de-noised ์ก์
๋ฒกํฐ์ ํฌ๊ธฐ์
๋๋ค. LIBERO ์์๋ รข ๊ฐ EEF delta ๋ผ ์ด ๊ฐ์ด ์ ์์ ์คํ
๋ณ์, ์ฆ ์ง์ง
"์๋"์
๋๋ค. ์ด ๋ฐ์ดํฐ์ รข ๋ ๊ด์ ์ ๋ ์์น๋ผ์ rho ๋ "๊ด์ ๋ฒ์ ์ค์ฌ์ผ๋ก๋ถํฐ์
๊ฑฐ๋ฆฌ"๊ฐ ๋๊ณ , ์๋์๋ ๋ค๋ฅธ ์์
๋๋ค.
4ํ์คํฌ ์ ์ฒด์์ ์ ๊ทํ ๊ณต๊ฐ์ผ๋ก ์ค์ธกํ ๊ฒฐ๊ณผ์
๋๋ค (kappa=1, w_clip=20):
| ํ์คํฌ | rho ์ค์๊ฐ |
c |
wฬ p10 |
wฬ p90 |
w_clip ๋ฐ๋ |
corr(rho, ์ค์ ์คํ
์๋) |
rhoยฒ ์ค ๊ทธ๋ฆฌํผ ๋น์ค |
|---|---|---|---|---|---|---|---|
| new_aicp_carrot | 1.324 | 1.754 | 0.73 | 1.30 | 0.0% | โ0.464 | 28% |
| cup_bowl_match | 1.305 | 1.704 | 0.71 | 1.44 | 0.0% | โ0.368 | 28% |
| stack_cup | 1.259 | 1.585 | 0.73 | 1.35 | 0.0% | โ0.425 | 29% |
| paprika | 1.329 | 1.766 | 0.75 | 1.27 | 0.0% | โ0.401 | 33% |
์ฝ๋ ๋ฒ:
- ์๊ด์ด ์์์
๋๋ค (โ0.37 ~ โ0.46).
rho๊ฐ ์์ ๋๊ฐ ์คํ๋ ค ๋น ๋ฅธ ๊ตฌ๊ฐ์ ๋๋ค.w = 1/(rhoยฒ+c)๋rho๊ฐ ์์ ๊ณณ์ ํฐ ๊ฐ์ค์ ์ฃผ๋ฏ๋ก, ์ค๊ณ ์๋("๋๋ฆฐยท์ ๋ฐ ๊ตฌ๊ฐ์ ๊ฐ์กฐ")์ ๋ฐ๋๋ก ๋น ๋ฅธ ๊ตฌ๊ฐ์ ๊ฐ์กฐํ์ต๋๋ค. - ๋ค๋ง ๊ฐ๋๋ ์ฝํฉ๋๋ค.
wฬ์ p10โp90 ์ด 0.73โ1.30, ์ฆ ยฑ30% ์์ค์ ์ฌ๊ฐ์ค์ด๊ณw_clip์ ํ ๋ฒ๋ ๋ฐ๋ํ์ง ์์์ต๋๋ค(0.0%).mean(wฬ)=1๋ก ์ ๊ทํ๋๋ฏ๋ก ์ ์ฒด ์์ค ์ค์ผ์ผ์ ๋ฌด๊ฐ์ค MSE ์ ๊ฐ์ต๋๋ค. - ๊ทธ๋ฆฌํผ๋ ๊ฐ์ค์ ๋ค์ด๊ฐ์ต๋๋ค.
POSE_DIMS=6์ด 6์ฐจ์ ์ ์ฒด๋ฅผ ๋ฎ์ด ๊ทธ๋ฆฌํผ(index 5)๊ฐrhoยฒ์ ์ฝ 30% ๋ฅผ ์ฐจ์งํฉ๋๋ค. ๋ค์ผ๋กweighted_sq์ ๋ฌด๊ฐ์ค ํญresid[..., POSE_DIMS:]๋ ๋น ์ฌ๋ผ์ด์ค๊ฐ ๋์ด ์ ํํ 0 ์ ๋๋ค โ ์๋ ์ค๊ณ๋ ๊ทธ๋ฆฌํผ๋ฅผ ๋ฌด๊ฐ์ค์ผ๋ก ๋ฐ๋ก ๋ํ๋ ๊ฒ์ด์์ต๋๋ค.
ํด์์ ๋ฌด์์ด ๋ฌ๋ผ์ง๋๊ฐ: ์ ๊ฒฐ๊ณผ์์ TETHER ๊ฐ ER ์ ์ด๊ธด ๊ฒ์ "์๋ ๊ฐ์ค์ ํจ๊ณผ"๋ก
์ฝ์ผ๋ฉด ์ ๋ฉ๋๋ค. ๊ฐ์ค์ด ์ฝํ๊ณ (ยฑ30%) ๋ฐฉํฅ๋ ์๋์ ๋ฐ๋์ด๋ฏ๋ก, ๋จ๋ ์ ํจ ์์๋
์ฝ๋๋ถ ์ต์ปค ์์ฒด์ hard_linear ์ํ๋ฌ์
๋๋ค.
๊ณ ์ณ์ ์ค์ธกํ์ต๋๋ค (2026-09-14 ์ถ๊ฐ. 4ํ์คํฌ ํ๊ท , ํ์ต ์คํ๋ฆฟ ์ ์ฒด, ์ ๊ทํ ๊ณต๊ฐ):
rho ์ ์ |
w p10 |
w p90 |
์คํจ ๋ฒ์ | w_clip ๋ฐ๋ |
corr(rho, ์ค์ ์คํ
์๋) |
|---|---|---|---|---|---|
โa[0:6]โ โ ์ด ์ ์ฅ์์ v4/ |
0.73 | 1.33 | 1.8๋ฐฐ | 0.0% | โ0.438 |
โa[0:5]โ โ v4_grip5/ |
0.69 | 1.42 | 2.1๋ฐฐ | 0.0% | โ0.431 |
โฮa[0:5]โ โ v4_diff5/ |
0.14 | 1.84 | 13๋ฐฐ | 0.0% | 1.000 |
- ๊ทธ๋ฆฌํผ๋ฅผ ๋นผ๋ ์๊ด์ ์์ ๊ทธ๋๋ก์
๋๋ค (โ0.438 โ โ0.431).
POSE_DIMS๋ฅผ 5 ๋ก ๊ณ ์น๋ ๊ฒ์ ์ ๋ ๋ฒ์งธ ํญ๋ชฉ(์ฐจ์)๋ง ๊ณ ์น ๋ฟ,rho๊ฐ ์ ๋ ์์น๋ผ๋ ์๋ฏธ ๋ฌธ์ ๋ ๊ฑด๋๋ฆฌ์ง ๋ชปํฉ๋๋ค. ๊ฐ์ค ํญ๋ 1.8๋ฐฐ โ 2.1๋ฐฐ๋ก ์ฌ์ค์ ๊ทธ๋๋ก์ ๋๋ค. - ์ฐจ๋ถ์ผ๋ก ๋ฐ๊พธ๋ฉด ๊ฐ์ค์ด ๋น๋ก์ ์ค์ ๋ก ์๋ํฉ๋๋ค. ์คํจ ๋ฒ์๊ฐ 1.8๋ฐฐ์์ 13๋ฐฐ๋ก
๋ฒ์ด์ง๋๋ค.
corr = 1.000์rho๋ฅผ ์คํ ์๋๋ก ์ ์ํ์ผ๋ฏ๋ก ๋์ด๋ฐ๋ณต์ด๋ฉฐ, ์ฆ๊ฑฐ๊ฐ ๋๋ ๊ฒ์ ์๊ด๊ฐ์ด ์๋๋ผ ๋ถํฌ๊ฐ ๋ฒ์ด์ก๋ค๋ ์ฌ์ค์ ๋๋ค. w_clip = 20.0์ ๋ค ์ค์ ์ ๋ถ์์ ๋ฐ๋๋ฅ 0.0% ์ ๋๋ค. ์ฐจ๋ถ์ผ๋ก ๋ถํฌ๊ฐ 13๋ฐฐ๋ก ๋ฒ์ด์ง ๋ค์๋ ๊ทธ๋ ์ต๋๋ค. ์ฌ์ค์ ์ฃฝ์ ํ์ดํผํ๋ผ๋ฏธํฐ์ด๋, ํ๋ ๋์์์ ๋นผ๊ฑฐ๋ ํจ์ฌ ๋ฎ์ถฐ์ผ ์๋ฏธ๊ฐ ์๊น๋๋ค.
๊ณ ์น ๋ฐ์ ์ฑ๋ฅ์ ์ "ablation" ์ ์ ์์ต๋๋ค. ์์ฝํ๋ฉด ์ฐจ๋ถ๊น์ง ๊ณ ์น v4_diff5/ ๊ฐ
์ต์ข
ํ๊ท (0.01433)๊ณผ ๋ง๊ฐ(โ0.00285) ๋ชจ๋์์ ๊ฐ์ฅ ์ข๊ณ , ๊ทธ๋ฆฌํผ๋ง ๋บ v4_grip5/ ๋
์๋ณธ๋ณด๋ค ๋๋นด์ต๋๋ค(0.01474). ๋ค๋ง --anchor_weight mse ๋์กฐ๊ตฐ์ด ์์ด ์ต์ปคยท์ํ๋ฌยท๊ฐ์ค
์
์ ์์ ํ ๋ถ๋ฆฌํ์ง๋ ๋ชปํฉ๋๋ค(ํ๊ณ 4).
๋ค์ง์ด ๋ณด๋ฉด, ์ค๊ณ ์๋์ ์ด๊ธ๋ ๊ฐ์ค์ ์๊ณ ๋ TETHER ๊ฐ ๋ง๊ฐ์์ ER ์ ์์ฐ์ต๋๋ค.
2. ๋๋ฆฌ ์งํ์ ๋๋ค
hold-out action MSE 22% ๊ฐ์ ์ด ์ค๋ก๋ด ์ฑ๊ณต๋ฅ ์์ ์ผ๋ง๋ ๋ํ๋ ์ง๋ ๋ณ๊ฐ์ด๋ฉฐ, ๋ค์งํ ์๋ ์์ต๋๋ค. ๋กค์์์ ๋๋ฆฌ์ง ์์์ต๋๋ค.
3. ํ์คํฌ 4๊ฐ๋ CL ์ํ์ค๋ก ์งง์ต๋๋ค
๋ง๊ฐ์ด ๋ณธ๊ฒฉ์ ์ผ๋ก ๋๋ฌ๋๊ธฐ ์ ๊ตฌ๊ฐ์ผ ์ ์์ต๋๋ค.
4. ๊ธฐ์ค์ ๊ณผ ablation ์ด ๋ถ์กฑํฉ๋๋ค
- seq-FT ๊ธฐ์ค์ ์์: ์๋ฌด ๋์ฑ ์๋ ์์ฐจ ํ์ต๊ณผ ๋น๊ตํ์ง ์์์ผ๋ฏ๋ก, ๋ ๋ฐฉ๋ฒ์ด "์ผ๋ง๋" ๋์์ด ๋๋์ง๋ ์ ์ ์์ต๋๋ค.
- ๊ฐ์ค ablation ์ ์ถ๊ฐํ์ต๋๋ค โ
v4_grip5/,v4_diff5/(์ "ablation" ์ ). ๋ค๋ง--anchor_weight mse(๊ฐ์ค์ ์์ ์ ๊ฑฐ)์--sampler_mode soft_kernel(v3 ์ํ๋ฌ) ๋์กฐ๊ตฐ์ ์ฌ์ ํ ์์ด, TETHER ์ ์ด๋์ด ์ต์ปคยท์ํ๋ฌยท๊ฐ์ค ์ค ๋ฌด์์์ ์๋์ง ์์ ํ ๋ถ๋ฆฌํ์ง๋ ๋ชปํฉ๋๋ค. - ์๋๊ฐ ํ๋์ ๋๋ค: ablation ์ 1~2% ์ฐจ์ด๋ฅผ ์์น๋ก ์ฃผ์ฅํ๋ ค๋ฉด ์๋๋ฅผ ๋ ๋๋ ค์ผ ํฉ๋๋ค. ์ง๊ธ ์ ๋ขฐํ ์ ์๋ ๊ฒ์ ์ฐจ์ด์ ํฌ๊ธฐ๊ฐ ์๋๋ผ ๋ฐฉํฅ(ํจํด)์ ๋๋ค.
๋ฐ์ดํฐ
asdl-unist/new_aicp_carrot, cup_bowl_match, stack_cup, paprika
(LeRobot v3.0 ํฌ๋งท, ๊ฐ 50 ์ํผ์๋, 30 fps, 480ร640 ์นด๋ฉ๋ผ 2๋)
| ํ์คํฌ | ์ํผ์๋ | ํ๋ ์ |
|---|---|---|
| new_aicp_carrot | 50 | 14,137 |
| cup_bowl_match | 50 | 11,112 |
| stack_cup | 50 | 12,660 |
| paprika | 50 | 18,825 |