SLAM-Former 실습
SLAM-Former 실습
실습 범위
SLAM-Former 공개 코드를 실행해 입력이 순차적으로 처리되는 구조를 확인하고, EuRoC MH01, KITTI, 직접 촬영한 실내 데이터에서 trajectory와 dense reconstruction의 동작을 살펴봤다. 서로 다른 checkpoint를 비교하고 긴 시퀀스에서 발생한 메모리 한계도 함께 기록했다.
각 이미지를 차례로 읽어 frontend와 backend를 호출하는 online 처리 구조를 확인했다.
Sim(3) Umeyama alignment 기준 ATE RMSE는 0.584846 m였다.
반복적인 도로 구조에서 drift가 나타났고, keyframe이 누적된 긴 sequence에서 OOM이 발생했다.
1. 순차 처리 구조 확인
demo.py는 image folder의 frame을 하나씩 읽고 각 frame마다 slam.step(frame_id, img)을 호출한다. step 내부에서는 frontend update와 backend update가 이어지므로, 저장된 전체 시퀀스를 한 번에 입력하는 batch reconstruction이 아니라 frame 단위로 state를 갱신하는 구조임을 확인했다.
slam.step
slam.step을 호출하고, 처리가 끝나면 결과를 저장한다.--vis가 real-time visualization으로 설명되어 있어 실행 중 결과를 확인할 수는 있었지만, 이번 실습에서는 FPS와 frame latency를 별도로 측정하지 않았다. 따라서 sequential online 처리 여부는 확인했지만 wall-clock real-time 성능까지 검증한 것은 아니다.2. Checkpoint와 실행 설정
공개 checkpoint는 입력 해상도와 sequence 길이에 맞춰 구분되어 있었다. 커스텀 데이터와 EuRoC, KITTI 실험에서는 긴 시퀀스를 대상으로 학습된 V1.1-long을 주로 사용하고, target_size=224와 retention_ratio=0.5를 적용했다.
| Checkpoint | Target size | 실습에서 확인한 특징 |
|---|---|---|
| V1 | 518 | 기본 checkpoint. 실내 회전 구간과 KITTI에서 reconstruction이 무너지는 사례가 있었다. |
| V1.1 | 518 | ConvHead를 사용하는 후속 checkpoint. |
| V1.1-long | 224 | 더 긴 sequence 길이로 학습된 checkpoint. office에서는 V1보다 회전 구간이 안정적이었다. |
공통 실행 명령 보기
python slam/demo.py \
--ckpt_path ./weights/V1.1-long.pth \
--image_folder <IMAGE_FOLDER> \
--output_dir <OUTPUT_DIR> \
--target_size 224 \
--retention_ratio 0.5 \
--vis3. EuRoC MH01 정량 평가
EuRoC MH01의 cam0 image stream을 V1.1-long으로 처리했다. 정량 평가에는 MASt3R-SLAM에서 제공하는 TUM 형식의 EuRoC ground truth를 가져와 사용했으며, SLAM-Former의 추정 trajectory에 Sim(3) Umeyama alignment를 적용해 비교했다.

evo_ape에서 Sim(3) Umeyama alignment를 적용해 RMSE 0.584846 m를 얻었다.


4. 실내 데이터 실습
직접 촬영한 office와 room sequence에서는 checkpoint에 따른 안정성, 회전 구간, texture-less surface, 움직이는 사람의 영향을 중심으로 관찰했다.
Office · static scene
V1은 camera가 회전하는 구간에서 map이 무너졌지만, V1.1-long은 같은 유형의 회전을 비교적 안정적으로 통과했다. 복원 결과에서는 벽과 바닥처럼 texture가 적은 영역도 연속적인 구조로 남았다.

Room · dynamic + static scene
작은 room sequence에서는 V1, V1.1, V1.1-long을 비교했다. 이 데이터에서는 V1 · 518이 가장 안정적인 정성 결과를 보였다. 움직이는 사람이 포함되어도 static reconstruction이 즉시 붕괴하는 현상은 보이지 않았다.


Small room 실행 비교
SLAM-Former V1 · 518의 실행 결과와 MASt3R-SLAM의 texture-less 구간 relocalization 실패 사례를 나란히 비교했다.
5. KITTI 반복 구조 실험
KITTI에서는 도로, 차량, 건물, 가로수처럼 비슷한 형태가 반복되는 장면에서 불안정한 동작이 나타났다. V1은 회전 구간에서 쉽게 무너졌고, V1.1-long은 초반에는 진행했지만 일부 sequence에서 keyframe pose가 실제 진행 방향과 다르게 이동했다.
| Sequence | 관찰한 현상 | 해석 |
|---|---|---|
| KITTI 0018 | 초반 진행 후 전방 이동이 정체되고 pose가 흔들림 | 반복 구조에서 backend matching이 불안정했을 가능성 |
| KITTI 0028 | 차량은 전진하지만 일부 keyframe pose가 뒤쪽으로 이동 | 유사한 도로 장면 사이의 잘못된 대응으로 추정 |
| KITTI 0047 | 흰색 point noise가 나타난 뒤 일부 구간에서 회복 | Backend correction이 항상 안정적이지는 않음 |

6. 긴 시퀀스와 메모리 한계
V1.1-long에 2,000 frame으로 구성한 in_2000 sequence를 입력했을 때 약 1,000 frame을 넘긴 시점부터 OOM이 발생했다. 핵심은 입력 frame 수 자체보다 선택되어 남는 keyframe 수다. Keyframe이 증가하면 frontend가 유지하는 KV cache와 backend가 갱신할 map token도 함께 쌓이고, backend가 누적 state를 처리하는 연산량과 memory cost가 커진다.
- 확인한 현상: 1,000 frame 이후 GPU memory 부족으로 실행이 중단됐다.
- 가능한 원인: Keyframe과 함께 누적되는 KV cache·map token, 그리고 이를 다시 처리하는 backend의 비용 증가.
- 추가로 필요한 검증: Keyframe 수에 따른 memory profile, backend 호출 주기와 retention ratio 변화에 따른 사용량 측정.
정리
| 구분 | 확인한 내용 |
|---|---|
| 실행 구조 | Frame을 하나씩 입력하고 frontend와 backend state를 순차 갱신하는 online 구조. |
| 정량 결과 | EuRoC MH01에서 Sim(3) alignment 기준 ATE RMSE 0.584846 m, keyframe 87개. |
| 잘 동작한 조건 | V1.1-long은 office 회전 구간에서 V1보다 안정적인 정성 결과를 보였다. |
| 불안정한 조건 | KITTI의 반복 구조에서 keyframe drift와 geometry noise가 나타났다. |
| 시스템 한계 | 긴 sequence에서 keyframe, KV cache, map token이 누적되어 1,000 frame 이후 OOM이 발생했다. |
| 남은 검증 | FPS·latency, dynamic robustness, checkpoint별 정량 비교, 장기 sequence memory profile. |
향후 계획
- KITTI의 반복 구조에서 SLAM-Former가 실패하는 원인 분석
- EuRoC MH01에 대한 3D reconstruction 정량 평가
- EuRoC MH01에서 다른 baseline method보다 성능이 낮게 나온 원인 분석
Comments