Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution

Inc Lomin's avatar
Apr 18, 2021
Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution
Introduction, brief explanation and detailed PyTorch implementation of Octave Convolution.
 

Introduction

Signal processing 이론에 따르면, 일반적으로 이미지는 아래와 같이 global structure를 포함하는 low-frequency 정보(가운데)와 fine detail을 표현하는 high-frequency 정보(오른쪽)으로 나눌 수 있습니다. CNN의 feature map도 비슷하게 decompose할 수 있지 않을까요? Low-frequency 정보는 원래 이미지(또는 feature map)의 spatial resolution보다 작게 줄여도 정보를 잃지 않기 때문에, 결과적으로 feature map의 크기를 줄여 연산량과 메모리 사용량을 크게 줄일 수 있을 것입니다. 이 논문에서는 이러한 아이디어를 바탕으로 feature map을 서로 다른 spatial frequency에 따라 나누고(decompose), 크기가 다른 feature map 각각에 대해 따로 convolution을 적용하는 OctConv 구조를 제안합니다.
notion image
 

Proposed Method

1. Octave Feature Representation

일반적인 convolution에서 한 레이어의 feature map은 모두 같은 spatial resolution을 갖습니다. 하지만 어떤 feature map이 low frequency 정보를 표현한다면 이것은 spatially redundant하기 때문에, 공간적으로 크기를 줄일 수 있을 것입니다. 이러한 방법으로써 octave feature representation을 제안합니다.
채널의 갯수 c, 높이와 넓이를 h, w라 할 때 보통의 feature map은 c x w x h의 크기를 가집니다(아래 그림의 (b). Octave feature representation은 이를 채널 방향으로 분리하여 공간적 크기가 다른 두 개의 feature map으로 변형합니다(아래 그림의 (c)). 첫 번째인 high-frequency 부분(X^H)은 전체 채널 중 (1-a) 비율만큼을 차지하며 fine detail 정보를 포함합니다. 두 번째인 low-frequency 부분(X^L)은 a 만큼의 비율로 채널을 차지하며 공간적으로 느리게 변하는 정보를 포함합니다. 여기서 a는 [0, 1] 범위의 값이며 채널 중 low-frequency 부분에 할당되는 비율을 나타냅니다.
notion image
 

2. Octave Convolution

위에서 설명한 것과 같이 두 부분으로 나뉜 feature map을 input과 output 각각 X, Y 이라고 하겠습니다. X와 Y는 각각 크기에 따라 {X^H, X^L}, {Y^H, Y^L}로 나누어집니다. Octave convolution에서 이들 네 feature map은 아래와 같이 계산됩니다. A→B 표시는 A그룹에서 B그룹으로 이동하는 convolution을 의미합니다. 여기서 그룹이란 feature map의 크기를 나타내는 단위로, 한 옥타브(2배) 차이가 나는 feature map들 중 작은 것을 L, 큰 것을 H라고 표기합니다. Input과 output 각각 두 그룹이 있으므로 convolution은 총 4개 필요합니다.
Convolution의 input과 output 모두 크기가 다른 feature map들이 존재하고 서로 다른 크기의 feature map들 사이에 convolution이 작용해야 하므로(L→H, H→L), 기존의 convolution을 변형할 필요가 있습니다. 여기서는 먼저 원래의 convolution kernel을 두 개로 나눕니다.
W^H, W^L은 다시 intra-, inter-frequency 부분으로 둘로 나뉩니다.
이것을 그림으로 나타내면 아래와 같습니다. Convolution filter의 파라미터 갯수는 변함이 없고, 다만 input, output 채널 방향에 따라 filter가 네 조각으로 나뉘었습니다.
notion image
H→H, L→L과 같이 feature map의 크기가 변함이 없는 convolution은 기존 convolution을 그대로 사용하면 됩니다. 이 vanilla convolution을 다음과 같이 표기하겠습니다.
notion image
여기서 p, q는 output feature map의 각 위치를, N_k는 local neighborhood를 나타냅니다. 예를 들어 3x3 convolution일 때 N_k = {(i, j): i = {-1, 0, 1}, j={-1, 0, 1}} 입니다.
Feature map의 크기가 바뀔 때(intra-frequency update)는 어떻게 하면 될까요? Convolution을 하기 전에 up-sampling, down-sampling을 하여 크기를 맞추면 될 것입니다. 하지만 이렇게 하면 추가적인 연산과 memory가 들기 때문에 연산을 없애고 중간 결과를 저장하지 않도록 다음과 같이 한번에 처리합니다.
notion image
notion image
H→L을 계산할 때에는 단순히 index에 2를 곱하거나(이것은 strided convolution과 같습니다) 2를 곱한 뒤 0.5를 더하고 근처 4개의 값을 평균할 수 있는데(이것은 average pooling과 같습니다.), misalignment를 없애기 위하여 두 번째 방법을 사용하였습니다.
2배로 줄어든 low frequency 부분에서 적용하는 convolution은 receptive field가 2배 커지는 효과를 가져오기 때문에, 네트워크가 더 넓은 영역을 볼 수 있도록 해 줄 것입니다.
 

3. Implementation Details

위의 내용을 정리하면 Octave Convolution의 output을 아래와 같이 표현할 수 있습니다.
notion image
여기서 pool() 함수는 average pooling을 의미합니다.
그림으로 나타내면 아래와 같습니다. 초록색과 빨간색으로 그려진 path 4개는 위 식의 4개의 term들과 대응됩니다.
notion image
  • Group and Depth-wise convoultions
    • Octave Convolution은 group, depth-wise convolution 구조에도 적용될 수 있습니다. Group convolution에 적용하려면 OctConv의 네 convolution을 각각의 group에 대응시키면 됩니다. Depth-wise convolution에 적용하면 서로 다른 스케일에서 작용하는 information exchange path가 제거되고 두 개의 depth-wise convolution만 남게 됩니다.
  • Efficiency analysis
    • 아래 표는 vanilla convolution에 비하여 OctConv를 사용할 때 얻을 수 있는 이론적인 계산량 및 메모리 사용량의 gain을 나타낸 것입니다.
      notion image
  • Integrating OctConv into backbone networks
    • OctConv는 vanilla convolution에 backward compatible합니다. 즉 원래 vanilla convolution이 있던 자리에 바로 치환하여 넣을 수 있습니다. 다만 첫 번째 레이어에서는 \alpha_in=0으로, 마지막 레이어에서는 \alpha_out=0으로 설정해야 합니다.
 

Experiment

Experimental Setups

  • Image classification
    • 인기 있는 CNN 구조들에서 원래의 convolution을 OctConv로 치환하여 실험했습니다. 네트워크는 \alpha 라는 hyperparameter 하나를 가집니다. 대부분 평범한 softmax loss를 사용하였지만, MobileNetV2는 label smoothing을, ResNet-152는 label smoothing과 mixup을 사용하였습니다. 모두 SGD와 cosine learning rate로 학습되었습니다.
  • Video action recognition
    • Kinetics-400과 Kinecits-600 데이터셋을 human action recognition 데이터셋으로 사용하였습니다. Baseline은 Inflated 3D ConvNet으로부터 backbone을 가져왔고 이것을 OctConv와 비교했습니다.
       

Ablation Study on ImageNet

아래 그림은 여러 가지 구조의 CNN에서 alpha 값을 바꾸면서 실험한 결과입니다. 검은색 마커는 OctConv를 적용하지 않은 원래 네트워크를 의미합니다.
notion image
이 그림으로부터 몇 가지 사실을 관찰할 수 있습니다.
  • Alpha=0.5인 경우, FLOPS가 거의 절반임에도 불구하고 성능은 비슷하거나 더 낫습니다.
  • Alpha=0.125인 경우 (baseline보다도) 가장 높은 성능을 보여줍니다. 이는 multi-frequency processing과 enlarged receptive field 덕분일 것으로 생각됩니다.
아래 표는 CPU (Intel Skylake, 2.0GHz)에서 실제로 측정한 ResNet-50의 inference time입니다. FLOPS의 이론적인 비율만큼은 아니지만, 유사한 수준으로 실제 시간도 줄어듦을 볼 수 있습니다.
notion image

Comparing with SOTAs on ImageNet

  • Small models
    • ShuffleNet, MobileNet (v1, v2)에 적용한 결과입니다. MobileNetV1에 비해서는 34%, MobileNetV2에 비해서는 15%나 FLOPS를 줄이고도 같거나 더 나은 성능을 만들었습니다.
      notion image
 
  • Medium models
    • OctConv와 비슷한 접근법을 가진 MG-Conv, GloRe, Elastic, 그리고 bL-Net 과 비교하였습니다.
      notion image
       
  • Large models
    • notion image
 

Experiments of Video Recognition on Kenetics

OctConv가 3D convolution에 적용되어도 마찬가지로 #FLOPS를 줄이고 성능을 높일 수 있다는 것을 보여주기 위한 실험입니다. 아래 표에서 OctConv가 C2D, I3D에 붙어 이러한 효과를 내고 Non-local 구조와는 complementary하다는 것을 확인할 수 있습니다.
notion image
 

Conclusions

이 논문에서는 CNN이 가지고 있던 spatial redundancy 문제를 해결하기 위하여 low-, high-frequency feqture를 독립적으로 처리하여 효율을 높이는 방법을 제안하였습니다. Octave Convolution은 일반적인 convolution의 위치에 그대로 치환될 수 있으며, 모델 구조의 변경 없이도 2D, 3D CNN에서 사용할 수 있습니다. 계산량과 메모리 사용량을 줄이는 것 뿐만 아니라 OctConv는 low-, high-frequency feature들 사이의 communication을 효율적으로 만들고 receptive field를 늘려 성능을 높일 수 있었습니다. 실험으로부터 OctConv는 이론적인 FLOPS의 감소 뿐 아니라 실제 inference 시간도 대폭 줄일 수 있음을 보였습니다.
 
 
Share article