[P stage 2 DAY 41] Object Detection (5)

먼지감자·2021년 10월 1일
0

AI Boostcamp 2기

목록 보기
33/48
post-custom-banner

강의 내용 복습

(06강) EfficientDet

1. Efficient in Object Detection

1.1 Model Scaling
단순하게 깊게 쌓는다고 무조건적인 성능향상을 가져오지 않음 -> 어떻게 모델을 효과적으로 쌓을 수 있을까? == Model Scaling(scale up)

depth scaling = 깊게 (resnet처럼)
width scaling = 넓게 (wide resnet 처럼)
resolution scaling = 이미지 크기를 크게
compound scaling = 위의 3가지를 다함

1.2 등장배경
더 높은 정확도와 효율성을 가지면서 ConvNet의 크기를 키우는 방법(scale up)은 없을까?

“ EfficientNet팀의 연구는 네트워크의 폭(width), 깊이(depth), 해상도(resolution) 모든 차원에서의 균형을 맞추는 것이 중요하다는 것을 보여주었다. 그리고 이러한 균형은 각각의 크기를 일정한 비율로 확장하는 것으로 달성할 수 있었다. “

1.3 어떻게? – Model Scaling

1.4 무엇을? – 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

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

Depth Scaling

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

Resolution Scaling

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

2.3 Accuracy & Efficiency
object function 정의
N : 모델 -> 모델의 acc을 최대로 하는 d(depth),w(channel),r(resolution)을 찾아라. 이때 조건은 모델의 memroy 와 flops는 target 보다 작아야 함

  • Shape of input tensor: Xi=Hi,Wi,Ci>X_{i}=\left\langle H_{i}, W_{i}, C_{i}>\right.
  • ConvNet Layer i:Yi=Fi(Xi)i: Y_{i}=\mathcal{F}_{i}\left(X_{i}\right)
  • ConvNet N=FkF2F1\mathcal{N}=\mathcal{F}_{\mathbf{k}} \odot \ldots \odot \mathcal{F}_{2} \odot \mathcal{F}_{1} =j=1kFj(X1)=\odot_{\mathrm{j}=1 \ldots \mathrm{k}} \mathcal{F}_{\mathrm{j}}\left(\mathrm{X}_{1}\right)

    XiX_{i} : input tensor
    Fi\mathcal{F}_{i} : Operator
    YiY_{i} : output tensor

object function의 scale factor(d,w,r)을 바꿔가며 실험한 결과 알아낸 것
observation 1. -> 하나의 factor를 바꿀때 다른 두개는 고정
네트워크의 폭, 깊이, 혹은 해상도를 키우면 정확도가 향상된다.
하지만 더 큰 모델에 대해서는 정확도 향상 정도가 감소한다.

observation 2. -> 두개~세개의 factor를 동시에 바꿈
더 나은 정확도와 효율성을 위해서는, ConvNet 스케일링 과정에서
네트워크의 폭, 깊이, 해상도의 균형을 잘 맞춰주는 것이 중요하다.

Compound Scaling Method
실험결과에 따라 다음 조건을 만족하는 compound scaling 방법을 제안함
depth: d=αϕd=\alpha^{\phi}
width: w=βϕw=\beta^{\phi}
resolution: r=γϕr=\gamma^{\phi}

 s.t. αβ2γ22α1,β1,γ1\begin{aligned} &\text { s.t. } \alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2 \\ &\quad \alpha \geq 1, \beta \geq 1, \gamma \geq 1 \end{aligned}

α,β,γ\alpha, \beta, \gamma : d,w,r을 얼마나 바꿀건지 조절하는 param / 이들은 s.t.와 같은 제약조건을 가짐. r은 가로세로 동시에 늘어나므로 제약조건에 square 텀이 붙음
ϕ\phi : 만약 제약조건을 만족하는 α,β,γ\alpha, \beta, \gamma가 fix가 되면 ϕ\phi를 늘려나가면서 d,w,r방향으로 scale up하는 param

