본문 바로가기
Vision

SENet(Squeeze-and-Excitation Networks)

by Hotbingsoo 2022. 1. 5.
반응형

SENet

 

Squeeze-and-Excitation Networks

The central building block of convolutional neural networks (CNNs) is the convolution operator, which enables networks to construct informative features by fusing both spatial and channel-wise information within local receptive fields at each layer. A broa

arxiv.org

어떤 문제를 맞닥뜨렸을때, 그리고 그 문제를 머신러닝으로 해결하려고 하면 아직까지도 막연하게 '잘 되지 않을까?'라는 생각이 조금은 남아있는 것 같습니다. 하지만 실제 현업을 하다보면 널려지지 않은, 비슷해보이는 것도 찾기 힘든 문제를 해결해야합니다. 이 말은 즉, paper 검색해서 구현하기 쉬운 상위 몇개의 오픈소스를 갖다 쓸 수 없는 상황인거죠. 따라서 문제를 어떻게 접근해야하는지, 왜 그래야하는지 내가 근거를 만들어가야합니다. 제가 그래서 이런 아키텍쳐를 제안하는 논문들을 좋아하는 것 같습니다.

 

Squeeze-and-Excitation Networks

Squeeze-and-Excitation Block

SENet paper를 보면 저자가 말하고자 하는바가 아주 명확합니다.

- 학습을 진행할 때 채널간 중요도를 고려할 필요가 있고, SENet은 그것을 증명한다. SENet은 채널의 중요도로 feature recalibration 하는 방법을 제안한다. 

위 그림은 Squeeze-and-Excitation Block 구조입니다. \(H^{\prime}\times W^{\prime}\times C^{\prime} \)의 input \(X\)가 어떤 연산(Conv) \(F_{tr}\)을 거쳐 \(H \times W \times C \)의 feature map \(U\)가 결과로 나옵니다. 일반적인 네트워크의 Conv layer라고 생각하면 될 것 같습니다. 여기에 더해서 각 채널들이 얼마나 중요한지 Weight을 주고싶다는 것이 SE Block의 컨셉입니다.

Paper 의 수식으로 나타내면 다음과 같습니다.

$$ X\in R^{H^{\prime}\times W^{\prime}\times C^{\prime}}$$

$$ U\in R^{H\times W\times C}$$

$$ V = [v_{1},v_{2}, \dots, v_{C}]$$

$$ U = [u_{1},u_{2},\dots, u_{C}]$$

$$ u_{c} = v_{c} * X = \sum^{C^{\prime}}_{s=1}{v^{s}_{c}*x^{s}}$$

 

위 수식에서 \(V\)는 \(C\)개의 filter를 요소로 갖는 집합이고 각각의 filter \(v_{i}\)는 \(H^{\prime}\times W^{\prime}\times C^{\prime} \)의 사이즈입니다. 인풋 \(X\)와 \(v_{c}\)의 Convolution 연산을 통해 \(u_{c}\)가 계산됩니다. 그냥 convolution 했다고 쓰면 되는데 복잡하게도 써놨습니다.

Squeeze : Global Information Embedding

SENet 발췌

SE block 의 첫 step은 \(F_{sq}\) Squeeze 입니다. Spatial Information을 하나의 값으로 합축하기 위해 Global Average Pooling을  수행합니다.  Global Average Pooling은 단순히 1차원 벡터로 변환하는 input size 크기의 pooling입니다. 

$$ z_{c} = F_{sq}(u_{c}) = \cfrac{1}{H\times W}\sum^{H}_{i=1}\sum^{W}_{j=1} $$

 

역시 GAP를 복잡하게 써놨습니다.

 

Excitation : Adaptive Recalibration

Squeeze 연산 이후 channel-wise dependency 를 잡기위해 뒤의 연산은 두가지 조건을 맞춰야한다고 합니다.

  1. Flexibility : nonlinear interaction between channel
  2. Must learn a non-mutually-exclusive relationship

솔직하게 위에 두 조건이 뭘 의미하는지는 잘 모르겠습니다. SEnet에서는 이를 만족하기 위해 sigmoid activation 를 사용한다고 합니다.

$$ s = F_{ex}(z,W) = \sigma(g(z,W)) = \sigma(W_{2}\delta(W_{1}z)) $$

 

위 수식에서 \(W\)는 FC layer, \(\delta\)는 ReLU를 의미합니다. 식을 풀여쓰면 결국 Squeeze 뒤에 붙는 Excitation 연산은 결국 인풋으로는 Squeeze에서 계산한 \(z\)가 들어오고 FC, ReLU, FC, Sigmoid 를 취하는 연산입니다. 다만 \(W_{1} \in R^{\frac{C}{r}\times C}\),\(W_{2} \in R^{C \times \frac{C}{r}}\) 라고 합니다.  즉 첫번째 FC layer는 노드를 \(\frac{C}{r}\)개로 줄이고 두번째 FC layer는 다시 노드수를 복원하게 됩니다. 

Excitation

Excitation 연산을 도식화하면 위와 같겠죠. 이렇게 구한 \(s\)를 원래 Conv layer의 output \(U\)에 channel-wise 스칼라 곱을 해주면 최종적으로 channel weight이 고려된 \(\tilde{X}\)를 구할 수 있습니다. 

 

Instantiation

위 그림은 Inception block, Residual block 연산에 SE를 적용한 모습입니다.

 

Result

기존 네트워크에 SENet을 적용해 성능을 이뤘다는것을 보여줍니다. GFLOPS를 보면 크게 늘어나지 않은것을 볼 수 있는데 그만큼 SE Block의 비용이 적다는 것을 알 수 있습니다. 

반응형

댓글