# Mobile VLA 추론 분석 및 현황 보고서 (2026-02-12)

## 1. 개요
최근 추론 성능 개선 작업 중 발견된 **"액션 고정(Action Stuck)"** 현상에 대한 원인 분석과 **"첫 프레임 안전성(First-Frame Safety)"** 복구 완료 사항을 정리한 리포트입니다.

---

## 2. 주요 해결 사항 (Fixed)

### ✅ First-Frame Safety (첫 프레임 안전성) 복구
- **문제**: 모델이 첫 프레임부터 급격한 액션을 내뱉는 현상 발생. 특히 INT8 모드에서 `policy_head` 경로를 찾지 못해 안전 로직이 비활성화됨.
- **해결**: 
    - `inference_server.py`에서 `policy_head`(또는 `act_head`)를 동적으로 찾아내도록 수정.
    - LSTM History Buffer가 0일 때 강제로 `[0.0, 0.0]`을 반환하고 히스토리를 초기화하는 로직 복구 완료.
- **결과**: 모든 세션의 첫 프레임은 안전하게 정지 상태로 시작됨을 확인.

### ✅ 추론 속도 최적화 (Inference Speedup)
- **문제**: 프레임당 추론 지연 시간이 약 5.4초로 매우 느림.
- **해결**: `AutoProcessor`를 매번 로드하던 중복 코드를 제거하고 `__init__`에서 1회만 로드하도록 최적화.
- **결과**: **5.4s -> 1.5s (약 3.6배 향상)**.

### ✅ 오프라인 시뮬레이션 환경 구축
- **문제**: 실제 로봇 없이 모델 성능 분석 불가.
- **해결**: `scripts/simulate_offline.py` 개발. H5 데이터셋 기반으로 MSE/MAE 측정 및 Trajectory 시각화 가능.

---

## 3. 현재 직면한 핵심 문제 (Current Blockers)

### 🚨 Vision Blindness (시각 지능 상실) 및 액션 고정 현상
현재 모델(INT8 기반)이 **이미지 변화를 무시하고 일정한 액션만 출력**하는 치명적인 문제가 발견되었습니다.

| 지표 | 상태 | 비고 |
| :--- | :--- | :--- |
| **언어 민감도** | ✅ 양호 | "Go backward", "Stop" 등 명령어 변경 시 액션 값이 변함 (LLM 생존) |
| **비전 민감도** | ❌ **상실** | 입력 이미지가 변해도 액션 값이 소수점 8째 자리까지 동일하게 고정됨 (`[0.96929854, 0.00650335]`) |
| **원인 가설 1** | 양자화 손실 | INT8로 변환되면서 비전 프로젝터의 미세한 특징값이 유실(Collapsing)됨 |
| **원인 가설 2** | 입력 정규화 불일치 | CLIP 이미지 전처리(Mean/Std)가 학습 당시와 달라 이미지를 '노이즈'로 인식함 |
| **원인 가설 3** | 체크포인트 적용 오류 | LoRA 대신 베이스 가중치만 로드되어 실제 액션 제어 능력이 부족함 (act_head 로드 여부 확인 필요) |

---

## 4. 향후 계획 (Next Steps)

1. **FP16 정밀도 재검증**: 메모리 부족 문제를 해결하여 FP16 모드에서도 액션 고정 현상이 발생하는지 대조군 테스트 수행.
2. **Vision Projector 보호**: 양자화 시 비전 관련 레이어를 제외하거나, 더 높은 비트(INT4 -> INT8)로 정밀도 조정.
3. **Weight Loading 로직 점검**: `act_head` 가중치가 체크포인트에서 실제로 반영되고 있는지 `state_dict` 정밀 비교.
4. **Instruction Format 정렬**: 학습 시 사용된 정확한 프롬프트 포맷(`<grounding>...`)과 일치시키기.

---
**보고자: Antigravity AI Assistant**
**관련 문서**: `docs/action_stuck_diagnostic_20260212.md`, `docs/offline_simulation_guide_20260212.md`
