본문 바로가기

Computer Vision Paper/3d Object Detection

SA - SSD : Structure Aware Single-stage 3D Object Detection from Point Cloud 리뷰

※ 아이디어 위주로 논문을 겉핥은 글입니다. 오류가 있으면 댓글로 알려주세요

#0 SA-SSD에 대한 소개

KITTI BENCHMARK 3D OBJECT DETCTION(http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d)

 

 이번에 소개할 3d object detection 논문은 저번의 SECOND에서 발전한 one-stage 구조를 가진 SA-SSD입니다. SA-SSD의 경우 크게 auxilliary network와 PsWarp라는 두개의 아이디어를 통해서 네트워크의 발전을 이루어냈으며 그 중에서도 auxiliary network 아이디어가 논문의 메인 아이디어라고 할 수 있겠습니다. 2020년 SOTA를 달성한 구조이며 현재(2021.08.05) kitti benchmark에서 96위를 달성하고 있는 구조입니다. 

 

#1 SA-SSD의 motivation

1. One-stage 구조에서도 two-stage처럼의 정확도를 낼 수 있는 방법이 없을까?

 

2. 그런 방법을 사용하면서도 One-stage의 장점인 속도에 영향을 주지 않는 방법이 있지 않을까?

 

3. Grid-based method의 단점을 해결할 수 있는 방법이 없을까?

 

-> Object detection에서 사용할만한 auxiliary(부가적인) task를 주면서 Train을 시킨다면 성능향상이 일어나게 되고, 이러한 auxiliary task를 Test할 때에는 없애준다면 속도에는 영향을 끼치지 않을 것이다!! 라는 아이디어를 구현한 네트워크입니다.

 

#2 SA-SSD의 구조

SA-SSD의 구조

 SA-SSD의 구조는 위의 사진과 같습니다. 저번 포스팅 SECOND와 매우 유사하지만 두가지 큰 차이점이 있습니다. 박스를 친 auxiliary network와 PsWarp가 그 주인공들입니다. 이 두 차이점을 제외하고는 SECOND와 one-stage detection 구조이며 grid-based network라는 기본적 틀은 유사합니다.

 

 이번 포스팅에서는 이 두가지 아이디어를 분석해보도록 하겠습니다.

 

#3 Backbone Network

 

feature를 추출하는 backbone network

 

 SA-SSD에서 구조에서는 VoxelNet에서 소개되었던 voxelization은 시간이 너무 오래걸리고 resource를 크게 잡아먹는다고 판단해 SA-SSD에서는 다른방식을 사용하게 됩니다. SA-SSD에서는 points를 양자화 시킨 좌표들을 바로 tensor에 집어넣어서 사용하는 방식을 사용했습니다.

 

 이 방식을 조금 더 풀어 설명하면 다음과 같습니다. Point Cloud상의 점 Pi=(xi,yi,zi)로 표현하겠습니다.  SA-SSD의 경우에는 grid-based방식을 사용하기 때문에 전체 point cloud를 d=(dx,dy,dz)라는 최소단위의 육면체로 나눠서 feature를 추출하게 됩니다. 이때, VoxelNet등에서 사용한 Voxelization의 경우 Voxel feature encoding layer등을 사용하는데 이 과정이 꽤나 시간이 걸린다고 판단해서 SA-SSD는 voxel과 비슷한 tensor에 해당되는 점들을 pi' = (⌊ xi/dx ⌋, ⌊ yi/dy ⌋, ⌊ zi/dz ⌋)로만 표현해서 사용했습니다. 이러한 3d 좌표를 grid의 최소단위로 나눈 값에 floor function을 적용하는 방식으로 기존의 voxelization보다 빠른 시간안에 feature를 추출할 수 있었습니다. 

 

 Backbone network는 이렇게 얻은 tensor를 input으로 받아 총 4개의 3d CONV layer을 지나면서 feature들을 추출하게 됩니다.

#4 ★Auxiliary Network★

SA-SSD에서 가장 중요한 아이디어인 auxiliary network는 크게 아래와 같은 3가지의 특징을 가지고 있습니다. 

auxiliary network

 

1. Auxiliary network에서 발생한 loss는 train과정에서만 사용하고, test할때는 사용하지 않는다.

 

2. Auxiliary network는 object detction이라는 큰 task를 보조하기 위한 2가지의 sub task(foreground segmentation, Center Estimation)를 시행한다.

 

