논문 읽기/Object Detection

[논문 읽기] DSSD(2017) 리뷰, Deconvolutional Single Shot Detector

AI 꿈나무 2021. 4. 3. 16:20
반응형

 안녕하세요! 이번에 읽어볼 논문은 DSSD, Deconvolutional Single Shot Detector 입니다.

 

 DSSD는 SSD에 세 가지 변화를 주었습니다. 첫 번째는 base network를 VGG가 아닌 ResNet-101을 사용합니다. SSD에서는 base network를 VGG를 사용했었죠. 두 번째는 SSD에 Deconvolution network을 추가합니다. 이 아이디어는 semantic segmentation 분야의 DeConvNet에서 영감을 받았다고 하네요. Deconvolution network를 사용하면 좀 더 세밀한 정보를 포착할 수 있다는 장점이 있습니다. 세 번째는 prediction layer를 수정합니다. 기존의 SDD는 conv layer로 예측을 수행했는데요. DSSD는 prediction layer에 bottleneck 구조를 사용합니다. 그 결과, DSSD 등장 당시에 SOTA를 달성합니다.

 

 전체 모델 구조는 아래 그림에서 확인하실 수 있습니다. 어떻게 보면 FPN과 비슷하다는 생각이 드네요.

 

 

 이제, DSSD를 자세하게 살펴보도록 하겠습니다.

 

Deconvolutional Single Shot Detection(DSSD)

(1) Using Residual-101 in place of VGG

 DSSD는 VGG network 대신에 Residual-101을 backbone으로 사용합니다. 역시 detection은 backnone이 중요한가 보네요.

 

(2) Prediction module

 SSD에서는 prediction layer를 단순히 3x3 conv를 사용합니다. DSSD에서는 residual block을 prediction layer로 사용합니다. 이 방법이 상당한 효과가 있다고 하네요. 아래 표는 다양한 prediction module을 실험한 결과입니다. (c)가 제일 성능이 좋네요.

 

 

(3) Deconvolution Module

 DSSD는 deconvolution module을 사용하여 피쳐맵의 크기를 키운뒤에, 동일한 크기의 SDD layer의 피쳐맵과 element-wise product를 합니다. 실험 결과, element-wise sum보다 element-wise product가 성능이 더 좋다고 하네요. 위 그림을 보면 deconvolution module은 shalow layer를 사용합니다. 그 이유는 inference 속도 때문이라고 하네요. detection에서 inference 속도는 중요한 요소이므로, 이를 고려해서 얅은 레이어를 사용했다고 합니다. DeconvNet에서 사용하는 deconvolution 연산과 다르게, 단순히 bilinear upsampling을 이용한다고 하네요.

 

Training

 object detection에서 example을 어떻게 sample하느냐에 따라 성능이 크게 달라집니다. 이때문에, OHEM, RetinaNet의 focal loss, 등등이 제안되었었죠. DSSD에서는 다음과 같은 방식을 사용합니다. 우선 iou가 가장 높은 anchor box와 ground truth box를 matching 합니다. 그리고, iou가 0.5 이상인 anchor box를 object가 있다고 판단을 합니다. 그 외에 anchor box는 negative sample로 사용하여, positive와 negative가 3:1 비율이 되도록 sample을 했다네요.

 

Performance

 

 

 


참고자료

[1] arxiv.org/abs/1701.06659

반응형