Robot Dataset 분석과 VLA 입출력
학습 목표
공개 시연 데이터를 직접 읽고 평가 기준을 만든 뒤, 시각·언어·행동 모델에 연결할 입력과 출력의 의미를 확인합니다.
실행 조건
작은 데이터 분석에는 requests·pandas·pyarrow·scikit-learn이 필요합니다. 공개 Parquet 한 개만 읽으며 인터넷 연결이 필요합니다.
VLA 모델 추론·학습은 별도의 장비와 모델별 환경을 사용합니다.
필요한 패키지가 없으면 Colab·Jupyter 코드 셀에서 %pip install pyarrow==23.0.1를 실행하세요.
적용 사례
시연 데이터에서 Pick-and-place 정책으로
공개 집기·이동 시연을 읽고 행동의 의미와 평가 분리를 확인합니다. 작은 오프라인 기준 모델에서 시각·언어를 사용하는 정책으로 확장합니다.
Observation·State: 동기화된 카메라 영상·로봇 상태·작업 지시. Dataset의 Feature·시간 기준을 확인.
행동: Dataset에서 정의한 관절·Gripper 등의 Action과 Action chunk. 표현·Normalization을 먼저 대응.
Reward·Constraint: 시연학습의 예측 오차와 실제 Task 성공을 분리. 관절·입력 범위와 실패 조건 기록.
비교 기준: state-only Ridge의 오프라인 행동 예측. Closed-loop 정책 평가는 별도 수행.
확인할 지표: Episode 분리의 성분별 MAE. 실제·시뮬레이션 실행 시 성공률·안전 위반·지연 추가.
Robot Dataset의 State·Action 분석
시작 조건
LeRobot svla_so100_pickplace의 첫 Parquet shard를 읽습니다. 영상·모델 가중치는 내려받지 않습니다.
진행 방법
- 제공된 코드로 Repository revision·FPS·Episode 수·state/action shape를 확인하세요.
- Episode 0의 state와 action을 시간축으로 그려, 두 배열의 성분·단위를 데이터 카드와 대조하세요.
- 카메라·로봇 상태·자연어 지시가 어느 metadata와 Feature로 연결되는지 적으세요.
남길 결과
- 데이터 구조 표와 Episode 0의 state/action 그림.
"""Read one public LeRobot data shard, without downloading videos or model weights."""
import io,json
import numpy as np
import pandas as pd
import requests
repo='lerobot/svla_so100_pickplace'
def read_json(url):
response=requests.get(url,timeout=30);response.raise_for_status();return response.json()
manifest=read_json('https://huggingface.co/api/datasets/'+repo)
revision=manifest['sha']
base='https://huggingface.co/datasets/'+repo+'/resolve/'+revision+'/'
metadata=read_json(base+'meta/info.json')
shards=sorted(x['rfilename'] for x in manifest['siblings'] if x['rfilename'].startswith('data/') and x['rfilename'].endswith('.parquet'))
assert shards,'Dataset layout changed; inspect the repository data tree.'
response=requests.get(base+shards[0],timeout=60);response.raise_for_status()
frame=pd.read_parquet(io.BytesIO(response.content))
print('Repository / revision / shard:',repo,revision,shards[0])
print('Format / FPS / episodes:',metadata.get('codebase_version'),metadata['fps'],metadata['total_episodes'])
print('Features:',metadata['features'])
print('Loaded rows / episodes:',len(frame),frame['episode_index'].nunique())
state=np.stack(frame['observation.state'].to_numpy())
action=np.stack(frame['action'].to_numpy())
print('State / action shape:',state.shape,action.shape)
# Task text and video paths are described in the repository metadata.
# No robot commands, model execution, remote uploads, or video downloads occur here.
결과 기록·자가 점검
항목:
Feature·metadata:
shape·단위:
확인한 의미:
확인할 점
- 관절 목표와 현재 관절 상태를 같은 값으로 가정하지 않았는가?
- Dataset revision과 이용 조건을 확인했는가?
Episode 단위 평가와 정보 누출
시작 조건
로드한 Episode를 앞 80%·뒤 20%로 나눕니다. 상태에서 행동을 예측하는 Ridge 기준 모델을 만듭니다.
진행 방법
episode_index의 고유값을 정렬하고 앞 80%의 Episode 전체를 Train, 나머지 Episode 전체를 Test로 나누세요. 같은 Episode의 Frame이 양쪽에 섞이지 않게 하고 Train/Test의 Episode ID와 Frame 수를 적으세요.Ridge(alpha=1.)를 Train의state와action으로 학습하세요. Test에서 예측한action과 정답의 성분별 MAE를multioutput="raw_values"로 구하세요.- 같은 전체 자료의 Frame Index를 무작위 80/20으로 나눈 경우에도 같은 모델을 학습·평가하세요. 분할별 Action 성분의 MAE를 표로 적고, 한 성분의 정답·예측을 해당 Test 순서에 따라 그리세요.
- 서로 인접한 Frame이 Train과 Test에 동시에 들어가는 경우와 새 Episode를 평가하는 경우의 차이를, 두 분할의 결과를 근거로 설명하세요.
남길 결과
- 분할별 오차 표와 Action 한 성분의 예측 그림.
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
episodes=np.sort(frame['episode_index'].unique());cut=max(1,int(.8*len(episodes)))
train=np.isin(frame['episode_index'],episodes[:cut]);test=~train
assert test.any(),'Select a shard containing at least two episodes.'
model=Ridge(alpha=1.).fit(state[train],action[train])
predicted=model.predict(state[test])
print('Episode split MAE:',mean_absolute_error(action[test],predicted,multioutput='raw_values'))
# TODO: 같은 자료의 Frame 분할과 비교하세요.
결과 기록·자가 점검
분할:
학습 Episode 수:
평가 Episode 수:
성분별 MAE:
누출 가능성:
확인할 점
- 전처리·회귀 fit에 평가 Episode를 사용하지 않았는가?
- 기록 Action 예측 오차를 로봇 Task 성공률이라고 부르지 않았는가?
VLA로 확장할 때 필요한 입력
시작 조건
SmolVLA 공식 설명과 현재 Dataset의 Feature를 사용합니다. 모델 전체 학습 대신 입출력·평가 설계를 완성합니다.
진행 방법
- 카메라·현재 상태·지시문→Action chunk의 대응을 표로 적으세요.
- Action Normalization·좌표계·제어 주기·Chunk 실행 중 지연을 점검할 위치를 정하세요.
- 자신의 연구에 필요한 추가 관측·지시·평가 Episode 한 가지를 설계하세요. GPU가 준비되면 공식 예제로 사전학습 정책 추론을 확장합니다.
남길 결과
- VLA 입출력 표와 연구 적용 계획.
결과 기록·자가 점검
입력·출력:
Dataset 대응:
Normalization·시간 기준:
평가 방법:
확인할 점
- VLA의 행동 출력과 VLM의 장면 설명을 구분했는가?
- 사전학습 모델이 다른 로봇·Action 표현에 즉시 맞는다고 가정하지 않았는가?
더 해보기
- VLM을 상위 목표 해석기로 사용할 경우, vLLM의 Multimodal 입력 예제로 이미지·지시→구조화된 목표를 시험하세요.
- 추론 지연·출력 유효성을 측정하고, 저수준 로봇 Action과 연결하기 전 좌표·범위 검증을 분리하세요.