본문 바로가기

Machine Learning Tasks/Object Detection

Object Detection - EfficientDet (1)

반응형

CNN 모델의 속도-성능 tradeoff 문제는 굉장히 중요합니다. MobileNet, ShuffleNet, EfficientNet 모델과 같이 모델의 파라미터와 연산량을 (FLOPS) 줄이면서 컴퓨터 비젼의 다양한 태스크에 대한 성능을 높이려는 경량화 시도가 계속되고 있는데요, 여러 vision 관련 태스크 중에서도 object detection 태스크는 핸드폰, 자율주행, 로봇 등 다양한 분야에 적용되므로 모델의 연산량, 크기를 줄이면서 정확도를 높이는 것이 매우 중요합니다. 이번 포스트에서 살펴볼 내용은 구글에서 발표한 EfficientDet 으로 scalable, efficient object detection 을 위해 1) BiFPN detector, 2) EfficientNet compount scaling 기법을 응용한 object detection 모델 scaling 방법을 제안합니다. 먼저 COCO 테스트 데이터셋에 대한 성능 Figure 1을 보면 EfficientDet 시리즈가 모델의 크기, 연산량이 매우 작으면서도 55.1 AP (Average Precision) 를 기록했습니다.

논문에서는 scalable, efficient object detection 모델 설계를 위해 다음 2가지에 초점을 맞췄습니다.

  1. Efficient multi-scale feature fusion
    Object detection 에서 다양한 크기의 객체를 포착하기 위한 multi-scale feature 를 사용하는 방법은 YOLOv3, SSD 등에서 많이 사용되어 왔고 최근에는 다양한 크기의 feature 를 합치는 (cross-scale feature fusion) FPN (Feature Pyramid Network) 방식이 많이 사용되어 왔습니다. 하지만 기존 FPN 모델은 top-bottom 단방향이고 각 크기의 feature를 그대로 더해주다보니 최종 feature에 대해 같은 기여도를 갖지 못합니다. EfficientDet은 학습가능한 파라미터를 weight로 하여 서로 다른 입력 feature에 대해 가중치를 계산하고 bottom-top 방향을 추가한 BiFPN 모델을 제안합니다.
  2. Model scaling
    속도와 정확도를 모두 잡기 위한 적절한 scaling 기법은 매우 중요합니다. EfficientNet 에서는 CNN 모델의 width, depth, resolution 세가지를 동시에 조절하는 compound scaling method를 제안했는데, EfficientDet 에서도 이 방법을 응용합니다. (모두 같은 저자입니다, Mingxing Tan)

EfficientDet

BiFPN

ImageNet 데이터셋으로 사전훈련한 backbone 모델에 detection을 위한 feature를 추출하기 위해 BiFPN (Bi-directional Feature Pyramid Networks) 모델을 제안합니다. FPN 은 backbone 모델의 layer 3-7 feature에 대해 Equation 1과 같은 top-down 방향으로 feature를 합칩니다. (layer 3의 크기는 입력과 가까운 부분으로 입력크기대비 1/8 배로 scale 된 것이고 layer 7의 크기는 입력크기대비 1/128 배로 scale 된 것입니다.)

Equation 1

FPN 의 top-down 단뱡항 방향을 정보흐름을 제한할 수밖에 없습니다. 이를 해결하기 위해 bottom-up 방향을 추가하거나 NAS (Neural Architecture Search) 방법으로 cross-scale feature fusion 방법을 찾는데요, 이러한 방법들은 성능은 더 좋아지지만 많은 파라미터와 연산량이 필요합니다. 특히, Figure 2(c)의 NAS-FPN 은 최적의 topology를 찾기 위한 탐색과정이 너무 오래걸리고 찾은 구조의 직관적인 해석이 쉽지 않습니다.

따라서 EfficientDet 에서는 최적의 feature를 얻기 위해 1) 하나의 입력만 존재하는 노드를 제거하고, 2) 원래 입력노드를 출력노드에 추가하며, 3) top-down, bottom-up 양방향을 하나의 feature 네트워크로 취급하여 반복했고 모델 구조는 Figure 2(d)와 같습니다.


해상도가 다른 여러 feature들을 합칠 때는 하나의 크기로 리사이즈하고 합치는 방식이 간단하여 많이 사용하지만 최종 feature에 기여도가 달라지는 현상이 발생합니다. 이를 해결하기 위해 합쳐지는 각 feature에 대해 학습가능한 가중치를 두고 최종 feature를 출력하는데요, 먼저 unbounded feature fusion 방법은 각 feature 별로 스칼라 가중치 $w_i$를 주는 방법인데 $w_i$가 unbounded 되어 훈련이 불안정해질 수 있으므로 softmax 함수를 통해 0과 1 사이로 만들어주는 방법이 제안되었습니다. 하지만 softmax 함수 자체가 연산량이 많다보니 latency를 줄이기 위해 fast normalized 방법을 사용합니다. 모든 가중치를 0보다 크게 만들기 위해 모든 $w_i$에 ReLU 함수를 적용하고 수치적 불안정성을 막기 위해 $\epsilon=0.0001$을 분모에 더합니다.

https://hoya012.github.io/blog/EfficientDet-Review/

