Skip to main content
Summary

성능 개선은 작은 수정의 누적이다

로봇 정책의 성능을 높일 때 가장 흔한 실수는 "더 좋은 모델"부터 찾는 것이다. 물론 모델 구조와 하이퍼파라미터도 중요하다. 하지만 실제 로봇에서는 카메라가 2cm만 틀어져도, 조명이 바뀌어 물체 색이 다르게 보여도, 시연자가 집는 순서가 매번 달라도 성공률이 크게 흔들린다.

따라서 튜닝의 출발점은 모델 교체가 아니라 실패 원인을 좁히는 것이다. 좋은 실험은 한 번에 하나씩 바꾼다. 데이터가 문제인지, 환경이 문제인지, 학습 설정이 문제인지, 배포 시 지연이 문제인지 분리해서 봐야 한다. 작은 개선을 기록하고 누적하면 성공률은 안정적으로 오른다.

성능 개선을 위한 실전 튜닝AI 생성 이미지

학습 전에 에피소드를 프레임 단위로 본다

학습 전에 반드시 데이터셋을 눈으로 확인해야 한다. LeRobot에서는 로컬 시각화 CLI인 lerobot-dataset-viz를 이용해 기록된 에피소드를 Rerun 뷰어에서 볼 수 있다. Hub에 올라간 데이터셋은 --repo-id로 열고, 로컬 폴더의 데이터셋은 --root와 --mode local을 함께 지정한다.1

lerobot-dataset-viz \
  --repo-id 사용자명/데이터셋이름 \
  --episode-index 0

예전 워크숍 자료나 포크에서는 visualize_dataset.py 같은 스크립트명이 보일 수 있다. 하지만 새 프로젝트에서는 현재 설치한 LeRobot의 공식 문서와 lerobot-dataset-viz --help를 기준으로 삼는 편이 안전하다.

이 과정에서는 단순히 "영상이 잘 나오는지"만 보는 것이 아니라, 정책이 배울 만한 행동인지 확인해야 한다.

  • 물체와 그리퍼가 카메라에 계속 보이는가?

  • 시작 자세가 너무 제각각이라 태스크가 불필요하게 어려워지지 않았는가?

  • 시연자가 같은 문제를 매번 비슷한 순서로 해결하는가?

  • 중간에 손이 멈추거나 방향을 잃은 장면이 섞여 있지 않은가?

  • 행동이 너무 빠르거나, 목표가 애매하게 바뀌지 않는가?

  • 카메라 프레임 누락, 검은 화면, 지연, 흔들림이 없는가?

  • state, action, timestamp, 영상 프레임이 서로 어긋나지 않는가?

프레임 단위 검토는 귀찮지만 효과가 크다. 정책은 "의도"를 배우지 않는다. 데이터에 남은 관찰값과 행동의 관계를 배운다. 사람이 보기에는 사소한 망설임이라도 모델에는 "이 상태에서는 이렇게 흔들려도 된다"는 신호가 된다.

문제가 있는 에피소드는 과감히 제외한다. 특히 목표를 놓쳤다가 다시 잡은 장면, 중간에 카메라 밖으로 물체가 사라진 장면, 시연자가 실수 후 억지로 복구한 장면은 별도로 표시한다. 복구 행동을 일부러 학습시키려는 목적이 아니라면, 이런 데이터는 기본 정책의 안정성을 떨어뜨릴 수 있다.

실패 장면을 모아 추가 시연을 설계한다

성공률을 높이는 데이터 추가 수집은 무작정 에피소드를 늘리는 일이 아니다. 평가 롤아웃을 보고 실패가 반복되는 상태를 찾은 뒤, 그 상태 주변의 시연을 집중적으로 보강해야 한다.

예를 들어 집기 태스크에서 실패가 다음처럼 나뉜다고 하자.

  • 물체 접근 각도가 틀어져 집기 전에 밀어 버림

  • 집기는 성공하지만 들어 올릴 때 미끄러짐

  • 목표 위치 근처에서 팔이 과하게 흔들림

  • 특정 조명에서 물체 경계가 흐려짐

  • 물체가 왼쪽 끝에 있을 때만 접근 경로가 불안정함

이때 "성공 시연 100개 추가"보다 "왼쪽 끝 위치에서 천천히 접근해 안정적으로 집는 시연 20개"가 더 나을 수 있다. 실패가 일어나는 구간을 좁혀서 보강해야 정책이 실제 약점을 메운다.

LeRobot의 실제 로봇 워크플로에서도 처음에는 고정된 조건에서 충분한 시연을 모으고, 이후 위치나 잡는 방식 같은 변화를 천천히 늘리는 접근이 권장된다. 또한 같은 하드웨어 설정이라면 텔레오퍼레이션, 녹화, 평가에서 같은 로봇 ID를 사용해야 보정 파일이 일관되게 적용된다.2

데이터 품질이 모델 선택보다 먼저다

실전에서는 데이터 품질이 모델 선택보다 더 크게 작용할 때가 많다. 큰 모델을 쓰더라도 시연이 불안정하면 불안정한 행동을 배운다. 반대로 작고 단순한 정책도 깨끗한 데이터와 일관된 환경에서는 꽤 높은 성공률을 낼 수 있다.

좋은 시연은 대체로 다음 특징을 가진다.

  • 느리다.

  • 순차적이다.

  • 목표가 명확하다.

  • 불필요한 되돌림이 적다.

  • 같은 상황에서 같은 방식으로 행동한다.

  • 카메라가 이해할 수 있는 정보를 충분히 담고 있다.

여기서 "느리다"는 답답하게 움직이라는 뜻이 아니다. 제어 주기 안에서 상태 변화가 충분히 관찰될 만큼 부드럽게 움직이라는 뜻이다. 너무 빠른 조작은 영상과 행동 사이의 대응을 어렵게 만든다. 특히 접촉이 중요한 작업에서는 빠른 손동작 하나가 성공과 실패를 가른다.

실제 LeRobot 기반 실험 사례에서도 부주의한 텔레오퍼레이션 데이터는 성능을 떨어뜨렸고, 배경 잡음이나 불필요한 물체를 줄이며 순차적인 움직임을 기록했을 때 정책이 더 안정적으로 동작했다는 보고가 있다.3

환경을 고정하고, 필요한 변화만 넣는다

정책은 학습 때 본 관측 분포에 강하게 묶인다. 관측 분포란 카메라 영상, 로봇 상태, 물체 위치, 조명, 배경처럼 정책 입력으로 들어오는 조건들의 범위다. 학습 때는 흰 책상에서만 봤는데 평가 때 체크무늬 매트와 그림자가 생기면, 사람에게는 같은 태스크라도 모델에게는 다른 장면이 된다.

초기 성능을 안정화할 때는 다음을 고정한다.

  • 카메라 위치와 각도

  • 카메라 이름과 해상도

  • 조명 방향과 밝기

  • 작업대 배경

  • 불필요한 물체

  • 로봇 시작 자세

  • 물체의 초기 위치 범위

  • 로봇 ID와 캘리브레이션 파일

특히 카메라 이름은 사소해 보이지만 중요하다. 학습 데이터에서 front 카메라가 정면을 의미했는데 배포 환경에서 다른 카메라가 같은 이름으로 들어오면 정책은 잘못된 관측을 받는다. 배포할 때 확인했던 것처럼, 학습과 평가의 입력 정의는 반드시 같아야 한다.

변화를 넣을 때도 한꺼번에 넣지 않는다. 먼저 물체 위치만 조금 넓힌다. 그다음 색상, 배경, 조명처럼 다른 축을 추가한다. 변화가 많아질수록 필요한 데이터도 늘어난다. 데이터가 충분하지 않은 상태에서 변화를 크게 넣으면 정책은 일반화하는 것이 아니라 헷갈리기 쉽다.

전처리와 후처리를 섞지 않는다

성능 튜닝에서 자주 생기는 혼란은 "어디서 값을 바꿨는지" 모르는 것이다. 관측 정규화, 이미지 크기 조정, 상태 선택, 행동 스케일 변환, 행동 스무딩이 학습 코드와 평가 코드 여기저기에 흩어져 있으면 재현이 어렵다.

LeRobot에는 환경 전처리·후처리 계층과 정책 전처리를 분리하는 개념이 있다. 환경 전처리는 환경이나 로봇에서 나온 원시 관측을 정책이 쓰기 쉬운 표준 형식으로 바꾸는 역할을 한다. 예를 들어 중첩된 로봇 상태를 observation.state로 정리하거나, 특정 환경의 이미지 방향을 데이터셋 규칙에 맞게 바꿀 수 있다. 반면 정책 전처리는 모델이 요구하는 정규화 같은 변환을 담당한다.4

