CoolFace
Datasetpublic

Bigenlight/orange-bowl-in-purple-bowl-rl-npz

orange-bowl-in-purple-bowl RL npz — dataset card 작성: 2026-09-16 (Claude, Opus). Bigenlight/carrot-in-pot-rl-npz의 자매 문서 — 같은 파이프라인(build_dataset.py / build_px_dataset.py)으로 orange-bowl 실물 코퍼스를 chunk-MDP transition으로 변환한 것. raw 영상은 Bigenlight/orange_bowl_in_purple_bowl_lerobot_v3에 있고, 여기엔 파생 npz(W/data/rl/)만 있음. 모델은 Bigenlight/orange-bowl-in-purple-bowl-ifql. 수치는 npz meta + .shape(mmap)와 결과 노트에서 읽음. 출처 file:line은 cards/CARD_SOURCES.md §2026-09-16 "orange". 0. 소스… See the full description on the dataset page: https://huggingface.co/datasets/Bigenlight/orange-bowl-in-purple-bowl-rl-npz.

sourceHugging Faceunknownupdated 12d agoView on Hugging Face
0likes62downloads
Dataset Card

orange-bowl-in-purple-bowl RL npz — dataset card

작성: 2026-09-16 (Claude, Opus). Bigenlight/carrot-in-pot-rl-npz의 자매 문서 — 같은 파이프라인(build_dataset.py / build_px_dataset.py)으로 orange-bowl 실물 코퍼스를 chunk-MDP transition으로 변환한 것. raw 영상은 Bigenlight/orange_bowl_in_purple_bowl_lerobot_v3에 있고, 여기엔 파생 npz(W/data/rl/)만 있음. 모델은 Bigenlight/orange-bowl-in-purple-bowl-ifql. 수치는 npz meta + .shape(mmap)와 결과 노트에서 읽음. 출처 file:line은 cards/CARD_SOURCES.md §2026-09-16 "orange".

0. 소스 (raw)

Real (유일)
HF repoBigenlight/orange_bowl_in_purple_bowl_lerobot_v3 @ tag v3.0 (sha 8c65562b6d237461d2974ebf8d06fd97b14b52f5)
규모52 episodes / 16,009 frames / 30 fps / 8.9 min
포맷LeRobot v3.0, robot_type: ur7e_gello, parquet + AV1 mp4 (1280×720, crf 30)
카메라cam1(RealSense D435 고정 3인칭) + cam2(D435 손목). RGB만, depth 없음
state/actionobservation.state = ur_q1..6(rad) + grip_pos(0..1); action = IK 절대 관절 목표 cmd1..6 + grip_cmd(0=open, 1=closed, 사실상 binary)
초기 자세고정 아님 — take별 frame-0 std 0.08~0.14 rad. bowl 위치 무작위
시간 정렬고친 gello_recorder: timestamp 보정 없음, frame drop 0, command가 state보다 ≈0.14 s(=4 프레임) 앞섬(서보 지연, 52 take 전부 0.140~0.150 s)
라벨없음 — 52 take 전부 성공 시연이라는 가정(3 take 육안 확인)
sim twin없음
로컬$W/data/lerobot/orange_bowl_in_purple_bowl_lerobot_v3/, decode $W/data/decoded_orange/, feature $W/data/features_orange{,_aug8}/

1. 파일 목록 (rl/, 17 files, 2.93 GB)

frozen-feature r18_ss(Da=2055, `Dc=null), sparse reward, absorb-tail, val episodes [10, 25, 40, 51] → **train N=14,769 (48 ep) / val N=1,240 (4 ep)**. 전부 np.savez(비압축), pickle 없이 읽힘(meta`는 JSON 문자열).

