EfficientDet
Intro
- object detection은 속도, 성능 둘 다 중요시 여겨집니다.
- 이 둘을 모두 잡고 싶어서 나온게 efficientDet
- 주로 더 좋은 성능을 얻기 위해서는 모델의 크기를 키우는 방법을 사용하는데 어느 정도 모델을 키우고 나면 성능의 이점은 업속 파라미터가 많아지며 속도가 느려짐
따라서 효율적으로 모델을 키울 방법을 찾아야 한다!
- (b)처럼 width만을 키울수도, (c)처럼 depth만을 키울수도, (d)처럼 해상도만을 높일 수도 있고 (e)처럼 모든걸 종합해서 높일 수도 있다
여기서 EfficientNet팀이 네트워크의 width, depth, resolution을 균형있게 맞추는 것이 중요함을 보였고 그러한 균형을 맞추는 방법에 대해 제시하였다.
EfficientNet
- 이 당시만해도 파라미터 수가 늘어감에 따라 모델의 정확도가 향상되었으나 효율성과 정확도가 trade-off 관계를 가지게 되었다
- 또한 어느 시점부터는 파라미터를 늘린다고 해서 더 높은 성능을 보장하지는 않았음
- 따라서 모델 스케일링을 통해 효율적인 모델을 완성하려 함
Scale up
첫 째는 Width Scaling으로 특징은 아래와 같습니다
- 네트워크의 width를 높이는 방법으로 작은 모델에서 주로 사용
- 미세한 특징을 잘 잡아내는 경향이 있고 학습이 쉬움
- 그러나 넓지만 얕은 모델은 hihg-level 특징을 잘 잡지 못함
둘 째는 Depth Scaling으로 특징은 아래와 같습니다
- 네트워크의 깊이를 높이는 방법으로 많은 ConvNet에서 사용
- 복잡한 특징들을 잘 잡아 낼 수 있고 새로운 Task에서도 일반화가 잘됨
- 깊은 네트워크는 기울기 손실문제가 여전히 발생함
세 번째로는 Resolution Scaling입니다.
- 고화질의 Input img를 사용했기에 미세한 패턴까지 잘 캐치합니다
efficientNet에서는 Width, depth, resoultion을 조합해서 scale up하는 compound scaling을 아래와 같이 제시하였습니다.
N은 model을 뜻하며 이 모델의 정확도를 최대로 해주는 scale factor d,w,r을 찾는 것이 목표입니다.
efficient팀에서는 아래와 같은 조건을 만족하는 d, w, r을 찾았습니다
감마에 가로세로가 두배면 제곱으로 늘어나 루트를 취하려고 하는거라는데 이해가 잘 안됩니다 ...
- 이를 기반으로 EfficientNet-B0~7이 탄생하게 됩니다.
- 과정은 아래와 같습니다
Step 1
- 𝜙=1로 고정
- 𝛼,𝛽,𝛾를 small grid search 를 통해 찾음
- 𝛼=1.2,β=1.1,𝛾=1.15underconstraintofα∙𝛽2∙𝛾2≈2
grid search : 들어갈 수 있는 값들을 순차적으로 모두 검색 후 가장 높은 성능을 가지는 것을 뽑음, 모두 검색하기에 시간이 많이 걸림
Step 2
- 𝛼,𝛽,𝛾를 상수로 고정
- 다른 𝜙를 사용해 scale up
- EfficientNet B1 ~ B7
EfficientDet
2020년 1월 Object Detection SOTA모델로 EfficientNet을 기반으로 만들어짐
- 우리는 real word에서의 사용이 목표이기에 정확성, 속도 모두 놓칠 수 없음
- 따라서 효율성 문제가 아주 중요!
- 그러나 reat-time의 적용을 위한 기존의 1-stage model은 성능이 압도적으로 부족..
=> 이를 극복하기 backbone, featurenetwork, box/class prediction network 등을 EffNet과 같은 방법으로 Scale up하면 어떨까라는 생각을 하게 됩니다.
- EfficientDet은 backbone으로 efficinetNet을 사용하며 weighted BiFPN(bi-directional feature pyramid network)와 compound scaling을 사용합니다.
해당 논문의 Contribution은 아래와 같습니다
Object Detection에도 Compound Scaling 적용
BiFPN 제안
결론적으로 BiFPN의 적용과 Compund Scaling의 사용!
기존의 Neck에서는 아래와 같이 정보가 한 방향에서만 흐르는 단점이 있었고 단순히 채널,해상도를 맞춰 simple summation을 하였기에 정확한 weight의 측정이 어려웠습니다.
BiFPN
- 위와 같은 문제 해결을 위해 Cross-Scale Connection과 weighted feature fusion을 통해 BiFPN을 탄생시킵니다.
Cross-Scale Connection
- 기존의 FPN은 한 방향으로만 정보가 흘러 bottom-up path를 추가한 PANet을 만듦
- FPN에 architecture search를 적용한 NAS-FPN
- 신경망구조로 만든 fully-connected FPN 등등..
그러나 다들 서로 다른 input feature들을 합칠 때 단순 합을 사용하였고 이 문제를 극복하기 위해 서로 다른 input feature들은 해상다고 다르기에 ouput feature에 기여하는 정도를 다르게 두는 weighted bi-directional FPN(BiFPN)을 제시
Weighted Feature Fusion
- 각 input feature의 중요도에 따라 각자 다른 weight를 가하고 이를 Fast normalized fusion이라 합니다.
특징은 아래와 같습니다
- 모든 가중치의 합으로 가중치를 나눈다
- 가중치는 ReLU가 적용된 이후이므로 항상 0이상의 값을 가집니다
- 분모가 0이 되지 않게 엡실론을 더합니다
이와 같은 과정에서 탄생한 BiFPN과 FPN을 비교해 보면 아래와 같은 차이를 볼 수 있습니다. (ablation study)
ablation study!
실험을 할 때 어떤 요소가 모델에 영향을 미치는지 확인하고 싶을 때 이 요소를 포함한 모델과 포함하지 않은 모델을 비교하는 것
Compund Scaling
- EfficinetNet B0 ~ B6를 Backbone으로 사용
아래는 해당 결과입니다
EfficinetDet Architecture
다른 모델들과의 성능 비교