EfficientDet
은 컴퓨터 비전에서 모델의 효율성을 높이기 위한 새로운 object detection 방법으로, BiFPN 및 복합 스케일링 방법을 포함한 최적화 기술을 사용하여 multi 스케일 특징 융합 및 해상도, depth 및 width의 균일한 스케일링을 쉽고 빠르게 수행할 수 있다. EfficientDet-D7
을 사용하여 situation-of-the-art 정확도를 달성하면서 매우 적은 매개 변수 및 FLOPS를 사용할 수 있다.
Speed와 Accuracy는 Trade-Off 관계를 가지는데, 모델의 speed 와 accuracy를 둘 다 잡기 위하여 두가지 문제를 efficientdet에서 focus 하여 다루었다.
One-Stage Detector의 대표격인 모델인 RetinaNet, M2Det, AutoML의 Neural Architecture Search를 Feature Pyramid Network(FPN) 구조를 적용하였다. 하지만 위의 연구들은 모두 서로 다른 input feature들을 fusion할때 가로 세로 사이즈만 맞추고 sum을 진행할 때 서로 다른 input feature들은 해상도가 다르기 때문에 그것들을 연산해서 outout을 만들어 낼때 단순히 sum을 진행하면 값이 부족해지는 것을 언급하였다.
서로 다른 input feature들은 해상도가 다르기 때문에 output feature에 기여하는 정도를 다르게 가져가야 함을 언급하며, (단순히 더하면 같은 weight로 기여하게 됨) 기존 FPN 보다 단순한 weighted bi-directional FPN(BiFPN) 구조
를 만들었다. 이 구조를 사용하면 서로 다른 input feature들의 중요성을 train을 통해 배울 수 있으며, 이를 통해 성능을 높게 향상시켰다.
BiFPN
은 EfficientDet에서 사용되는 가중치 bi-directional(이중 방향) 피라미드 네트워크이다. BiFPN은 다양한 크기의 객체를 검출하기 위해 다양한 해상도의 feature map을 효과적으로 통합하는 방법이다.
BiFPN은 다음과 같은 과정으로 진행된다.
수식을 통해서 과정을 자세히 뜯어보자 !
feature pyramid
에서 사용할 feature map
을 벡터 P_in이라고 하고, feature level
에 따라서 P_in_l1, P_in_l2라고 정의한다.
여기서 목표는 transform을 해주면서 최적의 P_out을 output으로 가지는 f
를 찾는 것이다.
기존 FPN의 경우, 3~7 단위의 feature level 들을 뽑아 연산을 진행한다.
Pin 아래 있는 숫자들은 1/2^I 로 연산을 진행한다. 만약 640640 input이 들어왔다면 level3에 해당하는 resolution은 640/2^3 = 80 80이 된다._
이렇게 연산을 진행한 후 다시 top down 방식을 통해 layer 을 타듯 수행된다.
맨 위에 해당하는 값은 단순 conv를 진행하고, 그 아래 값부터는 resize를 하여 단순히 더함으로 p_out을 구하는 과정 !
이미지를 활용하여 구조에 대해 살펴보자 !
FPN이후에 PANet
이 등장하였고, 여기서는 top-down방식뿐만 아니라 bottom-up 으로도 올리는 걸 또 하나 만들어서 fusion을 진행하는 방식으로 돌아간다.
다음으로 등장한 것이 NAS-FPN
이다. NAS-FPN
은 AutoML의 Neural Architecture Search를 FPN 구조에 적용하여 점선의 부분을 사람이 직접 구상하지 않고 neuron network를 도입하여 진행한다. 하지만 이 구조는 속도가 느리고 복잡하다는 단점을 지니고있다.
Efficientdet 논문에서는 같은 조건에서 성능을 FPN, PaNet, Nas-FPN 중 PaNet
이 가장 성능이 좋은 것을 실험을 통해 확인하였고, 따라서 이 구조를 차용하여 단순한 구조로 변형시켰다.
일단 bottom-up과 top-down의 첫 번째 있는 이 화살표를 지워버리고 바로 내려가게 만들었다. 이를 통해 위에서 내려오는것과 옆에서 가는 것이 만나 fusion이 일어나는데 수정한 경우에는 단순히 convolution을 진행하기 때문에 삭제하고, 마지막 단락도 동일한 이유로 지워버렸다. 이렇게 적용한게 simplified PANet 구조
이다.
이 구조에서 bottom-up과정을 진행할 때 fusion을 많이 할수록 성능이 더 좋아지기 때문에 원래의 feature들을 활용하여 다시 한번 fusion을 진행하였고 여기 점선 구조를 계속 반복함을 통해 성능을 개선시킨게 BiFPN 구조
가 되는 것이다 !
EfficientNet에서 제안한 Compound Scaling 기법
은 모델의 크기와 연산량를 결정하는 요소들(input resolution, depth, width)을 동시에 고려하여 증가시키는 방법을 의미하며, 이 방법을 통해 높은 성능을 달성하였다. 이러한 아이디어를 Object Detection에도 적용을 할 수 있으며, backbone, feature network, box/class prediction network 등 모든 곳에 적용을 진행하였다.
resolution이 다른 피처들을 fusion할때 기존에는 보통 같은 resolution 사이즈로 사이즈를 맞춘 다음 이들을 단순 더해주는 방식으로 진행하였. 이는 input 피처를 구분없이 모두 동일하게 처리하는데, 논문에서는 다른 resolution의 각각의 input feature들은 보통 output에 동일하지 않게 영향을 준다는 것을 주장하였으며 이를 해결하기 위해 3가지 방법을 제안하였다.
Unbounded Fusion의 수식은 다음과 같다.
여기서 i는 feature map인데 weight를 곱해서 sum을 진행하는 방법이 unbounded fusion이다.
직관적인 방법이며 weight는 scalar (per-feature)로 줄 수 있고, vector (per-channel)로 줄 수 있고 multi-dimensional tensor (per-pixel)로 줄 수 있는데,
본 논문에서는 scalar를 사용하는 것이 정확도와 연산량 측면에서 효율적임을 실험을 통해 밝혔고, scalar weight를 사용하였다.
하지만 unbounded 되어 있기 때문에 학습에 불안전성을 유발할수 있어 스칼라 값이 너무 튀는 값이면 결과가 이상하게 나올 수 있다는 단점이 존재한다.
Softmax fusion
은 각각을 0에서 1로 값을 변환하여 sum을 해주는 방식인데 성능은 괜찮으나 실제로 gpu에서 연산을 시도하면 속도가 많이 떨어진다는 단점이 존재한다.
본 논문에서는 Fast normalized fusion 방식
을 제안하였다. 여기서 weight는 relu를 거치기 때문에 non-zero임이 보장되고 분모가 0이 되는것을 막기 위해 0.0001크기의 입실론을 넣었다. 성능에 있어서는 softmax based fusion과 거의 비슷하지만 속도면에서 30% 정도 빠르기 때문에 본 방법을 사용하여 진행하였다.
SoftMax fusion과 Fast Fusion을 비교한 결과로, Fast Fusion을 사용하면 약간의 mAP 하락은 있지만 약 30%의 속도 향상을 확인할 수 있다.
또한 그림 5를 보시면, input 1과 input 2의 weight를 training step에 따라 plot한 결과인데, 학습을 거치면서 weight가 빠르게 변하는 것을 보여주고 있고,
이는 각 feature들이 동등하지 않게 output feature에 기여를 하고 있음을 보여주고 있으며, Fast fusion을 사용하여도 SoftMax fusion과 양상이 비슷한 것을 확인할 수 있다.
EfficientDet의 backbone으로는 ImageNet-pretrained EfficientNet을 사용하였다. BiFPN을 Feature Network로 사용하였고, level 3-7 feature에 적용하였다. 또한 top-down, bottom-up bidirectional feature fusion을 반복적으로 사용한 것을 볼 수 있다.
결과물을 확인하면 같은 파리미터를 갖는 네트워크랑 비교를 했을 때 성능도 매우 좋고 속도도 매우 빠르다. 맨 위에 yolo와 비교해 보아도 연산량이 1/28밖에 안되는 것을 확인할 수 있다.