이 구분을 지키면 실험이 깔끔해진다.

  • 카메라 이미지 방향 수정: 환경 전처리

  • 로봇 상태에서 필요한 관절값만 선택: 환경 전처리

  • 관측 평균·분산 정규화: 정책 전처리

  • 모델 출력 행동을 실제 로봇 명령 범위로 변환: 환경 후처리 또는 명확히 정의된 행동 변환 계층

  • 행동을 부드럽게 만드는 필터: 배포 파이프라인에서 별도 기록

중요한 원칙은 하나다. 학습 때 적용한 변환과 평가 때 적용한 변환이 같아야 한다. 학습에서는 정규화된 상태를 넣고 평가에서는 원시 상태를 넣으면, 좋은 모델도 실패한다.

학습 안정화 기법은 하나씩 적용한다

데이터와 환경을 정리한 뒤에는 학습 설정을 조정한다. 단, 여러 설정을 한꺼번에 바꾸면 무엇이 효과를 냈는지 알 수 없다.

먼저 관측 정규화를 확인한다. 로봇 관절값, 그리퍼 값, 이미지 픽셀 값의 범위가 서로 크게 다르면 학습이 불안정해질 수 있다. 정규화는 값을 비슷한 범위로 맞춰 모델이 특정 입력에 과도하게 끌리지 않게 한다.

이미지 기반 정책에서는 데이터 증강도 도움이 된다. LeRobotDataset v3 문서도 학습 시점의 이미지 변환을 통해 밝기, 대비, 채도, 선명도 같은 변화를 적용할 수 있다고 설명한다.5 작은 밝기 변화, 약한 색상 변화, 미세한 크롭은 카메라 노이즈에 대한 강건성을 높일 수 있다. 하지만 증강이 실제 태스크의 의미를 깨뜨리면 안 된다. 예를 들어 좌우 방향이 중요한 작업에서 무분별한 좌우 반전은 잘못된 행동을 학습시킬 수 있다.

행동이 떨린다면 행동 스무딩을 검토한다. 스무딩은 연속된 명령을 부드럽게 이어 주는 방법이다. 다만 너무 강한 스무딩은 반응성을 떨어뜨린다. 접촉 직전처럼 빠른 보정이 필요한 순간에 로봇이 둔해질 수 있다.

시퀀스 길이와 청크 크기도 중요하다. 시퀀스 길이는 정책이 과거를 얼마나 볼지와 관련이 있다. 청크 크기는 한 번에 예측하는 행동 묶음의 길이로 이해하면 된다. 짧으면 반응은 빠르지만 장기 계획이 약할 수 있고, 길면 움직임은 매끄러워질 수 있지만 상황 변화에 둔해질 수 있다. 태스크가 단순 접근인지, 여러 단계를 거치는 조립인지에 따라 적절한 값이 달라진다.

모델은 성공률만으로 고르지 않는다

두 정책을 비교할 때 성공률만 보면 위험하다. 실제 로봇에 배포할 모델은 다음 조건도 함께 만족해야 한다.

  • 추론 지연이 제어 주기 안에 들어오는가?

  • GPU 또는 CPU 메모리를 안정적으로 사용하는가?

  • 장시간 실행해도 프레임 드롭이 없는가?

  • 행동이 부드러운가?

  • 실패했을 때 위험한 방향으로 움직이지 않는가?

  • 같은 초기 조건에서 결과가 지나치게 들쭉날쭉하지 않은가?

예를 들어 큰 모델이 오프라인 평가에서는 성공률이 높지만 추론이 느려 실제 로봇 제어 주기를 놓친다면 배포용으로는 부적합하다. 반대로 작은 모델이 성공률은 약간 낮아도 지연이 짧고 행동이 안정적이라면 현장에서는 더 나은 선택일 수 있다.

평가 표에는 최소한 다음 항목을 남긴다.

항목의미
성공률정해진 기준을 만족한 에피소드 비율
평균 완료 시간태스크를 끝내는 데 걸린 시간
추론 지연관측 입력 후 행동 출력까지 걸린 시간
제어 주기 유지율목표 주기를 놓치지 않은 비율
메모리 사용량배포 장비에서 안정적으로 실행 가능한지 확인
실패 유형충돌, 미끄러짐, 오인식, 중간 정지 등

