약초의 숲으로 놀러오세요

EfficientDet 논문(EfficientDet: Scalable and Efficient Object Detection) 리뷰 본문

Computer Vision/Object Detection

EfficientDet 논문(EfficientDet: Scalable and Efficient Object Detection) 리뷰

herbwood 2022. 12. 12. 17:55

이번에는 CVPR 2020년에 발표된 EfficientDet 논문(EfficientDet: Scalable and Efficient Object Detection)을 읽고 리뷰해보도록 하겠습니다. 당시 object detection 모델은 모두 속도와 정확도 사이의 트레이드오프(trade-off)가 존재했습니다. EfficientDet은 효과적으로 모델의 구조를 변형함으로써 속도와 정확도라는 두 마리 토끼를 모두 잡았으며, resource에 맞게 모델의 scale을 자유롭게 조정할 수 있는 높은 scalability를 보였습니다.


Research gap

정확도가 높은 object detection 모델은 model size가 크며 computational cost가 높아 real-world application에 적용하기 어렵다는 문제가 있습니다. 반대로 상대적으로 효율적인 one-stage, anchor free detector는 정확도가 낮으며, resource requirement가 특정되어 있거나 범위가 적어 다양한 application에 활용하기 힘듭니다.

Contribution

본 논문에서는 detector 모델 구조를 변형하여 높은 정확도와 효율성을 달성한 scalable한 detection architecture를 탐색합니다.

 

  1. 기존 feature pyramid 기반 multi-scale feature fusion 방법은 서로 다른 resolution의 feature를 동일하게 간주하여 구분 없이 더합니다. 본 논문에서는 학습 가능한 가중치를 통해 서로 다른 resolution의 feature의 중요도를 반영하는 BiFPN(bi-directional feature pyramid network)를 제안합니다.
  2. 또한 EfficientNet에서 영감을 받아 backbone, feature network, box/class prediction network에 대하여 resolution/depth/width를 모두 고려한 compound scaling 방법을 제안합니다.
  3. 위의 방법을 모두 적용한 새로운 detector인 EfficientDet은 COCO, Pascal VOC 2012 데이터셋에 대해 기존 방법보다 높은 FLOPS와 정확도를 달성합니다.

Preliminaries 

먼저 본 논문에서 사용한 compound scaling 방법을 살펴보겠습니다. 

 

1. Compound scaling 

Fig 1. Compound scaling

기존 ConvNet 모델은 깊이를 늘리거나(depth scaling), 넓이를 늘리거나(width scaling), 네트워크가 입력으로 받는 이미지의 해상도를 늘리는(resolution scaling) 방식을 통해 성능을 향상시켜왔습니다. 하지만 네트워크를 scaling하면 필연적으로 파라미터 수가 증가하여 효율성이 떨어진다는 단점이 있습니다. 그래서 EfficientNet 논문에서는 정확도와 효율성을 모두 얻으면서, 네트워크의 크기를 키울 수 있는 방법인 compound scaling을 제안합니다. Compound scaling은 네트워크의 넓이, 깊이, 그리고 이미지의 해상도를 여러 개의 고정된 coefficient로 지정하여 모델의 크기를 조정하는 방법입니다.

 

해당 논문에서는 실험을 통해 네트워크의 scaling factor(depth, width, resolution) 중 하나만 조정하면 정확도가 상승하지만 상슥폭이 쉽게 하락함을 발견했습니다. 이를 통해 각 scaling factor가 독립적이지 않다는 점을 확인할 수 있습니다. 높은 해상도의 이미지를 입력받으면 더 큰 receptive field를 확보하기 위해 네트워크의 깊이와 너비를 증가시켜야 합니다. 즉, 하나의 scaling factor만 조정(single-dimension scaling)것이 아니라 모든 scaling factor를 함께 조정해야 효과적으로 정확도와 효율성을 향상시킬 수 있다고 할 수 있습니다. 

 

$ d = \alpha^{\phi}$

$w = \beta^{\phi}$

$r = \gamma^{\phi}$

$s.t. \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \ \alpha \ge 1, \beta \ge 1, \gamma \ge 1$

 

