<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>cv-log.log</title>
        <link>https://velog.io/</link>
        <description>Computer Vision &amp; Multimodal 논문 리뷰 공간</description>
        <lastBuildDate>Tue, 08 Jul 2025 05:01:53 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>cv-log.log</title>
            <url>https://velog.velcdn.com/images/cvpose-log/profile/233b3f19-3b85-430e-9794-4053160bc7fe/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. cv-log.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/cvpose-log" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras]]></title>
            <link>https://velog.io/@cvpose-log/DROID-SLAM-Deep-Visual-SLAM-for-Monocular-Stereo-and-RGB-D-Cameras</link>
            <guid>https://velog.io/@cvpose-log/DROID-SLAM-Deep-Visual-SLAM-for-Monocular-Stereo-and-RGB-D-Cameras</guid>
            <pubDate>Tue, 08 Jul 2025 05:01:53 GMT</pubDate>
            <description><![CDATA[<p>✍️ 논문 정보
저자: Zachary Teed, Jia Deng
소속: Princeton University</p>
<p>🔗 깃허브 링크
<a href="https://github.com/princeton-vl/DROID-SLAM">https://github.com/princeton-vl/DROID-SLAM</a></p>
<h1 id="📄-abstract">📄 Abstract</h1>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/39a3a677-8051-4c6c-bb6f-da02f1a48b29/image.png" alt=""></p>
<p>본 논문에서는, 새로운 딥러닝 기반 SLAM 시스템인 <strong>DROID-SLAM</strong>을 소개한다.</p>
<p><strong>DROID-SLAM</strong>은 Dense Bundle Adjustment Layer를 통해 카메라 자세(camera pose)와 픽셀 단위 깊이(pixelwise depth)를 반복적으로 업데이트하는 구조를 갖고 있다.</p>
<p><strong>정확도와 강인성(robustness)이 뛰어나 이전 방식보다 성능이 훨씬 향상</strong>되었고, 치명적인 실패율(catastrophic failures)이 훨씬 적다.
단안 카메라(monocular video, 렌즈가 하나인 일반 카메라)로 훈련했지만, 스테레오(stereo)나 RGB-D 비디오 입력도 활용 가능하여 테스트 단계에서 더 나은 성능을 보여준다.
<img src="https://velog.velcdn.com/images/cvpose-log/post/05ff14f3-e528-4194-9802-3545a255d4e6/image.png" alt=""></p>
<h1 id="📄-introduction">📄 Introduction</h1>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/509d451f-7093-4565-93b4-8a743697bb09/image.png" alt=""></p>
<h3 id="🔍-slam">🔍 SLAM?</h3>
<p><strong>SLAM (Simultaneous Localization and Mapping)</strong>은 다음 두 가지를 동시에 수행하는 기술:</p>
<ol>
<li>환경의 <strong>지도(Map)</strong> 를 생성</li>
<li>그 환경 내에서 <strong>자신의 위치(Localization)</strong> 를 추정</li>
</ol>
<p>이는 <strong>Structure-from-Motion(SfM)</strong> 기법의 일종으로, 장기간 경로 추적의 정확도를 높이는 데 중점을 둔 기술이다. 특히 <strong>자율주행 차량, 로봇</strong> 등의 분야에서 핵심 역할을 한다.</p>
<h3 id="📚-기존-slam-방식들">📚 기존 SLAM 방식들</h3>
<p>초기 SLAM 시스템은 다음과 같은 방식으로 구현:</p>
<ul>
<li><strong>확률 기반 기법</strong> 및 <strong>필터링 방식</strong></li>
<li>지도와 카메라 자세(pose)를 번갈아 최적화하는 방식</li>
</ul>
<p>최근, 정확도를 높이기 위해 <strong>최소제곱 최적화(Least-Squares Optimization)</strong> 기반의 시스템이 주로 사용되고 있다. 이 중 <strong>Bundle Adjustment (BA)</strong> 는 가장 핵심적인 요소로, <strong>카메라 포즈와 3D 맵을 동시에 최적화</strong>하는 역할을 한다.</p>
<h3 id="🧩-기존-시스템-예시--orb-slam3">🧩 기존 시스템 예시 – ORB-SLAM3</h3>
<p>대표적인 기존 시스템인 <strong>ORB-SLAM3</strong>는 다음과 같은 센서를 지원:</p>
<ul>
<li>Monocular (단안)</li>
<li>Stereo (스테레오)</li>
<li>RGB-D</li>
<li>IMU
이처럼 최적화 기반 SLAM 시스템은 다양한 입력을 쉽게 처리할 수 있다는 장점이 있다.</li>
</ul>
<h3 id="⚠️-기존-방식의-한계">⚠️ 기존 방식의 한계</h3>
<p>많은 발전에도 불구하고, 현재의 SLAM 시스템들은 다음과 같은 <strong>강인성 문제</strong>를 겪고 있다:</p>
<ul>
<li>피처 트랙 손실 (lost feature tracks)</li>
<li>최적화 수렴 실패 (divergence in optimization)</li>
<li>드리프트 누적 (accumulation of drift)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/d75dcdbb-f827-4539-bd37-16d7d15d3e99/image.png" alt=""></p>
<h2 id="💡-기존-딥러닝-기반-slam의-접근과-한계">💡 기존 딥러닝 기반 SLAM의 접근과 한계</h2>
<p>최근에는 기존 SLAM의 한계를 극복하기 위해 <strong>딥러닝 기반 접근법</strong>이 활발히 연구되고 있다.<br>주요 시도들은 다음과 같다:</p>
<ul>
<li><strong>수작업 특징(hand-crafted features)</strong>을 <strong>학습 기반 특징(learned features)</strong>으로 대체 </li>
<li><strong>Neural 3D representation</strong>을 이용한 방법 </li>
<li><strong>학습된 에너지 항(energy terms)</strong>을 고전적 최적화 백엔드와 결합하는 방식</li>
<li>완전한 <strong>end-to-end SLAM 학습 시스템</strong> 개발</li>
</ul>
<p>하지만 이러한 딥러닝 기반 방법들조차도 여전히 한계가 있다:</p>
<ul>
<li><strong>강인성(robustness)</strong> 면에서는 나아졌지만,</li>
<li><strong>정확도(accuracy)</strong> 측면에서는 기존 전통 기법(classical method)을 넘지 못하는 경우가 많음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/f3b8dc51-cc22-4cdb-8dc7-bc6d69ac24f8/image.png" alt=""></p>
<ul>
<li><p>입력(Input) : 단안(Monocular), 스테레오(Stereo), 또는 RGB-D 카메라에서 캡처된 비디오 스트림</p>
</li>
<li><p>DROID-SLAM 처리 (DROID-SLAM Processing): 입력 비디오는 DROID-SLAM의 핵심 신경망 아키텍처를 통과한다. 이 부분은 여러 개의 계층으로 표현되어 있으며, 반복적인(recurrent) 처리를 수행함을 보여준다.
반복적 업데이트 (Δ pose, Δ depth): 핵심 처리 블록에서 출력되는 Δ pose (카메라 자세의 변화량)와 Δ depth (픽셀별 깊이의 변화량)는 다시 입력으로 피드백되는 구조로 그려져 있다. 이는 DROID-SLAM이 카메라 자세와 깊이 추정값을 반복적으로 개선해 나가는 과정을 나타낸다. 논문에서는 이를 Differentiable Recurrent Optimization-Inspired Design이라고 설명하며, 특히 Dense Bundle Adjustment 레이어를 통해 이러한 업데이트가 이루어진다고 언급한다 </p>
</li>
<li><p>출력(Output) : 시스템의 최종 출력은 두 가지이다.
1) Dense 3D Map (밀집 3D 지도): 입력 비디오로부터 재구성된 환경의 3차원 지도이다. &quot;Dense&quot;는 환경의 구조가 조밀한 점이나 표면으로 표현됨을 의미한다. 그림의 오른쪽 부분에 건물의 상세한 3D 모델로 시각화되어 있다.
2) Estimated Trajectory (추정된 궤적): 비디오가 캡처되는 동안 카메라가 이동한 경로이다. 그림에서는 3D 지도 주변의 파란색 점선으로 표현되어 있다. SLAM의 주요 목표 중 하나인 에이전트(카메라)의 위치 추정 결과를 보여준다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/f596079d-6d21-4052-b568-a7b5451b7ed9/image.png" alt="">
<img src="https://velog.velcdn.com/images/cvpose-log/post/0b6d9457-9615-48c2-92cc-e0ebbeb2c974/image.png" alt=""></p>
<h2 id="droid-slam-성능">DROID-SLAM 성능</h2>
<h2 id="high-accuracy">High Accuracy</h2>
<ul>
<li><p><strong>TartanAir SLAM Competition</strong>:</p>
<ul>
<li><strong>단안 입력</strong>: 기존 최고 성능보다 <strong>오차 62% 감소</strong></li>
<li><strong>스테레오 입력</strong>: 오차 <strong>60% 감소</strong></li>
<li>→ <strong>모든 트랙에서 1위 기록</strong></li>
</ul>
</li>
<li><p><strong>ETH-3D RGB-D SLAM</strong>:</p>
<ul>
<li>AUC 기준으로 <strong>2등보다 35% 우수</strong></li>
<li>(AUC는 에러 + 치명적 실패율까지 고려하는 종합 지표)</li>
</ul>
</li>
<li><p><strong>EuRoC Dataset</strong>:</p>
<ul>
<li>단안 입력, 실패 0인 방법들 중에서 <strong>오차 82% 감소</strong></li>
<li>ORB-SLAM3 기준으로는 <strong>43% 감소</strong> (11개 시퀀스 중 10개에서 성공한 경우 기준)</li>
</ul>
</li>
<li><p><strong>Stereo 입력 시</strong>:</p>
<ul>
<li>ORB-SLAM3 대비 <strong>오차 71% 감소</strong></li>
</ul>
</li>
<li><p><strong>TUM-RGBD</strong>:</p>
<ul>
<li>실패 0인 방법들 기준 <strong>오차 83% 감소</strong></li>
</ul>
</li>
</ul>
<h2 id="high-robustness">High Robustness</h2>
<p>DROID-SLAM은 기존 시스템들에 비해 <strong>치명적인 실패(catastrophic failure)</strong>가 현저히 적다.</p>
<ul>
<li><p><strong>ETH-3D RGB-D</strong>:</p>
<ul>
<li>DROID-SLAM은 <strong>32개 중 30개</strong> 시퀀스를 성공적으로 추적</li>
<li>반면, 다음으로 성능 좋은 시스템은 <strong>19/32</strong>만 성공</li>
</ul>
</li>
<li><p><strong>TartanAir, EuRoC, TUM-RGBD</strong>:</p>
<ul>
<li>모든 테스트에서 <strong>실패 0건(zero failures)</strong> 기록</li>
</ul>
</li>
</ul>
<p>👉 이는 SLAM 시스템의 실용성에서 매우 중요한 요소로, 실제 환경에서도 신뢰성이 높다는 것을 의미.</p>
<h2 id="strong-generalization">Strong Generalization</h2>
<p><strong>단안 영상(monocular video)만으로 훈련한 하나의 모델이</strong>,  
별도의 재학습 없이 <strong>스테레오 또는 RGB-D 입력에서도 높은 성능</strong>을 보인다.</p>
<ul>
<li>4개의 데이터셋 + 3가지 입력 모달리티(단안, 스테레오, RGB-D)에서  </li>
<li>단 <strong>하나의 모델</strong>, <strong>한 번의 학습</strong>(TartanAir 단안 영상)으로 성능 달성</li>
</ul>
<p>📌 즉, <strong>모델 재학습 없이도 다양한 입력에 일반화</strong>되는 능력을 보여주는 것이 DROID-SLAM의 강력한 특징 중 하나이다.</p>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/ef5e07f2-ac2d-445a-9c7d-86c6f9ea7591/image.png" alt=""></p>
<h2 id="droid-slam-아키텍처">DROID-SLAM 아키텍처</h2>
<h3 id="🔧-핵심-개념-differentiable-optimization-inspired-design">🔧 핵심 개념: Differentiable Optimization-Inspired Design</h3>
<ul>
<li>기존 전통적인 최적화 방식과 <strong>딥러닝 네트워크의 장점</strong>을 결합한 구조</li>
<li>이를 통해 <strong>recurrent iterative updates</strong> (반복 최적화)를 수행</li>
<li>Optical flow 기반의 RAFT 방식에서 영감을 받았지만, <strong>optical flow가 아니라 카메라 자세(pose)와 깊이(depth)</strong>를 직접 업데이트
<img src="https://velog.velcdn.com/images/cvpose-log/post/3fbf1b08-ef1b-4e8c-8b0f-f184436de231/image.png" alt=""></li>
</ul>
<h1 id="recurrent-iterative-update">recurrent iterative update</h1>
<p>1) optical flow를 반복적으로 업데이트하는 RAFT와 달리 카메라 포즈와 깊이를 반복적으로 업데이트한다. RAFT는 두 프레임에서 작동하지만, 저희 업데이트는 임의의 수의 프레임에 적용되어 모든 카메라 포즈와 깊이 맵의 joint global refinement(공동 전역 정밀화)를 가능하게 하며, 이는 긴 궤적과 루프 클로저에 대한 드리프트를 최소화하는데 필수적이다. </p>
<ul>
<li>모든 프레임을 함께 고려하여 최적화하기 때문에 다음과 장점을 가진다.</li>
<li>오차 누적 최소화: 단일 프레임 또는 짧은 시퀀스에 기반한 업데이트는 시간이 지남에 따라 작은 오차가 누적되어 전체 궤적의 정확도가 떨어지기 쉽다. **DROID-SLAM은 전역적인 최적화를 통해 이러한 오차 누적을 효과적으로 줄인다.</li>
<li>루프 클로저 처지(Loop closures): 로봇이나 카메라가 이전에 방문했던 장소로 돌아왔을 때, 이를 인지하고 과거 데이터를 활용하여 현재 위치 및 지도 정보를 보정하는 과정을 루프 클로저라고 한다. DROID-SLAM의 전역 업데이트 방식은 과거의 프레임과 현재 프레임간의 연결(Frame-graph의 장거리 연결)을 활용하여 루프 클로저를 통해 map의 일관성을 높일 수 있다. 
<img src="https://velog.velcdn.com/images/cvpose-log/post/a6977433-40ad-4549-868d-c10b6f3e8b54/image.png" alt=""></li>
</ul>
<p>2) DROID-SLAM에서 카메라 포즈와 깊이 맵의 각 업데이트는 optical flow의 현재 추정치와의 호환성을 최대화하기 위해 카메라 포즈와 dense per-pixel 깊이에 대한 Gauss-Newton 업데이트를 계산하는 미분 가능한 Dense Bundle Adjustment(DBA) 레이어에 의해 생성된다. 이 DBA 레이어는 기하학적 제약 조건을 활용하고 정확도와 견고성을 향상시키며, 단안 시스템이 재학습 없이 스테레오 또는 RGB-D 입력을 처리할 수 있도록 한다. 
<img src="https://velog.velcdn.com/images/cvpose-log/post/ceda2dfe-d104-4df2-ac60-36b5a2e6fb63/image.png" alt=""></p>
<h3 id="핵심-모듈-dba-dense-bundle-adjustment-layer">핵심 모듈: DBA (Dense Bundle Adjustment) Layer</h3>
<ul>
<li><strong>Gauss-Newton 최적화 기법을 딥러닝 구조에 포함</strong></li>
<li>카메라 포즈와 픽셀 단위 깊이 정보를 함께 업데이트</li>
<li>이 과정은 다음을 보장함:<ul>
<li>기존 추정 결과와의 정합성</li>
<li>강인한 제약 조건</li>
<li>다양한 입력 타입(monocular, stereo, RGB-D)에 대한 일반화</li>
</ul>
</li>
</ul>
<h2 id="🔍-기존-방법과의-차이점--deepv2d-ba-net">🔍 기존 방법과의 차이점 – DeepV2D, BA-Net</h2>
<p><strong>DeepV2D</strong> : 깊이 추정과 카메라 자세 추정을 반복적으로 수행하지만, SLAM 전체 구조는 아님</p>
<ul>
<li>bundle adjustment 대신 깊이 업데이트와 카메라 포즈 업데이트 사이를 번갈아 수행함 </li>
</ul>
<p><strong>BA-Net</strong>  : 번들 조정이 포함되어 있지만, depth basis를 사용하는 다른 구조이며 확장성이 떨어짐 </p>
<ul>
<li>bundle adjustment 레이어가 있지만, 해당 레이어는 상당히 다름, 깊이 basis(미리 예측된 깊이 맵 세트)를 선형적으로 결합하는데 사용되는 적은 수의 계수를 통해 최적화하는 반면, 깊이 basis(기저)에 의해 제한되지 않고 per-pixel 깊이를 직접 최적화하기 때문에 &quot;dense&quot;하지 않는다. 또한 BA-NET은 photometric reprojection error(feature space에서)를 최적화하는 반면, DROID-SLAM은 최첨단 flow estimation을 활용하여 기하학적 오류를 최적화한다. </li>
</ul>
<p>📌 <strong>DROID-SLAM은 BA layer를 직접적으로 네트워크 내에 구성</strong>해, 전통적인 구조를 그대로 가져오면서도 <strong>end-to-end 학습이 가능</strong>하게 만든 점이 가장 큰 차별점 !</p>
<h2 id="학습과-실험">학습과 실험</h2>
<ul>
<li>다양한 <strong>데이터셋(4개)</strong>과 <strong>입력 모달리티(3가지)</strong>에서 평가 수행</li>
<li>실험 외에도 <strong>아키텍처 설계와 하이퍼파라미터에 대한 ablation study</strong>도 포함
(Ablation Study는 딥러닝 모델의 성능에 영향을 미치는 구성 요소의 중요도를 분석하기 위해, 해당 요소를 제거하거나 변경하여 모델의 성능 변화를 관찰하는 실험 방법)</li>
</ul>
<p>➡️ 이로써, DROID-SLAM은 <strong>성능, 안정성, 확장성</strong> 세 요소 모두를 만족하는 현대적 SLAM 시스템이라 할 수 있다.</p>
<h2 id="related-work">Related Work</h2>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/ce152b63-2289-4e26-9676-d2214c23d55e/image.png" alt=""></p>
<h3 id="1-slam의-통합-최적화">1. SLAM의 통합 최적화</h3>
<blockquote>
<p><strong>Modern SLAM systems treat localization and mapping as a joint optimization problem.</strong></p>
</blockquote>
<p>현대 SLAM 시스템은 <strong>위치 추정(Localization)</strong>과 <strong>지도 작성(Mapping)</strong>을 <strong>동시에 처리</strong>하는 
<strong>통합 최적화 문제(joint optimization)</strong>로 다룬다. 이로써 두 문제의 상호 의존성을 고려해 더 정확한 결과를 얻을 수 있다.</p>
<p>💡 왜 중요한가?
예전 방식은 위치 먼저 추정 → 지도 구성처럼 순차적이었다. 하지만 지금은 &quot;내가 어디 있는지를 잘 알아야 지도를 잘 만들고&quot;, &quot;지도가 정확해야 위치도 정확히 알 수 있다&quot;는 상호 의존성을 고려해서 둘을 동시에 최적화하는 구조가 더 정확하고 안정적이다.</p>
<h2 id="2-visual-slam-입력-형태와-분류">2. Visual SLAM: 입력 형태와 분류</h2>
<blockquote>
<p><strong>Visual SLAM</strong>은 영상 기반의 SLAM으로, 입력은 다음과 같다:</p>
</blockquote>
<ul>
<li>단안 영상 (Monocular)</li>
<li>스테레오 영상</li>
<li>RGB-D 영상
이러한 방식은 일반적으로 <strong>두 가지 접근법</strong>으로 나뉩니다:</li>
<li><strong>Indirect 방식</strong>  </li>
<li><strong>Direct 방식</strong></li>
</ul>
<h3 id="3-indirect-approach-간접-방식">3. Indirect Approach (간접 방식)</h3>
<ul>
<li>입력 영상을 바로 쓰지 않고, 먼저 <strong>특징점(feature)</strong>을 추출함</li>
<li>추출된 특징점에 대해 <strong>디스크립터(descriptor)</strong>를 붙여 이미지 간 매칭</li>
<li>이후, <strong>재투영 오차(reprojection error)</strong>를 최소화하도록<br><strong>카메라 포즈와 3D 포인트 위치</strong>를 최적화함<br>→ &quot;예상한 점과 실제 이미지에서 찍힌 점 사이 거리 최소화&quot;
📌 장점:  </li>
<li>구조가 단순하고 비교적 안정적<br>📌 단점:  </li>
<li>영상의 풍부한 정보(밝기, 선 등)는 사용하지 않음</li>
</ul>
<h3 id="4-direct-approach-직접-방식">4. Direct Approach (직접 방식)</h3>
<ul>
<li>영상의 <strong>밝기(intensity)</strong>를 그대로 활용해 최적화 진행  </li>
<li>전체 이미지의 밝기 차이(photometric error)를 최소화하는 목적함수를 사용
📌 장점:  </li>
<li>특징점 외에도 <strong>밝기 변화, 선, 텍스처 등 풍부한 정보</strong>를 활용 가능
📌 단점:  </li>
<li><strong>왜곡(rolling shutter)</strong>이나 <strong>조명 변화</strong>에 민감  </li>
<li>photometric error 기반 최적화는 <strong>복잡하고 어려움</strong></li>
<li>해결을 위해 <strong>coarse-to-fine 피라미드</strong> 등 정교한 최적화 기법 필요</li>
</ul>
<h3 id="✅-요약-정리">✅ 요약 정리</h3>
<table>
<thead>
<tr>
<th>구분</th>
<th>Indirect</th>
<th>Direct</th>
</tr>
</thead>
<tbody><tr>
<td>입력 처리 방식</td>
<td>특징점 추출 후 매칭</td>
<td>원본 밝기 정보 직접 사용</td>
</tr>
<tr>
<td>최적화 기준</td>
<td>재투영 오차</td>
<td>밝기 오차 (Photometric error)</td>
</tr>
<tr>
<td>장점</td>
<td>안정적, 빠름</td>
<td>정보 풍부하게 활용</td>
</tr>
<tr>
<td>단점</td>
<td>정보 손실 있음</td>
<td>왜곡에 민감, 최적화 어려움</td>
</tr>
</tbody></table>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/0da712e2-91d6-4235-9a3a-4cfdf5f2a40a/image.png" alt=""></p>
<h2 id="droid-slam의-접근-방식--기존-방식과의-차별점">DROID-SLAM의 접근 방식 – 기존 방식과의 차별점</h2>
<h3 id="indirectdirect-방식과의-비교">Indirect/Direct 방식과의 비교</h3>
<p>DROID-SLAM은 기존 방식인 <strong>Indirect</strong> 또는 <strong>Direct</strong> 중 하나로 딱 떨어지진 않는다.</p>
<ul>
<li>Indirect처럼 <strong>복잡한 전처리 과정 없이</strong> 작동하지만,</li>
<li>Direct보다 <strong>더 넓은 영상 정보를 활용</strong>함 (예: 선, 가장자리 등)</li>
<li>Photometric error 기반이지만, <strong>간접 방식보다 더 부드럽고 안정적</strong></li>
</ul>
<p>📌 핵심 요약:</p>
<blockquote>
<p>우리는 직접 방식의 장점을 가지면서도, 간접 방식보다 <strong>더 풍부한 이미지 표현</strong>과  
<strong>효율적인 최적화 구조</strong>를 가진 하이브리드적 방식이다.</p>
</blockquote>
<h2 id="딥러닝-기반-slam의-도전과-한계">딥러닝 기반 SLAM의 도전과 한계</h2>
<h3 id="최근-연구들은-다음과-같은-방식으로-slam을-시도해-왔다">최근 연구들은 다음과 같은 방식으로 SLAM을 시도해 왔다:</h3>
<ul>
<li>최근 딥러닝이 SLAM 문제에 적용되었다. 많은 연구에서 특징 감지, 특징 매칭 및 이상치 제거, 그리고 localization과 같은 특정 하위 문제에 대한 시스템 훈련에 초점을 맞추었다. </li>
<li><strong>SuperGlue</strong>: 특징점 매칭 및 검증을 수행, 정교화 + 2-view 포즈 추정을 훨씬 더 강력하게 만들도록 설계 </li>
<li><strong>DS2-SLAM</strong>: 단일 영상 기반 위치 추정  </li>
<li><strong>DUSMANU et al.</strong>: Structure-from-Motion(SfM) 파이프라인을 딥러닝화</li>
</ul>
<p>하지만 대부분은 다음과 같은 한계가 있다:</p>
<ul>
<li>다른 연구에서는 SLAM을 end-to-end로 훈련하는 데 초점을 맞추었다. 이러한 방법은, </li>
<li><strong>Full SLAM 시스템</strong>이 아님 </li>
<li><strong>소규모 장면 재구성</strong>에 한정되어 있음  </li>
<li><strong>Loop closure</strong>, <strong>global BA (Bundle Adjustment)</strong>와 같은 핵심 기능 없음<br>→ DROID-SLAM은 이를 모두 포함한 <strong>전체 파이프라인</strong>을 갖고 있음</li>
</ul>
<h2 id="deepfactors와의-차이점">DeepFactors와의 차이점</h2>
<blockquote>
<p>DeepFactors는 학습된 depth basis를 사용하여 장면을 표현한다.</p>
</blockquote>
<ul>
<li>DeepFactors는 초기 CodeSLAM을 기반으로 구축된 가장 완전한 Deep SLAM 시스템이다. 포즈 및 깊이 변수의 공동 최적화를 수행하며 단거리 및 장거리 루프 클로저가 가능하다. BA-Net과 유사하게 DeepFactors는 추론 중에 학습된 깊이 basis의 매개변수를 최적화한다. </li>
<li>이는 학습 데이터에 과하게 의존하게 되고, <strong>새로운 데이터셋으로의 일반화가 어려움</strong></li>
<li>반면, DROID-SLAM은 <strong>픽셀 단위 depth 추정</strong>을 직접적으로 수행하여,<ul>
<li>학습된 basis에 의존하지 않고 대신 픽셀 단위 깊이를 최적화한다. </li>
<li>이를 통해 깊이 표현이 훈련 데이터 세트에 묶여 있지 않기 때문에 <strong>새로운 장면이나 데이터셋에 더 잘 일반화</strong>됨</li>
</ul>
</li>
</ul>
<h2 id="결론">결론</h2>
<p>DROID-SLAM은 다음을 동시에 만족하는 <strong>하이브리드 최적화 딥러닝 기반 SLAM 시스템</strong>:</p>
<ul>
<li>간접 방식처럼 구조적이고 효율적이며  </li>
<li>직접 방식처럼 풍부한 영상 정보 사용  </li>
<li>기존 딥러닝 기반 시스템보다 <strong>더 정확하고 더 일반화 가능함</strong></li>
</ul>
<h1 id="approach">Approach</h1>
<h2 id="approach--입력-구조-및-상태-변수">Approach – 입력 구조 및 상태 변수</h2>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/f8200dc8-a906-4ac7-9be6-14d3f92b85c1/image.png" alt=""></p>
<p>DROID-SLAM은 <strong>연속된 영상 프레임</strong>을 입력으로 받아서 다음 두 가지를 추정:</p>
<ol>
<li>카메라의 궤적 (trajectory)</li>
<li>환경의 3D 지도 (map)</li>
</ol>
<h3 id="내부-상태-변수-for-each-frame-t">내부 상태 변수 (for each frame t)\</h3>
<p>네트워크는 시간 순으로 정렬된 영상 프레임 {Iₜ}을 입력으로 받는다.<br>각 시간 t에 대해 두 가지 상태 변수(state variable)를 유지한다:</p>
<ul>
<li><strong>Gₜ (카메라 자세)</strong> ∈ SE(3): 위치 + 회전, t시점의 **카메라 자세 (pose)</li>
<li><strong>dₜ (역깊이 맵)</strong> ∈ ℝ+^{H×W}: 각 픽셀의 깊이 → &quot;1 / 깊이&quot; 형태로 사용, t시점 프레임의 <strong>역깊이 맵 (inverse depth)</strong>
이 두 변수는 영상 프레임이 들어올 때마다 <strong>점진적으로 최적화</strong>된다.</li>
</ul>
<h3 id="frame-graph-𝓥-𝓔-프레임-간-연결-구조">Frame Graph (𝓥, 𝓔): 프레임 간 연결 구조</h3>
<p>DROID-SLAM은 프레임 간의 <strong>공시야성(co-visibility)</strong>을 표현하기 위해 <strong>프레임 그래프 (𝓥, 𝓔)</strong> 를 동적으로 구성한다.</p>
<ul>
<li><strong>정점 𝓥</strong>: 각 영상 프레임  </li>
<li><strong>간선 𝓔</strong>: 두 프레임이 <strong>같은 장면(같은 3D 지점)</strong>을 관측할 경우 연결됨<br>→ 즉, <strong>Iᵢ와 Iⱼ가 겹치는 시야를 가지면 (i, j) ∈ 𝓔</strong>
이 프레임 그래프는 <strong>학습 시와 추론 시 모두 실시간으로 구성</strong>된다.</li>
</ul>
<h3 id="업데이트와-루프-클로저loop-closure">업데이트와 루프 클로저(Loop Closure)</h3>
<ul>
<li>각 포즈(G) 또는 깊이(d) 업데이트 이후,<br><strong>공시야성(co-visibility)</strong>에 따라 프레임 그래프를 재계산함</li>
<li>만약 <strong>카메라가 이전에 지나간 장소로 되돌아오면</strong>,  
해당 프레임을 그래프 상에서 <strong>장거리 연결(long-range edge)</strong>로 추가함<br>→ 이를 통해 <strong>루프 클로저(loop closure)</strong> 를 수행할 수 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/85ba357e-e86e-4f07-83ea-5cd17ce141a7/image.png" alt=""></p>
<h2 id="droid-slam-핵심-구조--recurrent-bundle-adjustment">DROID-SLAM 핵심 구조 – Recurrent Bundle Adjustment</h2>
<p>DROID-SLAM의 성능을 뒷받침하는 핵심 구조는<br><strong>ConvGRU + DBA(Differentiable Bundle Adjustment)</strong>가 결합된 반복 최적화 구조</p>
<p>아래는 논문에 등장하는 모듈 구성도에 대한 설명:</p>
<ul>
<li>영상 간 관계(hᵢⱼ)를 기반으로 반복적으로 카메라 포즈(G)와 깊이(d)를 업데이트하는 구조이다.</li>
</ul>
<h3 id="구성-요소">구성 요소</h3>
<h4 id="하단-입력-상태-변수들">하단: 입력 상태 변수들</h4>
<ul>
<li><strong>G</strong>: 각 프레임의 <strong>카메라 포즈 (Pose)</strong>  </li>
<li><strong>d</strong>: 각 프레임의 <strong>역깊이 맵 (Inverse Depth Map)</strong>
이 두 상태 변수는 초기에는 추정값으로 시작하며, 학습 및 추론 과정에서 반복적으로 업데이트된다.</li>
</ul>
<h4 id="초록-박스-dba-dense-bundle-adjustment">초록 박스: DBA (Dense Bundle Adjustment)</h4>
<ul>
<li>Gauss-Newton 기반의 번들 조정 모듈</li>
<li>여러 프레임 간의 <strong>2D-3D 대응 관계</strong>를 활용하여 카메라 포즈 G와 깊이 d를 공동 최적화</li>
<li>반복적으로 호출되며, <strong>gradient가 흐를 수 있도록 Differentiable</strong>하게 설계됨</li>
</ul>
<h4 id="파란-박스-convgru-convolutional-gru">파란 박스: ConvGRU (Convolutional GRU)</h4>
<ul>
<li>프레임 간의 상태 정보를 <strong>순환적으로 업데이트</strong>하는 구조</li>
<li>Conv 연산 기반이므로 영상의 공간 정보를 보존함</li>
</ul>
<p><strong>입력:</strong></p>
<ul>
<li>현재 관계 상태 <strong>hᵢⱼ</strong> (i번 프레임과 j번 프레임 사이)</li>
<li>각 프레임 간의 <strong>photometric error, projection error</strong></li>
</ul>
<p><strong>출력:</strong></p>
<ul>
<li>다음 상태(hᵢⱼ)</li>
<li>손실 함수 계산을 위한 항 <strong>Lₚ</strong></li>
</ul>
<h4 id="lₚ-loss">Lₚ (Loss)</h4>
<ul>
<li>각 프레임 쌍(i, j)마다 <strong>포즈 G, 깊이 d</strong>를 기반으로 손실 함수 <strong>Lₚ</strong>를 계산</li>
<li>얼마나 잘 정렬되었는지를 평가하고, 이를 통해 학습이 진행됨</li>
</ul>
<h4 id="cᵢⱼ-hᵢⱼ">Cᵢⱼ, hᵢⱼ</h4>
<ul>
<li>프레임 간 연결(edge) 상태를 나타냄<ul>
<li><strong>hᵢⱼ</strong>: 프레임 쌍의 숨겨진 상태값 (hidden state)</li>
<li><strong>Cᵢⱼ</strong>: 상태 업데이트를 위한 메시지/컨텍스트 정보</li>
</ul>
</li>
</ul>
<h4 id="반복-구조-×-e-만큼-반복">반복 구조 (× |E| 만큼 반복)</h4>
<ul>
<li>이 전체 구조는 <strong>프레임 간 연결 개수(|E|)</strong> 만큼 반복 수행됨</li>
<li>모든 프레임 쌍의 관계를 순환적으로 고려하여 카메라 위치와 깊이 지도를 점진적으로 정밀하게 조정함</li>
</ul>
<h3 id="요약">요약</h3>
<p>DROID-SLAM은 그래프 기반 구조 위에 <strong>ConvGRU → DBA → 상태 업데이트 → 반복</strong> 순서를 통해<br>정밀한 위치 추정과 맵 구성을 실현한다.</p>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/d9cb3102-41f6-4fcf-9230-785a7b7fd77a/image.png" alt=""></p>
<h2 id="31-feature-extraction-and-correlation">3.1 Feature Extraction and Correlation</h2>
<p>DROID-SLAM은 각 프레임 이미지에서 특징(feature)을 추출하여 프레임 간의 관계를 계산(correlation)하는 구조를 갖고 있으며, 이 과정은 RAFT의 구조에서 차용되었다.</p>
<h3 id="feature-extraction-특징-추출-네트워크">Feature Extraction: 특징 추출 네트워크</h3>
<p>각 입력 이미지는 두 개의 네트워크를 통해 처리:</p>
<ul>
<li><p><strong>Feature network (g_θ):</strong><br>각 이미지에서 dense feature map을 추출, 상관 관계 볼륨 세트를 구축하는 데에 사용<br>→ 이 feature map은 <strong>correlation volume 계산에 사용</strong></p>
</li>
<li><p><strong>Context network:</strong><br>학습 중 내부 상태(state) 업데이트를 돕는 정보를 제공, 업데이트 연산자의 각 적용 중에 네트워크에 주입 
→ 업데이트 연산이 수행될 때 <strong>context feature가 주입됨</strong></p>
</li>
</ul>
<p>네트워크 구성:</p>
<ul>
<li>6개의 residual block(잔차 블록)과 3개의 downsampling layer(다운 샘플링 레이어)를 사용  </li>
<li>출력 해상도는 입력 해상도의 1/8 수준 (조밀한 특징 맵을 생성)</li>
</ul>
<h3 id="correlation-pyramid-프레임-간-상관-피라미드">Correlation Pyramid: 프레임 간 상관 피라미드</h3>
<p>프레임 그래프의 각 edge (i, j) ∈ E 에 대해, 다음과 같이 <strong>4D 상관 볼륨 (correlation volume)</strong>을 계산:</p>
<p><img src="https://velog.velcdn.com/images/cvpose-log/post/db3bdace-0db7-4207-8799-9f0b361192d4/image.png" alt="">
→ 두 이미지 gθ(Iᵢ), gθ(Iⱼ)의 feature map 간 <strong>모든 픽셀 쌍의 내적 (dot product)</strong> 계산
이후, 마지막 두 차원에 대해 average pooling을 적용하여 <strong>4단계 correlation pyramid</strong>를 구성한다.(RAFT와 유사)</p>
<h3 id="correlation-lookup-상관-볼륨-탐색-연산자">Correlation Lookup: 상관 볼륨 탐색 연산자</h3>
<ul>
<li>주어진 위치 주변의 픽셀들을 대상으로 상관 볼륨 값을 추출하는 연산자  </li>
<li>H × W 격자에서 값을 bilinear interpolation(선형보간법을 2차원으로 확장)으로 얻어냄  <blockquote>
<p>bilinear interpolation 참고) <a href="https://ideadummy.tistory.com/88">https://ideadummy.tistory.com/88</a></p>
</blockquote>
</li>
<li>모든 레벨의 correlation pyramid에 적용한 뒤, 최종적으로 feature vector를 얻기 위해 concat</li>
</ul>
<p>이 lookup 연산자는 <strong>업데이트 네트워크의 입력</strong>으로 사용되며, 포즈/깊이 업데이트 시 상호 관계 정보를 정교하게 추출하는 데 사용된다.</p>
]]></description>
        </item>
    </channel>
</rss>