모델 선택은 "가장 높은 점수"가 아니라 "실제 로봇에서 반복 실행 가능한 정책"을 고르는 일이다.

유사 태스크로 확장할 때는 분포 차이를 줄인다

한 태스크에서 잘 동작한 정책을 비슷한 태스크로 옮길 때도 주의가 필요하다. 컵을 오른쪽 상자에 넣는 정책이 컵을 왼쪽 상자에 넣는 태스크를 바로 잘할 것이라고 기대하면 안 된다. 사람에게는 비슷해도 모델에게는 목표 위치, 접근 경로, 배경, 물체 색상, 초기 자세가 모두 바뀐 문제일 수 있다.

확장할 때는 새 태스크에서 달라지는 조건을 먼저 적는다.

  • 물체 위치가 달라지는가?

  • 물체 색상이나 재질이 달라지는가?

  • 목표 위치가 바뀌는가?

  • 카메라에서 보이는 크기와 방향이 달라지는가?

  • 필요한 접촉 방식이 달라지는가?

  • 배경이나 조명이 달라지는가?

그다음 달라진 조건을 포함한 소량의 고품질 데이터를 추가한다. 핵심은 "많이"가 아니라 "분포 차이를 정확히 메우는 것"이다. 기존 데이터와 새 데이터를 섞을 때도 새 조건이 너무 적으면 모델이 기존 조건에만 머물 수 있고, 새 조건이 너무 많으면 기존 성능이 흔들릴 수 있다. 작은 비율로 시작해 평가하면서 조정한다.

실전 튜닝 루프

성능 개선 루프는 다음 순서로 운영하면 좋다.

  1. 평가 에피소드를 10회 이상 기록한다.

  2. 성공과 실패를 명확한 기준으로 나눈다.

  3. 실패 장면을 원인별로 분류한다.

  4. 데이터셋을 프레임 단위로 다시 확인한다.

  5. 나쁜 시연을 제거하거나 수정한다.

  6. 반복 실패 상태에 대한 추가 시연을 수집한다.

  7. 환경 조건을 고정하거나 필요한 변화만 추가한다.

  8. 전처리·후처리 설정을 학습과 평가에서 일치시킨다.

  9. 하나의 학습 설정만 바꿔 재학습한다.

  10. 실제 로봇에서 같은 기준으로 다시 평가한다.

이 루프를 표로 남기면 다음 실험이 쉬워진다.

실험바꾼 것데이터 수성공률주요 실패다음 조치
A기준선5060%왼쪽 물체 접근 실패왼쪽 위치 시연 추가
B왼쪽 위치 20개 추가7075%들어 올릴 때 미끄러짐집기 후 상승 구간 보강
C행동 스무딩 약하게 적용7080%목표 위치 근처 흔들림청크 크기 비교

이렇게 기록하면 막연한 튜닝이 실험이 된다. 성공률이 오르지 않아도 원인을 배운다. 어떤 데이터가 효과가 없었는지, 어떤 환경 변화가 치명적이었는지, 어떤 모델이 실제 배포에 무거웠는지 알게 된다.

핵심 정리

로봇 학습의 성능 향상은 한 번의 큰 수정으로 끝나지 않는다. 좋은 데이터, 일관된 환경, 명확한 전처리, 배포 가능한 모델을 조금씩 맞춰 가는 과정이다.

가장 먼저 볼 것은 손실값이 아니라 실제 롤아웃이다. 실패한 장면을 보고, 그 실패를 설명할 수 있는 데이터를 찾고, 부족한 상태를 다시 수집한다. 카메라와 조명, 로봇 보정 파일을 고정한다. 필요한 변화는 명시적으로 데이터에 넣는다. 모델은 성공률뿐 아니라 지연과 안정성까지 보고 고른다.

정책은 우리가 기록한 세계 안에서 배운다. 더 안정적인 세계를 보여 주고, 실패가 일어나는 경계를 정확히 보강할수록 로봇은 더 안정적으로 움직인다.

참고

1Using Dataset Tools · Hugging Face

2Imitation Learning on Real-World Robots · Hugging Face

3AI Robotics: A Field Report on Imitation Learning with LeRobot

4Environment Processors · Hugging Face

5LeRobotDataset v3.0 · Hugging Face

책 목록

LeRobot 실전 가이드: 데이터 수집부터 로봇 배포까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기