ARES: Automatic Robot Evaluation System
Jacob Phillips가 제작했습니다.
<img src="https://raw.githubusercontent.com/jacobphillips99/ares/HEAD/assets/ares_system_diagram.png" alt="ARES 시스템 다이어그램"/>
ARES (Automatic Robot Evaluation System)는 오픈 소스(Apache 2.0) 플랫폼으로, ML 모델을 사용하여 로봇 데이터를 자동으로 수집(ingesting), 정리(curating), 평가할 수 있게 합니다. 이를 통해 무거운 인프라를 설정할 필요 없이 정책 성능을 빠르고 정확하게 이해하고, 개선 영역을 식별하며, 새로운 로봇 데이터셋을 생성할 수 있습니다.
연구자들은 특정 작업을 위한 단일 해결책(point-solutions)이나 논문 구현에 치중하는 경향이 있지만, ARES는 노트북부터 클라우드까지 확장 가능한 장기적인 로봇 연구를 위한 일반화된 플랫폼으로 설계되었습니다.
ARES는 사용 편의성에 중점을 두고 단순하고 확장 가능하도록 구축되었습니다. 모든 계산 및 모델 추론은 OpenAI, Anthropic, Gemini, Modal, Replicate 등과 같은 모델 제공업체의 클라우드 API 또는 로컬 리소스를 통해 실행할 수 있으며, 접근을 위해 신용카드만 필요합니다. 복잡한 클라우드 인프라나 GPU 설정이 필요하지 않습니다.
전반적으로 ARES는 세 가지 주요 구성 요소로 이루어져 있습니다:
- Ingestion: VLM(Vision-Language Models)을 사용하여 원시 로봇 데이터를 구조화된 형식으로 자동 변환합니다.
- Annotation: 다운스트림 작업을 위해 롤아웃에 가짜 레이블(pseudo-labels)을 주석 처리합니다.
- Curation and Modeling: 데이터 분포를 이해하고 학습 또는 평가를 위한 데이터를 선택합니다.
ARES는 누구와 무엇을 위한 것인가?
ARES는 로봇 데이터를 이해하기 위한 플랫폼이며, 로봇 개발자와 연구자를 대상으로 합니다. 연구자들과 개발자들은 두 가지 주요 문제에 직면합니다: 특정 작업이나 논문을 위한 단일 해결책 구축과 연구 스크립트에서 프로덕션 도구로의 전환입니다. ARES는 로봇 데이터 이해를 위한 플랫폼을 제공하여 이 두 문제를 모두 해결하고, 새로운 로봇 시스템의 신속한 개발을 가능하게 하는 것을 목표로 합니다.
ARES를 사용하면 다음 작업을 수행할 수 있습니다:
- 정답(ground-truth) 원격 조작 데이터 큐레이션 및 주석 처리
- 로봇 모델 성능 평가
- 정책 개선을 위한 로봇 데이터 배치 분석
개요 (Overview)
스택 (Stack)
ARES는 로봇 연구를 위한 마찰이 적고 사용하기 쉬운 인프라 플랫폼으로 구축되었습니다. 따라서, 로컬에서 설정하기 쉽지만 클라우드 수준의 리소스로 확장하기도 원활한 도구들을 선택했습니다.
- 데이터베이스(Databases): MongoDB, SQLAlchemy, FAISS
- 모델 추론(Model Inference): litellm을 사용하며, OpenAI, Anthropic, Gemini, HuggingFace 등 선택한 모델 제공업체와 연동됩니다.
- 컴퓨팅 오케스트레이션(Compute Orchestration): Modal
- 프론트엔드(Frontend): Streamlit, Plotly
- 개발(Development): Docker, Cursor, VSCode, Pydantic
설치 및 설정 (Installation and Setup)
전제 조건 (Prerequisites)
먼저, 저장소를 클론합니다:
git clone https://github.com/jacobphillips99/ares.git
cd ares
ARES를 자체 프로젝트의 패키지로 사용하려면 아래 지침에 따라 필수 요구 사항을 설치하고 패키지를 설치하세요(편집 모드에서 변경 사항을 적용하려면 -e 추가). 그렇지 않다면, ARES를 로컬에서 실행하려면 Docker 및 Devcontainer 설정 섹션으로 계속 진행하세요.
pip install -r requirements.txt
pip install -e .
Docker 및 Devcontainer 설정
ARES는 쉬운 설정, 컨테이너화(containerization), 배포를 위해 Docker 컨테이너를 염두에 두고 구축되었습니다. 이는 ARES 설정을 빠르고, 쉽고, 일관되게 만듭니다. 우리는 ARES 실행을 위해 Docker 컨테이너 사용을 권장하며, 특히 VSCode/Cursor devcontainer 확장을 활용하는 것을 추천합니다. Dockerfile에는 Python 종속성을 위한 requirements.txt 파일 참조를 포함하여 ARES에 필요한 시스템 패키지가 들어 있습니다. 아래 단계를 따라 Docker Desktop과 VSCode/Cursor devcontainer 확장을 설정하세요.
Docker Desktop 설정
Docker Desktop 웹사이트로 이동하여 최신 버전을 다운로드하세요. 사용 중인 운영 체제에 따라 Docker Desktop 애플리케이션을 설정합니다.
VSCode/Cursor Devcontainer 설정
원하는 IDE를 다운로드하고 설치하세요. VSCode 또는 Cursor 사용을 권장합니다. ARES 디렉터리를 IDE에서 열고(‘파일 > 폴더 열기...’ 사용). 그런 다음 명령 프롬프트를 사용하여 Dev Containers: 컨테이너에서 다시 열기 명령으로 devcontainer를 다시 엽니다. 이렇게 하면 Docker 컨테이너가 빌드되고 ARES 애플리케이션이 시작되며, 컨테이너로 연결된 통합 터미널까지 열립니다.
devcontainer.json 파일에는 data 디렉터리(로봇 데이터 저장용), /tmp 디렉터리(임시 파일 저장용), 모델 가중치 저장을 위한 .cache/huggingface 디렉터리 등 컨테이너에 마운트할 필요한 구성이 포함되어 있습니다.
MongoDB 설정
AnnotationDatabase를 사용하려면 MongoDB 인스턴스를 설정해야 합니다. 저희는 docker-compose를 사용하여 MongoDB 인스턴스를 실행하며, 구성은 mongo-docker-compose.yml을 참조하십시오. 루트 디렉터리에서 셸(shell)로 다음 명령어를 실행하여 MongoDB 인스턴스를 시작할 수 있습니다.
docker-compose -f mongo-docker-compose.yml up -d
이 명령어는 MongoDB 인스턴스를 분리 모드(detached mode)로 시작하고 포트 27017을 통해 호스트 머신에 노출합니다. 이 인스턴스는 컨테이너 재시작 시 자동으로 다시 시작됩니다.
환경 변수
ARES는 API 키와 같은 비밀 정보를 구성하기 위해 환경 변수를 사용합니다. 저희는 devcontainer.json 파일을 사용하여 이러한 환경 변수들을 devcontainer에 마운트(mount)합니다. API 키나 자격 증명과 같은 변수들을 복사해 옵니다. 필요하다면, 컨테이너에 마운트되는 /etc/ssl/certs 디렉터리에 자체 인증서도 추가할 수 있습니다.
IDE와 환경 설정이 완료되면 ARES를 사용하기 준비가 된 것입니다!
구성(Configurations)
ARES의 모든 것은 ares/configs/base.py에 정의된 기본 데이터 단위인 Rollout 객체를 참조합니다. 강화학습 (RL)에서 *롤아웃(rollout)*은 특정 환경에서의 상태(states), 행동(actions), 보상(rewards) 모음입니다. 저희의 목적을 위해, Rollout은 로봇이 작업을 완료하는 것에 대한 정보들의 집합이며, 이는 에피소드(episode)라고도 불립니다.
이러한 롤아웃은 정책 평가(policy evaluation)의 예시일 수도 있고, 인간 원격 조작 세션(human teleoperation session) 데이터일 수도 있으며, 시뮬레이션되거나 합성된 데이터 또는 기타 데이터 형식일 수 있습니다. Rollout 객체는 비디오, 포인트 클라우드(pointclouds), 모터 행동(motor actions), 관절 상태(joint states)와 같은 여러 양식(modalities)의 데이터를 포함할 수 있습니다. 롤아웃은 데이터셋 이름, 로봇 구성 및 구현(robot configuration and embodiment), 데이터 수집 방법 등 에피소드에 대한 메타데이터를 포함할 수도 있습니다.
ingestion 과정 동안 사용자는 롤아웃에 대한 하드코딩된 정보를 제공할 수 있으며, Rollout 클래스의 다른 필드는 ingestion 과정에서 VLM(Vision-Language Model)에 의해 제공됩니다.
Rollout
Rollout 클래스는 재귀적 하위 설정(subconfigurations)인 Robot, Environment, Task, 그리고 Trajectory를 포함합니다. 이 하위 설정들은 Pydantic 필드 또는 다른 하위 설정을 포함할 수 있습니다. 저희는 Pydantic을 단순히 타입 검증에만 사용하는 것이 아니라, 설명(description), 예시(examples), 정규 표현식 패턴(regex patterns)과 같은 풍부한 타입 정보 및 기타 숫자 제약 조건(numerical constraints)을 제공하기 위해 사용합니다. 이러한 Field 객체들은 이후 데이터 수집(ingestion) 과정에서 VLM(Vision-Language Models)의 프롬프트를 자동으로 구성하는 데 사용되며, 이때 필드의 추가 메타데이터도 포함됩니다. 접미사로 _estimate가 붙은 필드들은 데이터 수집 과정 중 VLM에 의해 추론됩니다. 이 설정 클래스들은 재귀적으로 평탄화되거나(flattened) 원래 객체로 재구성될 수 있습니다. 이는 SQLModel 타입을 생성하여 데이터베이스 수집에 사용할 수 있는 유연한 시스템을 가능하게 합니다. 사용자는 기본 설정 클래스를 상속받거나 설정 클래스에 Field 객체를 추가함으로써 자신만의 설정을 정의할 수 있습니다.
<img src="https://raw.githubusercontent.com/jacobphillips99/ares/HEAD/assets/ares_configs.png" alt="ARES Rollout 구성 코드 예시"/>
Data
저희는 Open X-Embodiment 프로젝트의 Tensorflow Datasets 포트에서 데이터를 시작합니다. 이러한 데이터셋이 공개되어 있고 사용 가능하다는 점은 일반적인 로봇 모델 훈련 연구에 매우 좋지만, 이 반복자 스타일(iterator-style)의 데이터셋 구조는 빠른 이해와 분석을 극도로 어렵게 만듭니다. 이것이 본 작업의 많은 부분을 동기 부여했습니다. 아래 데이터 수집 및 주석 처리에서 설명했듯이, 저희는 Open X-Embodiment 데이터를 사용하거나 사용자 정의 데이터셋을 사용할 수 있습니다. Open X-Embodiment 데이터를 다운로드하려면 oxe_downloader 도구를 사용하십시오.
저희는 데이터와 데이터베이스를 Hugging Face Hub에서 제공하며, 여기에는 Open X-Embodiment 프로젝트에서 수집 및 주석이 달린 약 5000개의 롤아웃(rollouts)이 포함되어 있습니다. 사용자는 [pull_from_hub.sh 스크립트](https://github.com/jacobphillips99/ares/blob/main/scripts/release/pull_from_hub.sh)를 실행하여 데이터를 다운로드할 수 있습니다. 이 스크립트는 데이터베이스를 다운로드, 추출 및 복원합니다. 다음 명령을 실행하여 수행할 수 있습니다:
chmod +x scripts/release/pull_from_hub.sh
./scripts/release/pull_from_hub.sh
사용자는 또한 [python -m scripts.release.push_to_hub](https://github.com/jacobphillips99/ares/blob/main/scripts/release/push_to_hub.sh)를 실행하여 자신만의 데이터를 HF Hub에 업로드할 수도 있습니다. 저희는 StructuredDatabase, AnnotationDatabase, EmbeddingDatabase 및 비디오를 허브에 업로드합니다. 데이터는 저장소 루트의 data 디렉토리에 저장되어 있습니다. 이 데이터셋은 다음을 포함합니다:
robot_data.db: 구조화된 메타데이터, 설명, 환경 세부 정보, 성능 지표 등을 포함하는 StructuredDatabase SQLite 데이터베이스.
embedding_data: 궤적 상태(trajectory states), 행동(actions), 설명 및 작업 지침의 FAISS 기반 인덱스를 포함하는 EmbeddingDatabase IndexManager.
annotation_mongodump: 레이블이 지정된 롤아웃, 탐지(detections), 성공 기준 및 MongoDB 인스턴스에 저장된 기타 주석을 포함하는 AnnotationDatabase MongoDB 덤프.
videos: 수집된 롤아웃의 비디오와 프레임을 담고 있는 디렉토리.
데이터 수집 및 주석 달기 (Ingestion and Annotation)
데이터 수집 과정에서는 세 가지 주요 단계를 채택합니다: 구조화된 데이터 수집(structured ingestion), 임베딩 데이터 수집(embedding ingestion), 그리고 접지 데이터 수집(grounding ingestion)입니다. 첫째, 구조화된 데이터 수집은 원시 데이터를 구조화된 형식으로 변환한 다음, 이를 SQL 데이터베이스에 저장합니다. 둘째, 임베딩 데이터 수집은 데이터(예: 텍스트 설명, 비디오, 동작 및 상태 궤적)를 밀집 임베딩(dense embeddings)으로 변환하고, 이를 일련의 FAISS 인덱스에 저장합니다. 셋째, 접지 데이터 수집은 VLM을 사용하여 장면 속 객체를 감지하고, 이후 탐지기(detector) 및 분할기(segmenter) 모델을 사용하여 롤아웃(rollout)에 실제 레이블(ground-truth labels)로 주석을 달고 이를 MongoDB 데이터베이스에 저장합니다.
데이터 수집의 시작점으로는 OpenXEmbodiment 사양을 채택하여, 사용자가 Open X-Embodiment 프로젝트에서 데이터셋을 수집할 수 있도록 합니다. 데이터 수집 과정 중에는 사용자가 자연어 또는 템플릿화된 작업 지침과 같은 에피소드에 대한 하드코딩된 정보를 제공할 수 있습니다. 우리는 원시 데이터를 OpenXEmbodimentEpisode 객체로 로드하며, 이 객체는 highres_image를 교체하거나 state에서 end_effector_cartesian_pos를 가져오는 등 원시 데이터를 처리하기 위한 Pydantic model_validator 함수를 포함합니다. 또한 데이터셋에 대한 메타데이터가 담겨 있는 Open X-Embodiment 스프레드시트에서도 데이터를 가져오며, 이는 ares/extras/oxe.csv 경로에 저장소로 복사됩니다.