Edge deployment

SLAM은 클라우드에서 실행되지 않는다 — 로봇, 드론, 헤드셋, 휴대폰에서, 엄격한 지연 시간과 전력 예산 아래 실행된다. **엣지 배포(edge deployment)**는 인식 파이프라인(점점 더 신경망을 포함하는)을 가져와 NVIDIA Jetson, 휴대폰 SoC, XR 헤드셋 같은 임베디드 컴퓨트에서 실시간으로 동작하게 만드는 기술이다.

학습된 프론트엔드 내보내기

현대 SLAM 시스템은 수공예 구성 요소를 신경망으로 대체한다: 키포인트를 위한 SuperPoint, 매칭을 위한 LightGlue/SuperGlue, 조밀 깊이 사전을 위한 단안 깊이 네트워크. 이들은 PyTorch에서 학습되지만, PyTorch는 임베디드 타깃에 적합한 런타임이 아니다. 표준 경로는 다음과 같다.

  1. ONNX로 내보내기 — 프레임워크 중립적인 그래프 형식. 이 단계에서 문제가 조기에 드러난다: 동적 형태(가변 키포인트 개수!), 지원되지 않는 연산, 제어 흐름 모두 주의가 필요하다.

    torch.onnx.export(
        model, dummy_image, "superpoint.onnx",
        input_names=["image"],
        output_names=["scores", "descriptors"],
        dynamic_axes={"image": {2: "height", 3: "width"}},
    )
  2. TensorRT로 컴파일 — NVIDIA의 추론 최적화기는 레이어를 결합하고, 빠른 커널을 선택하고, Jetson/RTX GPU에서 큰 속도 향상을 위해 FP16 또는 INT8로 양자화한다.

    trtexec --onnx=superpoint.onnx --fp16 --saveEngine=superpoint.engine

    플랫폼별 대안도 존재한다: 이동성 있는 기준선으로서 ONNX Runtime, Apple 하드웨어의 Core ML, Android 휴대폰의 TFLite/NNAPI.

  3. C++ 파이프라인에 통합 — 컴파일된 엔진은 SLAM 프론트엔드에서 호출되어 원래의 검출기/매처를 대체하며, 이상적으로는 Jetson과 같은 통합 메모리 디바이스에서 제로 카피 이미지 입력으로 이루어진다(CPU와 GPU가 물리적 메모리를 공유하므로, 잘 짜여진 파이프라인은 절대 프레임을 복사하지 않는다).

실전에서의 양자화. FP16은 GPU급 엣지 하드웨어에서 보통 공짜로 얻는 이득이다. INT8은 대표적인 이미지들에 대한 캘리브레이션 패스가 필요하다 — SLAM 프론트엔드에서 “대표적”이란 여러분의 배포 장면을 의미하며, 중요한 검증 기준은 분류형 정확도 점수가 아니라 다운스트림 품질(매칭 인라이어 비율, 트래킹 안정성)이다. Jetson급 모듈은 추가로 GPU에서 지원되는 네트워크를 오프로드할 수 있는 DLA 가속기 코어를 제공한다.

Jetson 벤치마킹

데스크톱 GPU에서의 숫자는 엣지에 대해 거의 알려주지 않는다. Jetson급 디바이스에서는 종단간으로 벤치마크해야 한다.

정직한 지표는 목표 전력 모드에서, 뜨거운 상태로 측정한, 목표 디바이스에서의 전체 파이프라인 프레임 레이트다.

흔한 함정

SLAM에서의 의미

“논문은 30 FPS로 동작한다”와 “내 로봇에서 동작한다” 사이의 간극이 정확히 이 주제다. 학습된 프론트엔드는 트래킹, 맵핑 스레드와 함께 엣지 예산에 맞아야만 실제 시스템에서 자리를 얻을 수 있으며, 배포 제약(FP16/INT8, 고정 입력 크기, 제한된 메모리 대역폭)은 종종 SuperPoint와 XFeat 같은 더 가벼운 검출기 사이의 선택을 좌우한다. 디바이스에서 프로파일링하고 최적화할 수 있는 엔지니어가 SLAM을 실제로 배송하는 사람들이다.

관련 문서