이번에 리뷰할 논문은 3D Detection에 관심있는 사람이라면 모두 다 알법한 Pseudo-Lidar 입니다. 다른 3D object detection 논문 리뷰에서 Pseudo-Lidar에 대한 언급은 많이 나오는 반면에 정작 Pseudo Lidar 논문 자체를 리뷰한 사람은 없는 것 같아서 이번 기회에 해보려고 합니다.
Intro
Lidar는 거리를 매우 정밀하게 측정한다는 큰 장점 덕분에 자율주행 시스템에서 필수적인 센서 중 하나지만 가격도 너무 비싸고, 포터블하지도 못하며, 센서 한대에 너무 의존적인 점 등 단점도 만만치 않은 센서 중 하나입니다. 이러한 단점을 해결하기 위해서 지금껏 이미지를 활용한 깊이 추정 연구들이 꾸준히 관심을 받고 있고 연구가 진행되고 있습니다.(Supervised, Semi, Self supervised & stereo, mono etc)
그리고 이러한 깊이 추정 기술의 필요성은 자율주행시스템에서 가장 필수적인 3D object detection을 하기 위함이라고 해도 과언이 아닐 정도로 깊이 정보는 매우 필수적인 정보입니다. 이러한 관점에서 3D object detection에서도 자연스럽게 라이다 정보가 아닌 영상에서 추출된 깊이 맵을 입력으로 3D detection을 수행하려는 연구가 꾸준히 있었습니다.
하지만 영상에서 추정된 깊이 맵을 활용하여 3D detection을 수행한 연구들은 Lidar 기반의 3D detection 방법론들 대비 성능이 매우 크게 차이가 났습니다.(18~19년도 당시 영상 기반 3D detection의 Sota는 평균AP가 10% 근처인 반면, Lidar 를 활용한 방법론들은 66% 정도의 평균AP를 지녔음)
사람들은 이러한 큰 성능 차이에 대해서 아직까지 영상 기반 깊이 추정 기술의 정확도가 많이 부족하기 때문에 검출 성능도 이렇게 차이가 나는구나 라는 식으로 판단하였으며 영상 기반 깊이 추정 기술의 한계점이라는 식으로 판단하였습니다.
하지만 제가 리뷰드릴 논문의 저자는 영상 기반 깊이 추정 기술의 부정확성 때문에 성능이 별로인 것이 아닌, 영상에서 추출된 깊이 영상의 표현 방법의 문제다! 라는 식으로 새로운 제안을 하게 됩니다. 이러한 생각을 하게 된 이유는 그림1에서 보이듯이 그 당시에 SoTa방법론인 stereo depth estimator에서 추정된 깊이 정보가 실제 Lidar와 비교하였을 때 매우 유사하게 매칭되는 등 꽤나 정교한 모습들을 보여주기 때문입니다.
그래서 저자는 영상 기반 깊이 결과가 부정확하다기 보다는 기존의 영상에서 추출한 깊이 정보를 활용하는 3D detector와 Lidar 기반 3D detector가 3차원 정보를 처리하는 과정에서 차이가 있다는 것으로 초점을 맞추고 이 둘에 차이에 대해서 집중적으로 분석하였으며 결국 그 차이가 각 검출기의 성능의 갭을 보였다는 것을 밝혀냅니다.
일반적으로 라이다는 3차원 정보를 가지고 있기 때문에, 3d point clouds형식으로 활용을 한다거나 또는 y축 정보를 눌러서 없에는 Bird’s eye view형식으로 활용합니다. bird’s eye-view의 경우에는 일반적으로 3D detection을 수행할 때 물체의 높이 정보는 너비 정보와 비교하였을 때 그리 중요하지 않다는 판단하에 연산량을 최소화하고자 줄이는 방식?이라고 생각하시면 될 것 같습니다.
아무튼 라이다의 3차원 정보를 위와 같이 표현하였을 때는 물체의 모양이나 크기 자체가 거리에 따라서 일그러지거나 하는 현상이 없습니다. 하지만 기존의 영상에서 추출한 깊이 정보로 3D detection을 하는 방법론들은 3ch RGB 이미지에 1ch Depth map을 concat하여 마치 4채널 영상을 입력으로 넣는 것처럼 진행하였습니다.
저자는 이러한 기존의 방식이 멀리 떨어진 물체에 대해서 추정할 때 매우 어렵다고 말하며 멀리 떨어진 물체들로부터 각 픽셀별 이웃들이 어떠한 그룹으로 뭉치게 되는데 이것들이 결국 정확한 검출을 방해한다는 주장을 합니다. 이 부분에 대해서는 밑에서 다시 설명드리도록 하겠습니다.
아무튼 그리하여 저자는 기존의 방식과 달리 영상에서 추출된 깊이 맵을 마치 3차원 공간 상의 point clouds 또는 여기서 y축 정보를 제거한 bird’s eye-view로 변환하여 기존의 Lidar based 3D detector와 동일한 pipeline의 입력으로 활용하였으며 그 결과 기존 영상기반 3D detector 대비 350% 가량의 성능 향상을 보였다고 합니다.
Pipeline
위에서 방금 막 설명드렸다시피 저자는 기존의 Lidar 기반의 3D detection 파이프라인을 그대로 활용하기 위해서 영상으로 추출한 깊이 맵을 영상이 아닌 Lidar와 동일한 방식으로 3차원 공간상으로 표현한다고 했습니다. 이러한 전반적인 과정은 그림2에서 확인하실 수 있습니다.
결국 계속 반복적으로 말씀을 드릴테지만, 저자는 위에 그림2 중 3번째 단계인 Depth map과, 이를 3차원 공간으로 변환시킨 Pseudo Lidar(4번째 단계) 사이에는 무언가 큰 차이가 있으며 결국 이러한 데이터 표현의 차이가 검출 성능의 차이를 불러일으켰다고 주장을 하는 것입니다.
Pseudo-Lidar generation
일단 Depth estimation에서 추정된 depth map의 특성과 이를 어떻게 Pseudo Lidar로 표현할 수 있는지에 대해서 알아보도록 하겠습니다. 저자는 기본적으로 monocular depth estimation이든 stereo depth estimation 상관없이 영상 기반 깊이 추정 결과를 활용할 수 있으면 된다고 얘기를 하지만 논문에서는 stereo depth estimation을 기준으로 depth estimation에 대해서 설명을 하고 있습니다.
기본적으로 stereo depth estimation에서는 depth map이 아닌 좌, 우 영상간에 disparity map을 출력하게 됩니다. 저희 연구실 사람들이라면 다 아시겠지만 disparity map은 아래 수식과 같이 focal length 및 두 카메라의 baseline에 대한 정보만을 알고 있으면 깊이 결과로 변환을 할 수 있기 때문이죠.
여기서 D, f_{U}, b, Y, u, v는 차례대로 깊이 영상, 초점거리, 베이스라인, Disparity map, 영상 속 x,y좌표를 의미합니다.
아무튼 이렇게 깊이 영상까지 생성하였다면 이제는 이 논문의 메인인 Pseudo Lidar로 표현을 하는 과정이 남아있습니다. Pseudo Lidar로 표현을 바꿔야 한다고 해서 엄청 막 복잡하거나 대단한 무언가라고 생각하실 수도 있는데, 그냥 단순히 2차원 영상 평면의 좌표값을 카메라 좌표계로 변환하다고 생각하시면 됩니다. 수식으로 표현하면 다음과 같습니다.
일단 카메라 좌표계는 3차원 좌표계이므로 x, y, z축에 대해서 각각의 정보들이 존재를 해야만 하는데, 먼저 z축 정보는 깊이 영상의 정보를 그대로 활용하면 되는 것이구요, x와 y정보는 3차원 카메라 좌표계를 2차원 영상 좌표계로 투영하는 과정을 반대로 진행하게 되면 쉽게 구할 수 있게 됩니다.
일반적으로 3차원 좌표계를 2차원 영상 평면으로 투영하는 과정이 깊이 정보값으로 나눈 다음에 초점거리만큼 곱하게 되고 그 다음 원점을 맞춰주기 위해서 카메라 좌표계의 원점을 영상 평면으로 수선의 발을 그렸을 때 위치하는 지점(주점)의 좌표값으로 더해줌으로써 영상 좌표계로 변환을 수행하게 되므로 수식 3과 4는 이를 반대로 수행하였구나.. 라고 이해하면 될 것 같습니다.
일단 기본적인 과정은 위에서 설명한 대로이며, 그 외에 이제 조금 더 세부적인 내용들에 대해서 다루도록 하겠습니다. 저희가 이런식으로 3차원 좌표계와 같이 표현하면 다 끝나는 것이 아니라 어떠한 후처리 과정을 함께 진행해주어야 합니다.
논문에서는 먼저 Lidar와 동일한 height 범위 까지만을 사용하도록 제한을 두었는데, 이는 1미터 이상 위치의 높이에서는 대부분 검출해야할 물체들이 거의 존재하지 않기 때문에, 제거한다하더라도 성능에 큰 영향을 주지 않습니다.
또한 Lidar에서는 각 센서 정보별로 0~1 사이의 범위값을 가지는 reflectance라는 정보가 존재를 합니다. 사실 저도 라이다에 대해서 잘 알지 못해서 이 reflectance에 대해 자세히 알지는 못하지만, 대략적으로 라이다가 결국 빛을 쏘고 반사된 빛을 다시 받아서 거리를 측정하는 센서다보니, 반사된 빛의 양 등을 판단하여 반사율이 적은 정보의 경우에는 그 깊이 결과가 신뢰성이 조금 떨어지는? 그런 것이 아닐까 라는 추측을 해봅니다.
아무튼 이러한 반사율에 대해서 저자는 결국 영상으로 추정한 깊이 결과다보니깐 반사율은 100% 라는 가정 즉 1이라는 가정으로 모든 깊이 정보 값들을 1의 반사율을 가진다고 설정하였습니다.
이렇게 Pseudo Lidar에 대한 후처리마저 다 끝나게 된다면 이제는 기존의 존재하는 Lidar based 3D detector에 입력으로 그대로 넣어줌으로써 학습 및 추론을 수행하게 됩니다. 그래서 사실 방법론 자체는 매우 간단한데, 이렇게 표현 자체를 변경함으로써 매우 큰 성능 향상을 보였다는 점에서 아마 이 논문의 기여도를 높게 평가한 것 같습니다.
Data representation matters
그렇다면 데이터의 표현법을 바꿨다는 이유만으로 왜 이런 성능 차이가 발생하게 되는 것일까요? 저자는 이러한 이유에 대해서 영상 기반 3D detector의 가장 대표적인 핵심 모듈인 2D convolution을 지적합니다.
2D convolution은 저희도 잘 알다시피 고정된 크기의 필터를 가지고 연속적으로 연산을 수행하는 과정을 의미합니다. 이러한 고정된 필터들을 통해서 학습을 할 때는 크게 2가지의 가정이 존재를 하게 되는데, 먼저 첫째로 어떠한 로컬 영역의 이웃 영역들은 유의미한 정보들을 함께 가지고 있다는 것이며 네트워크는 이러한 유의미한 정보들을 위주로 학습을 하게 된다는 것입니다. 그리고 둘째는 모든 이웃들이 동일한 형식으로 연산이 된다는 점이구요. (이는 동일한 weight를 가진 필터로 쭉 연산을 수행하는 점에 대해서 얘기를 하는 것 같습니다.)
아무튼 이러한 특성이 3차원 정보를 잘 활용해야만 하는 3D detection에서 매우 좋지 못한 결과를 초래한다는 점입니다. 가장 먼저, 2차원 정보를 가지는 영상에서 로컬 패치들은 동일한 물체 내에 존재하는 픽셀들만이 물리적으로 동일한 특성을 가진다는 점인데, 만약 물체와 물체의 경계면 또는 전경과 후경의 경계면 등은 아무리 이웃픽셀이라 하더라도 서로 매우 이질적인 특성을 가지므로 유의미한 정보를 취득하기 매우 어렵게 됩니다.
그리고 이러한 현상들은 먼 거리에 물체 즉 원근으로 인해서 작게 보이는 물체들에 대해 더 자주 일어나는 현상이므로 사실 2D detection에서도 작은 물체들에 대해서는 깊이 추정의 결과가 그리 좋지 못하기도 했었죠.
또한 2번째로 컨볼루션 연산은 동일한 웨이트를 가지는 필터 하나로 영상 속 정보들을 다 살펴보기 때문에 각 물체들에 대해 adaptive한 특성을 지니기가 쉽지 않습니다. 영상 속에는 정말로 다양한 물체들이 나타날 수 있으며 각 물체들이 서로 상이한 경우가 있을 것인데, 결국 컨볼루션 연산은 동일한 웨이트를 가지는 필터로 이 상이한 물체들에 대해 동일한 연산을 수행하니 구분력이 뛰어나지 못한다는 것을 말하고자 하는 것 같습니다.
반면에 3D convolution의 경우 또는 같은 2D convolution이라 하더라도 bird’s eye-view를 통해서 연산을 수행하게 되는 경우에는 각 픽셀들의 정보들이 실제 물리적으로 가까운 물체들과 먼 물체들에 대해서 명확하게 정보를 구분하여 표현할 수 있으므로 이러한 뚜렷한 구분력들은 각각의 물체들을 더 명확하게 구분할 수 있도록 할 수 있습니다.
저자의 이러한 주장을 증명하기 위해서 저자는 한가지 간단한 실험을 진행하였습니다. 저자가 실험한 결과는 그림3에서 볼 수 있는데 먼저 그림3의 왼쪽편은 영상 기반 깊이 추정 모델에서 추출된 깊이 맵과 이를 pseudo-lidar로 표현한 결과입니다. 그리고 저자는 2D convolution의 단점인 물체 경계면에서 이웃 픽셀들에 대한 차이성을 잘 고려하지 못하는 단점을 보기 위하여 깊이 맵에 box filter로 컨볼루션 연산을 수행하였습니다.
2차원 깊이 맵이 기존과 비교하였을 때 뿌옇게 된 것을 보니 필터가 아무래도 평균필터인 것 같은데 아무튼 이렇게 컨볼루션 연산이 처리된 결과를 3차원 공간으로 다시 되돌리게 되면 기존의 pseudo lidar와 달리 물체의 모양이 매우 일그러진 것을 확인할 수 있습니다. 게다가 물체의 경계면에 해당하는 깊이 정보들이 매우 넓게 펼쳐지는 것을 확인할 수 있습니다.
즉 3차원 공간상의 물체들은 결국 물리적으로 볼 때 명백한 차이가 존재를 해야하지만, 마치 영상처럼 2차원으로 깊이 맵을 바라보고 이를 2차원 컨볼루션 연산을 수행하게 되면 결국 실제 물리적인 정보들이 다 손상될 수 있다는 것입니다.
물론 저자는 해당 실험에서는 단순히 box filter를 활용한 것이고 실제로 2차원 컨볼루션 기반의 깊이 추정 모델들은 학습을 하면서 보다 더 좋은 표현을 수행할 수 있다고는 얘기하지만, 그럼에도 불구하고 애초에 2차원 컨볼루션이 가지는 단점들은 피해갈 수 없다는 것을 주장하고 싶은 것 같습니다.
Experiments
마지막으로 실험 섹션에 대해서 다루고 리뷰를 마치도록 하겠습니다. 사실 방법론 자체도 저자가 새롭게 모델을 제안하거나 목적 함수를 설계하는 등 복잡한 것들은 전혀 없이 기존의 정보를 표현하는 방법에 대해서 다루는 논문이다보니 실험 세팅도 매우 단순합니다. 영상 기반 깊이 추정 기술로 무엇을 활용하였으며, 3차원 물체 검출 방법론도 그냥 기존에 방법론들을 가져다가 사용했으며 결국 깊이 정보의 표현법에 따라 성능 차이가 극명하게 달라진다는 점을 보여주고 있습니다.
위에 표1은 KITTI 3D object detection의 validation set에 대한 평가입니다. 기존의 영상 기반 3D detection 방법론들과 달리 해당 논문에서는 Pseudo Lidar로 깊이 영상의 표현을 라이다처럼 만들었기 때문에 제일 아래 Lidar 기반 3D detection 모델을 활용하는 모습입니다. 그래서 제일 좌측 검출기 알고리즘 종류로 파란색이 행들이 제일 아래 행들과 동일한 모델들을 활용한 모습이며 입력 자체가 기존 라이다 센서에서 영상으로 추출한 깊이 맵을 pseudo-lidar로 변환하여 활용한 결과라고 보시면 되겠습니다.
전체적으로 표를 살펴보시면 동일한 영상 기반 깊이 결과를 사용했음에도 불구하고 깊이 정보의 표현력 차이(그리고 이러한 표현 차이로 사용되는 검출기의 차이도 포함은 되겠지만)로 인한 성능 향상이 매우 큰 것을 볼 수 있습니다.
게다가 놀라운 점은 monocular가 아닌 stereo 기반으로 추출한 3D detection 결과 차이가 매우 큰 것을 확인할 수 있는데, 이러한 성능 차이는 이제 진짜로 표현력의 차이가 아닌 깊이 맵의 성능 차이가 아닐까 라는 생각이 듭니다. 실제로도 저자는 이 부분에 대해서 매우 흥미롭다고 얘기를 하는데, 왜냐하면 monocular depth를 뽑는데 사용한 방법론 DORN의 경우 stereo based depth estimation 방법론(PSMNet)과 비교하였을 때 거의 약 10배 더 많은 이미지로 학습을 하였으며 심지어 그 데이터 중 일부는 실제 평가용 validation set과도 겹치기 때문에 단일 영상에서 추정한 깊이 결과가 더 좋아야할 것만 같은데 실제 3D detection 결과는 stereo 기반 깊이 추정 결과를 활용하는 것이 훨씬 좋기 때문입니다.
이러한 성능 차이에 대해서 저자는 스테레오 기반 검출이 나아갈 미래다! 라고 얘기를 하는데 아무래도 단일 영상 기반 깊이 추정 및 검출은 현재까지 한계가 있다는 점을 보여주는게 아닐까 생각이 듭니다.
다음은 정성적 결과를 나타낸 것입니다. 두번째 행에서 붉은색 박스는 GT를, 초록색 박스는 모델이 예측한 것을 의미합니다. 유심히 살펴보시면 제일 우측 열인 Font-view는 말 그대로 앞에서 바라본 시각 즉 카메라에서 촬영된 영상 시점으로 이해하시면 될 것 같으며 말 그대로 영상 기반 깊이 추정 결과를 의미합니다.
이러한 결과를 물체를 검출하였을 때 실제 GT box와 비교하여 예측된 결과들이 많이 벗어난 것을 확인할 수 있습니다. 반면 Pseudo-Lidar 형식으로 변환하여 검출을 하게 되면 실제 GT box와 상당히 alignment가 잘 맞아있는 것을 볼 수 있습니다. 물론 거리가 멀리 떨어진 물체에서는 조금 많이 빗나가는 것처럼 보이긴 하지만, front view와 비교하였을 때는 매우 정확함을 알 수 있습니다.
결론
해당 논문은 사실 무언가를 설계하고 제안하였다는 관점에서는 사실 조금 부족하다고 볼 수도 있겠습니다만, 기존의 문제점을 재정의하고 이를 해결하기 위한 과정 그리고 그로 인해서 가져온 매우 큰 성능 향상은 이 논문이 CVPR에 붙는 것이 당연할 정도로 큰 impact를 보여준 것 같습니다.
논문에는 이 외에도 다양한 실험 및 분석들에 대해서 다루고 있으며 내용 자체도 매우 심플하지만 그 임펙트 자체는 매우 크기 때문에 3D detection에 관심있으신 분들은 한번쯤 꼭 읽어보시는 것을 추천드립니다.
stereo방식과 monocular방식의 깊이 추정성능에서 차이가 발생하는건가요 아니면 깊이추정성능 차이는 유사한데 detection성능차이가 나는건가요?
깊이 추정 성능도 아마 다르지 않을까 생각합니다. 애시당초에 stereo 방식은 disparity를 평가하는 방식으로 판단하고 monocular는 depth를 평가하는 방식으로 판단해서 disparity를 depth로 치환하여 Lidar 값과 비교하는 식으로 변환을 해주지 않으면 두 방식의 정확도를 직접적으로 비교하기는 어려울 것 같습니다.
다만 논문에서는 Stereo 방식이 monocular보다 detection 성능이 훨씬 더 좋다는 것을 얘기하고 있으며 제가 생각했을 떄는 이것이 depth estimation의 성능 차이 때문이지는 않을까라는 생각이 듭니다. 한 예로 Pseudo Lidar에서 stereo depth estimation으로 만든 pseudo lidar가 기존 lidar 기반 검출기보다 성능이 낮은 것에 대해 far-object에 대한 depth 정확도가 매우 떨어지기 때문이라고 지적하고 있으며 이후에 나온 Pseudo Lidar++에서는 far object에 대한 깊이 정보도 올바르게 추정함으로써 검출 성능을 향상시키는 방향으로 나아가고 있기 때문에 깊이의 정확도가 검출 성능의 정확도를 향상시킬 수 있다고 생각되어집니다.