파일bytesNaction_lead쓰인 모델norm_stats비고
real_orange_r18_ss.npz (+_val)246,291,300 (+20,681,684)14,769 (+1,240)0ifql_orange_k*_lead0_s*norm_stats_r18_ss_orange.jsonraw command가 이미 +4 프레임 앞섬
real_orange_r18_ss_lead2.npz (+_val)246,291,324 (+20,681,708)14,769 (+1,240)2ifql_orange_k0.9_lead2_s*norm_stats_r18_ss_orange_lead2.jsonsim convention(+6) ← 추천
real_orange_r18_ss_lead6.npz (+_val)246,291,324 (+20,681,708)14,769 (+1,240)6ifql_orange_k*_lead6_s*norm_stats_r18_ss_orange_lead6.json+10 과잉 lead
real_orange_r18_ss_lead2_aug8.npz1,214,197,17814,7692ifql_orange_k0.9_lead2_aug8_p*_s*norm_stats_r18_ss_orange_lead2.json (refit 안 함)canonical 키는 lead2와 byte-identical + obs_aug/next_obs_aug (8, 14769, 2048) fp16
real_orange_r18_ss_lead2_aug8_val.npz20,685,8761,2402(val)위와 동일aug 배열 없음(meta에 aug_k 8은 기록됨)
demo_orange_lead2_px96.npz (+_val)821,086,666 (+68,946,114)14,769 (+1,240)2px_orange_*_lead2_s0norm_stats_orange_lead2_px96.jsonpxv1: `obscam1/obscam2 (N,96,96,3) uint8`, `obsproprio (N,7), actions, next_index`
norm_stats_r18_ss_orange{,_lead2,_lead6}.json87,423 ×3—0/2/6——`action_lead` 필드만 다름, 통계 동일
norm_stats_orange_lead2_px96.json1,121—2——derived_from: fitted; proprio·action은 frozen과 동일(maxΔ8.9e-8)
preview_demo_orange_lead2_px96{,_val}.png, demo_orange_lead2_px96_build_report.json~1 MB ×2, 2.5 KB————px 빌드 contact sheet / 리포트

lead0/2/6 npz는 actions만 다르고 observations/rewards/masks/terminals/next_observations는 byte-identical. sanity(빌드 로그): masks==0 = 1,200 (25/ep), terminals = 48, actions ∈ [-0.9998, 0.9996], 특징 parity worst cos 0.9999996, decode 정렬 max|pts−query| 8.9e-7 s.

2. 키 스키마

carrot 카드 §3과 동일 (observations (N,2055) f32, actions (N,56) f32 ∈[-1,1], rewards (N,), masks (N,)(성공 흡수 transition과 그 24프레임 전 row에서 0), terminals (N,)(episode 마지막 row 1), next_observations (N,2055), meta). `critic_observations` 없음(--no-critic). aug8 train 파일은 추가로 obs_aug, next_obs_aug (K=8, N, 2048) float16 — canonical observations[:, :2048](cam1‖cam2 표준화 feature) 자리에 끼우는 view, proprio(뒤 7)는 항상 canonical. meta.aug_params에 view 정의 전부(scale [0.8,1.0], shift 0.08, brightness [0.6,1.4], contrast [0.7,1.3], saturation [0.7,1.3], hue ±0.05, gamma [0.7,1.4], gain [0.9,1.1], grad_amp [0.1,0.4], p_op 0.8, p_grad 0.3, RNG default_rng([seed, cam_id, row, k]), view 0은 photometric만).

pxv1(`demoorangelead2px96.npz): obscam1, obscam2 (N,96,96,3) uint8(JPEG q92 round-trip → INTER_AREA 96², crop 없음), obsproprio (N,7) f32`(raw, 표준화는 로더), `actions (N,56)`, `rewards, masks, terminals`, `nextindex (N,) int64(min(i+24, last)), meta(schema pxv1, img 96, crop 84, stride 3, H 8, chunkframes 24, preprocess jpeg92->area96, reward sparse, source realdemo, nepisodes 48, N 14769, absorbtail true, actionlead 2, discountchunk 0.9227446944279201, gammaframe 0.99, nsuccess 48, nfailure 0`).

3. 청킹 · lead · reward

carrot 카드 §4와 동일 상수(STRIDE 3, H 8, CHUNK_FRAMES 24): knot_k(joints) = action[min(i + 3k + LEAD, last), :6], 그리퍼는 LEAD 0, next_obs = obs[min(i+24, last)], sparse r=-1(마지막 row 0), absorb-tail(i+24 ≥ last인 row의 mask 0), discount_chunk = 0.99^8 = 0.923.

