본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Deep Learning Network

[Model] RefineDet

by zpstls 2023. 3. 6.
반응형

오늘 포스트는 Object Detection 분야에서 언급되는 Model 중의 하나인 RefineDet에 대해 작성하고자 합니다.

 

 

우선, RefineDet에 대한 논문은 다음과 같습니다.

 

Single-Shot Refinement Neural Network for Object Detection

For object detection, the two-stage approach (e.g., Faster R-CNN) has been achieving the highest accuracy, whereas the one-stage approach (e.g., SSD) has the advantage of high efficiency. To inherit the merits of both while overcoming their disadvantages,

arxiv.org

 

Object Detection은 1-stage Detector와 2-stage Detector로 나뉩니다.

2-stage Detector는 느린 속도를 갖지만 두 단계를 통해 더 정확한 분류와 위치 예측을 수행합니다. 반면 1-stage Detector의 경우 빠른 속도를 갖지만 2-stage Detector보다 낮은 정확도를 가집니다. 특히 1-stage Detector의 낮은 성능의 주요 원인은 Class Imbalance입니다.

 

RefineDet의 논문 저자들은 1-stage보다 2-stage 방법들이 다음과 같은 이점을 갖는다고 설명합니다.

  • 2-stage 구조를 Sampling Heuristics와 함께 사용하여 Class Imbalance를 해결합니다.
  • 2-step Cascade로 Object Box Parameters를 Regress(예측)합니다.
  • 2-stage Feature를 사용해 Object를 Describe(설명)합니다.

 

RefineDet은 1-stage와 2-stage의 이점들을 가지면서 단점들을 극복한 새로운 Detection Framework입니다. 이는 ARM(= Anchor Refinement Module)과 ODM(= Object Detection Module)의 Inter Connect를 통해 1-stage 방법을 개선하였습니다. 특히 ARM은 Classifier의 Search Space를 줄이기 위해 Negative Anchors를 식별하고 제거하고 후속 Regressor의 좋은 초기 값을 제공하기 위해 Anchors의 위치와 크기를 대략적으로 조절합니다.

이렇게 Refine 된 Anchor를 받아 ODM에서 Multi-Class 분류와 Box Regression을 수행합니다. 추가로 ARM의 Features를 ODM으로 전달하는 TCB(= Transfer Connection Block)를 고안하였습니다.

즉 정리하면, RefineDet은 Object Detection을 위한 두 Inter-Connected Module(ARM, ODM)으로 구성된 새로운 1-stage Framework를 소개하였으며 유효성을 위해 ARM의 Features를 ODM으로 전달하는 TCB를 고안하였고 최신의 SOTA 결과를 달성했다는 점에서 의의를 갖습니다.

 

 

Network Architecture

우선, RefineDet의 전체 구조는 다음과 같습니다.

Architecture Of RefineDet

RefineDet은 SSD와 유사하게 Feed-Forward Convolutional Network로 고정된 개수의 Bounding Box들과 Box에 속한 다른 Class들의 존재 Score를 출력합니다.

RefineDet은 두 Inter-Connected Module인 ARM과 ODM으로 구성됩니다.

ARM의 목표는 Classifier의 Search Space를 줄이기 이해 Negative Anchors를 제거하는 것과 후속 Regressor의 좋은 초기 값을 제공하기 위해 Anchors의 위치와 크기를 대략적으로 조절하는 것입니다. 또한 ARM은 ImageNet Dataset으로 사전 학습된 Base Network(VGG-16, ResNet-101)에서 Classification Layers를 제거하고 보조 구조(Auxiliary Structures)를 추가한 구조입니다.

ODM의 목표는 Refined Anchors에 기초하여 정확한 위치를 Regress 하는 것과 Multi-Class Labels를 예측하는 것입니다. 또한 ODM은 TCB 출력에 Prediction Layers(= Conv Layers)을 이어 붙인 구조입니다.

 

간단히 정리해보면 다음과 같습니다.

RefineDet은 2가지 Module로 구성되어 있으며 이 두 Module을 연결해 줄 Block이 존재합니다. 언급한 첫 번째 모듈은 ARM이며 이는 Anchor Box를 정제하고 Negative Anchor를 Filter 하는 역할을 수행합니다. 두 번째 모듈은 ODM이며, 이는 ARM에서 정제된 Anchor를 입력받아 Anchor의 Multi-Class를 예측하며 좌표를 Regression 합니다. 이러한 두 모듈을 연결하는 Block을 TCB라고 하며 ARM에서 생성한 Anchor를 ODM으로 전달하는 역할을 수행합니다.

 

이러한 RefineDet이 좋은 성능을 낼 수 있는 이유를 정리해보면 다음과 같습니다.

  1. ARM에서 Negative Anchor를 Filter하여 Class Imbalance 개선 효과가 있습니다.
  2. ARM에서 정제된 Anchor로 ODM이 예측을 수행하므로 좀 더 정확한 예측을 수행할 수 있습니다.
  3. TCB가 FPN과 비슷하게 Multi-Scale Prediction 역할을 수행하며 또한 서로 다른 크기의 Feature Map 정보를 활용하도록 도와주는 역할을 수행합니다.

 

 

 

 

그러면, 이제 RefineDet에 대한 자세한 내용을 다뤄보도록 하겠습니다.

 

Transfer Connection Block (TCB)

ARM과 ODM 사이의 연결을 위해 TCB를 고안하였고 이의 구조는 다음과 같습니다.

Structure Of TCB

TCB는 ODM에서 필요한 형태로 ARM의 다른 Layers의 Features를 변환하는 역할을 합니다. ARM에서 Anchors와 관련된 Feature Maps에 TCB들을 사용합니다. Detection 성능을 향상하기 위해 De-Convolution Operation을 사용해 High-Level Features를 Transferred Features에 추가함으로써 Large-Scale Context를 통합합니다. 이후 Convolution Layer를 추가해 Detection을 위한 Discriminability Of Features를 확보합니다.

 

 

Two-Step Cascaded Regression

RefineDet은 객체들의 위치와 사이즈들을 Two-Step Cascaded Regression 전략으로 예측합니다. 기존의 1-stage Detector의 경우 고정된 Anchors를 이용하는 반면 RefineDet은 ARM으로 먼저 Refined Anchors를 생성합니다. 이후, 이는 ODM으로 전달되어 더 정확한 예측을 할 수 있게 되며 특히 작은 객체들을 검출하는 성능이 향상됩니다.

 

 

Negative Anchor Filtering

잘 분류되는 Negative Andhors를 초기에 제거하고 Imbalance 문제를 완화 시키기 위해 Negative Anchor Filtering을 사용합니다. 학습 시 ARM을 통해 생성된 Refined Anchor Box의 Negative Confidence가 사전에 정한 Threshold $\theta$ (i.e., $\theta = 0.99$) 인 경우 ODM 학습 시 해당 Anchor Box를 버립니다. 즉, ODM 학습을 위해 통과하는 Refined Anchor Box들은 Hard Negative이거나 Positive가 됩니다.

추론도 학습과 마찬가지로 Refined Anchor Box의 Negative Confidence가 Threshold를 넘을 경우 ODM은 Detection시 해당 Anchor Box를 사용하지 않습니다.

 

 

 

 

Training And Inference

Data Augmentation

Robust한 Model을 만들기 위해 SSD에서 사용한 Data Augmentation들을 사용합니다. 즉 Random 하게 원본 이미지들을 추가적인 Distortion과 Flipping을 사용해 Expand와 Crop을 수행합니다.

 

 

Backbone Network

RefineDet은 Backbone Network로 ImageNet Dataset으로 Pre-Train된 VGG-16과 ResNet-101을 사용합니다. 다만, VGG-16과 ResNet 외에 다른 일반적인 Pre-Train 된 Backbone Network들도 사용 가능합니다.

RefineDet 논문 저자들은 DeepLab-LargeFOV와 유사하게 VGG-16의 fc6과 fc7을 Subsampling(= Dilation)을 사용한 conv_fc6와 conv_fc7로 변환하였습니다.

conv4_3과 conv5_3이 다른 Layers들과 다른 Feature Scales를 갖기 때문에 이를 L2 normalization을 사용해 Scaling 합니다. 이때 초기 Scaling Factor는 각각 8, 10이고, 역전파를 통해 학습되는 Parameter들입니다. 동시에 High-Level Information과 Multiple Scale Object Detection을 위해 VGG-16의 경우 추가적인 Layers(conv6_1, conv6_2)를 추가하고, ResNet-101의 경우 추가적인 Layer(res6)을 추가합니다.

VGG-16 Base Network의 경우 conv4_3, conv5_3, conv_fc7, conv6_2의 Feature Maps을 예측에 사용하고, ResNet-101 Base Network의 경우 res3b3, res4b22, res5c, res6의 Feature Maps를 예측에 사용합니다.

 

참고로 L2 Normalization에 대한 내용은 다음과 같습니다.

더보기
더보기

L2 Normalization

 

Object Detection, Semantic Segmentation 등은 성능 향상 및 다양한 크기의 객체를 검출하기 위해 Multi-Scale Feature를 사용합니다. 이때, Layer의 깊이에 따라 Norm이 달라지는 문제가 발생합니다. 즉, RefineDet를 기준으로 예를 들면 conv4_3과 conv5_3에서 나온 Feature Maps의 Norm이 달라서 Detection을 수행할 때 성능 저하를 발생시킬 수 있다는 것이죠. 이를 해결하기 위해 학습 가능한 Parameter인 Scaling Factor γ를 활용한 L2 normalization을 수행합니다. Normalization은 채널 별로 수행되며, 코드는 다음과 같습니다.

