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

SENet paper를 보면 저자가 말하고자 하는바가 아주 명확합니다.
- 학습을 진행할 때 채널간 중요도를 고려할 필요가 있고, SENet은 그것을 증명한다. SENet은 채널의 중요도로 feature recalibration 하는 방법을 제안한다.
위 그림은 Squeeze-and-Excitation Block 구조입니다. H′×W′×C′의 input X가 어떤 연산(Conv) Ftr을 거쳐 H×W×C의 feature map U가 결과로 나옵니다. 일반적인 네트워크의 Conv layer라고 생각하면 될 것 같습니다. 여기에 더해서 각 채널들이 얼마나 중요한지 Weight을 주고싶다는 것이 SE Block의 컨셉입니다.
Paper 의 수식으로 나타내면 다음과 같습니다.
X∈RH′×W′×C′
U∈RH×W×C
V=[v1,v2,…,vC]
U=[u1,u2,…,uC]
uc=vc∗X=C′∑s=1vsc∗xs
위 수식에서 V는 C개의 filter를 요소로 갖는 집합이고 각각의 filter vi는 H′×W′×C′의 사이즈입니다. 인풋 X와 vc의 Convolution 연산을 통해 uc가 계산됩니다. 그냥 convolution 했다고 쓰면 되는데 복잡하게도 써놨습니다.
Squeeze : Global Information Embedding

SE block 의 첫 step은 Fsq Squeeze 입니다. Spatial Information을 하나의 값으로 합축하기 위해 Global Average Pooling을 수행합니다. Global Average Pooling은 단순히 1차원 벡터로 변환하는 input size 크기의 pooling입니다.
zc=Fsq(uc)=1H×WH∑i=1W∑j=1
역시 GAP를 복잡하게 써놨습니다.
Excitation : Adaptive Recalibration
Squeeze 연산 이후 channel-wise dependency 를 잡기위해 뒤의 연산은 두가지 조건을 맞춰야한다고 합니다.
- Flexibility : nonlinear interaction between channel
- Must learn a non-mutually-exclusive relationship
솔직하게 위에 두 조건이 뭘 의미하는지는 잘 모르겠습니다. SEnet에서는 이를 만족하기 위해 sigmoid activation 를 사용한다고 합니다.
s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))
위 수식에서 W는 FC layer, δ는 ReLU를 의미합니다. 식을 풀여쓰면 결국 Squeeze 뒤에 붙는 Excitation 연산은 결국 인풋으로는 Squeeze에서 계산한 z가 들어오고 FC, ReLU, FC, Sigmoid 를 취하는 연산입니다. 다만 W1∈RCr×C,W2∈RC×Cr 라고 합니다. 즉 첫번째 FC layer는 노드를 Cr개로 줄이고 두번째 FC layer는 다시 노드수를 복원하게 됩니다.

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

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


기존 네트워크에 SENet을 적용해 성능을 이뤘다는것을 보여줍니다. GFLOPS를 보면 크게 늘어나지 않은것을 볼 수 있는데 그만큼 SE Block의 비용이 적다는 것을 알 수 있습니다.
'Vision' 카테고리의 다른 글
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (2) | 2022.01.19 |
---|---|
1x1 Convolutions & Inception Module (0) | 2022.01.04 |
Pseudo-LiDAR from Visual Depth Estimation:Bridging the Gap in 3D Object Detection for Autonomous Driving (0) | 2021.11.21 |
Introduction - Attention (0) | 2021.10.31 |
Complex-YOLO: Real-time 3D Object Detection on Point Clouds (0) | 2021.09.12 |
댓글