나의 정리
- 논문이 지적한 문제점: Fully convolution single-stage 구조를 가진 FCOS는 2D object detection을 진행하는데 이를 통하여 더 어려운 문제인 3D object detection을 진행하고자 한다.
- 해결 방안: 기존 FCOS에서 사용하던 regression target을 3D target으로 재구성하고 추가적인 disentangled head를 통해 얻은 component를 이용해서 3D bbox를 regression 한다. 또한 기존의 center-ness를 3D-center를 기반으로 gaussian distribution을 추가한 center-ness를 사용하여서 2D detector의 구조로 3D object detection을 진행할 수 있게 한다.
FCOS 논문 리뷰를 먼저 보고 본다면 이해도를 높일 수 있습니다. - https://talktato.tistory.com/26
[논문 리뷰] FCOS: Fully Convolutional One-Stage Object Detection (2019)
나의 정리 논문이 지적한 문제점: 기존의 anchor 기반의 detector들은 사전 정의된 anchor를 사용하므로 섬세하고 많은 parameter tuning이 있어야 하고 계산량이 많이 들어가게 된다. 또한 Fully convolution이.
talktato.tistory.com
Abstract
이전의 FCOS 논문 리뷰에서도 언급 했지만 비싼 비용이 드는 LiDAR를 사용하지 않고 비교적 상당히 저렴한 monocular image를 이용해 3D object detection을 하는 것에 대한 도전이 계속되고 있다. monocular image의 고질적인 문제인 depth 정보의 부재로 인한 ill-posed property가 존재한다.
이 논문에서는 Fully Convolutional Single-stage detector와 general한 frame-work FCOS3D를 소개한다. image domain에서 7-DoF 3D target을 재정의하고 2D와 3D 속성으로 그들을 decoupling한다. object는 2D scale에 의해서 서로 다른 feature level에 분배가 되고 학습 과정을 위해 오직 projected 3D-center에 따라서 할당된다.
nuScenes dataset 3D detection challenge에서 1등을 한 모델 FCOS3D에 대해서 알아보자.
Introduction
monocular 2D와 3D object detection은 서로 같은 input을 사용하지만 output은 다르다. 2D input을 받아서 3D output을 내기 위해서 추가적인 component를 사용해서 object의 3D prediction을 진행한다. 이전의 연구들은 2D box를 예측하고 2D center의 꼭대기와 ROI를 통해 regression을 진행하거나, 2D anchor와 3D box와 상관관계를 통해 2D와 3D 예측을 동시에 하는 방법 등이 있었다.
이 논문에서는 2D detector로 3D localization을 예측하는 간단하고 효과적인 방법을 소개한다. 먼저 일반적으로 정의된 7-DoF 3D location을 2D image 위로 projection 시키고 projection 된 중심점을 얻는다. 이때, 이전의 2D의 중심점과 비교하여서 이를 3D-center라고 부른다. 이 projection을 통해서 3D-center는 2.5D의 정보를 가지게 된다고 한다. 여기서 2.5D 정보라는 것은 2D location과 그에 상응하는 depth를 가진 것을 의미한다.
DoF(Degree of Freedom)이란?
자유도를 의미하는 DoF는 쉽게 설명하기 위해 위의 예시를 사용해보자.
7-DoF 3D location의 의미는 location을 정의하는데 필요한 최소한의 좌표계의 수를 의미한다.
즉 최소 7개의 parameter로 3D location을 표현이 가능하다는 의미이다.
2D location은 이미지의 특정 지점에서 2D offset에 의해서 더 줄어들 수 있고 2D detection과 같이 서로 다른 feature level 사이에서 normalize 할 수 있는 유일한 2D 속성의 역할을 한다. 그와 반대로 depth, 3D size, 방향은 decoupling이 된 후 3D 속성으로 간주된다. 결과적으로 center-based의 3D target으로 바꾸고 2D detection 혹은 2D-3D 간의 상관관계가 필요 없다. (추가적인 sub-network가 필요 없고 M3D-RPN처럼 상관관계를 이용하지도 않는다는 말인 것 같다.)
먼저 2D scale을 고려해 다른 feature level에 object를 할당한다. 그 다음 각각의 training sample의 regression target을 오직 projection 된 3D-center에 따라서 할당한다. 대조적으로 FCOS는 경계면과의 거리를 의미하는 center-ness와 다르게 FCOS3D는 3D-center를 기반으로하는 2D gaussian 분포로 3D center-ness를 나타낸다.
Related Work
2D Object Detection
2D object detection은 크게 anchor-based와 anchor-free 방식 두 가지 방식으로 나눌 수 있다. anchor-based 방식은 사전 정의된 anchor를 통해서 더 쉬운 regression을 진행하지만 너무 많은 hyper-parameter 튜닝을 진행해야 하는 단점이 있다. anchor-free 방식의 경우엔 anchor를 사용하지 않기 때문에 사전 setting이 간단하고 좀 더 보편적인 학습이 가능하다. (FCOS에서 언급했듯 다른 task에선 object가 다른 크기와 aspect ratio를 가지기 때문에 anchor를 사용하면 이런 것을 다 다시 튜닝해줘야 한다.)
Monocular 3D Object Detection
2D detection보다 3D detection이 더 복잡한 task이다. 가장 큰 문제점은 input 2D data와 output 3D 예측 결과가 modal이 서로 불일치한다는 점이다.
method involving sub-network
추가적인 sub-network를 통해서 3D detection을 하는 방법들을 간단히 소개한다.
- 3DOP, MLFusion: depth estimation network를 사용하여 3D detection을 진행한다.
- Deep3DBox: 2D object detector를 사용하여 3D detection을 진행한다.
sub-network를 사용하는 방식은 sub-network의 성능에 매우 의존되어 있고, 추가적인 data나 pre-trained model이 필요하거나 해서 학습하기에 더 복잡하고 불편하다.
Transform to 3D representations
다른 category의 방법으로는 input RGB image를 또 다른 3D 표현 방법으로 변환하는 것이다. (voxel, point cloud 등으로 변환)
이러한 방식들이 최근에 많이 발전하고 뛰어난 성능을 보이기도 하였다. 하지만 이것 또한 여전히 dense depth label에 의존하고 순수하게 monocular image만 사용한 것이 아니라는 한계점이 존재한다. 게다가 많은 숫자의 point-cloud를 다루기는 어려워서 real world에 적용하기 어렵다.
End-to-end design like 2D detection
방금 언급한 단점과 한계점들을 언급하며 최근 연구들은 2D detector들과 같이 end-to-end 방식으로 design 하기 시작했다.
- M3D-RPN: end-to-end의 region proposal network를 가지는 single-stage detector와 depth-aware convolution을 제안했다.
- SS3D: 2D key points를 detect 하고 불확실성이 있는 object의 특성을 예측한다.
- MonoDIS: disentangling loss를 이용해 multi-task learning을 개선하였다.
위와 같은 방식들은 모두 anchor based 방식들이고 그중 몇몇은 여러 번의 학습 stage를 거쳐야 하거나 hand-crafted post-optimization phase가 필요하다.
이와 반대로 anchor-free 방식은 주어진 data에 대한 statistics를 만들 필요가 없다. 또한 간단한 design으로 더 편리하기 때문에 FCOS3D는 anchor free 방식을 통하여 진행한다.
기존엔 2D detector를 3D detection에 사용하는 어려움에 대해서 연구를 주로 하지 않았지만 이 논문에선 그것에 대해 집중적으로 진행을 한다. 2D-3D detection 사이의 연결점과 차이에 대한 더 깊은 이해를 통해 이후 추가 연구에도 도움이 될 것이라고 말한다.
Method
2D object detection은 2D bounding box와 category를 예측하면 되지만 monocular 3D object detection은 3D bounding box를 예측해야 한다. 따라서 3D target의 재구성하고 두 가지 기술적인 design을 사용한다.
- 2D guided multi-level 3D prediction
- 3D center-ness with 2D gaussian distribution
1. Framework Overview
세 가지 component를 포함한 fully convolutional one-stage detector를 제안한다. 전체적인 구성은 위 그림과 같다.
- backbone for feature extraction
- deformable convolution을 사용한 ResNet101을 사용한다. ResNet101은 정확도와 효율성 사이의 좋은 trade-off를 가진다. 더 많은 memory overhead(처리하기 위한 메모리)를 피하기 위해서 첫 convolution block의 parameter를 수정해서 사용했다.
- necks for multi-level branches construction
- 서로 다른 size의 object들을 검출하기 위한 FPN(Feature Pyramid Network)이다. FCOS와 동일한 방식을 사용한다.
- detection heads for dense predictions
- 두 가지 중요한 문제를 해결하기 위해서 공유되는 detection head를 사용한다.
- 어떻게 target을 서로 다른 feature level과 다른 point로 분배할 것인가?
- 구조를 어떻게 디자인할 것인가?
- extra disentangled head를 이용해서 더 효과적으로 regression을 진행한다. (offset, depth, size, rotation, direction classification, velocity를 구하는 head를 말하는 것 같다.)
Regression Targets
FCOS와 동일하게 backbone의 $i$ 번째 layer에서 나온 feature map을 $F_i \in R^{H \times W \times C}$ 라고하고 $i$ 번째 layer의 total stride를 $s$ 라고 할 때 feature map상의 위치에서 original image의 위치로 변환하기 위한 식은 $(sx + [\frac{s}{2}], sy + [\frac{s}{2}])$ 가 된다.
anchor를 통해 regression 되는 anchor-based 방식과 다르게 FCOS3D는 위에서 언급한 위치에서 곧바로 예측을 한다. 이러한 방식 덕분에 기존의 anchor based에서 GT bbox와 Anchor를 IOU로 계산하여 foreground인지 background인지 구분을 하였는데 이러한 과정을 거치지 않아도 된다.
2D 예측의 경우 위와 같이 t, b, l, r을 regression을 하지만 3D 예측은 여섯 개의 면과의 거리를 regression 하게 된다. 최종적으로 2.5D center와 3D size, 7-DoF regression target을 가지게 된다. 2.5D regression은 center로부터 특정한 foreground point로 offset $\triangle x, \triangle y$ 과 그에 상응하는 depth $d$ 를 회귀하는 것으로 축소할 수 있다.
방향을 예측하기 위해 두 가지 부분으로 나눴다.
- 주기를 $\pi$ 로 가지는 angle $\theta$
GT box를 사용하여 예측한 bbox의 IOU를 자연스럽게 모델링하는 역할 (bbox regression에 작용하는 부분인듯하다.) - 2-bin direction classification
위 그림과 같이 두 box는 동일한 $\theta$ 를 가지지만 정반대 방향을 가지는 case에 집중하는 역할
FCOS와 같이 center-ness $c$ 도 binary regression 하여 center와 먼 곳에서 생성된 low-quality의 예측을 걸러주게 돕는다.
regression target을 정리해보면 $\triangle x, \triangle y, w, l, h, \theta, v_x, v_y$, direction class $C_{\theta}$, center-ness $c$ 를 regression 하면서 예측을 하게 되고 각 classification branch는 class label과 attribute label을 output으로 가진다. (Figure 2를 참고하시면서 보면 좋습니다.)
Loss
classification과 서로 다른 regression target을 위해서 각각의 loss를 weighted summation을 하여 최종적인 loss를 구한다.
먼저 classification branch에선 focal loss를 사용한다.
$L_{cls} = -\alpha(1-p)^\gamma logp$
식을 설명하자면 p는 box의 class probability를 의미하고 focal loss의 parameter로 논문에선 $\alpha =0.25, \gamma = 2$ 를 사용했다고 한다.
attribute classification은 classification loss를 간단히 softmax를 통과시켜서 사용하고 $L_{attr}$ 라고 표기했다.
regression branch에서는 smooth L1 loss를 사용하였다. center-ness를 제외한 각각의 regression target은 그들의 scale을 고려해 weight를 가진다.
$L_{loc} = \sum_{b\in (\triangle x, \triangle y, d, w, l, h, \theta, v_x, v_y)}SmoothL1(\triangle b)$
각각의 weight는 $\triangle x, \triangle y, w, l, h, \theta$ 는 1, $d$ 는 0.2, $v_x, v_y$ 는 0.005로 사용했다고 한다.
그리고 depth를 예측하기 위해서는 지수함수를 사용했다고 한다. loss를 계산할 때는 log space가 아닌 original depth space를 사용했고 실험적으로 더 좋은 정확도를 얻었다고 한다.
최종적인 Loss의 식은 아래와 같다.
$L = \frac{1}{N_{pos}}(\beta_{cls}L_{cls} + \beta_{attr}L_{attr}+\beta_{loc}L_{loc}+\beta_{dir}L_{dir}+\beta_{ct}L_{ct})$
$N_{pos}$ 는 positive prediction의 개수를 의미하고 $\beta_{cls}=\beta_{attr}=\beta_{loc}=\beta_{dir}=\beta_{ct}=1$ 로 사용했다고 한다.
inference
input 이미지가 주어지면 framework를 거쳐서 bbox와 class score, attribute score, center-ness prediction을 얻게 된다. 이때 FCOS와 마찬가지로 class core와 center-ness를 곱해서 각 예측의 confidence 값으로 사용하게 된다.
2. 2D guided Multi-Level 3D Prediction
target을 다른 feature level로 분배하기 위해 전략을 고안해야 했는데 FCOS에서 이때 발생하는 두 가지 중요한 문제를 언급했다.
- 어떻게 anchor-based model과 비교해 anchor-free 방식으로 비슷한 BPR을 얻을 수 있을까?
- GT box가 겹쳐있을 때의 ambiguity 문제를 어떻게 해결할 것인가?
1번 문제 같은 경우엔 FCOS에서 이미 FPN을 통한 Multi-level prediction으로 BPR 개선이 가능함을 실험적으로 입증했다.
2번 문제의 경우엔 regression target의 특정한 설정을 포함해 해결했다고 한다.
anchor-based은 다른 크기의 anchor에 object를 할당하는 방식을 사용하는데 FCOS3D의 경우에는 다른 level의 feature map에 다른 크기의 GT box를 할당한다.
먼저 각 위치에 대한 2D regression target, $l^, r^, t^, b^$ 을 각각의 feature level에서 계산한다. 그리고 그 위치가 $max(l^, r^, t^, b^) > m_i, max(l^, r^, t^, b^) < m_{i-1}$ 을 만족한다면 negative sample로 사용한다. (FCOS와 동일하게 $m_i$ 는 feature level i에 대한 최대 regression 범위를 나타낸다.)
GT box를 다른 feature level로 할당하는 단계에선 필터링을 위해 2D detection만 사용하고 할당한 이후엔 오직 3D-reltaed를 포함한다. projection 된 3D bbox의 외곽 사각형으로 만든 2D bbox를 생성하기 때문에 2D detection annotation이나 사전 지식이 필요 없다!
한 점이 같은 feature level 상에서 여러 GT box 안에 있는 경우 어떤 box에 할당해야 하는지 모호한 상황이 발생하는 ambiguity 문제의 경우 두 가지 해결 방식이 있다.
- area-based 방법
- distance-based 방법
1번 area-based 방법의 경우 더 작은 영역을 가지는 box가 해당 point의 target box가 되는 방식인데 이는 중요한 단점을 가진다. 크기가 큰 object의 경우에는 이러한 과정에서 target box가 될 확률이 낮다. 따라서 이런 단점을 개선하기 위해서 FCOS3D에서는 2번 distance-based 방법을 사용한다.
distance-based 방식은 해당 point과 더 가까운 중심을 가진 box를 regression target으로 선정하는 방식이다. point가 물체의 중심과 가까울수록 더 포괄적이고 balanced local region feature를 얻을 수 있기 때문에 더 양질의 예측을 얻을 수 있다.
위 그래프를 보면 알 수 있다시피 distance-based를 사용하면 크기가 큰 물체의 BPR과 mAP를 개선할 수 있고 전체적인 mAP를 1% 가까이 개선할 수 있다고 한다.
따라서 point가 충분히 center에 가까워야 positive sample로 사용하듯이 3D-center를 사용해 foreground point를 positive sample로 쓸지 결정한다.
3. 3D Center-ness with 2D Gaussian Distribution
FCOS의 center-ness c는 2D regression target으로 정의가 되어있다. 하지만 3D center-based로 바꿔야 하기 때문에 새롭게 projected 3D-center에 2D gaussian distribution을 이용해서 center-ness를 정의한다.
$c = e^{-\alpha ((\triangle x)^2 + (\triangle y)^2)}$
$\alpha$ 는 center로부터 강한 제약으로 사용되어 2.5로 설정되었다.
그리고 center-ness를 GT로 가지고 regression branch에서 낮은 품질의 예측을 필터링을 해준다.
Experiments
1. Dataset
1000개의 scene을 6개의 surround-view camera, 5개의 Radar와 1개의 LiDAR를 통해 얻은 point cloud로 제공하는 nuScene dataset을 사용하여서 평가한다.
2. Evaluation Metrics
nuScene Metric에 관한 내용이 적혀있는데 논문을 직접 읽어보면 좋을 것 같다. 이 부분에 대해선 나중에 dataset 정리를 할 때 다시 한번 정리할 예정
3. Implementation Details
구조를 다시 보며 보면서 읽어보자.
Network Architectures
전체적인 네트워크의 구조는 FCOS와 비슷하다. ResNet101을 이용해서 feature extraction을 진행하고 FPN 구조를 통해서 multi-level feature map을 얻는다. offset, depth, size와 같이 최종적인 regression 결과의 일부를 구분하기 위해서 세 가지 scale factor를 사용하는 것을 제외하면 모든 level에서 detection head는 공유된다.
Training Parameters
optimizer: SGD Gradient Clip 사용, learning rate 0.002, warm-up iterataions 500, ratio 0.33으로 사용 batch size 32, GTX 1080Ti 16장 사용
Data Augmentation
image flip, Test Time Augmentation 사용
Results
결과 비교를 Monocular 방식뿐 아니라 맨 위를 보면 Camera, Radar fusion 방식과 LiDAR 방식과도 비교를 해놨다. 물론 LiDAR 방식에는 NDS가 더 떨어지지만 기존의 monocular 방식들과 LiDAR 방식 사이의 성능 차이를 많이 극복했다는 점이 있다. 특히 angle prediction에서 많은 성능 개선을 하였다고 한다.
위아래로 prediction, GT 값이 그려져 있다. CAM_BACK_RIGHT 이미지를 비교해보면 GT에선 label이 되어있지도 않은 barrier를 model이 검출해낸 것을 볼 수 있다. 신기..
Appendix
Failure Cases
아직 FCOS3D도 풀지 못한 문제들이 존재한다. 첫 번째는 큰 object의 경우에 크기와 방향을 잘 검출 해 내지 못한다는 점이다. 두번째는 가려진 object의 경우엔 아예 검출해내지 못하는 문제점 이렇게 두가지 문제를 가지고 있다.
저자는 첫번째 문제의 경우 FCOS3D의 convolution kernel이 가지는 receptive field의 크기가 충분히 크지 못해서 생기는 문제이고 두번째 경우엔 image의 고유한 특성이라고 지적했다. 앞으로 첫번째 문제에 대해서 해결을 해야 한다고 저자는 future work로 말을 했다.