본문 바로가기
시스템

BEVStereo로 이해하는 멀티뷰 3D 깊이 추정과 산업용 비전 응용

by 프레스러쉬 2026. 9. 12.

BEVStereo로 이해하는 멀티뷰 3D 깊이 추정과 산업용 비전 응용

카메라만으로 3차원 공간을 이해하려면 결국 핵심은 ‘깊이(Depth)’입니다. 이번 글에서는 AAAI 2023 논문 BEVStereo: Enhancing Depth Estimation in Multi-View 3D Object Detection with Temporal Stereo를 바탕으로, 왜 기존 카메라 기반 3D 인식이 깊이 추정에서 한계를 가지는지, BEVStereo가 이를 어떻게 개선했는지, 그리고 이 아이디어를 산업용 머신비전과 반도체 장비에 어떻게 확장할 수 있는지 살펴보겠습니다.

1. 카메라 기반 3D 인식에서 왜 Depth가 가장 어려운가?

LiDAR는 레이저를 직접 쏘고 되돌아오는 시간을 측정하기 때문에 물체까지의 거리를 상대적으로 직접 얻을 수 있습니다. 반면 일반 카메라는 2차원 영상만 제공합니다. 한 장의 영상만 보고 실제 물체가 5m 앞에 있는지 20m 앞에 있는지 알아내는 것은 본질적으로 애매합니다.

단안(Monocular) 깊이 추정은 물체의 크기, 지면과의 관계, 원근감, 주변 문맥 같은 정보를 이용해 깊이를 ‘추정’합니다. 하지만 이런 방식은 실제 거리 값을 직접 측정하는 것이 아니기 때문에 오차가 생길 수 있습니다. 특히 3D 객체 검출에서는 몇십 cm의 거리 오차도 Bounding Box 위치나 속도 추정에 영향을 줍니다.

BEVStereo 논문은 바로 이 지점을 문제로 봅니다. 기존 멀티뷰 3D 객체 검출 성능이 좋아졌지만, 카메라 기반 방식과 LiDAR 기반 방식 사이의 성능 차이를 만드는 대표 원인 중 하나가 Depth Accuracy라는 것입니다.

2. Temporal Stereo란 무엇인가?

일반적인 Stereo Vision은 좌우 두 카메라가 동시에 촬영한 두 영상을 비교해서 시차(disparity)를 구하고, 이 시차를 통해 깊이를 계산합니다. 그런데 자율주행 차량에는 이미 시간에 따라 연속 영상이 들어옵니다. 그렇다면 현재 프레임과 이전 프레임을 일종의 스테레오 쌍처럼 활용할 수 있습니다. 이것이 Temporal Stereo의 기본 개념입니다.

차량이 움직이면 같은 물체가 이전 프레임과 현재 프레임에서 서로 다른 위치에 보이게 됩니다. 이 변화량을 이용하면 깊이를 더 정교하게 추정할 수 있습니다. 문제는 실제 야외 환경이 이상적인 스테레오 환경과 다르다는 점입니다.

예를 들어 자차가 정지해 있으면 프레임 간 시차가 거의 없어지고, 반대로 주변 차량이나 보행자가 움직이면 두 프레임 간 대응점 관계가 깨질 수 있습니다. 따라서 단순 Temporal Stereo는 실제 도로 환경에서 쉽게 불안정해질 수 있습니다.

3. 기존 MVS 방식의 또 다른 문제, 메모리 폭증

Multi-View Stereo 계열 방식은 보통 여러 깊이 후보를 만든 뒤, 각각의 깊이에 대해 영상 특징을 정렬하고 Cost Volume을 구성합니다. 이 방식은 깊이 정확도를 높이는 데 유리하지만, 후보 깊이를 많이 만들수록 GPU 메모리 사용량이 급격하게 늘어납니다.

논문에서 BEVDepth에 일반 MVS 방식을 단순 결합했을 때 GPU 메모리 사용량은 약 6.49GB에서 24.04GB 수준으로 증가했습니다. 정확도는 좋아지지만, 실제 시스템에 적용하기에는 부담이 큽니다. 특히 임베디드 GPU나 차량용 컴퓨팅 환경에서는 치명적인 문제입니다.

