Imitation Learning의 성공은 데이터의 품질과 양에 달려 있습니다. 잘 수집된 데이터는 AI 모델이 작업을 학습하는 핵심입니다.
데이터셋 예시
LeRobot으로 수집된 실제 체스 로봇 데이터셋의 예시입니다. 1500개의 체스 움직임을 학습한 ACT 모델의 데이터를 시각화한 것입니다:
데이터 수집 개요
LeRobot에서 데이터 수집은 다음 요소로 구성됩니다:
- 로봇 상태: 관절 각도
- 시각 정보: RGB 카메라 이미지 (Depth 카메라도 가능함)
- 명령: Instruction, 텍스트로 내린 명령
데이터 수집 준비
1단계: 작업 환경 설정
학습 성능을 위해 데이터 수집 환경을 일관되게 유지하는 것이 중요합니다.
작업 환경 체크리스트:
- 조명: 일정한 조명 유지
- 카메라 위치: 고정된 카메라 위치
- 작업 공간: 정리된 작업 공간
- 물체 배치: 일관된 물체 배치
데이터가 일관적일수록 학습이 빠릅니다. 하지만 다양하게 어질러진 물체를 정리하는 것이 목표라면 당연히 물체 위치가 다양해야겠죠?
2단계: 카메라 설정
카메라 위치와 연결을 확인합니다.
카메라는 동작시에 가려서 안보이는 부분이 없는지 확인해야합니다.
실제 데이터 수집시에 화면이 보이니 꼭 화면을 확인하세요.
데이터 수집 실행
HuggingFace 셋업
기본적으로 데이터셋은 huggingface hub 과 연동되어 관리됩니다.
미리 로그인 해두시면 자동으로 업로드되니 계정 셋업을 먼저 하세요.
Private 하게 관리할 수도 있습니다.
수집한 데이터셋을 공유하려면:
# HuggingFace CLI 로그인
huggingface-cli login
LeRobot record 명령 사용
텔레오퍼레이션과 함께 데이터를 수집하는 가장 간단한 방법:
# 카메라 2대를 사용한 데이터 수집
python -m lerobot.record \
--robot.type=koch_follower \
--robot.port=/dev/ttyUSB0 \
--robot.id=follower_arm \
--robot.cameras="{
top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30},
wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}
}" \
--teleop.type=koch_leader \
--teleop.port=/dev/ttyUSB1 \
--teleop.id=leader_arm \
--dataset.repo_id="my_username/koch_manipulation" \
--dataset.num_episodes=50 \
--display_data=true
- 스페이스바: 에피소드 시작/종료
- Enter: 다음 에피소드로 진행
- Ctrl+C: 수집 종료 및 저장
데이터 수집 전략
1. 다양성 확보
🎯 다양한 시나리오 포함
- 시작 위치: 다양한 초기 로봇 위치
- 물체 배치: 랜덤한 물체 위치
- 속도 변화: 느린/빠른 동작 혼합
- 각도 변화: 다양한 접근 각도
2. 실패 데이터 포함
실패 사례도 학습에 중요합니다. 로봇이 Failure 를 Recover 하는 것도 학습해야만 합니다. (ex. 놓치면 다시 집기)
데이터 수집 중 다음과 같은 케이스를 포함하세요:
- ✅ 완벽한 성공 케이스
- ❌ 실패 케이스 (물체를 떨어뜨림, 잘못된 위치, 돌발 상황에 대처하는 데이터)
3. 품질 관리
실시간으로 데이터 품질을 확인하는 방법:
# display_data 옵션으로 실시간 시각화
python -m lerobot.record \
--robot.type=so101_follower \
--robot.port=/dev/ttyUSB0 \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyUSB1 \
--dataset.repo_id="test_dataset" \
--display_data=true화면에서 확인할 항목:
- 카메라 이미지가 선명한지
- 로봇 움직임이 부드러운지
- 프레임 드롭이 없는지
수집 완료 후 데이터셋 검증:
# 데이터셋 시각화 도구 실행
python -m lerobot.visualize \
--dataset.repo_id="my_username/my_dataset" \
--episode_index=0
# 여러 에피소드 확인
for i in {0..9}; do
python -m lerobot.visualize \
--dataset.repo_id="my_username/my_dataset" \
--episode_index=$i \
--save_video="episode_$i.mp4"
done효율적인 데이터 수집 팁
1. 효율적인 수집 전략
- 휴식 시간 확보: 에피소드 사이에 충분한 휴식으로 일관된 품질 유지
- 다양한 시간대: 조명 조건이 다른 시간대에 수집하여 강건성 확보
생각보다 힘듧니다, 쉬는 시간을 충분히 가져가세요.
조명이 완벽 통제가 안된다면 다양한 빛 상황에서 수집하세요.
2. 데이터 다양성 고려사항
수집 단계에서 자연스러운 다양성 확보:
- 📐 시작 위치 변화: 매 에피소드마다 약간씩 다른 위치에서 시작
- 🎨 물체 다양성: 색상, 크기, 재질이 다른 물체 사용
- 💡 환경 변화: 배경이나 조명을 점진적으로 변경
실제 작업을 수행할 환경에 맞춰 필요한 다양성을 확보하세요.
[참고] Digital Cousin 의 개념을 도입하여 다양한 데이터 증강 방법이 연구 되고 있습니다. 특히 NVIDIA 가 열심히 합니다. 근 미래에는 조금의 환경 변화는 가상으로 해결될 지도…
데이터셋 다루기
작성일 (25년 7월) 기준, 데이터셋 다루는 기능이 아직 많이 부족하고 활발히 추가 중 입니다. 최신 github repo 를 확인하는 것이 정확합니다.
데이터셋 다운로드 및 병합
# 기존 데이터셋 다운로드
python -m lerobot.download_dataset \
--dataset.repo_id="lerobot/pusht" \
--local_dir="./data/pusht"
# 여러 데이터셋 병합 (스크립트 예시)
python -c "
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
# 데이터셋 로드
ds1 = LeRobotDataset('user/dataset1')
ds2 = LeRobotDataset('user/dataset2')
# 병합 후 저장
merged = ds1.merge(ds2)
merged.push_to_hub('user/merged_dataset')
"
데이터셋 시각화 및 검토
HuggingFace LeRobot 데이터 시각화 도구를 사용하여 데이터셋을 탐색할 수 있습니다:
LeRobot 데이터 시각화 도구
HuggingFace에서 제공하는 웹 기반 데이터셋 시각화 도구로, 카메라 뷰, 로봇 상태, 액션 시퀀스를 인터랙티브하게 탐색할 수 있습니다.
HuggingFace 데이터 시각화 도구 열기
또는 아래 방법으로 로컬에서 직접 열람할 수 있습니다:
# 웹 인터페이스로 데이터셋 탐색
python -m lerobot.serve_dataset \
--dataset.repo_id="my_username/my_dataset" \
--port=8080
# 브라우저에서 http://localhost:8080 접속
# 특정 에피소드를 비디오로 저장
python -m lerobot.visualize \
--dataset.repo_id="my_username/my_dataset" \
--episode_index=0 \
--save_video="episode_0_review.mp4"
문제 해결
일반적인 문제들
카메라 프레임 드롭
- USB 허브 없이 바로 연결하기
- 카메라 해상도 낮추기
- USB 3.0 포트 사용
로봇 동작 지연
- 제어 주파수 확인
- 네트워크 대역폭 확인 (원격 제어 시)
- CPU 사용률 모니터링
다음 단계
고품질 데이터를 수집했다면 이제 모델을 학습시킬 차례입니다:
이제 고품질의 로봇 학습 데이터를 수집하는 방법을 마스터했습니다. 수집한 데이터로 강력한 AI 모델을 만들어보세요!
