YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
real_franka_ATQ
์ค๊ธฐ Franka teleop ๋ฐ์ดํฐ๋ก ํ์ตํ ATQ label-gated MoE ์ฒดํฌํฌ์ธํธ ๋ชจ์์ ๋๋ค.
๊ณตํต ๊ตฌ์กฐ: GR00T-N1.5-3B finetune ยท ATQ label-gated MoE (moe_speed 2.0, expert 4๊ฐ,
ํ 16/8/8/4) ยท conf ๋ผ๋ฒจ์ prehj/humandata-conf-labels-v3 ์ conf_vlm (VLM ํ๋จ๋ง,
์ ์ด ์ด ์์) ยท --action-merge-reduction last (franka action 8์ฐจ์์ด ์ ๋ถ ์ ๋๊ฐ์ด๋ผ ํ์).
ํด๋
| ํด๋ | task | step | future token | PE ๊ท์ฝ | ์์ ๋์ฝ๋ |
|---|---|---|---|---|---|
long_horizon |
long_horizon_task | 60k | ์์ | โ | โ ๋ฒ๊ทธ ํ (์๋) |
long_horizon_future_token |
long_horizon_task | 60k | 32๊ฐ | (a) action only | โ ๋ฒ๊ทธ ํ |
long_horizon_future_moss_20k |
long_horizon_task | 20k | 32๊ฐ | (b) MoSS | โ ๋ฒ๊ทธ ํ |
long_horizon_future_moss_40k |
long_horizon_task | 40k | 32๊ฐ | (b) MoSS | โ ๋ฒ๊ทธ ํ |
long_horizon_future_moss_60k |
long_horizon_task | 60k | 32๊ฐ | (b) MoSS | โ ๋ฒ๊ทธ ํ |
pnp |
pnp_task | 60k | ์์ | โ | โ ๋ฒ๊ทธ ํ (100% ์ฒซ ์ฅ๋ฉด) |
pnp_20k |
pnp_task | 20k | ์์ | โ | โ ๋ฒ๊ทธ ํ (100% ์ฒซ ์ฅ๋ฉด) |
stack_cup |
franka_stack_cup | 60k | ์์ | โ | โ ๋ฒ๊ทธ ํ |
stack_20k |
franka_stack_cup | 20k | ์์ | โ | โ ๋ฒ๊ทธ ํ |
air_frier_20k |
franka_air_frier | 20k | ์์ | โ | โ ๋ฒ๊ทธ ํ (97.5% ์ฒซ ์ฅ๋ฉด) |
air_frier_30k |
franka_air_frier | 30k | ์์ | โ | โ ๋ฒ๊ทธ ํ (97.5% ์ฒซ ์ฅ๋ฉด) |
air_frier_vfix_30k |
franka_air_frier | 30k | 32๊ฐ (์์ N1.5 ๊ฐ์ค์น๋ก init) | (b) MoSS | ์ ์ โ 2026-09-24 |
air_frier_vfix_20k |
franka_air_frier | 20k (๊ฐ์ ํ์ต์ checkpoint-20000) | 32๊ฐ | (b) MoSS | ์ ์ |
air_frier_* ๋ ๋ผ๋ฒจ์ด ๋ค๋ฆ
๋๋ค โ prehj/franka-airfryer-conf-labels-v3w ์ conf_vlm
(human_data v3 ๋ฌธํญ ๊ทธ๋๋ก, ๊ฐ์ค๋ง ๋ฐ๊พผ ํ ยท 734 ์ฒญํฌ ยท conf ํ๊ท 0.544). ep27 ์ frame 0 ์ฒญํฌ ๋ผ๋ฒจ์ด ์์ด
๋จธ๋ฆฌ 16 ํ๋ ์์ conf loss ์์ ๋ง์คํฌํ์ต๋๋ค.
โ 2026-09-24 ๋ฐ๊ฒฌ: torchvision_av keyframe ๋ฒ๊ทธ โ *_vfix_* ๋ง ์ ์์
๋๋ค
GR00T-action-quantization ๊ณ์ด ์ฝ๋(atq_v2 ยท jimin_lg ์์ ์ )์ gr00t/utils/video.py ๋
--video-backend torchvision_av ์ผ ๋ ์์ฒญํ ํ๋ ์์ด ์๋๋ผ ์ง์ keyframe ์ ๋๋ ค์ค๋๋ค. ์ค๊ธฐ franka
์์์ keyframe ์ด 0/250/โฆ ๋ฟ์ด๋ผ ์ ํ์ โ ์ฒดํฌํฌ์ธํธ๋ ์ํผ์๋ ์ฒซ ์ฅ๋ฉด๋ง ๋ณด๊ณ ํ์ต๋์ต๋๋ค
(air_frier 97.5%, pnp 100%). state ๋ ์ ์์ด๋ผ ๊ถค์ ์ ๋ฐ๋ผ๊ฐ๊ธด ํ์ง๋ง ํ์ฌ ํ๋ฉด์ ๋ณด๊ณ ๊ณ ์น์ง ๋ชปํฉ๋๋ค.
NVIDIA upstream ์ 2025-09-18 cdf6d6e ์์ ๊ณ ์ณค๊ณ ATQ ๋ ํฌ๋ ๊ทธ ์์ ์ ๋ฐ์ง ์์์ต๋๋ค.
air_frier_vfix_30k / _20k ๋ ๋์ฝ๋๋ฅผ upstream/MoSS ๋ก์ง์ผ๋ก ๊ณ ์น jimin_lg ์ฌ๋ณธ์ผ๋ก ๋ค์ ํ์ตํ
ํ์
๋๋ค. air_frier ๋น๊ต ์คํ์ ์ด ๋์ ์ฐ์ญ์์ค. ๋ค๋ฅธ task ์ ์ ์ ํ์ ์์ง ์์ต๋๋ค.
air_frier_vfix_30k โ ํ์ต ์ค์
์ถ๋ก ๋ฐฐ์ ์๋ฃ(code_jimin_lg.tar.gz ยท jimin_lg_vs_ca6daad.patch ยท train_manifest_mlxp.yaml ยท infer_smoke/)๋
air_frier_vfix_30k/ ํด๋ ์์ ์ฒดํฌํฌ์ธํธ์ ๊ฐ์ด ์์ต๋๋ค.
TTaekwan/real_franka_basline/air_frier (MoSS base, SAIL โ EAG) ์ ์กฐ๊ฑด์ ๋ง์ถ ATQ ์
๋๋ค.
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ์ฝ๋ | jimin_lg = rakybond007/GR00T-action-quantization jimin-dev-label-gated ca6daad + jimin_lg_vs_ca6daad.patch (future token ยท linear LR ยท franka data config real_droid_joint/real_droid_joint_conf ยท video.py ์์ ). ์ ์ฒด ์ฌ๋ณธ code_jimin_lg.tar.gz |
| init | nvidia/GR00T-N1.5-3B. future token 32๊ฐ๋ ์์ N1.5 ์ future_tokens.weight ๋ก init (--future-tokens-init pretrained) |
| MoE | --use-moe-routing --moe-num-experts 4 --moe-label-gated --moe-speed 2.0 --use-merged-8-head --use-merged-4-head --use-native-8-head ยท --conf-threshold 0.5 --conf-loss-coef 0.1 ยท conf_readout_detach True |
| action | --action-merge-reduction last ยท --discrete-action-dims 7 (gripper) |
| ๋ฐ์ดํฐ | franka_air_frier 50 ep ยท 12,205 ํ๋ ์ ยท 10 fps ยท 448ร252 (slurm lerobot_448 ์ฌ๋ณธ, baseline ๊ณผ ํฝ์
๋์ผ) |
| ํ์ต | bs 32 ร 2 GPU (gbs 64) ยท 30k step ยท --lr-scheduler-type linear ยท save 10k ยท ์ต์ข
loss 0.0067 |
| DiT ํ | [state 1][future 32][action h], PE ๋ ์ค ์ ์ฒด (b). expert ๋ง๋ค h = 16/8/4/8 |
| ์ก ์๋ณธ | train_manifest_mlxp.yaml ยท ์ถ๋ก ์ค๋ชจํฌ infer_smoke/ (์คํฌ๋ฆฝํธ + ๊ฒฐ๊ณผ json, tau 0.5 / 0.3) |
air_frier_vfix_30k โ ์ถ๋ก ๋ฐฐ์
tar xzf code_jimin_lg.tar.gz # jimin_lg/{gr00t,scripts}
export PYTHONPATH=$PWD/jimin_lg
python jimin_lg/scripts/inference_service.py --server \
--model-path <air_frier_vfix_30k ๋๋ ํฐ๋ฆฌ> \
--embodiment-tag new_embodiment \
--data-config real_droid_joint \
--head moe \
--denoising-steps 4 \
--conf-threshold 0.5 \
--port 5555
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ๋ชจ๋ธ ํด๋์ค | gr00t.model.gr00t_n1.GR00T_N1_5 (jimin_lg ํ). config.json action_head_cfg ์ MoEยทfuture token ์ค์ ์ด ๋ค ์ค๋ ค ์์ด ๋ก๋๋ง ํ๋ฉด ๋ฉ๋๋ค |
| policy | gr00t.model.policy.Gr00tPolicy + policy.inference_head = "moe" (inference_service.py --head moe ๊ฐ ์ด๊ฑธ ํฉ๋๋ค). "main" ์ ์ฃผ๋ฉด fine16 ๋์ฝ๋๋ง ์จ์ ์์๋ ์ ์ฑ
์ด ๋ฉ๋๋ค |
| data config | real_droid_joint (์ถ๋ก ). real_droid_joint_conf ๋ ํ์ต ์ ์ฉ โ action ์ ๋ผ๋ฒจ carrier 2์นธ(ratio_label, 8:10)์ ๋ถ์ธ ํ์ด๋ผ ๋ก๋ด์์๋ ์ฐ์ง ์์ต๋๋ค |
| embodiment tag | new_embodiment (experiment_cfg/metadata.json ํค) |
| observation (1 ํ๋ ์) | video.exterior_image_1_left (1,H,W,3) uint8 ยท video.wrist_image_left (1,H,W,3) uint8 ยท state.joint_pos_abs (1,7) ยท state.gripper_close (1,1) ยท annotation.human.action.task_description [str] |
| ์ธ์ด | "Open the air fryer basket, put the food from the plate into the basket, and close the basket." |
| ์ ๊ทํ | stateยทaction min_max (experiment_cfg/metadata.json) |
| denoising steps | 4 |
| action ์ถ๋ ฅ | action.joint_pos_abs (h,7) ์ ๋ ๊ด์ ๊ฐ ยท action.gripper_close (h,1) ยท __meta__moe_picked (์ด๋ expert ์ธ์ง) ยท __meta__moe_probs. h ๋ ์์ฒญ๋ง๋ค ๋ค๋ฆ
๋๋ค |
expert ์ ์คํ ๊ท์น (moe_speed 2.0, ์ฝ๋์ ์์ [main_16, m8, m4, n8]):
moe_picked |
์ด๋ฆ | ํ ์ h | ํ ํ๋๊ฐ ๋ฎ๋ ์ ์ด step | ๊ทธ๋ฃน |
|---|---|---|---|---|
| 0 | fine16 | 16 | 1 | fine |
| 1 | comp16 | 8 | 2 | compressed |
| 2 | comp8 | 4 | 2 | compressed |
| 3 | fine8 | 8 | 1 | fine (action_pred_m8 ์ comp8 4ํ์ด ๊ฐ์ด ์ต๋๋ค. ๋ฌด์ํด๋ ๋ฉ๋๋ค) |
- ์์ถ expert ์ row ๋
action_merge_reduction last๋ก ๋ง๋ 2 step ๋ค์ ์ ๋ target ์ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๋ฐ์ row ๋ฅผ ์ ์ด ์ฃผ๊ธฐ ๊ทธ๋๋ก(10 Hz) ํ row ์ฉ ๋ณด๋ด๊ณ , chunk ๋ฅผ ๋ค ์ฐ๋ฉด ์ฌ์ถ๋ก ํฉ๋๋ค (sim ํด๋ผ์ด์ธํธscripts/robocasa_service_moe.py๊ท์ฝ). ์์ถ chunk ๋ row ๊ฐ ์ ๋ฐ์ด๋ผ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ฐ ์๊ฐ์ ๊ฐ๊ณ , ๊ทธ๊ฒ์ด ๊ฐ์์ ๋๋ค. row ๋ฅผ 2 step ์ฉ ์ก๊ณ ์๊ฑฐ๋ ๋ณด๊ฐํ์ง ๋ง์ญ์์ค โ ๊ทธ๋ฌ๋ฉด ์์๋๋ก ๋์๊ฐ๋๋ค. - label-gated ๋ผ์ฐํ
: conf head ๊ฐ
conf >= tau๋ฉด compressed ๊ทธ๋ฃน(1ยท2), ์๋๋ฉด fine ๊ทธ๋ฃน(0ยท3) ์์์ router ๊ฐ horizon ์ ๊ณ ๋ฆ ๋๋ค.tau๋ ํ์ต ํ๋ผ๋ฏธํฐ๊ฐ ์๋๋ผ eval ๋ ธ๋ธ์ ๋๋ค โ ํ์ต๊ฐ 0.5 ๊ฐ ๊ธฐ๋ณธ์ด๊ณ--conf-threshold๋ก ๋ฐ๊พธ๋ฉด ํ ์ฒดํฌํฌ์ธํธ๋ก ์๋/์ฑ๊ณต๋ฅ ๊ณก์ ์ ํ์ ์ ์์ต๋๋ค (๋ฎ์ถ์๋ก compressed ๊ฐ ๋ง์ด ๋ฝํ๋๋ค). --moe-stochastic๋ฑ ํ๋ฅ ๋ผ์ฐํ ์ต์ ์ ๋๊ณ (argmax) ์์ํ์ญ์์ค. openarm ๋ฐฐํฌ๋ ์ผฐ์ง๋ง franka ๋ ๊ฒ์ฆ๋ ๊ฐ์ด ์์ต๋๋ค.- ๋์ฝ๋ ํ๋๋ง ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด
--head main(fine16 ๊ณ ์ ) ์ ์ฐ์ญ์์ค. ์์ถ ๋์ฝ๋ ๊ฐ์ ๋ ์ฝ๋์ ๋ ธ๋ธ๊ฐ ์์ต๋๋ค.
์ถ๋ก ์ค๋ชจํฌ (๋ฆด๋ฆฌ์ค ์ ํ์ธ)
MLXP GPU ์ปจํ
์ด๋์์ ์ ๋ฐฐ์ ๊ทธ๋๋ก(Gr00tPolicy + real_droid_joint + new_embodiment, head moe,
denoising 4) air_frier ์ํผ์๋ 0 ์ ์ค์ ๊ด์ธก์ผ๋ก get_action ์ ํธ์ถํ์ต๋๋ค.
| frame | tau 0.5 (ํ์ต๊ฐ) โ moe_picked / ํ ์ |
tau 0.3 โ moe_picked / ํ ์ |
์ง์ฐ(s, ์ฒซ ํธ์ถ ์ ์ธ) |
|---|---|---|---|
| 0 | 2 comp8 / 4 | 2 comp8 / 4 | 0.6 (warm-up) |
| 5 | 2 comp8 / 4 | 2 comp8 / 4 | 0.08 |
| 50 | 3 fine8 / 8 | 3 fine8 / 8 | 0.08 |
| 120 | 2 comp8 / 4 | 2 comp8 / 4 | 0.07 |
| 200 | 2 comp8 / 4 | 2 comp8 / 4 | 0.07~0.27 |
| 300 | 1 comp16 / 8 | 1 comp16 / 8 | 0.07 |
๋ฐํ ํค: action.joint_pos_abs (h,7) ยท action.gripper_close (h,) ยท __meta__moe_picked ยท __meta__moe_probs.
๊ฐ์ ์ ๋ถ ์ ํ, 1๋ฐฐ์ ์์ฐ๊ณผ์ ํ๊ท ์ ๋ ์ค์ฐจ 0.007~0.02 rad (frame 300 ์ 0.07 โ ์์ฐ ์ข
๋ฃ ์ง์ ์ ์ง ๊ตฌ๊ฐ).
ํ ์๊ฐ ์์ฒญ๋ง๋ค 4/8 ๋ก ๋ฐ๋๋ ๊ฒ์ด ์ ์ ๋์์
๋๋ค. ๊ด์ธก์ (1,H,W,3)ยท(1,7)ยท(1,1) (T ์ถ ํฌํจ) ๋ก ๋ฃ์์ต๋๋ค;
T ์ถ ์๋ (H,W,3)ยท(7,) ํํ๋ upstream ๊ท์ฝ๋๋ก ๋ฐ์ต๋๋ค. ์ด ์ค๋ชจํฌ์์๋ 6 ํ๋ ์ ์ค 5 ํ๋ ์์ด
compressed ๋ก ๋ผ์ฐํ
๋์ต๋๋ค โ ์ค๊ธฐ์์ ๋๋ฌด ๊ณต๊ฒฉ์ ์ด๋ฉด --conf-threshold ๋ฅผ 0.5 ๋ณด๋ค ์ฌ๋ ค์ fine ์ ๋๋ฆฌ์ญ์์ค.
future token ์ด ๋ญ๊ฐ
DiT ์
๋ ฅ ํ์ state ์ action ์ฌ์ด์ ๋ผ์ฐ๋ ํ์ต๋๋ ์๋ฒ ๋ฉ 32๊ฐ์
๋๋ค
(config.json ์ use_future_tokens: true ยท num_target_vision_tokens: 32).
ํ = [ state 1 ][ future 32 ][ action 16 ]
์ด๋ค ๋์ฝ๋๋ ์ด ํ ํฐ์ hidden state ๋ฅผ ์ฝ์ง ์์ต๋๋ค. ์๊ธฐ loss ๊ฐ ์๊ณ ,
DiT ์ self-attention ์ธต(16์ธต ์ค ํ์ idx 8์ธต, interleave_self_attention: true)์ ํตํด
action flow-matching loss ๋ง ์ญ์ ํ๋ฉ๋๋ค. cross-attention ์ธต์์ VL ๋ฌธ๋งฅ์ ํก์ํด
self-attention ์ธต์์ action ํ ํฐ์ ๋๊ฒจ์ฃผ๋ ์ญํ ์
๋๋ค. ํ์ตยท์ถ๋ก ๋ชจ๋ 32๊ฐ๊ฐ ํญ์
๋ค์ด๊ฐ๋ฉฐ drop/mask ๋ ์์ต๋๋ค.
โ PE ๊ท์ฝ (a) ์ (b) โ ์ฝ๋๊ฐ ๋ค๋ฆ ๋๋ค
positional embedding ์ ๋๊ตฌ์๊ฒ ๋ํ๋๋๊ฐ ๋ ํ์์ ๋ค๋ฆ ๋๋ค. ๊ฐ์ค์น๋ง ๋ฐ๊ฟ ๋ผ์ฐ๋ฉด ์ ๋๊ณ , ์ถ๋ก ์ฝ๋๊ฐ ํด๋น ๊ท์ฝ๊ณผ ๋ง์์ผ ํฉ๋๋ค.
(a) long_horizon_future_token โ stock GR00T-N1.5 / ATQ ๊ท์ฝ
pos_ids = arange(action_horizon) # 0..15
action_features += PE(pos_ids) # action ์๋ง
row = cat(state, future, action) # stateยทfuture ๋ PE ์์
(b) *_moss_*, air_frier_vfix_* โ MoSS_GR00T ๊ท์ฝ (flow_matching_action_head_MoSS.py:886-888)
row = cat(state, future, action)
pos_ids = arange(row.shape[1]) # 0..48
row += PE(pos_ids) # state=0, future=1..32, action=33..48
TTaekwan/real_franka_basline, TTaekwan/real_franka_sail, TTaekwan/real_franka_demospeed ์
์ฒดํฌํฌ์ธํธ๋ ๋ชจ๋ MoSS_GR00T ๋ก ํ์ตํด (b) ์
๋๋ค. ๊ทธ ๋๊ณผ ๋น๊ตํ ๋ชฉ์ ์ด๋ผ๋ฉด (b) ํ์ ์ฐ์ญ์์ค.
long_horizon_future_token (a) ๋ ์ด๊ธฐ ํ์ผ๋ก ๋จ๊ฒจ๋ ๊ฒ์
๋๋ค.
์ถ๋ก ์ฝ๋ ์ฃผ์
๋ฒ ์ด์ค๋ rakybond007/GR00T-action-quantization ์ jimin-dev-label-gated (ca6daad)
์ด์ง๋ง, ๊ทธ ๋ธ๋์น์๋ future token ๊ตฌํ์ด ์์ต๋๋ค. ํจ์น ์์ด ๋ก๋ํ๋ฉด
action_head.future_tokens.weight ๊ฐ unexpected key ๋ก ์กฐ์ฉํ ๋ฒ๋ ค์ง๊ณ
(์๋ฌ๊ฐ ์ ๋ฉ๋๋ค) ์กฐ๊ฑด ํ ํฐ 32๊ฐ๊ฐ ๋น ์ง ์ฑ๋ก ์ ์ฑ
์ด ๋๋๋ค. air_frier_vfix_* ๋ ๋ฐ๋์
code_jimin_lg.tar.gz (๋๋ ca6daad + jimin_lg_vs_ca6daad.patch) ๋ก ์ฌ์ญ์์ค.
MoE per-expert ๊ฒฝ๋ก๋ผ ์คํธ๋ฆผ์ expert ๋ง๋ค ๊ฐ์ horizon ์ผ๋ก ๋ค์ ๋ง๋ค์ด์ง๋๋ค โ
ํ ๊ธธ์ด๋ 1 + 32 + h, h ๋ 16/8/4/8 ์
๋๋ค.
router ์ conf head ๋ [vl_pooled, state_pooled] ๋ง ์ฝ์ผ๋ฏ๋ก future token ๊ณผ ๋ฌด๊ดํ๊ณ
shape ๋ ๊ทธ๋๋ก์
๋๋ค.
Eagle ๋ฐฑ๋ณธ์ ๋์ ๋ชจ๋์ด import ์์ ์ CUDA ๋ฅผ ์๊ตฌํฉ๋๋ค. GPU ์๋ ๋
ธ๋์์๋ --device cpu ๋ฅผ
์ค๋ ์ฃฝ์ต๋๋ค. transformers==4.51.3, torch 2.7, timm, decord ํ์.