https://ieeexplore.ieee.org/document/8578843
1. Abstract
최근 Building Block을 중심으로 CNN이 발전하면서 각 Layer의 spatial한 정보와 Filter로 생성된 Channel 간의 정보를 결합하여 많은 정보를 쌓는 것이 가능해졌다.
넓은 범위의 선행 연구로부터 이러한 관계들에 대한 spatial component들을 연구해왔으며, Feature Hierarchy(공간 계층성)를 통해 spatial encoding(공간 정보를 인코딩)하는 CNN의 능력을 강화할 수 있었다.
이 논문에서는 Channel Relationship(채널간의 상호작용) 에 집중하여 새로운 Architecture Unit인 "Squeeze(압축)-and-Excitation(재조정)" (SE) block 구조를 제안한다.
이는 Channel간의 interdependencies를 명확히 모델링함으로써 Channel간의 Feature Response를 재조정한다.
SE block들을 여러 개 쌓아 만든 SENet architecture는 다양한 데이터셋에서 매우 효과적인 일반화 능력을 지닌다.
그리고 SE block를 기존의 Architecture와 결합할 경우 slight한 computational cost의 증가를 대가로 significant한 성능 향상을 보인다.
그 결과 ILSVRC 2017에서 우승했으며 2016 entry 대비 ~25% 정도의 성능 향상이 있었다.
기존에는 Channel간의 Relationship을 볼 수 없었다. 하지만, SENet에서는 Channel 간의 Relationship을 보겠다 라는 것이 SENet의 Idea라 볼 수 있다.
2. Introduction
CNN 네트워크를 잘 살펴보면, convolution filter 하나하나가 이미지 또는 피쳐맵의 “local”을 학습한다.
즉, local receptive field에 있는 정보들의 조합이라고 말할 수 있는데, 이 조합들을 활성함수에 통과시켜 비선형적인 관계를 추론하고 pooling과 같은 방법으로 큰 피쳐들을 작게 만들어 한 번에 볼 수 있게 크게 만들기도 한다.
이런 식으로 CNN은 global receptive field의 관계를 효율적으로 다루기 때문에 이미지 분류와 같은 분야에서는 인간을 뛰어넘는 성능을 낼 수 있다.
당연하게도 일반적인 CNN구조보다 효율적으로 피쳐들을 잘 다룰 수 있는 다양한 구조에 대한 연구가 있었고, 매년 ILSVRC에서 1등을 차지했다. 대표적으로는 GoogLeNet의 Inception module, ResNet의 Skip-connection, DenseNet의 Dense-connection 등 매년 Novel한 네트워크로 우승을 차지한 네트워크들이 있다.
논문의 저자들은 Squeeze-and-Excitation라는 방법을 적용해서 ILSVRC 2017을 우승했다. 논문에서는 다음과 같이 설명한다.
Our goal is to improve the representational power of a network by explicitly modelling the interdependencies between the channels of its convolutional features.
이를 위해서, 논문의 저자들은 squeeze and excitation이라는 아이디어를 제시한다. 이를 가지고 기존 네트워크를 거친 Feature Map들을 feature recalibration(재조정)할 수 있다.
자세히 살펴보면, SE는각 Feature Map에 대한 전체 정보를 요약하는 Squeeze operation, 이를 통해 각 Feature Map의 중요도를 Scale해주는 excitation operation으로 이루어져 있다. 이렇게 하나의 덩어리를 SE block이라고 한다.
저자들은 SE block의 장점이 다음과 같다고 말한다.
- 네트워크 어떤 곳이라도 바로 붙일 수 있다
- VGG, GoogLeNet, ResNet 등 어느 네트워크에도 바로 부착이 가능
- 파라미터의 증가량에 비해 모델 성능 향상도가 매우 크다
- 이는 모델 복잡도(Model complexity)와 계산 복잡도(computational burden)이 크게 증가하지 않다는 장점
이제 SE block에 대해 자세히 살펴보자.
SE block은 Squeeze 과정과 Excitation과정 두 개의 단계를 거쳐 channel간의 relationship을 고려하게 된다.
3. Other Network
SE Block이 시작되기 전 다른 네트워크에 대한 부분
그림과 같이 Convolution Operator가 있을 수도 있고, GoogleNet, VGGNet, VGGNet 등 다양한 Network가 올 수 있다.
Figure 1을 보면 다음의 수식이 존재한다.
$F_{tr}: X \rightarrow U$
$X \in \mathbb{R}^{H' \times W' \times C'}, U \in \mathbb{R}^{H \times W \times C}$
여기서 $F_{tr}$은 Convolutional Operator (단순 Convolution 연산)이다.
- $\frac {H' -F + 2P} {S} + 1 = H$
- $\frac {W' -F + 2P} {S} + 1 = W$
이때, Filter $V$는 $F \times F \times C' \times C$의 shape을 가지고 있는 것을 확인할 수 있다.
- $V = [v_1, v_2, \ldots, v_c]$
- $V$는 Filter Set
- 각 원소는 단일 Filter의 Parameter
- $v_{c}$는 $C$번째 Filter의 Parameter
- $v_c = [v_{c}^{1}, v_{c}^{2}, \ldots, v_{c}^{C'}]$
- Filter Set인 $V$의 $c$번째 원소
- 각 원소는 $C$번째 Filter의 각 Channel에서의 2D Spatial Kernel
- $v_{c}$는 $C$번째 Filter의 Parameter
- $U = [u_1, u_2, \ldots, u_C]$
- $U$는 $F_{tr}$ 을 통과한 Output Feature Map
- 각 원소는 Feature Map의 각 Channel
- $u_{C}$는 $C$번째 Channel의 Output Feature Map
- $X = [x^1, x^2, \ldots, x^{C'}]$
- $X$: Input Data (Channel $C'$개)
- 각 원소는 각 Channel의 2D Data
- $x^{S}$: Input Data의 $S$번째 Channel의 2D Data
아래의 식은 '단일 $C$번째 Filter'에 대해 Convolution 연산을 수행하여 $C$번째 Channel의 Output Feature Map 구하는 과정이다.
$u_c = v_c * X = \sum_{s=1}^{C'} v_{C}^{S} * x^{S}$
- $u_c$: $C$번째 Channel의 (단일) Output Feature Map
- $v_c$: $C$번째 Filter의 Parameter (Channel $C'$개)
- $X$: Input Data ($H' \times W' \times C'$, Channel $C'$개)
- $v_{c}^{S}$: $C$번째 Filter의 $S$번째 Channel의 2D Kernel
- $x^{S}$: Input Data의 $S$번째 Channel의 2D Data
위의 식에서는 Notation을 간단히 하기 위하여 bias term은 생략했다.
위의 결론은 Just 일반적인 Convolution 연산이다. 기존의 Convolution 연산에 대해 잘 알고 있다면 전혀 문제될 것이 없다.
4. Squeeze: Global Information Embedding
각 Feature Map들은 Local하게 생긴다.
각 Feature Map을 통해 Convolution Operation된 Image들은 각자 지역적인 정보만 가지고 있고, 이를 local receptive field라 한다.
그런데 우리는 Local 정보만이 아니라 Global한 정보를 이용하고 싶다.
여기서의 Squeeze 작업은 전체적인 정보를 파악하기 전에, 각 지역적인 정보들의 대표값들을 Squeeze 해서 구해놓는 단계이다.
Feature Map은 Receptive Field가 Local 하기 때문에, Global한 관점에서 Contextual(문맥적인) 정보를 이용할 수 없다.
Squeeze Operation 단계는 Local Receptive field 밖의 정보를 이용하기 전에
$H \cdot W$ (Global Spatial Information)의 Image를 각 Channel 별로 Squeeze 하여 Channel Descriptor (각 채널을 가장 잘 설명하는 값)으로 제작한다.
이렇게 Squeeze Operation을 통해 각 Channel들을 대표하는 값들을 얻었으면, 이제 이 값들을 이용하여 Contextual한 정보를 얻기 위해 Excitation Operation을 진행한다.
Squeeze 작업은 앞의 $F_{tr}$Operation (Convolution Layer)에서 받아온 Feature Map $U$를 압축하는 것을 목표로 한다.
이렇게 받아온 Feature Map $U$의 각 Channel은 각각 학습된 Filter로부터 생성된 특징 Feature들이다.
그런데, 이렇게 생성된 각 Channel의 Feature Map들은 해당 region으로부터 벗어났을 경우 contextual information으로 사용하기 힘들다.
각 Feature Map들의 Channel을 생성한 $F_{tr}$함수의 FIlter들은 서로 목적이 다르다고 볼 수 있다.
예를 들어 $F_{tr}$ 함수가 6개의 (Filter) $3 \times 3$ Convolution Layer로 $H \times W \times 6$의 Feature Map $U$를 생성했다고 하자.
이 6개의 Feature Map들은 서로 바라보는 관점이 다르다. 어떠한 Feature Map은 네모난 개체에 집중하는 Filter를 거친 Feature Map이고, 어떤 Feature Map은 붉은 색 개체에 더 집중된 Feature Map일 수 있다.
따라서 각자 다른 관점의 Filter로부터 학습한 정보들이기 때문에 각 Channel의 Feature Map들은 contextual information으로 out-of-region에서 사용할 수 없는 것이다.
그렇기에 Feature Map $U$를 Global Average Pooling을 통해 $1 \times 1 \times C$로 압축한다.
이러한 과정을 Squeeze Operation이라고 하는데, GAP를 이용하여 global spatial information(정보 Feature)을 Channel Descriptor로 압축한다.
아래의 식은 $c$번째 Channel에서 GAP를 이용하여 $1 \times 1$ Vector의 $c$번째 원소를 구하는 과정이다.
$z_c = F_{sq}(u_c) = \frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} u_c(i, j)$
- $u_c$: $c$번째 Channel의 2D Feature Map
- $z_c$: $c$번째 Channel의 Global Average
- $F_{sq}(u_{c})$: 각 Channel의 Feature Map $u_c$에 Squeeze 연산 = GAP 연산
- 각 Channel의 Feature Map $u_c$의 모든 요소의 평균값을 계산
- $H \times W$ 크기의 Feature Map에서 모든 요소 $(i, j)$의 값을 합한다
- 이후 총 요소 수 $H \times W$로 나누어 $z_c$를 얻는다
$H \times W \times C$이라는 shape을 가진 C개의 Feature Map들을 $1 \times 1 \times C$라는 shape을 가진 Vector 형태로 변환하는 것이라 볼 수 있다.
5. Excitation: Adaptive Recalibration
중요한 정보들을 압축(Squeeze)하여 각 Channel들을 대표하는 값을 얻었다면,
이제 이 값들을 이용하여 문맥적인(Contextual) 정보를 얻기 위해 재조정(Recalibration)을 해야한다.
해당 과정을 Excitation Operation이라 하는데, 여기서 Channel간 의존성 (Channel-Wise-Dependencies)를 계산한다.
Channel 간의 상호작용(or 의존성)을 학습하기 위해 다음의 2가지 조건이 충족되어야 한다.
Flexible 해야 한다
- Channel들 간의 Non-Linear한 특성을 파악할 수 있어야 함
Non-mutually-exclusive한 관계를 학습해야함 (베타적인 관계는 X)
- 전체적인 Contextual Information의 파악을 위해 한 개의 Channel만 강조(One-Hot Activation)하면 안되고, 다양한 Channel들이 강조 되어야 함
해당 논문에서는 Fully-Connected Layer와 Non-Linear Function을 조절하는 것으로 이를 간단히 구현했다.
$s=Sigmoid(W_{2}ReLU(W_{1}z))$
$s = F_{ex}(z, \mathbf{W}) = \sigma(\mathbf{W}_2 \delta(\mathbf{W}_1 z))$
- $\delta$: ReLU (Hidden Layer Activation)
- $\sigma$: Sigmoid (Output Layer Activation)
- $W_{1}, W_{2}$: 각각 Fully-Connected Layer를 뜻한다
- Input - Hidden 사이의 Weight $W_{1}$ ($\frac {C} {r} \times C$)
- Hidden - Output 사이의 Weight $W_{2}$ ($C \times \frac {C} {r}$)
- Shape의 경우 Matrix Multiplication의 순서를 보면 쉽게 이해할 수 있다
$F_{sq}$(Squeeze 과정)를 통해 $1 \times 1 \times C$ Vector가 나온다.
여기서 Fully-Connected Layer를 이용하여 $\frac {C} {r}$으로 노드수를 줄여 Hidden Layer Activation으로 ReLU 함수를 사용한다.
이후 다시 Fully-Connected Layer를 통해 최종적으로 C만큼 노드 수를 Output Layer에 출력하여 Output Layer Activation으로 Sigmoid 함수를 사용한다.
결과적으로 각 노드의 Value가 $(0, 1)$의 범위를 지닌 C개의 Vector가 나온다.
Q. 왜 굳이 $\frac {C} {r}$으로 수축을 시키고 다시 ReLU에 넣어 확률화 시키는가?
A. Channel들 간에도 반드시 Non-Linear (비선형성)을 가해줘야 하기 때문이다.
SENet의 핵심은 Channel들 간의 Relationship이다.
따라서 Reduction Ratio $r$만큼 수축시킨 뒤 비선형 함수 ReLU를 이용해 Channel간의 관계를 본 것이다.
그렇기 때문에 Channel들 끼리는 Non-Mutually-Exclusive 하게 고려할 수 있게 된다.
수축시킨 Vector를 다시 C개로 출력하여 Output Layer에서 SIgmoid를 이용해 $(0,1)$ 값으로 인코딩하여 Feature Map들을 모두 고려하여 중요도를 매기게 된다.
6. Rescaling (Channel-Wise)
최종적으로 이 Encoding된 Probability Vector(각 Channel별 중요도 값)를 $F_{sq}$하기 직전의 Feature Map $U$ $(H \times W \times C)$에 각 Channel 별로 곱해준다.
$\tilde{x}_c = F_{scale}(u_c, s_c) = s_c \cdot u_c$
- $u_c$: $c$번째 Channel의 Feature Map (Squeeze Operation 이전) $u_c \in \mathbb{R}^{H \times W} $
- $F_{scale}(u_c, s_c)$: Channel-wise Multiplication
- $s_c$: Scalar, 모두 $(0,1)$ 사이의 확률값을 가지므로 Channel들의 중요도에 따라 Scale 된다
Self-Attention
- Local한 각 Channel들의 정보들을 이용하여 Channel들 간의 관계를 파악하고, Channel들의 중요도로 표현하여 기존 Image 행렬에 적용한다
- 전체적인 맥락을 고려하여 그때그때 상황에 맞는 Channel을 강조한다
즉, SE BLock을 통해 Feature Map $U$에서 어떤 Channel에 집중해야 하는지 Select 해주는 역할을 수행한다.
기존의 방법인 각각 다른 관점의 Filter로부터 나온 Feature Map들을 전부 각각 독립적으로 바라보는 것이 아니라,
Feature Map C개를 전부 동시에 고려하여 특정 Feature Map이 여기서 얼마나 중요한지를 알게 해주는 역할을 수행한다.
예를 들어, 이번 학습 batch의 이미지는 사과라고 하자. 현재 Layer에서 C개의 filter중에 하나는 동그란 개체를 담당하는 필터가 있었고, 빨간색을 담당하는 필터도 있었다. 두 필터의 시너지를 고려하여 이번 batch는 해당 layer에서 그 두 필터는 SE block에서 높은 점수(1에 가까운 가중치로)를 부여받게 되는 것이라 볼 수 있다.
즉, 일반적으로 해당 Layer에서 여러 Class들의 객체를 구분하는 데 특정 Filter들의 조합이 좋다면 대응되는 해당 Feature Map에 1에 가까운 값을 부여하는 것이다.
만약 SE Block이 없었다면 이와 같이 C개의 Feature Map끼리 고려하는 과정은 없었을 것이다.
즉, SE block은 채널축에 대해 feature map의 중요도를 구하고 그 중요도를 feature map에 반영하는 block이라고 정리할 수 있다.
7. Instantiations
실제로 논문에서는 VGGNet, GoogLeNet, ResNet에 SE Block을 적용시켰다.
VGGNet과 같이 Skip-Connection등이 없는 Neural Network들은 insertion을 통해 바로 적용했다.
Inception Module 혹은 Skip Connection이 있는 네트워크는 아래와 같이 적용했다.
SE(Squeeze-and-Excitation) Block의 Flexibility는 위의 $F_{tr}$인 standard convolution 말고도 directly 하게 다른 Transformation에도 적용가능하게 만들어준다.
즉, 사용하는 모듈(Other Network)에 따라서 $F_{tr}$이 entire Inception Module, non-identity branch of a Residual Module 등 다양한 Transformation이 가능하다.
따라서의 Fig.2는 SE-Incpetion Network라 하고, Fig.3은 SE-ResNet이라 한다.
8. Model and Computational Complexity
SE BLock은 Improved Model Performance와 Increased Model Complexity 사이에 좋은 Trade-off가 있다. (Trade-off가 매우 작다)
모델이 무거워지면 Model Complexity는 증가하고(-) 그 대신 그만큼의 Improved Performance(+)를 기대할 수 있다.
즉, 아주 조금의 additional computational cost로 model performance를 획기적으로 증가시키는 것이다.
기존 ResNet-50이 ~3.86 GFLOPs가 필요했다면 SE-ResNet-50은 ~3.87 GFLOPs가 필요한다고 말한다.
이렇게 0.26%밖에 증가하지 않았으면서도 모델 에러는 상당히 많이 Down된다.
이는 squeeze, excitation, channel-wise scaling 모두 계산복잡도가 높지 않기 때문이다.
이때, 추가되는 Parameter는 오직 Two FC layer에서만 나오는데, 그 식은 다음과 같다.
$\frac{2}{r} \sum_{s=1}^{S} N_s \cdot C_s^2$
- $r$: reduction ratio
- $S$: Stage 개수
- $C_{s}$: output channel의 차원 ($s$번째 stage에서의 $C_{s} \times 1$ shape)
- $N_{s}$: Stage $s$에서 반복되는 Block의 개수
Stage는 동일한 크기의 feature map에서 동작되는 block collection의 단위를 말한다. 즉, 56x56 feature map을 출력하는 3개의 block은 동일한 stage에 해당한다.
Bias가 사용될 때 추가되는 parameter의 및 계산 비용은 무시할만한 수준이다.