backbone 이해하기 _ EfficientNet
Backbone 이해하기 : CNN
1. EfficientNet
1.1 Baseline Model
MBConv Block
Mobile inverted Bottleneck Convolution
- Depthwise Separable Convolution : Depthwise conv + Pointwise conv
- Squeeze and Excitation : Feature를 압축했다가 증폭하는 과정을 통해 feature의 중요도를 재조정
spatial한 정보와 channel의 정보를 conv 연산에서 활용하는 방식을 분리하자
- Depthwise Separable Convolution
spatial 정보 : Depthwise conv
channel 별로 나누어서 conv 연산을 수행한다. 따라서, 기존의 conv 연산보다 적은 수의 parameter로 feature를 추출할 수 있다.
즉, channel 별로 각각의 feature map이 생성이 된다.
channel의 정보 : Pointwise conv
각 channel 별로 처리를 하게 되니깐, channel의 수를 조절할 수 없게 되었다.
이를 처리하기 위해서 pointwise Conv를 진행하게 된다.
1x1 kernel을 처리해서, 채널의 수를 조절해서 전체 파라미터 수가 적어질 수 있도록 한다. - Squeeze and Excitation
feature를 압축했다가 증폭해서 feature의 중요도 재조정
즉, Depthwise Separable convolution의 결과를 추가로 재조정 한다.
$\because$ Depthwise Separable convolution은 파라미터 수를 줄이기 위해 성능적인 부분을 조금 포기한 module임
이를 보완하고자 Squeeze and Excitation을 실행
- Global Average Pooling으로
1x1xC
의 크기로 압축
(= 각 채널의 중요한 정보만 가지도록 압축) 1x1xC
를 이용해서 각 channel의 중요도를 추출, 그리고 기존 feature map에 곱함- output은 channel의 중요도가 학습된 새로운 feature map
- Global Average Pooling으로
Baseline Model Scaling
해상도가 커지면 성능이 좋더라 이것을 해석해보자
해상도가 커지면
- 더 큰 Receptive Field가 필요하므로 더 많은 layer를 쌓은 깊은 모델이 높은 정확도를 가짐
- 이미지의 디테일(high frequency information에 대한 정보)가 포함되는 장점이 있음
이를 효과적으로 사용하기 위해서는 더 큰 kernel size를 가지는 channel이 필요함
1.2 Compound Scaling
각 방향으로 모델의 크기를 키워도 한 방향으로만 키워도 결국 어느 수준에서 모델의 성능이 상승하지 않는다.
즉, 모델의 성능을 향상시키는 방법은
- 모델의 Depth를 늘리기
- Channel Width 늘리기
- Input Image의 해상도 늘리기
따라서 모든 방향에서의 모델 크기 향상을 위해 Compound Scaling 사용
- individual Scaling
깊이($d$), 넓이($w$), 해상도($r$)를 각각 독립적으로 scaling 하는 방법 - Compound Scaling
깊이($d$), 넓이($w$), 해상도($r$)를 동시에 scaling 하는 방법
이때, $\phi$는 Compound Coefficients이고, 한번에 scaling 한다.
$\begin{aligned}depth:\;d&=\alpha^{\phi} \newline width:\;w &= \beta^{\phi} \newline resolution: \;r&=\gamma^{\phi} \end{aligned} $
small grid search
$\phi$를 1로 고정한 후, $\alpha , \beta , \gamma$를 구한다.
이때 구한 $\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$가 되는지 확인한 후,
$\alpha , \beta , \gamma$를 고정하고 $\phi$를 조절하여 scaling 한다.
1.3 EfficientNet의 결과
다른 모델보다 압도적으로 성능이 향상된 것을 볼 수 있다.