scaling 시 하나의 compound coefficient $\phi$를 통해 네트워크의 width $d$, depth $w$, 그리고 resolution $r$를 scaling합니다. 이 때 $\alpha, \beta, \gamma$는 grid search를 통해 찾은 constant입니다. 먼저 baseline으로  $\phi=1, \alpha=1.1, \beta=1.1, \gamma=1.15$인 EfficientNet-B0을 기반으로,  $\phi$를 고정하고 compound coefficient $$를 조정하여 모델의 크기를 키워 EfficientNet-B1-B7까지 구조를 얻었습니다. 이러한 compound scaling을 통해 EfficientNet은 당시 ImageNet 벤치마크에서 더 적은 파라미터와 FLOPS로 더 높은 정확도를 달성하였습니다. 

Method

1. BiFPN

1.1 Problem Formulation

Mutli-scale feature fusion은 서로 다른 resolution(해상도)의 feature를 aggregate하는 것을 목표로 합니다. 서로 다른 resolution의 feature의 리스트를 $\vec{P}^{in}$라고 하며, $P_{l_i}^{in}$을 level $l_i$에서의 feature라고 합니다. 이 때 서로 다른 scale의 feature를 가장 효과적으로 aggregate할 수 있는 function $f$를 찾는 것이 목표입니다. 

 

1.2 Cross-Scale Connections 

Fig 2. BiFPN

하지만 기존의 top-down 방식은 단방향(one-way)로 정보의 흐름이 제한됩니다. 이러한 문제를 해결하기 위해 Figure 1 (b)의 PANet은 bottom-up path를 추가하였으며, NAS-FPN은 Neural Architecture Search를 통해 더 나은 cross-scale fusion 방법을 탐색했습니다. PANet은 FPN, NAS-FPN보다 높은 정확도를 보이지만, 더 많은 학습 파라미터 및 연산량을 필요로 하며, NAS-FPN은 매우 긴 탐색 시간을 필요로 하며, 탐색 결과를 해석하거나 변형하기 어렵다는 문제가 있습니다. BiFPN은 cross-scale connection을 위해 몇 가지 방법을 제안합니다.

 

1) 하나의 input edge를 가지는 node를 제거한다.

여기서 node는 각 level의 feature를 의미하며, edge는 특정 feature끼리 connect(혹은 fuse)되었는지 여부를 나타냅니다. Input edge가 하나라 함은, 다른 feature와 연결되어 있지 않다는 것이기 때문에, feature network에 더 적은 contribution을 가짐을 의미합니다. 따라서 이러한 기여도가 낮은 node를 제거함으로써 더 효율적인 연산이 가능합니다. 예를 들어, Figure 1 (b)의 PANet에서 두 번째 column의 첫 번째와 마지막 row의 node를 제거한 것이 이에 해당합니다. 

 

2) input node와 output node가 동일한 level에 있을 때, input node에서 output node로의 edge를 추가한다.

Input node는 feature network에 입력되는 feature를, output node는 feature network의 output feature를 의미합니다. 여기서 같은 level의 input, output node는 동일한 resolution을 가집니다. 따라서 input node에서 output node로의 edge를 추가하여, 즉 두 feature를 더해줌으로써, 연산량을 크게 늘리지 않으면서 더 효과적인 fuse가 가능합니다.

 

3) bidirectional(top-down과 bottom-up) path를 하나의 feature network layer로 간주하여, 이를 반복하여 쌓는다.

기존에는 단일 feature fusion, 즉 한번의 top-down 과 bottom-up 을 수행했지만, 이 과정을 여러 번 반복함으로써 high-level fusion이 가능합니다.

 

1.3 Weighted Feature Fusion

기존의 feature fusion 시, 동일한 resolution의 feature끼리 element-wise하게 더해주는 방법을 채택했습니다. 하지만 논문의 저자들은 feature가 서로 다른 resolution을 가지기 때문에 output feature에 대한 기여도가 상이(unequal)하다는 점을 지적합니다. 이러한 발견을 기반으로, feature마다 서로 다른 가중치를 부여하는 방법을 제안합니다.

또한 가중치의 범위(bound)가 지정되지 않을 경우, 학습 불안정을 야기할 수 있기 때문에 각 가중치를 normalize합니다. 이 때 normalization을 위해 두 가지 방법을 고안합니다.

 