Figure 2(d)의 $P_6$에 대한 최종적인 feature fusion은 Equation 2와 같습니다. $P_6^{td}$는 top-down 방향, level 6의 중간 feature이고 $P_6^{out}$은 level 6의 최종적인 feature입니다. 모든 layer의 feature가 Equation 2와 같이 구성되고 feature fusion 시의 가중치 $w$는 fast normalized 방법을 사용합니다. 또한, convolution 으로 depthwise separable convolution, batch normaliation 기법이 사용됩니다.

Equation 2

Architecture

EfficientDet의 전체 구성도는 Figure 3과 같습니다. ImageNet 데이터셋에 사전훈련된 EfficientNet backbone을 사용하고 layer 3-7의 feature $\{P_3, P_4,P_5, P_6, P_7\}$에 대해 BiFPN 모델을 여러번 반복합니다. 최종적인 detection을 위해서는 RetinaNet 모델 부분을 차용했는데 Figure 4와 같이 객체 분류를 위한 classification subnet, bounding box 회귀를 위한 box prediction subnet 두 개의 브랜치로 구성되고 모든 layer feature에 대해 공유됩니다. 

Figure 4

Classification, box prediction subnet 모든 scale에 대해 적용되어야 하니 FCN (Fully-Convolutional Networks) 구조로 이루어져있고 $K$는 분류하고자 하는 객체종류, $A$는 각 그리드마다 사전 정의된 앵커박스 개수입니다. 앵커박스는 aspect ratio (1:2, 1:1, 2:1) 와 (1, 1.26, 1.58)의 세 개의 사이즈를 통해 총 9개의 앵커박스를 정의했으며 IOU 임계치는 0.5를 적용했습니다. 

Focal loss

EfficientDet 훈련 시에 객체 분류를 위해 일반적인 cross entropy를 적용하는 것이 아닌 focal loss를 적용합니다. 일반적으로 object detection 알고리즘은 이미지 내의 객체를 추리는 작업이고 이미지 객체는 이미지 전체에서 일부분이기 때문에 positive sample (객체)가 negative sample (배경)에 비해 매우 적은 클래스 불균형 문제를 태생적으로 가지고 있습니다. Faster-RCNN과 같은 two-stage detector 계열은 이를 selective search, region proposal network 기법과 같은 ROI (region of interest) 방법으로 대부분의 negative sample을 선제적으로 제거하지만 YOLO, SSD, EfficientDet 등의 one-stage detector 계열은 이미지의 모든 부분을 객체 후보로 두고 탐색하기 때문에 클래스 불균형 문제가 매우 심합니다.

따라서 RetinaNet 에서는 얼굴 인식에서도 응용되는 focal loss를 사용했는데요, 이를 EfficientDet 에서도 적용합니다. Focal loss는 $\alpha$ 계수를 통해 negative sample에 대한 loss에 대해 가중치를 더 주면서 modulating factor $\gamma$를 통해 어려운 negative sample loss에 대해 가중치를 더 주는 Equation 3과 같이 이루어져 있습니다. $\alpha=1, \gamma=0$이라면 원래의 cross entropy loss로 환원되죠.

Equation 3

Modulating factor $\gamma$에 의한 $(1-p_t)^{\gamma}$ 부분을 보면 negative sample 또한 하나의 클래스로 생각한다면 구분하기 어려운 샘플에 대해서는 $p_t$가 상대적으로 낮아 $(1-p_t)^{\gamma}$가 커져 loss가 상대적으로 커지고 구분하기 쉬운 샘플에 대해서는 $(1-p_t)^{\gamma}$가 작아져 loss가 상대적으로 작아집니다. 즉, 구분하기 어려운 샘플에 대해서는 $\gamma$를 통하여 loss를 크게 만들어 더 집중하게 만들는 것이죠. 

$\alpha$ 계수 같은 경우는 positive / nagative sample 불균형을 잡아주기 위한 것으로 positive sample 에는 $\alpha$, negative sample 에는 $1-\alpha$를 곱해주고 $\alpha$를 0에 가까운 값으로 잡아 클래스 수가 더 많은 negative sample에 대해 큰 loss가 적용되도록 합니다.

Compound scaling

정확도와 속도 모두를 최적화하기 위해서는 잘 설계된 모델의 scaling 방법이 중요합니다. EfficientDet 에서는 EfficientNet 의 compound scaling method 기법을 이용하는데요, scaling factor $\phi$를 적용하여 backbone, BiFPN, class/box network, 입력 resolution을 조절합니다. 먼저 backbone에 대해서는 EfficientNet-B0/B6을 사용합니다. 

BiFPN 모델에 대해서는 깊이가 정수로 되어야하니 선형적으로 증가시킵니다. 깊이 $W_{bifpn}$ (채널)에 대해서는 Equation 4와 같이 exponential 하게 증가시킵니다.

Equation 4

Detection을 위한 box/class prediction 네트워크에 대해서는 채널을 $W_{bifpn}$과 똑같이 고정시키고 깊이만 Equation 5와 같이 증가시킵니다. 입력 해상도에 대해서는 128로 나누어져야 하기 때문에 Equation 6과 같이 선형적으로 증가시킵니다.

Equation 5
Equation 6

$\phi=0$ 일때를 EfficientDet-D0, $\phi=7$ 일때를 EfficientDet-D7로 정의하며 최종적인 모델 스펙은 Table 1과 같습니다.

 


다음 포스트

[Machine Learning/Vision] - Object Detection - EfficientDet (2)

반응형