왜 lead2인가: carrot real(구 recorder)은 action[i] ≈ state[i](lag 0)라 sim(+6)에 맞추려고 lead6을 썼음. orange는 고친 recorder라 raw command가 이미 state보다 +4 프레임 앞섬(lead0 npz에서 argmin lag = +4) → ACTION_LEAD=2가 sim convention(+6)을 재현, 6은 +10으로 과잉. 그래서 lead2가 기본 세트이고 lead0/lead6은 sweep용.

4. 정규화 (norm_stats_r18_ss_orange_lead2.json)

공식은 carrot 카드 §5와 동일. 숫자:

action lo    = [2.3428163528442383, -1.9074292182922363, 1.308194875717163, -2.702819347381592, -1.8299357891082764, -3.939363956451416, 0.0]
action hi    = [3.6872901916503906, -0.9155053496360779, 2.3606531620025635, -1.524034023284912, -1.2490525245666504, -2.3564114570617676, 1.0]
proprio mean = [3.048793315887451, -1.3951243162155151, 1.9118824005126953, -2.1602773666381836, -1.546466588973999, -3.2785484790802, 0.3810938596725464]
proprio std  = [0.2240169495344162, 0.16405987739562988, 0.17950011789798737, 0.16540184617042542, 0.09374841302633286, 0.2097344994544983, 0.39555299282073975]

j0(shoulder_pan)가 +2.34..+3.69 rad — carrot 코퍼스는 같은 물리 자세를 −π 쪽(−3.70..−2.68)으로 기록했음. orange 모델을 배포할 때 /joint_states의 j0가 +2.4..+3.6이어야 함(모델 카드 §8 경고).

5. 로더 / 재현

python
import numpy as np, json
z = np.load("rl/real_orange_r18_ss_lead2_aug8.npz", mmap_mode="r")   # 1.2 GB — mmap
meta = json.loads(str(z["meta"]))          # aug_k 8, aug_params, action_lead 2, norm_stats ...
obs, act = z["observations"], z["actions"]  # (14769, 2055), (14769, 56)
views = z["obs_aug"]                        # (8, 14769, 2048) float16 — obs[:, :2048] 대체용
bash
# frozen r18_ss (lead2; ACTION_LEAD=0/6 으로 나머지)
cd $W && TASK=orange REPO_ID=Bigenlight/orange_bowl_in_purple_bowl_lerobot_v3 \
  SNAP=$W/data/lerobot/orange_bowl_in_purple_bowl_lerobot_v3 HF_SHA=8c65562b6d237461d2974ebf8d06fd97b14b52f5 \
  VAL_EPISODES=10,25,40,51 PREVIEW_EPISODES=0,26,51 ACTION_LEAD=2 env -u PYTHONPATH bash $FV/real_pipeline/build_real.sh
# aug8: 위 + AUG_K=8 STEPS=features  →  그다음 AUG_K=8 STEPS=build,load
# px96: decode_px.py --raw <snapshot> --out $W/data/decoded_px/orange_demo --set real_demo
#       build_px_dataset.py --set real_demo --episodes $W/data/decoded_px/orange_demo --out $W/data/rl --name demo_orange_lead2_px96 \
#         --reward sparse --fit-norm-stats --norm-stats-out $W/data/rl/norm_stats_orange_lead2_px96.json --val-episodes 10,25,40,51 --action-lead 2

인코더: torchvision.models.resnet18(weights=IMAGENET1K_V1) frozen, 224² INTERAREA squash, ImageNet 정규화, layer4 → spatial softmax(7×7) → `[x1..x512, y1..y512]`. 코드는 모델 repo `code/carrotifqlcode20260916.tar.gz`.

6. 주의

  • —meta.norm_stats는 학습 박스 절대경로 — 다른 PC에선 rl/norm_stats_*.json을 직접 지정.
  • —real_orange_r18_ss_lead2_aug8.npz(1.2 GB)와 demo_orange_lead2_px96.npz(821 MB)는 mmap_mode="r"로 열 것.
  • —datasets.json에 모든 파일의 bytes·sha256·N·meta 요약이 있음.