2.4 EfficientNet
EfficientNet-B0
MnasNet에 영감을 받음

  • ACC(m)×[FLOPS(m)T]wA C C(m) \times\left[\frac{F L O P S(m)}{T}\right]^{w} 를 최적화 목표
  • Accuracy와 FLOPs를 모두 고려한 뉴럴넷을 개발함
  • Nas 결과, EfficientNet-B0

step1.

  • ϕ\phi = 1로 고정
  • α,β,γ\alpha, \beta, \gamma를 small frid search
  • α=1.2,β=1.1,γ=1.15\alpha = 1.2, \beta=1.1, \gamma=1.15 조건 : αβ2γ22\alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2 \\

step2.

  • α,β,γ\alpha, \beta, \gamma를 상수로 고정
  • 다른 ϕ\phi를 사용해 scale up
  • EfficientNet B1 ~ B7

3. EfficientDet

-> 1 stage detector
3.1 등장배경

  • 모델이 실생활에 사용되기 위해서는 모델의 사이즈와 대기 시간에 제약이 있기 때문에, 모델의
    사이즈와 연산량을 고려해 활용 여부가 결정됨
  • 이러한 제약으로 인해 Object Detection에서 Efficiency가 중요해지게 됨

자원의 제약이 있는 상태에서 더 높은 정확도와 효율성을 가진 detection 구조를 만드는 것이 가능할까?에서 시작된 연구

Backbone, FPN, and box/class prediction networks 를 동시에 scale up하면 됨

3.2 Challenge
1) Efficient multi-scale feature fusion
EfficientDet 이전에는 multi-scale feature fusion을 위해 FPN,
PANet, NAS-FPN 등 Neck 사용. 하지만 대부분의 기존 연구는 resolution 구분 없이 feature map을 단순 합함 . 서로 다른 정보를 갖고 있는 feature map을 단순합 하는게 맞을까?
-> 가중합을 하는 BiFPN, cross-scale connections 방법을 이용

BiFPN : 모든 가중치의 합으로 가중치를 나눠줌, 이때 가중치는 RELU를 통과하므로 모두 0이상, 분모가 0이 되지 않게 아주 작은 값 epsilon더해줌

2) Model Scaling

  • 더 좋은 성능을 위해서는 더 큰 backbone 모델을 사용해 detector의 크기를 키우는 것이 일반적임

  • EfficientDet은 accuracy와 efficiency를 모두 잡기 위해, 여러 constraint를 만족시키는 모델을
    찾고자 함

  • 따라서 EfficientNet과 같은 compound scaling 방식을 제안

  • backbone : EfficientNet b0-b6 사용

  • BiFPN Network
    네트워크의 width(= # channels)와 depth(= #layers)를 compound 계수에 따라 증가시킴
    Wbifpn=64(1.35ϕ),Dbifpn=3+ϕW_{b i f p n}=64 \cdot\left(1.35^{\phi}\right), \quad D_{b i f p n}=3+\phi

    1.35 : grid serach 로 찾은 값
    D : 기본적으로 3번 반복 , ϕ\phi만큼 더 반복

  • Box/class prediction network
    Width는 고정, depth를 다음과 같은 식에 따라 증가
    Dbox=Dclass =3+ϕ/3D_{b o x}=D_{\text {class }}=3+\lfloor\phi / 3\rfloor

  • Input image resolution
    Resolution을 다음과 같이 선형적으로 증가
    Rinput =512+ϕ128R_{\text {input }}=512+\phi \cdot 128

    기본 image scale은 512, ϕ\phi에 128을 곱해주어 선형적으로 증가시킴

3.3 Results
같은 연산 대비 성능 좋음

Further Reading
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
EfficientDet: Scalable and Efficient Object Detection


과제 수행 과정 및 결과


피어 세션

wandb sweep 적용하는 코드 짜기


학습 회고

keep

mmdetection 사용법 제대로 익히기

problem

코어 타임 이후 시간 관리 + 공부

try

코어 타임 이후 공부하기
tmux적용해서 밤에 학습 돌려놓고 자기

profile
ML/AI Engineer
post-custom-banner

0개의 댓글