취미가 좋다

SENet : Squeeze-and-Excitation Networks 정리 본문

논문

SENet : Squeeze-and-Excitation Networks 정리

benlee73 2021. 3. 18. 17:58

SENet : Squeeze-and-Excitation Networks

 

 

ResNet에 residual block 이 있고, SENet에는 SE block이 있다.

 

SE block 은 기존 네트워크의 feature map 을 재조정(recalibration) 하는 역할을 수행한다.

 

즉, feature map 의 전체 정보를 요약하고, 각 map의 중요도를 키워준다.

 

과정

1. Ftr : X -> U 을 수행하는 transformation 이 (H', W', C') 차원의 입력을 (H, W, C) 차원으로 바꿔서 출력한다.

 

2. Fsq 를 통해 출력 U의 각 채널 별 정보를 뽑아낸다.

 

3. Fex 를 통해 스칼라 가중치를 계산한다.

 

4. Fscale 을 통해 스칼라 가중치를 U 에 곱해준다.

 

 

Ftr

단순한 conv 연산이다.

 

V = [ v1, v2, ... , vc ] 라는 필터가 있다.

 

Squeeze : Global Information Embedding (Fsq)

GAP를 사용하여 채널 하나당 대표되는 스칼라 값 z를 하나 만든다.

 

Excitation : Adaptive Recalibration (Fex)

채널 별 descriptor를 가지고, 채널 간 dependency를 계산한다.

 

계산할 때 주의사항 두 가지

 

1) Must be flexible : 채널 간의 복잡한(nonlinear) 관계를 찾을 수 있어야 한다.

 

2) Learn non-nutually-exclusive relationship : one-hot activation 처럼 C개 채널 중 하나만 골라서 가중치를 높게 주는 것이 아니라, 여러 채널을 골라서 강조할 수 있어야 한다.

 

 

σ 는 sigmoid 함수, δ 는 ReLu, W1 W2 는 Fully Connected Layer 를 의미한다.

 

즉,

입력

-> W1 Fully connected 연산으로 선형 변환

-> ReLu

-> W2 Fully connected 연산으로 선형 변환

-> sigmoid

 

W1 에서 r로 

 

 

코드로 나타내면 아래와 같다.

def Squeeze_excitation_layer(self, input_x, out_dim, ratio, layer_name):
    with tf.name_scope(layer_name) :
        squeeze = Global_Average_Pooling(input_x)

        excitation = Fully_connected(squeeze, units=out_dim / ratio, layer_name=layer_name+'_fully_connected1')
        excitation = Relu(excitation)
        excitation = Fully_connected(excitation, units=out_dim, layer_name=layer_name+'_fully_connected2')
        excitation = Sigmoid(excitation)

        excitation = tf.reshape(excitation, [-1,1,1,out_dim])

        scale = input_x * excitation

        return scale

 

장점

1) 유연하다.

SE block은 한 conv layer 에만 적용할 수 있는 것이 아니라, 임의의 이미지 변환에 모두 적용할 수 있다.

 

아래의 그림처럼, Inception module, Residual module 과 같은 어느 기존 모델에도 쉽고 유연하게 적용할 수 있다.

 

 

2) 추가적인 계산량이 적다.

SE block을 추가하면서 생기는 파라미터 증가량이 적으나, 성능 향상도가 크다.

 

 

 

SE Block 을 추가했을 때, 늘어나는 파라미터는 W1, W2 밖에 없기 때문에, conv layer 하나 당 2C^2/r 개의 파라미터가 늘어난다.

 

Reduction ratio 인 r 을 작은 값으로 설정하면 파라미터 수가 더 적어진다.

 

여러 값으로 r을 설정했을 때, 16일 때가 성능에 영향이 적으면서 파라미터 수가 많이 줄어들었다.

 

 

 

 

C가 큰 네트워크의 뒤 쪽의 conv layer에는 적용하지 않도록 하여, 파라미터 수를 줄인다.

 

 

 

 

SENet 을 적용한 ResNet 은 다음과 같다.

 

 

 

 

 

 

 

 

 

 

 

 

Comments