왜 데이터 수집이 중요한가?

Imitation Learning의 성공은 데이터의 품질과 양에 달려 있습니다. 잘 수집된 데이터는 AI 모델이 작업을 학습하는 핵심입니다.

데이터셋 예시

LeRobot으로 수집된 실제 체스 로봇 데이터셋의 예시입니다. 1500개의 체스 움직임을 학습한 ACT 모델의 데이터를 시각화한 것입니다:

LeRobot 체스 데이터셋 시각화 - 카메라 뷰와 로봇 관절 데이터

데이터 수집 개요

LeRobot에서 데이터 수집은 다음 요소로 구성됩니다:

  1. 로봇 상태: 관절 각도
  2. 시각 정보: RGB 카메라 이미지 (Depth 카메라도 가능함)
  3. 명령: 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 모델 학습하기

실전 튜토리얼

실제 프로젝트로 배우기

축하합니다!

이제 고품질의 로봇 학습 데이터를 수집하는 방법을 마스터했습니다. 수집한 데이터로 강력한 AI 모델을 만들어보세요!