BEVStereo의 핵심은 이 문제를 ‘전체 깊이 영역을 전부 탐색하지 말고, 가능성이 높은 곳만 똑똑하게 탐색하자’는 방식으로 해결한 것입니다.

4. BEVStereo의 핵심 아이디어: μ와 σ를 이용한 Dynamic Temporal Stereo

BEVStereo는 깊이를 탐색할 때 두 개의 값을 사용합니다.

  • μ(mu): 현재 가장 가능성이 높다고 생각하는 깊이의 중심값
  • σ(sigma): 그 깊이 주변을 어느 정도 범위까지 탐색할지 결정하는 값

일반 MVS가 1m, 2m, 3m, 4m처럼 전체 깊이 범위에 많은 후보를 만드는 방식이라면, BEVStereo는 ‘현재 깊이가 약 12m일 가능성이 높다면 10~14m 근처만 세밀하게 보자’는 식으로 탐색합니다.

이렇게 하면 Depth Candidate 수를 줄일 수 있고, Cost Volume도 훨씬 작게 만들 수 있습니다. 결국 연산량과 GPU 메모리를 줄이면서도 깊이 정확도를 유지할 수 있습니다.

5. μ와 σ는 어떻게 갱신되는가?

BEVStereo는 현재 프레임을 Reference, 이전 프레임을 Source로 보고 Homography Warping을 수행합니다. 여러 깊이 후보에 대해 Source Feature를 Reference 시점으로 투영한 뒤, 두 Feature의 유사도를 계산합니다.

이때 각 깊이 후보마다 Confidence가 만들어집니다. Confidence가 높은 깊이 후보에 더 큰 가중치를 주어 μ를 갱신합니다. 즉, 후보들 중 신뢰도가 높은 값 쪽으로 깊이 중심이 이동합니다.

σ 역시 고정값이 아닙니다. μ에 대한 Confidence가 높으면 탐색 범위를 좁히고, Confidence가 낮으면 다시 넓힙니다. 이 방식 덕분에 모델은 깊이를 좁은 범위에서 정밀하게 탐색하면서도, 확신이 없을 때는 다시 넓게 탐색할 수 있습니다.

논문에서는 이 과정을 EM 알고리즘에서 영감을 받은 반복 업데이트 방식으로 설명합니다.

6. Mono Depth와 Stereo Depth를 왜 같이 쓰는가?

Temporal Stereo는 잘 동작할 때 매우 강력하지만 모든 상황에서 안정적이지는 않습니다. 예를 들어 자차가 정지하면 시차 정보가 거의 사라지고, 객체가 빠르게 움직이면 프레임 간 대응점이 불안정해집니다.

그래서 BEVStereo는 단일 영상에서 얻는 Mono Depth와 시간축 스테레오에서 얻는 Stereo Depth를 함께 사용합니다.

Mono Depth는 장면의 문맥과 형태를 이용하기 때문에 정지 상황에서도 어느 정도 안정적입니다. Stereo Depth는 프레임 간 기하 관계가 명확할 때 더 정확한 거리 정보를 제공합니다. 이 둘을 결합하면 서로의 약점을 보완할 수 있습니다.

7. Weight Net은 어떤 역할을 하는가?

BEVStereo는 Stereo Depth를 무조건 신뢰하지 않습니다. Stereo 정보가 잘 맞는 위치도 있고, 그렇지 않은 위치도 있기 때문입니다.

이를 위해 논문은 Weight Net을 사용합니다. Weight Net은 Reference Frame과 Source Frame의 Mono Depth 정보를 비교하여, 해당 위치에서 Stereo Depth를 얼마나 믿을지를 결정하는 Weight Map을 만듭니다.

쉽게 말하면 ‘여기서는 스테레오를 많이 믿자’, ‘여기서는 단안 깊이를 더 믿자’를 픽셀 단위로 결정하는 구조입니다. 최종 Depth는 Mono Depth와 Weighted Stereo Depth를 결합해 생성됩니다.