1) Softmax-based fusion

$$O = \Sigma_i {{e^{w_i}} \over {\Sigma_j e^{w_j}}} \cdot I_i$$

Softmax-based fusion 방법은 가중치 $w_i$에 softmax function을 도입하여, 범위가 0~1 사이가 되도록 normalize하는 방법입니다. 하지만 softmax function은 GPU 하드웨어 사용 시 연산을 크게 느리게 만든다는 문제가 있습니다.

 

2) Fast normalized fusion

$$O = \Sigma_i {{w_i} \over {\epsilon + \Sigma_j e^{w_j}}} \cdot I_i$$

Fast normalized fusion 방법은 각 가중치에 ReLU function을 적용하여 0 이상의 값을 가지도록 하며, numerical stability를 위해 작은 실수값인 $\epsilon=0.0001$을 분모에 추가합니다. 이를 통해 얻은 가중치는 0~1 사이의 값을 가지며 softmax function 대비 GPU에서 30% 이상 빠르게 동작한다는 장점이 있습니다. level 6에서 fuse된 두 feature에 대한 예시는 아래와 같습니다. 

 

$P_{6}^{td} = Conv ({{w_1 \cdot P_{6}^{in} + w_2 \cdot Resize(P_{7}^{in})} \over {w_1 + w_2 + w_3}})$

$P_{6}^{out} = Conv ({{w_1^{'} \cdot P_{6}^{in} + w_2^{'} \cdot P_{6}^{td} + w_3^{'} \cdot Resize(P_{5}^{out})} \over {w_1^{'} + w_2^{'} + w_3^{'}}})$

BiFPN은 bidirectional cross-scale connection과 fast normalized fusion 방법을 통합하며, level 6에서의 BiFPN의 output은 다음과 같습니다. 이 때 Conv 연산의 경우, 효율성 향상을 위해 depthwise seperable convolution을 사용합니다.

2. EfficientDet

2.1 EfficientDet Architecture

EfficientDet은 EfficientNet을 backbone network로 가지며, feature network로 BiFPN을 사용합니다. 이 때 feature level은 3-7로 설정합니다. 이후 class/box network를 통해 class와 bounding box에 대한 예측을 수행합니다.

 

2.2 Compound Scaling

기존의 방법은 더 큰 크기의 backbone network를 사용하거나, 더 큰 크기의 이미지를 사용하거나, 혹은 더 많은 FPN layer를 쌓음으로써 detector의 크기를 키웠습니다. 하지만 이러한 방법들은 단일하거나 제한된 scaling dimension을 가진다는 점에서 한계가 있습니다(향상될 수 있는 정도가 제한됨). 본 논문에서는 EfficientNet에서 영감을 받아 compound coefficient 를 활용하여, backbone, BiFPN, class/box network, 그리고 resolution의 dimension을 scale up하는 방법을 제안합니다. 이 때 EfficientNet과 동일하게 $\phi$를 compound coefficient로 지정하여 scaling dimension을 통제하는 값으로 사용합니다. 

Fig 3. EfficientDet architecture

1) Backbone network

ImageNet으로 pretrained된 가중치를 재사용하기 위해 EfficientNet-B0~B6에서 사용했던 동일한 width/depth scaling coefficient를 사용합니다.

 

2) BiFPN network

$$W_{biFPN}=64 \cdot (1.35^{\phi}), \ D_{biFPN}=3 + \phi$$

BiFPN network는 layer의 수인 depth $D_{bifpn}$와 channel 수인 width $W_{bifpn}$에 대하여 scaling합니다. Depth는 정수값이어야하기 때문에 linear하게 증가시킵니다. 그리고 width는 여러 실험을 통해 $(1.2, 1.25, 1.3, 1.35, 1.4, 1.45) $ 중에서 1.35를 scaling factor로 선정합니다. BiFPN의 width, depth를 위와 같이 scaling합니다.

 

3) Box/class prediction network

$$D_{box} = D_{class} = 3 + [\phi / 3]$$

