나의 정리
- 논문이 지적한 문제점: 비교적 cost가 높은 LiDAR, Stereo image가 아닌 monocular image 만으로는 성능이 많이 떨어진다. monocular image 만으로도 좋은 성능을 내는 3D Object detection network를 만들고자 했다.
- 해결 방안: 다른 sub-network를 사용하지 않고 RPN만을 사용해서 3D object detection을 진행한다. 2D, 3D anchor를 같이 정의해서 2D scale과 3D depth의 상관관계를 prior로 활용하여 proposal을 생성한다. 더 나은 3D bbox 예측을 위해 depth-aware convolution을 이용하여 spatially-aware feature를 생성한다.
Abstract
3D object detection은 주로 비싼 LiDAR 센서나 Stereo RGB image를 사용하여 진행했고 만약 monocular image만을 사용하게 되면 성능이 매우 낮아진다. 이는 monocular image에는 depth 정보가 없기 때문이다. 성능 차이를 없애기 위해서 이 논문에서는 3D Region Proposal Network를 사용하여 추가적인 network, data, multiple stage를 사용하지 않고 좋은 성능을 냈다.
image space에서 생성된 convolution feature를 3D Box가 사용할 수 있게 해 2D와 3D의 기하학적 관계를 활용한다.
Introduction
이전 3D Object Detection 연구들의 경우에는 비싼 LiDAR나 Stereo RGB 이미지를 이용해 depth map을 계산하여 진행하였다. 이는 monocular image only 방식보다 많은 계산양이나 비용이 들게 되지만 mono image의 가장 큰 문제인 depth 정보의 부재로 인하여 성능은 큰 차이로 monocular image only method가 더 낮다.
기존의 monocular 3d object detection의 경우 point cloud generation, semantic segmentation, 2D detection, depth estimatione들과 같은 추가적인 sub-network를 사용했는데 sub-network는 noise를 제공할 수 있고 최고점의 한계를 야기할 수 있다. 이 논문은 Figure 1과 같은 single end-to-end Region Proposal Network를 사용하여 3D object detection을 진행하게 된다.
직관적으로 생각해보면, 2D detection을 3D detection의 가이드 역할과 성능 향상을 위해 활용 할 수 있을 거라고 생각이 된다. 따라서 2D, 3D 공간 모두 공유되는 anchor와 classification target을 활용하는 것으로 3D detection 문제를 재구성한다. 이 방식으로 3D detection이 2D detection과 동등한 성능을 낼 수 있었다고 한다.
이제 camera coordinate space 내에서 3D localization을 하는 문제가 남아있는데 이를 위하여 3가지 key design을 제안한다.
- image-space 내에서 작용하는 3D anchor를 고안하고 모든 anchor를 3D parameter에 대한 사전적인 통계(prior statistics)로 초기화 한다.
→고정된 camera 시점의 consistency와 2D scale(w, h)와 3D depth 사이의 상관관계를 기반으로 3D에서 추론을 위한 강한 prior를 가진다고 한다. - spatially-aware feature를 학습할 수 있는 depth-aware convolutional layer를 design 했다.
→원래 convolution은 spatially invariant를 위하여 사용되었다. 이는 low-level에서는 도움이 될 수 있지만 high-level에선 depth에 대한 인식을 높이고 지속적인 camera의 geometry를 추정하는 게 더 효과적이라고 한다. - 방향 θ를 추정해 3D를 2D로 projection 시켜 consistency loss를 최적화한다.
위와 같은 contribution으로 KITTI benchmark의 mono BEV와 3D Detection에서 sota 달성!
Related Work
RPN에 대한 설명은 Faster R-CNN을 참조 - https://talktato.tistory.com/10 이후는 생략
M3D-RPN
introduction에서 언급했던 세 가지 key design을 하나씩 살펴보자.
1. Formulation
RPN은 Faster R-CNN에서 소개된 것을 기반으로 3D box 예측을 위해서 변형해서 사용된다. RPN에서는 sliding window 방식처럼 input image를 순회하며 사전 정의된 anchor에 matching 되는 object를 찾아 proposal을 만들게 된다. 따라서 이 논문에서도 anchor를 사전 정의할 필요가 있다.
Anchor Definition
M3D-RPN에서는 2D, 3D의 proposal을 동시에 구하기 때문에 anchor도 2D (w, h), 3D (w, h, l, θ) 두 차원을 같이 정의해줘야 한다. 이때 center point (x, y, z)p는 공유한다.
camera 좌표의 중심 위치 x, y, z를 projection matrix로 projection 시켜 Zp를 image space로 인코딩 시킨다. θ는 observation viewing angle을 나타낸다. 이것은 시야각에 대한 물체의 상대적인 방향을 나타내므로 viewing angle을 직관적으로 추정하는 것이 의미 있다.
→정리해보면 2D 좌표는 x, y, w, h이고 3D 좌표는 x, y, z, w, h, l, θ가 되고 x, y는 서로 공유한다.
각 anchor에 대해 2D anchor의 w, h와 IOU 0.5가 이상인 모든 matching ground truth에 대한 statistic을 사용한다.
3D Detection
anchor 마다 feature map에서 예측하는 output은 c (class), $[t_x, t_y, t_w, t_h]{2D}$, $[t_x, t_y, t_z]P$, $[t_w, t_h, t_l, t_θ]{3D}$ 이 된다. $[t_x, t_y, t_w, t_h]{2D}$2D bounding box의 transformation을 의미한다. 따라서 최종적으로 변환된 2D, 3D bbox는 아래와 같이 정의된다. $x_P, y_P$ 는 각 box의 spatial center location을 의미한다.
Loss Definition
loss는 세 가지로 구성되어 있다.
- classification loss $L_c$ (softmax-based multinomial logistic loss)
- 2D bbox regression loss $L_{b_{2D}}$ (negative logistic loss)
- 3D bbox regression loss $L_{b_{3D}}$ (Smooth L1 loss)
classification loss에서의 타우는 target class를 의미하고 최종 Loss에서의 람다를 사용해서 regularization을 해 준다.
2. Depth-aware Convolution
high level feature의 spatial-awareness을 개선하기 위해서 depth-aware convolution을 사용한다. 서로 공유되지 않는 각기 다른 kernel(k)가 적용되는 bin(b)으로 나눠 b를 hyper parameter로 설정한다. 이 때문에 depth-aware convolution은 각각 bin마다 내부에서 feature와 bias를 구할 수 있게 해준다.
왜 row-wise 하게 convolution을 진행하냐면 image에서 생각해보면 depth가 비슷한 물체들은 같은 row 상에 있게 된다. 예를 들어 멀리 있는 물체들은 대부분 이미지 상에서 상단 부분에 위치하고 가까운 물체들은 하단 부분에 위치하게 된다. 이런 특징을 활용하여 depth-aware convolution을 설계한 것 같다.
depth-aware의 단점으로는 memory 저장공간이 layer * b만큼 늘어난다는 점이지만 전체 FLOPS는 일정하게 유지된다.
3. Network Architecture
Backbone network인 DenseNet을 거쳐서 나온 feature map을 두 가지로 나눠서 동시에 진행을 한다. 첫 번째는 일반적인 convolution을 사용하여 위에서 표기되기론 $F_{global}$ 을 만들어낸다. 두 번째는 앞서 설명한 depth-aware convolution을 사용하여 $F_{local}$ 을 만든다. 각각 3*3 kenel과 1 padding, RELU를 사용하여 feature extraction을 진행한다.
그다음 각각 뽑아낸 $F_{global}, F_{local}$ 을 1*1 convolution을 사용해서 $O_{global}, O_{local}$ 을 만들어 낸다. (다시 channel을 늘려주기 위해서 사용하는 건가??)
그 이후에 알파를 사용해서 global, local을 사용해서 최종적으로 O를 구해준다.
Experiments
BEV, 3D Detection에서 다른 모델과 비교했을 때 좋은 성능을 보여준다.