주제 정보
- 유형: 자율주행 인지 스택의 가장 아래 계층 — "카메라 한 대로 거리를 복원한다". 이 블로그가 다룬 LSS(깊이 분포를 감독 신호로 받아 BEV를 만든 원조)·BEVFormer·KITTI 계보에서 '그 깊이를 어디서 얻는가' 축을 맡는 참조 구현이다
- 논문: Digging Into Self-Supervised Monocular Depth Estimation — ICCV 2019 · arXiv 1806.01260(2018-06-04 제출 → 2019-08-17 v4) · DOI 10.1109/ICCV.2019.00393
- 저자/소속: Clément Godard · Oisin Mac Aodha · Michael Firman · Gabriel J. Brostow — Niantic(AR 게임 Pokémon GO 개발사) + UCL(Brostow 교수)
- 모델 구성: ResNet18 인코더 + U-Net 디코더(11M 파라미터) + 포즈 추정 네트워크 · 입력/출력 640×192(1024×320 변형) · Adam, 20 에포크, 배치 12 · 단일 Titan Xp에서 스테레오 8h / 단안 12h / 혼합 15h 학습
- 핵심 수치: KITTI Eigen split(개선 정답) — Abs Rel 0.090(단안) / 0.085(스테레오) / 0.106(혼합 MS) · RMSE log 0.137 · δ<1.25 0.914. 학습은 39,810 트리플렛, 검증 4,424 — 모두 지상 진실 깊이 없이 영상만으로
- 인용: Semantic Scholar 2,585회(영향력 있는 인용 782회) · OpenAlex 2,541회 — 연도별 2024년 461 → 2025년 370 → 2026년 185(9월까지)로 7년이 지나도 인용이 멈추지 않는다
- GitHub 지표: ⭐4,504 · 🍴987 · 워처 62 · 열린 이슈 32 · 2019-05-02 생성 · 마지막 커밋 2022-01-30 · 태그·릴리스 0개 · 토픽 = depth-estimation, self-supervision, pytorch · 후속 nianticlabs/manydepth ⭐665 (CVPR 2021)
- ⚠️ 라이선스: GitHub 표기는
NOASSERTION이지만LICENSE원문은 Niantic의 "Monodepth v2 License" — 비상업 전용("This Software is licensed under the terms of the following Monodepth2 license which allows for non-commercial use only"). 상업적 사용은 partnerships@nianticlabs.com 협의 필요 — AI 모델 가중치를 제품에 넣으려는 팀이 가장 먼저 확인해야 하는 줄 - 원문: 참조 구현 github.com/nianticlabs/monodepth2 · 논문 arXiv 1806.01260 · 게재본 DOI 10.1109/ICCV.2019.00393
핵심 내용
단안 깊이 추정은 원래 잘 정의되지 않은 문제다. 두 번째 시점(스테레오, 또는 시간축의 다음 프레임)이 없으면 삼각측량이 불가능하기 때문이다. Monodepth2의 답은 "구조를 복잡하게 만들지 말고 학습 신호를 설계하자"였다. 스테레오 쌍이나 단안 영상 시퀀스만 주면, 네트워크가 깊이와 에고 모션(포즈)을 동시에 풀면서 스스로 지도를 만든다 — 라이다 지상 진실 없이도 KITTI 벤치마크에서 당시 자기지도 SOTA를 갈아치웠다. 논문이 내세운 장치는 딱 세 가지다.
- ① 픽셀별 최소 재투영 손실(minimum reprojection loss): 기존 방법은 여러 소스 프레임의 재투영 오차를 평균냈다. 그러면 대상 픽셀을 가리는(occlusion) 프레임의 오차까지 더해져 경계가 뭉개진다. 소스 중 가장 잘 맞는 하나만 쓰면 가림·경계 문제가 크게 줄어든다 — 논문은 "이미지 테두리 아티팩트 감소, 가림 경계 선명도 향상"으로 요약한다
- ② auto-masking(정지 픽셀 자동 마스킹): 자기지도 단안 학습은 '카메라는 움직이고 장면은 정지해 있다'는 가정 위에 서 있다. 앞차가 나와 같은 속도로 달리거나, 신호 대기로 차가 멈추면 이 가정이 깨져 예측 깊이에 무한 깊이 '구멍'이 생긴다. 해법은 프레임 간 외관이 변하지 않는 픽셀을 이진 마스크(µ∈{0,1})로 자동 제외하는 것 — 학습 파라미터 추가 없이 순전파에서 계산한다. 카메라가 멈춘 프레임 전체를 무시하는 효과까지 생긴다
- ③ 전해상도 멀티스케일 샘플링: 저해상도 깊이 맵으로 계산한 사광 오차는 경계에서 모호하다. 저해상도 깊이를 입력 해상도로 업샘플한 뒤 재투영·재샘플해 오차를 계산하면("패치 매칭"에 가까운 효과) 각 스케일이 같은 목표 — 고해상도 영상 복원 — 를 향하게 된다
- 효과(ablation): 640×192 단안 기준선 Abs Rel 0.115 → 세 장치를 모두 켠 0.090. auto-masking을 끄면 0.120, ImageNet 사전학습까지 빼면 0.138로 후퇴한다. 해상도별로는 416×128 0.128 → 640×192 0.115 → 1024×320 0.115(학습 9~15시간)
- 비교 우위: 단안 학습만으로 Zhou(0.176) · GeoNet(0.132) · DDVO(0.126) · EPC++(0.120)를 앞서고, 스테레오 학습에서는 Monodepth 원판(0.109)과 후처리까지 붙인 SuperDepth(0.090)를 추월한다. 완전 지도학습 최강 DORN(0.072)과의 격차도 이 시점에 크게 좁혀졌다
- 학습된 것을 그대로 쓸 수 있다:
python test_simple.py --image_path assets/test_image.jpg --model_name mono+stereo_640x192한 줄로 이미지 한 장의 깊이가 나오고,--pred_metric_depth를 붙이면 미터 단위 절대 깊이까지 나온다(스테레오로 학습한 모델만 가능) - 일반화: KITTI로만 학습하고 Make3D 데이터셋에서 평가해도 Abs Rel 0.322로 당시 단안 자기지도 최고 수준(Zhou 0.383 · DDVO 0.387)을 유지했다
왜 유명한가 / 활용 가치
- 자기지도 단안 깊이의 사실상 기준선: ⭐4,504 · 🍴987은 이 분야 오픈 구현 중 최상위권이고, 인용 2,585회는 "이후 논문이 반드시 비교표에 넣는 모델"이라는 뜻이다. 후속작 ManyDepth(CVPR 2021, ⭐665)는 Monodepth2 위에 비용 볼륨을 얹은 개선판이다
- 센서 BOM을 바꾼다: 라이다는 차량 한 대당 수천 달러, 카메라는 수십 달러다. 깊이를 라벨 없이 영상에서 얻는 순간 "값싼 센서 + 더 많은 학습"이라는 조합이 성립한다 — LSS가 BEV로 올리기 위해 깊이 분포를 썼다면, Monodepth2는 그 분포를 라벨 없이 만드는 쪽에 있다
- 재현성 공개 수준: 학습 시간(8/12/15시간), 하드웨어(단일 Titan Xp), 해상도·사전학습 ablation, 평가용 개선 지상 진실(개선 정답 사용 시 오히려 순위가 바뀐다는 지적까지)을 논문과 저장소에 함께 공개했다. 이후 파이프라인들이 코드를 그대로 가져다 쓰는 이유다
- 한계도 그대로 공개(그대로 인용해야 하는 항목): ① 비상업 라이선스 — 상용 제품에는 쓸 수 없다 ② 저장소는 2022-01-30 이후 커밋 없음, 태그·릴리스 0개 — "완결된 연구용 참조 구현"으로 읽어야 한다 ③ 단안 학습 모델은 스케일이 모호해 상대 깊이만 준다(절대 깊이는 스테레오 학습 필요) ④ KITTI 도메인 편향 — 야간·악천후 취약성은 BDD100K가 데이터로 못 박은 그 문제다 ⑤ 학습 가정을 깨는 픽셀(정지 물체·동일 속도 물체)은 auto-masking이 학습에서 제외하므로, 그 영역의 깊이는 여전히 데이터로 메워야 한다
시사점 및 결론
Monodepth2가 남긴 것은 정확도 몇 포인트가 아니라 손실 함수 설계가 데이터 가정 위반을 어떻게 흡수하는가에 대한 교본이다. 가림은 '평균 대신 최소'로, 정지·동일 속도는 '자동 이진 마스크'로, 저해상도 모호성은 '고해상도에서 재투영'으로 처리했다 — 어느 것도 새 네트워크를 만들지 않았고, 그 아이디어들은 이후 자기지도·3D 재구성 파이프라인에 사실상 표준으로 흡수됐다. 자율주행 관점의 의미는 분명하다. BEV와 플래닝이 요구하는 3D 기하가 라이다 없이, 라벨 없이 카메라 영상에서 복원될 수 있음을 KITTI 리더보드 위에서 증명했고, 동시에 그 성능이 레인 검출·적대적 공격과 같은 층에서 입력 신뢰에 기대고 있다는 구조적 약점도 함께 드러낸다. 실제 코드를 가져다 쓸 팀이라면 성능보다 비상업 라이선스와 유지보수 중단(2022)을 먼저 확인해야 한다 — 알고리즘은 표준이 됐지만, 이 저장소 자체는 '역사적 기준선'으로 쓰는 것이 정확하다.
원문: https://github.com/nianticlabs/monodepth2
목록으로 돌아가기