3. Auxiliary network에서 사용되는 feature는 기존의 pointcloud에 Backbone network에서 생긴 tensor들을 points로 다시 변환하여 사용한다.

 

 

 Auxiliary Network의 세부적 내용을 살펴보면 다음과 같습니다. 처음에 전체 point Cloud를 grid로 쪼개 points 데이터를 Tensor로 변경해 Backbone 네트워크인 4개의 3d CONV layer에 input으로 들어가게 됩니다. 3D CNN구조이기 때문에 얕은 층은 더욱 좁은 영역의 feature를 깊은 층은 더욱 넓은 영역의 feature를 추출하게 됩니다.

 

 Auxiliary Network는 우선 backbone에서의 tensor를 다시 points로 바꾸는 과정을 수행합니다. 이 points에는 좌표만 backbone에 존재하는 모든 layer에서 이 과정을 거치게 되는데요.이렇게 얻은 point들은 좌표값만 있는 것이 아니라 각각의 convultion layer를 거치면서 얻은 feature정보도 담고 있게 됩니다. 깊은 층에서 뽑은 feature는 global한 특성을, 얕은 층에서 뽑은 feature는 local한 특성을 담을 수 있기 때문에 한 point에 여러 범위에서의 feature를 담을 수 있게 됩니다. 

 

 이런 point들을 input으로 받아서 MLP구조의 predictior를 통해 ①어떤 points들이 object의 앞에 존재하는지 확인하는 foreground segmentation과 ②object의 중심을 찾는 center estimation를 수행합니다. 기존의 Grid-based network의 경우 voxelization을 진행하면서 point의 detail한 feature를 다 살릴 수 없다는 단점이 있었습니다. 그러나 다시 points로 변환시켜 여러 범위의 feature를 이용하고 그에 맞는 task를 줌으로써 detail한 feature를 추출할 수 있다는 장점을 얻게 됩니다.

 

 이러한 auxiliary network는 또한 학습에서만 이용하고 test에서는 사용하지 않는데요. Auxiliary network가 학습시에만 이용이 되더라도 좋은 feature를 할 수 있도록 3d Conv layer가 이미 학습이 되었기 때문에 높은 정확도와 빠른 FPS를 갖는 3d object detection이 수행될 수 있게 했다고 논문에서 밝히고 있습니다.

 

#4 PsWarp

PsWarp(Part Sensitive Warping)

 

 Object detection에서는 Roi 영역에 해당되는 부분을 max-pooling을 진행해서 정해져있는 사이즈의 행렬을 추출하는 여러 방식들을 사용합니다. 이러한 방식중에는 Roi-pooling(Fast-RCNN참조), RoiAlingn(mask-RCNN), PsRoiAlign(R-fcn)등의 여러가지 방법을 사용합니다. 이 방식들에 대한 정리는 추후에 포스팅을 올려서 다시 한번 정리하겠습니다. 많은 웹사이트에서 이 방법에 대해 정리해 놓았는데 가장 이해하기 쉬웠던 글은 이 글이니 참조해보길 바랍니다. 

 https://erdem.pl/2020/02/understanding-region-of-interest-part-2-ro-i-align

 

 SA-SSD에서는 PsWarp라는 방식을 사용하는데 간단히 정리해보면 아래와 같습니다. 우선 SA-SSD를 거쳐 나온 ROI를 k*k로 나눕니다. 이렇게 나온 ROI를 k*k개의 각 부분에 맞는 scoremap을 만듭니다. 만약에 k=2라고 한다면 각 scoremap은 {upper-left, upper-right, bottom-left, bottom-right}등을 의미합니다. 이때의 각 grid에 sampling을 진행해 center point만을 고려하는 average pooling을 진행합니다. 이렇게 center point만을 이용하는 방식으로 PsWarp는 PsRoiAlign보다 빠른 속도를 얻을 수 있었습니다. 

PsWarp와 PSRoiAlign의 차이

#5 Experiment

Kitti_benchmark_car_class_test결과 비교

위의 표에서 보이는 것과 같이 2020년 논문이 발표되었을 때에는 매우 높은 정확도와 속도를 가지는 3d object detection 네트워크였습니다. 현재는 PV-RCNN++나 SE-SSD등 더욱 좋은 3d object detection논문들이 나왔지만 그럼에도 불구하고 매우 높은 성능을 갖고 있는 것은 확실합니다.  

Evaluation results of different methods on KITTI 3D object detection test set

 

Qualitative results on KITTI test set

 

이것으로 SA-SSD 겉핥기 리뷰를 마치도록 하겠습니다.

Chenhang He, Hui Zeng, Jianqiang Huang, Xian-Sheng Hua, and Lei Zhang. Structure aware single-stage 3d object detection from point cloud. CVPR, 2020.
https://github.com/skyhehe123/SA-SSD