Box/class prediction network의 channel 수인 width는 BiFPN과 동일하게 설정합니다($W_{pred}=W_{biFPN}$). 하지만 depth는 다음과 같은 수식을 통해 선형적으로 증가시킵니다.

 

4) Input image resolution

$$R_{input}=512 + \phi \cdot 128$$

BiFPN에서 feature level이 3-7로 설정했기 때문에 $2^7 = 128$에 의해 나눠지도록 하기 위해, input image resolution을 다음과 같이 scaling합니다.

서로 다른 compound coefficient $\phi$를 사용하여, EfficientDet-D0~D7까지 개발했으며, 각 network별 scaling config는 위와 같습니다.  

Experiment

본 논문에서 수행한 실험 결과를 요약해서 정리했습니다.

  • COCO 2017 detection dataset에 대하여 실험을 수행한 결과, 파라미터 수가 4x-9x 더 적으며, 13x-42x 적은 FLOPS를 보이며 더 높은 AP를 달성했습니다.
  • 또한 inference latency(추론 시 지연시간)의 경우 기존 방법 대비 GPU에서 4.1배, CPU에서 10.1배 빠른 속도를 보였습니다.
  • EfficientDet으로 semantic segmentation을 수행한 경우, DeepLabV3+보다 9.8배 적은 FLOPS를 보이며, 1.7% 높은 정확도를 달성했습니다.
  • EfficientDet에서 EfficientNet과 BiFPN이 정확도와 효율성에 기여하는 바를 파악하기 위해 각 component에 대한 ablation study를 수행했습니다. EfficientNet과 BiFPN을 모두 사용했을 때 가장 높은 AP를 보이고, 가장 적은 파라미터를 사용했으며, 가장 적은 FLOPS를 달성했습니다.
  • BiFPN의 효과를 파악하기 위해 기존의 cross-scale connection 방법과 성능을 비교하는 ablation study를 수행했습니다. 실험 결과, BiFPN은 repeated PANet과 비슷한 정확도를 보였으나, 훨씬 적은 파라미터를 사용함을 확인했습니다.
  • Weighted feature fusion 시, softmax-based fusion과 fast normalized fusion의 정확도와 속도를 비교한 결과, 정확도는 비슷하나, fast normalized fusion 방법이 GPU 상에서 1.26x-1.13x 빠르게 동작했습니다.

추가적으로 제가 흥미롭게 본 실험 결과를 정리했습니다.

 

  • Softmax-based fusion과 fast normalized fusion를 이해하기 위해 EfficientDet-D3에서 BiFPN layer의 node를 랜덤하게 3개 추출했습니다. 실험 결과 normalized weight은 급격하게 변화하는 모습을 보이는데, 이를 통해 서로 다른 feature가 fusion 시 상이하게 기여한다는 점을 알 수 있습니다.
  • Compound scaling 방법을 효과를 파악하기 위해, image size, channel, BiFPN layer 수, class/box layer 수에 대하여 각각 scaling을 수행한 결과와 AP 값과 FLOPS를 비교했습니다. 실험 결과, compound scaling을 통해 각 요소를 함께 균형있게 scaling하는 것이 효과적임을 파악할 수 있습니다.

Conclusion

본 논문에서는 cross-scale connection과 weighted feature fusion을 적용한 BiFPN과 네트워크의 각 요소에 compound scaling을 적용한 EfficientDet을 제안했습니다. 이를 통해 COCO 2017, Pascal VOC 2012 데이터셋에 대해 SOTA 성능을 달성했습니다. 서로 다른 resolution의 feature map이 output에 대한 기여도가 상이하다는 점을 보이기 위해, iteration마다 node의 normalized weight 값을 보여준 실험이 인상 깊었습니다. 그리고 image classification에서 사용하던 compound scaling 방법을 object detection task에 맞게 feature network, prediction head까지 확장하여 적용했던 점도 흥미로웠습니다. 다음 포스팅에서는 DETR 논문을 읽고 리뷰해보겠습니다.

 

References

EfficientDet 논문(https://arxiv.org/pdf/1911.09070.pdf)

EfficientNet 논문(https://arxiv.org/pdf/1905.11946.pdf)

EfficientDet pytorch implementation(https://github.com/rwightman/efficientdet-pytorch)

Comments