Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EfficientDet: Scalable and Efficient Object Detection #253

Open
chullhwan-song opened this issue Nov 26, 2019 · 2 comments
Open

EfficientDet: Scalable and Efficient Object Detection #253

chullhwan-song opened this issue Nov 26, 2019 · 2 comments

Comments

@chullhwan-song
Copy link
Owner

https://arxiv.org/abs/1911.09070

@chullhwan-song
Copy link
Owner Author

chullhwan-song commented Nov 29, 2019

@chullhwan-song
Copy link
Owner Author

chullhwan-song commented Jan 20, 2020

Abstract

  • 위의 좋은 리뷰를 먼저 읽고..

BiFPN

Problem

  • 보통 multi-scale의 cnn feature map을 쓸 때, 각 scale에서의 w,h가 다르므로, 어떤 기준(가장 큰것?)에 맞춰 그 feature map 크기를 resize하여 sum(aggregate features)한다. 참고로 U-Net에서는 concat하는 형태로..
    • 다음은 관련 수식.
      image
  • 여기서의 문제점은 그냥 resize하지말고 이를 weight주는데, 그 weight도 학습에 의해서 evaluation하자란게 요지인듯보인다.

Cross-Scale Connections

  • top-down & one bottom-up path = bidirectional (top-down & bottom-up) path
    • 이 연구에서 우리는 bidirectional feature pyramid network (BiFPN) 라 정의.
      image

Weighted Feature Fusion

  • Fast normalized fusion
    image
    • 각 scale 에서, i 개수 > w_i는 Relu를 적용한한다.
       # init func
        self.p6_w1 = nn.Parameter(torch.ones(2)) # > 두개 선언한다.
        self.p6_w1_relu = nn.ReLU()
        ...
        # forward
        p6_w1 = self.p6_w1_relu(self.p6_w1)
        weight = p6_w1 / (torch.sum(p6_w1, dim=0) + self.epsilon)
  • two fused features
    image
        # forward
        # Connections for P6_0 and P7_0 to P6_1 respectively
        #   > self.p6_w1 = nn.Parameter(torch.ones(2)) > 두개 선언했기때문에, weight[0] & weight[1]
        p6_up = self.conv6_up(weight[0] * p6_in + weight[1] * self.p6_upsample(p7_in))
  • 실험결과
    image
    • 논문은 softmax 등의 방법을 언급했는데..여기서는 하지 않음(논문을 살펴보기 바람)
    • fast한 방법이 acc가 조금 낮지만, softmax 보다 훨씬 빠름.

EfficientDet

EfficientDet Architecture

  • level 3-7 features = {P3, P4, P5, P6, P7}
    image

Compound Scaling

  • 효율성과 정확도에 대해 최적화하는 목적으로, baseline EfficientDet model로 "scale up" 하는 방법으로...,
  • 이전 연구의 scale up하기 위해서는 backbone networks를 아주 큰 network들을 고용 > ResNeXt 또는 AmoebaNet > 비요휼적이라고 주장.
  • 최근 연구에서, network의 width, depth, input resolution에 대한 scale up 측면에서 매우 좋은 성능을 보인 (이미지 분류분야에서..) 연구가 나옴. > Efficientnet: Rethinking model scaling for convolutional neural networks
  • 이를 object detection 분야에 적용
  • 그래서 최종적으로 "scale up all dimensions of backbone network, BiFPN network, class/box network, and resolution" > 이들을 합성하여 적용 > 기준: coefficient φ(이건 좀 Efficientnet보고 공부해야할듯..)
  • Backbone network > EfficientNet-B0 to B6 (& ImageNet-pretrained)
  • BiFPN network
  • Box/class prediction network
  • Input image resolution
  • 실험결과
    image
    • 기본적으로, EfficientNet를 적용할때가 성능향상에 가장 좋음.
    • 결과적으로 EfficientNet포함한 위에 언급된 방법을 모두 사용함으로써 더 좋은 성능결과를 보임.

실험

  • 첫장에서 보여주는 실험 결과는 환상적이다.
    image
    image
  • ACC와 속도를 모두 잡은것같다.(이전 결과와 비교해볼때..)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant