본문 바로가기

부스트캠프 AI Tech/[Week9] Object Detection (1)

[Week9] Object Detection - EfficientDet [Day3]

1.Efficient in Object Detection

1.1 Model scaling

  • model이 deep 해질수록 좋은 성능을 가져오게 됐음
  • but, 어느정도 깊어지면 더이상 성능개선이 어려움
  • 얼마나 깊게 잘 쌓는지가 중요해짐
  • (e) compound scailing 에서 깊고, 넓게 또, high resolution으로 model을 개선시켜왔음
  • heuristic방법의 한계를 겪음

 

1.2 등장배경

  • 따라서 더 높은 정확도와 효율성을 가지면서 convnet의 크기를 키우는 방법을 연구
  • 너비, 깊이, 해상도 모든 차원에서의 균형을 맞추는 것이 중요하다는 것을 알게 됨.
  • 이러한 균형은 각각의 크기를 일정한 비율로 확장하는 것으로 달성할 수 있었다고 함

 

1.3 Accuracy & Efficiency

  • 낮은 FLOPs 대비 높은 mAP를 보임

 

2. EfficientNet

 

 

2.1 등장배경

  • 파라미터 수가 점점 많아지고 있는 모델들
  • ConvNet은 점점 더 커짐에 따라 점점 더 정확해지고 있음
    • 2014 ImageNet winner – GoogleNet ; achieves 74.8% top-1 accuracy with about 6.8M parameters
    • 2017 ImageNet winner – SENet ; achieves 82.7% top-1 accuracy with about 145M parameters
  • 점점 빠르고 작은 모델에 대한 요구 증가
  • 효율성과 정확도의 trade-off를 통해 모델 사이즈를 줄이는 것이 일반적
    • SqueezeNets(2016,2018), MobileNets(2017)
  • 하지만, 큰 모델에 대해서는 어떻게 모델을 압축시킬지가 불분명함
  • 따라서 이 논문은 아주 큰 SOTA ConvNet의 efficiency를 확보하는 것을 목표로 함
  • 그리고 모델 스케일링을 통해 이 목표를 달성함

 

2.2 Scale up

  • Width Scaling

    1. 네트워크의 width를 스케일링하는 방법은 작은 모델에서 주로 사용됨 (ex. MobileNet, MnasNet )
    2. 더 wide한 네트워크는 미세한 특징을 잘 잡아내는 경향이 있고, 학습도 쉬움
    3. 하지만, 극단적으로 넓지만 얕은 모델은 high-level 특징들을 잘 잡지 못하는 경향이 있음

 

 

  • Depth Scaling

    1. 네트워크의 깊이를 스케일링하는 방법은 많은 ConvNet 에서 쓰이는 방법
    2. DenseNet, Inception-v4
    3.  깊은 ConvNet은 더 풍부하고 복잡한 특징들을 잡아낼 수 있고, 새로운 태스크에도 잘 일반화됨
    4. 하지만 깊은 네트워크는 gradient vanishing 문제가 있어 학습이 어려움

 

 

  • Resolution Scaling

    1. 고화질의 input 이미지를 이용하면 ConvNet은 미세한 패턴을 잘 잡아낼 수 있음
    2. 최근 Gpipe는 480x480 이미지를 이용하여, ImageNet 에서 SOTA를 달성함

 

 

2.3 Accuracy & Efficiency

*Better Accuracy & Efficiency

  • Model의 정확도를 최대화하는 d, w, r을 찾자
  • 단, 메모리는 타겟 메모리보다 같거나 작아야 하고, FLOPs도 타겟 FLOPs보다 같거나 작아야 함

 

  • Observation 1
    1. 네트워크의 폭, 깊이, 혹은 해상도를 키우면 정확도가 향상된다.
    2. 하지만 더 큰 모델에 대해서는 정확도 향상 정도가 감소한다.


  • Observation 2
    1. 더 나은 정확도와 효율성을 위해서는, ConvNet 스케일링 과정에서 네트워크의 폭, 깊이, 해상도의 균형을 잘 맞춰주는 것이 중요하다
  • Compound Scaling Method


2.4 EfficientNet

*EfficientNet-B0

  • MnasNet에 영감을 받음
  • 𝐴𝐶𝐶 𝑚 × [𝐹𝐿𝑂𝑃𝑆 (𝑚) / 𝑇] ^ 𝑤 를 최적화 목표
  • Accuracy와 FLOPs를 모두 고려한 뉴럴넷을 개발함
  • Nas 결과, EfficientNet-B0
  • 위와 같이 network 구조를 Nas를 통해 알아냄. 따라서 알파, 베타, 감마를 찾아야함
  • Step 1
    • 𝜙 = 1 로 고정
    • 𝛼, 𝛽, 𝛾를 small grid search를 통해 찾음
    • 𝛼 = 1.2, β = 1.1, 𝛾 = 1.15 under constraint of α ∙ 𝛽^2 ∙ 𝛾^2 ≈ 2
  • Step 2
    • 𝛼, 𝛽, 𝛾를 상수로 고정
    • 다른 𝜙를 사용해 scale up
    • EfficientNet-B1 ~ B7


  • Results

 

 

 

 

 

3. EfficientDet

 

 

3.1 등장배경

 

*Detection

Object Detection Pipeline

 

  • Object Detection은 특히나 속도가 중요하다!
    • 모델이 실생활에 사용되기 위해서는 모델의 사이즈와 대기 시간에 제약이 있기 때문에, 모델의 사이즈와 연산량을 고려해 활용 여부가 결정됨
    • 이러한 제약으로 인해 Object Detection에서 Efficiency가 중요해지게 됨
  • 그동안 있었던 많은 시도들...
    • 1 stage model
      • YOLO, SSD, RetinaNet ...
    • Anchor free model
      • CornerNet ...
    • 하지만 Accuracy가 너무 낮음
  • Motivation
    • 자원의 제약이 있는 상태에서 더 높은 정확도와 효율성을 가진 detection 구조를 만드는 것이 가능할까?
    • EffDet에서의 scale up 대상 - Backbone, FPN, Box/class prediction head

 

 

3.2 Challenge

  1.  Efficient multi-scale feature fusion
    • In Neck, Simple Summation
    • EfficientDet 이전에는 multi-scale feature fusion을 위해 FPN, PANet, NAS-FPN 등 Neck 사용
    • 하지만 대부분의 기존 연구는 resolution 구분 없이 feature map을 단순 합
    • 서로 다른 정보를 갖고 있는 feature map을 단순합 하는게 맞을까?
    • 따라서 이 문제를 다루기 위해 EfficientDet 팀은 각각의 input을 위한 학습 가능한 웨이트를 두는 Weighted Feature Fusion 방법으로 BiFPN(bi-directional feature pyramid network)를 제안


    • 모델의 Efficiency를 향상시키기 위해 다음과 같은 cross-scale connections 방법을 이용
    • 하나의 간선을 가진 노드는 제거
    • Output 노드에 input 노드 간선 추가
    • 양방향 path 각각을 하나의 feature Layer로 취급하여, repeated blocks 활용
    • EfficientDet은 여러 resolution의 feature map을 가중 합
    • FPN의 경우 feature map의 resolution 차이를 Resize를 통해 조정한 후 합
      기존 FPN 다른 resolution에 대한 단순합



    • BiFPN의 경우 모든 가중치의 합으로 가중치를 나눠줌.
    • 이 때 가중치들은 ReLU를 통과한 값으로 항상 0 이상
    • 분모가 0이 되지 않도록 아주 작은 값 𝜖을 더해줌
      가중합을 이용한 BiFPN


  2. Model Scaling
    • Previous work focus on large backbone & Image size
    • 더 좋은 성능을 위해서는 더 큰 backbone 모델을 사용해 detector의 크기를 키우는 것이 일반적임
    • EfficientDet은 accuracy와 efficiency를 모두 잡기 위해, 여러 constraint를 만족시키는 모델을 찾고자 함
    • 따라서 EfficientNet과 같은 compound scaling 방식을 제안 (width, depth, resolution)
    • EfficientNet B0 ~ B6을 backbone으로 사용
    • BiFPN network
      • 네트워크의 width(= # channels)와 depth(= #layers)를 compound 계수에 따라 증가시킴
      • 1.35계수는 grid search로 찾은 값


    • Box/class prediction network 
      • Width는 고정, depth를 다음과 같은 식에 따라 증가
    • Input image resolution
      • Resolution을 다음과 같이 선형적으로 증가

    • Results

      • 전체적으로 낮은 FLOPs 대비 높은 성능을 보여줌