8. BEV(Bird’s-Eye View)로 왜 바꾸는가?

다중 카메라 영상은 각각의 카메라 좌표계에 존재합니다. 차량 앞, 뒤, 좌우 카메라 영상을 그대로 따로 처리하면 전체 공간 구조를 한눈에 보기 어렵습니다.

그래서 최근 자율주행 3D 인식에서는 각 카메라 Feature를 위에서 내려다보는 형태의 BEV Feature로 변환하는 방식이 많이 사용됩니다. BEV 공간에서는 차량, 보행자, 도로 구조의 위치 관계를 통일된 좌표계에서 다룰 수 있습니다.

BEVStereo도 Depth 정보와 Context Feature를 이용해 카메라 View의 특징을 BEV 공간으로 옮긴 뒤, 3D Detection Head에서 최종 3D Bounding Box를 예측합니다.

9. Size-Aware Circle NMS는 왜 필요한가?

3D Detection 결과에는 서로 겹치는 Bounding Box가 여러 개 생길 수 있기 때문에 NMS(Non-Maximum Suppression)가 필요합니다.

기존 Circle NMS는 Bounding Box 중심 간 거리만 보고 제거 여부를 결정합니다. 하지만 작은 객체와 큰 객체를 동일한 거리 기준으로 처리하면 비합리적인 결과가 생길 수 있습니다.

BEVStereo는 객체의 폭, 길이, 방향을 고려한 Size-Aware Circle NMS를 제안합니다. 즉 단순히 중심 거리만 보는 대신 Box의 실제 크기와 Orientation을 함께 고려하여 중복 Box를 제거합니다.

10. 실제 성능은 얼마나 좋아졌을까?

nuScenes Validation Set 기준으로 기본 BEVDepth와 비교하면 BEVStereo는 다음과 같은 개선을 보였습니다.

방법 mAP mATE NDS
BEVDepth 32.7 70.1 43.3
BEVStereo 34.5 66.5 44.7
BEVStereo + Weight Net 34.6 65.3 45.3

특히 위치 정확도를 나타내는 mATE가 좋아졌고, 전체 종합 지표인 NDS도 상승했습니다.

11. 가장 인상적인 부분은 메모리 효율
방법 GPU Memory mAP NDS
BEVDepth 6.49GB 32.7 43.3
BEVDepth + MVS 24.04GB 34.7 44.9
BEVStereo 8.01GB 34.6 45.3

BEVDepth에 단순 MVS를 붙이면 메모리가 24GB 이상 필요하지만, BEVStereo는 8GB 수준으로 비슷하거나 더 나은 성능을 냅니다. 이것은 논문의 핵심 강점 중 하나입니다.

12. 반복 계산은 정말 효과가 있는가?

논문에서는 μ와 σ를 반복적으로 갱신하는 횟수에 따른 성능도 비교했습니다. 반복 횟수가 0회에서 3회로 증가할수록 mAP와 NDS가 꾸준히 향상되었습니다.

이 결과는 ‘한 번에 깊이를 결정하는 것’보다 ‘현재 추정값을 기준으로 탐색 범위를 좁혀가며 반복적으로 정교화하는 것’이 효과적이라는 점을 보여줍니다.

13. Efficient Voxel Pooling v2

BEVStereo는 알고리즘 정확도뿐 아니라 GPU 메모리 접근 방식까지 개선했습니다. 기존 Voxel Pooling에서는 Thread가 메모리에 비연속적으로 접근하면서 불필요한 Memory Transaction이 발생했습니다.

논문에서는 Thread Mapping과 Shared Memory 사용 방식을 개선한 Efficient Voxel Pooling v2를 제안했고, 해상도 조건에 따라 Latency를 최대 약 40%까지 줄였다고 보고합니다.

산업용 비전에서도 이 부분은 중요합니다. 실제 장비에서는 정확도만큼이나 Latency, GPU 점유율, 메모리 사용량이 중요하기 때문입니다.

14. 산업용 머신비전에 적용한다면?

이 논문은 자율주행을 대상으로 하지만, 아이디어 자체는 산업용 3D 비전에도 충분히 응용할 수 있습니다.

예를 들어 다음과 같은 검사에 적용 가능성을 생각해볼 수 있습니다.

  • JEDEC Tray 높이 검사
  • Wafer 평면도 및 Warpage 측정
  • Glass / Square Wafer 휨 검사
  • 로봇 Pick 위치의 Z 높이 추정
  • 복수 카메라 기반 3D Alignment
  • 부품 자세 및 Tilt 측정
  • 정밀 조립 공정의 깊이 오차 검출

특히 산업 현장에서는 반사, 검은색 재질, 낮은 Texture, 반복 패턴, 조명 변화 등으로 Stereo Confidence가 떨어지는 경우가 많습니다. 따라서 Stereo Depth만 사용하는 것보다, BEVStereo처럼 Mono/Geometry 기반 추정과 Stereo Depth를 결합하는 Hybrid 방식이 더 안정적인 접근이 될 수 있습니다.

15. 산업용 Depth Inspection Engine으로 발전시킨다면

산업용으로 재구성한다면 다음과 같은 구조가 현실적입니다.

Stereo/Depth Camera → Depth Map → Confidence Map → Adaptive Depth Refinement → Plane Calibration → Height / Warpage / Pose 계산 → Pass/Fail 판정

여기서 중요한 것은 단순히 Depth 값을 얻는 것이 아니라 ‘어느 Depth 값이 신뢰할 만한가’를 함께 판단하는 것입니다.

예를 들어 검은 Tray에서는 일부 영역의 Stereo 신뢰도가 낮아질 수 있습니다. 이때 낮은 Confidence 영역만 보정하거나, 주변 Plane 정보와 기하학적 제약을 이용해 다시 계산하는 방식으로 안정성을 높일 수 있습니다.

16. 이 논문에서 배울 수 있는 핵심

BEVStereo의 핵심은 단순히 ‘Stereo를 썼다’는 데 있지 않습니다. 실제로 중요한 점은 다음 세 가지입니다.

  1. 전체 깊이 범위를 무작정 계산하지 않고, 가능성이 높은 깊이 범위만 동적으로 탐색한다.
  2. Mono Depth와 Stereo Depth를 결합해 서로의 약점을 보완한다.
  3. 정확도뿐 아니라 GPU 메모리와 연산 효율까지 함께 최적화한다.

이 세 가지는 자율주행뿐 아니라 산업용 머신비전 시스템을 설계할 때도 그대로 적용할 수 있는 중요한 설계 원칙입니다.

마무리

산업용 비전에서는 흔히 ‘더 좋은 카메라를 쓰면 해결된다’고 생각하기 쉽습니다. 하지만 실제 현장에서는 센서 성능만으로 해결되지 않는 문제가 많습니다. 깊이 센서가 불안정한 영역을 어떻게 검출하고, 어떤 방식으로 다른 정보와 융합하며, 계산량을 어느 수준에서 제한할지가 시스템 성능을 결정합니다.

BEVStereo는 이런 관점에서 상당히 실용적인 힌트를 줍니다. 모든 Depth 후보를 계산하는 대신 동적으로 탐색하고, Stereo 정보가 약할 때는 Mono Depth를 보완적으로 사용하며, BEV 변환 단계의 메모리 접근까지 최적화합니다.

결국 좋은 3D 비전 시스템은 단순히 ‘정확한 모델’이 아니라, 정확도·속도·메모리·안정성을 함께 만족하는 구조여야 한다는 점을 보여주는 논문이라고 할 수 있습니다.

태그

#BEVStereo #DepthEstimation #StereoVision #TemporalStereo #BEV #BirdEyeView #3DObjectDetection #MultiViewCamera #ComputerVision #MachineVision #산업용비전 #3D비전 #깊이추정 #스테레오카메라 #DepthCamera #Jetson #nuScenes #BEVDepth #VoxelPooling #로봇비전 #반도체검사 #Tray검사 #Wafer검사 #Warpage #머신비전

참고 논문: BEVStereo: Enhancing Depth Estimation in Multi-View 3D Object Detection with Temporal Stereo, AAAI 2023.