import torch
import torch.nn as nn
from torch.autograd import Function
from torch.autograd import Variable
import torch.nn.init as init

class L2Norm(nn.Module):
    def __init__(self,n_channels, scale):
        super(L2Norm,self).__init__()
        self.n_channels = n_channels
        self.gamma = scale or None
        self.eps = 1e-10
        self.weight = nn.Parameter(torch.Tensor(self.n_channels))
        self.reset_parameters()

    def reset_parameters(self):
        init.constant_(self.weight,self.gamma)

    def forward(self, x):
        norm = x.pow(2).sum(dim=1, keepdim=True).sqrt()+self.eps
        #x /= norm
        x = torch.div(x,norm)
        out = self.weight.unsqueeze(0).unsqueeze(2).unsqueeze(3).expand_as(x) * x
        return out

 

 

Anchors Design And Matching

객체들의 각기 다른 크기들을 다루기 위해 4개의 Feature Layers를 사용하며, 각각의 Feature Layer는 하나의 특정한 Anchor Scale과 3개의 Aspect Ratio를 갖습니다. Anchors의 다른 Scales는 Image에서 같은 화면 분할 밀도를 보장합니다.

RefineDet은 jaccard overlap(=Intersection Over Union)을 사용해 Anchors와 Ground-Truth를 매칭합니다. 먼저, 가장 큰 Overlap Score를 갖는 Anchor Box를 Ground-Truth로 매칭하고 Overlap Score가 0.5보다 높은 Anchor Box들을 Ground-Truth로 매칭합니다.

 

 

Hard Negative Mining

Matching 단계 이후, ARM에 의해 Easy Negative Anchors들이 제거된 후에도 ODM에서 대부분의 Anchor Boxes는 Negatives입니다. SSD와 유사하게, Foreground-Background Class Imbalance를 해결하기 위해 Hard Negative Mining을 사용하는데, 이는 Negatives와 Positives의 비율이 3:1이 되도록 Loss가 큰 Negatives를 선택해 사용하는 것을 의미합니다.

 

 

Loss Function

RefineDet의 Loss Function은 ARM loss와 ODM loss, 두 부분으로 구성됩니다.

ARM의 경우, 각 Anchor에 Binary Label을 할당하고 Refined Anchor를 찾기 위해 위치와 크기를 동시에 예측(regress)합니다. 이후 Negative Confidence가 Threshold보다 작은 Refined Anchors를 ODM에서 처리하여 Object Category들과 정확한 위치와 크기를 예측합니다.

Loss function은 다음 수식과 같습니다.

Loss Function

$i$ : The index of anchor in a mini-batch

$l_{i}^{*}$ : Ground truth class lavel of anchor $i$

$g_{i}^{*}$ : Ground truth location and size of anchor $i$

$p_{i}, x_{i}$ : Predicted confidence of the anchor $i$ being an object and refined coordinates of the anchor $i$ in the ARM

$c_{i}, t_{i}$ : Predicted object class and coordinates of the bounding box in the ODM

$N_{arm}, N_{odm}$ : The numbers of positive anchors in the ARM and ODM, repectively

$L_{b}$ : Binary classification loss

$L_{m}$ : Multi-class classification loss

$L_{r}$ : Regression loss (smooth L1 loss)

$[l_{i}^{*} >= 1]$은 Indicator Function으로 Negative가 아닌 경우 True, 반대인 경우는 False입니다. $N_{arm}$또는 $N_{odm}$이 0인 경우, 각 Module의 Loss는 0으로 취급합니다.

 

 

Inference

추론 시 ARM으로 Refined Anchors를 생성한 후 ODM으로 각 이미지마다 Top 400 High Confident Detections를 출력합니다. 마지막으로 jaccard overlap이 0.45 이상으로 Non-Maximum Suppression을 수행하고, Top 200 High Confident Detections를 갖고 최종 결과를 출력합니다.

 

 

 

 

Experiments

RefineDet 논문에서는 다양한 Benchmark(PASCAL VOC 2007, PASCAL VOC 2012, MS COCO)에서 실험을 진행하였으며, 결과는 다음과 같습니다.

Result Of RefineDet

위의 결과들을 통해 RefineDet이 기존의 방법들보다 빠른 속도와 높은 검출 정확도를 가지는 것을 확인할 수 있습니다. 또한 논문에서 제안한 방법들이 성능 향상에 효과적이었음을 확인할 수 있습니다.

 

 

이렇게 RefineDet에 대해 알아보았습니다.

이번 포스트는 여기서 마무리하도록 하겠습니다.

반응형

'Programming > Deep Learning Network' 카테고리의 다른 글

[Model] VNect과 XNect  (0) 2023.03.13
[Code] MobileNet v1  (0) 2023.03.08
[Model] SSD (Single Shot Detector)  (0) 2023.03.02
[Model] YOLO v1  (0) 2023.02.23
[Model] R-CNN  (0) 2023.02.23

댓글