1. 개요

숭산텍의 학습 파이프라인은 BC → RL 2단계로 구성되며, 각 단계의 산출물(체크포인트)은 SQLite 기반 ExperimentLogger로 추적됩니다.

2. 전체 학습 흐름

flowchart TB
    A[수집 데이터<br>data/YYYY-MM-DD_*/] --> B[DrivingDataset<br>+ DataLoader]
    B --> C[BC Trainer<br>ResNet18 + FC Head]
    C --> D[BC Checkpoint<br>bc_best.pth]
    
    D --> E{from_bc_checkpoint}
    E --> F[RL Policy Network<br>Actor-Critic]
    F --> G[PPO Trainer<br>+ CARLA Gym Env]
    G --> H[RL Checkpoint<br>rl_best.pth]
    
    H --> I[ONNX Export]
    I --> J[TensorRT 엔진]

3. BC 학습 단계 (Phase 2-A)

항목 설명
입력 Front RGB 224×224
출력 (steering, throttle) ∈ [-1, 1] × [0, 1]
학습 데이터 1~6시간 분량의 autopilot 주행 로그
검증 메트릭 MAE Steering, MAE Throttle, 교차로 통과율
체크포인트 정책 검증 손실 기준 best 저장

4. RL 학습 단계 (Phase 2-B)

4.1 BC Warm-Start

PPO Actor 네트워크는 BC 체크포인트로부터 초기화되며, Critic은 새로 초기화됩니다. 처음 100 에피소드는 backbone을 freeze하여 Critic이 안정화될 시간을 줍니다.

4.2 보상 함수

def compute_reward(state, action, next_state):
    # 차선 유지 보상
    lane_reward = 1.0 - min(abs(state.lane_offset), 1.5) / 1.5
    
    # 충돌 페널티
    collision_penalty = -100.0 if next_state.collision else 0.0
    
    # 조향 부드러움
    steering_smoothness = -0.1 * abs(action.steering - state.prev_steering)
    
    # 전진 보상
    forward_reward = 0.01 * (next_state.x - state.x)
    
    return lane_reward + collision_penalty + steering_smoothness + forward_reward

4.3 PPO 하이퍼파라미터

항목 값
Learning Rate 1e-5 (BC fine-tune 시 작게)
Clip Range 0.2
Gamma 0.99
GAE Lambda 0.95
Epochs per Update 10
Batch Size 256
학습 에피소드 5,000

5. ExperimentLogger 통합

모든 학습 실험은 SQLite 기반 ExperimentLogger로 추적됩니다.

from src.experiment.experiment_logger import ExperimentLogger

logger = ExperimentLogger(db_path='experiments.db')
exp_id = logger.create_experiment(
    name='bc_resnet18_3h_clear_noon',
    type='BC',
    config={'data_hours': 3, 'weather': 'ClearNoon', 'lr': 1e-4},
)

for epoch in range(50):
    train_loss, val_loss = train_one_epoch(...)
    logger.log_metric(exp_id, 'val_loss', val_loss, step=epoch)

logger.update_status(exp_id, 'completed')
report = logger.generate_markdown_report(exp_id)

6. 체크포인트 관리

checkpoints/
├── bc/
│   ├── bc_3h_clear_best.pth
│   ├── bc_3h_clear_last.pth
│   └── bc_3h_clear_meta.json
└── rl/
    ├── rl_warmstart_bc3h_best.pth
    └── ...