Abstract
2019년 현재까지 Object Detection 분야 성능이 비약적으로 발전했다. 이를 넘어 Google에서 성능을 비약적으로 향상시킨 EfficientDet을 개발했다.
EfficientDet은 EfficientNet을 Backbone으로 하는 Bi-FPN(Bi-Feature Pyramid Network)을 특징추출 네트워크로 사용했다. 기존 FPN에서 사용했던 feature fusion을 폐기하고 Weighted Feature Fusion을 새로 고안해 적용했다.
그 결과 2019년 11월 기준 SOTA 성능을 보이고 있다.
Summary
Bi-FPN을 설명하기 앞서 FPN의 기본 구조를 알아야 한다.
최초 CNN은 입력 이미지를 Conv 레이어에 입력시켜가며 다중 해상도 피쳐맵을 만들어냈다.
하지만 아웃풋으로 사용하는 것은 가장 저해상도의 피쳐맵이었다. 이를 Single feature map이라 한다.
가장 마지막 압축 특징을 사용하기 때문에 성능이 떨어졌다.

이때 아웃풋으로 사용되지 않는 각 Conv 단계의 피쳐맵들을 모두 아웃풋으로 Predict 하려는 시도가 생겼다.
각 단계에서 독립적으로 피처맵을 추출해서 객체를 탐지한다. 이를 Pyramidal Feature Hierachy라 한다.
하지만 이는 각 레벨 간 정보교환이 없이 독립된 특징만 도출한다는 단점이 있다.

상기한 단점을 가진 PFH를 보완하고자 각 단계 별 추출된 피쳐 맵 간 정보를 교환시켜 고해상도 피쳐맵을 도출하는 시도가 생겨났다.
가장 저해상도인 피쳐맵을 2배로 Up sampling 시켜 크기를 4배 키우고, 대칭 대응쌍인 Down sampling 과정의 동일크기 피쳐맵과 Element-wise addition으로 병합시킨다.
이는 U-Net의 과정과 비슷하다. (Skip connection)

본 논문 작성자인 Google 연구팀은 기존 FPN에서의 Upscailing 과정만 사용하고, Skip connection 과정에서 피쳐 맵 간 병합(Feature Fusion)이 단순한 Element Wise Addition으로 이뤄진다는 점에 집중했다.
연구팀은 기본 FPN에서 Up scailing 실행 후 다시 Down scailing을 실행하는 PANet과, 동일 scale이 아닌 다른 scale 간 connection도 존재하는 (Cross scale connection) NAS-FPN을 제안했다.
여기에 PANet의 구조를 기반으로 NAS-FPN의 Cross scale connection을 사용한 Simplified PANet을 고안했고,
최종적으로 Simplified PANet에서 동일 단계 간 shortcut을 설정해 더 많은 feature를 fusion할 수 있게 한 Bi-FPN을 완성했다.

각 Connection에 사용되는 Feature Fusion은 단순한 Elementwise-Addition(크기가 같은 행렬 간 연산에서 요소들만 더하거나 곱함)을 사용하기 때문에 input feature들 간 중요도가 모두 무시된다는 단점이 있다. (Conventional FF)
이를 해결하기 위해 가중치를 부여한 Weighted Feature Fusion을 고안했다.
가중치는 scalar, vector, multi dimensional tensor 모두 사용 가능한데, 본 논문에선 scalar가 실험결과 제일 우월해서 이를 사용했다. scalar 형식인 가중치를 단순히 곱해서 더하면 (Unbounded FF) 학습 불안정성을 유발할 수있다.
따라서 Softmax을 사용해 0~1 사이 값으로 정규화했다. (Softmax FF)
하지만 Softmax 특성상 분모에 0이 들어가 계산과정에 오류가 날 가능성이 약간이나마 존재한다.
물론 값이 Relu를 거치므로 0이 되진 않지만 안전장치가 있으면 나쁠 건 없다.
이를 보완코자 0.0001크기의 입실론을 설정해 분모에 더해줬다. 그 결과 Fast normalized Feature Fusion 식이 탄생했다.

상기한 BiFPN과 Fast normalized FF를 모두 적용한 EfficientDet 구조는 다음과 같다.

ImageNet으로 Pretrained 된 EfficientDet을 백본으로, 최종 output부터 직전 5개 단계의 Feature map들을 BiFPN 형식으로 Feature Fusion을 진행했다. 그리고 그 아웃풋을 Box prediction과 Object Classification부로 따로 나눈 Conv 레이어에 입력해 다시 Feature map을 그렸다.
EfficientDet은 B0부터 B6를 사용했다. Compound scailing은 다음과 같은 표로 설정했다.

성능은 다음과 같았다.

보다시피 mAP와 파라미터 수, FLOPS, CPU-GPU Latency가 월등히 낮은 것을 볼 수 있다.
이는 2019년 11월 기준 SOTA에 해당한다.