본문 바로가기
논문 리뷰/Classification

[논문 리뷰] SENet 설명 (Squeeze-and-Excitation Networks)(2018)

by inhovation97 2022. 2. 7.

사실 SENet이라기보다는 SE block이 더 어울리는(?) SENet 논문을 리뷰합니다.

마찬가지로 Abstract는 자세히 짚고, 나머지는 중요한 부분들 위주와 저의 생각들로 포스팅합니다. 

이 논문은 직접 읽지 않을 때는 느끼지 못했던 연구진들의 엄청난 관점이 이번에 논문을 읽고나서야 제대로 느낀 것 같습니다. 

찾아보니 ILSVRC 2017에서 우승을 했다고 합니다. 

 

1. Abstract
2. SE block 구조
3. SE block의 활용성
4. SE block 실험결과
5. 간단한 SE block 구현(케라스)

 

 

 

Abstract

 

최근의 bulding block을 중심으로 CNN이 더욱 발전하면서, 각 layer의 공간적인 정보와 필터로 생성된 채널간의 정보를 결합하여 많은 정보를 쌓는 것이 가능해졌습니다.

엄청난 선행연구들에서 이런 관계들에 대한 공간 정보성을 꼼꼼히 연구해왔으며, 특징들의 계층성을 통해 공간 정보를 인코딩하는 CNN의 능력을 강화시킬 수 있었습니다.

해당 논문에서는 Channel relationship에 초점을 맞추었고, 새로운 형태의 architecture unit인 SE block을 소개합니다.

SE block은 채널간의 상호 의존성을 명확히 모델링함으로써 채널간 feature response를 재측정시켜줍니다.

SE block을 여러개 쌓아 SENet이라는 아키텍쳐를 생성하며, 이는 다양한 데이터셋에서 매우 효과적인 일반화 능력을 지닙니다.

또한 SE block이 기존 아키텍쳐와 결합되면, 약간의 computational cost의 증가로 굉장히 높은 성능 향상을 실험했으며 ILSVRC 2017에서 state-of-the-art 성능을 보였습니다.

2016 entry대비 약 ~25%의 성능을 향상시켰습니다.

 

 

 

SE block 구조

SE block 구조도

SE block은 말그대로 Squeeze 과정과 Excitation과정 2단계를 거쳐 channel간의 relationship을 고려하게 됩니다. 먼저 앞에 있는 Squeeze operation을 살펴봅시다.

 

Squeeze operation

Squeeze 작업은 앞 F tr( Conv layer )함수에서 받아온 Feature map U를 압축하는 것을 목표로합니다.

여기서 받아온 Feature map U는 각각 학습된 필터들로부터 생성된 특징들인데, 저자들은 이렇게 생성된 각 채널의 feature map들은 그 region밖에서는 맥락적인 정보로는 이용할 수 없는 점이 문제라고 말합니다. 

 

여기서 저의 해석은 각 feature map들을 생성한 F tr 함수의 filter들은 각자 목표하는 바가 다릅니다. 
가령 F tr 함수가 3x3 conv layer로 (HxWx6)의 feature map U를 생성했다고 생각하면,
6개의 feature map은 서로 바라보는 관점이 다른 겁니다. 어떤 특징맵은 둥그런 개체에 집중하는 필터를 거친 특징 맵이고, 어떤 개체는 파란색 개체에 좀 더 집중된 특징맵일 수 있습니다.

 

따라서 이렇게 각각 다른 분야의 전문가들로부터 가져온 정보들이기 때문에 전체 맥락적으로 이용할 수 없으며, 정보 활용이 제한적이라는 것이죠.

그렇기 때문에 feature map U를 Global Average Pooling을 통해 1x1xC로 압축합니다.

이 과정이 Squeeze operation이고 압축한 정보 feature들을 논문에서는 channel descriptor라고 표현합니다. HxWxC였던 feature map을 대표하는 벡터 형태로 변환이 된거죠.

 

Excitation operation

이제 압축한 정보들을 전체 맥락적으로 이용하고 싶습니다. 

조잡하지만... 제가 예시로 그린 Exctitation block입니다.

Squeeze과정으로 1x1x6 벡터가 나왔다고 가정하고 그림을 보시면, 

Fc layer를 통해 C/r로 노드수를 줄여 ReLU함수를 거칩니다. ( 위 경우 C=6, r=2 )

다시 FC layer를 통해 최종적으로 C만큼 값을 출력하여 Sigmoid 함수를 통해 0~1의 값을 지닌 6개의 벡터로 만들어줍니다.

 

왜 굳이 수축을 시키고 그것을 다시 ReLU함수로 넣은 뒤 확률화 시킬까요?

저자들은 채널간에도 반드시 비선형성을 가해주는 것을 의도했다고합니다. 언급했듯이 저자들은 Channel relationship에 초점을 맞추었습니다. 따라서 채널을 한 번 reduction ratio r을 만큼 수축시킨 뒤 비선형 함수 ReLU로 channel간의 관계를 살핀 것이죠. 

( 시그모이드 함수로 들어가기 전 ReLU함수로 0~1값으로 인코딩하여 위양효과를 극대화시키는 부분도 기대해볼 수 있죠. )

그렇기 때문에 채널끼리는 non-mutually-exclusive하게 고려할 수 있게 되는겁니다. 

수축시킨 벡터를 다시 C개로 출력하여 마지막으로 시그모이드 함수를 이용해 0~1 값으로 인코딩하여 feature map들을 모두 고려하여 중요도를 매기게 되는 것이고,

최종적으로 이 확률 벡터들을 원래의 feature map U에 곱해주는 것입니다.

결국은 SE block을 통해 feature map U에서 어떤 채널에 집중해줄지 골라주는 역할을 해주는 것입니다.

 

원래대로라면 각각 다른 전문가들인 filter들로부터 나온 feature map들을 전부 각각 독립적으로 바라보는게 아니라
C개를 전부 고려하여 어떤 feature map이 여기서 얼마만큼 중요한지를 알게해주는 역할을 해준 겁니다.
가령 정말 자세하게 비유하자면, 이번 학습 batch의 이미지는 포도였습니다. 현재 layer에서 C개의 filter중에 하나는 동그란 개체를 담당하는 필터가 있었고, 보라색을 담당하는 필터도 있었습니다. 두 필터의 시너지를 고려하여 이번 배치는 해당 layer에서 그 두 필터는 SE block에서 높은 점수(1에 가까운 가중치로)를 부여받게 되는 것이죠. 
사실 모델이 깊어질수록 좀 더 글로벌한 정보를 뽑고 정보량도 다르기때문에 물체의 모형과 색깔의 비유는 맞지 않을 수 있습니다.
정리하자면, 보통 해당 layer에서 여러 class의 객체들을 구분하는 데에는 n번째랑 k번째의 feature map이 특히 좋더라~ 하고 1에 가까운 값을 부여해주는 것이죠.
SE block이 없었다면, 이렇게 C개의 feature map끼리 고려해 볼 수 있는 과정은 없었을 겁니다.

 

 

 

SE block 활용성

 

위에서 제가 말한 것처럼 SE block은 생성된 Feature map 끼리의 정보를 공유하여 자신들의 역할을 극대화 시켜주기 때문에 저자들은 가장 먼저 Inception module과의 시너지를 기대했고, 적용했다고합니다.

inception module + SE block

인셉션 모듈은 입력값으로부터 여러 사이즈의 Conv layer를 거쳐서 훨씬 더 다양한 정보들을 담을 수 있기때문에 Feature map들의 정보를 복합적으로 살펴주는 SE block의 효과를 더욱 기대해 볼 수 있는 것이죠. 

하지만 결과는 ResNet과의 결합이 더 좋았다고 나옵니다. 

 

이 부분을 읽고 연구진들이 정말 대단하다고 느꼈습니다.

저는 그냥 논문을 읽지 않고 접했을 때는 아 어떤 feature map이 중요한지 0~1의 feature map 가중치를 만들어 준거구나~ 하고 그냥 넘어갔지만, 논문을 읽으니 괜히 탑티어 논문이 아니구나 했습니다...

 

위처럼 SE block은 Feature map만 있다면, 어디든 넣어줄 수 있기 때문에 활용도가 굉장히 높습니다. computational cost도 그렇게 높지 않죠.

논문내에서도 연산량이나 train 시간 inference시간을 구체적으로 보여주면서 연산량 대비 성능의 향상도가 훨씬 좋은 것을 증명합니다.

 

 

 

SE block 실험결과

 

사실 해당 논문은 정말 테이블이 너무 많아서 간략히 추려서 몇개만 봅니다.

 

Architectures

original은 각 논문에서 언급했던 값들이고, 저자들은 같은 환경에서 공평한 비교를 위해 re-implementation 같은 환경에서 재학습 시킨 값들로 채웁니다.

SENet 컬럼은 각 모델에 SE Block을 깔아준 것을 의미합니다. 

괄호의 값은 향상도 입니다.

computational 상승도 대비 성능 향상이 매우 좋은 것을 알 수 있습니다.

 

Reduction ratio r

사실 하이퍼 파라미터 r을 어떻게 넣어줄지도 고민이 될 수 있습니다.

저자들이 이미지넷 데이터로 SE-ResNet-50에 대해서 r 값을 바꿔가며 얻은 결과들을 공유합니다.

해당 테이블에서 original은 ResNet-50이며, r=8일때의 top-5 에러율이 가장 낮네요.

 

Role of Squeeze

이번에는 저자들이 Squeeze의 실효성을 직접 눈으로 확인하고 싶어서 각 layer에서 global average pooling을 제거하고,

Excitation의 2개의 fc layer도 1x1 Conv로 교체했습니다. (채널 C는 같음)

Squeeze에서는 global하게 feature map끼리 정보 교환이 일어나지만, 교체한 no squeeze는 그냥 1x1 필터의 local operator로 remap하는 것일 뿐이라 이렇게 비교했다고합니다. 

SENet이 가장 높네요.

 

Role of Excitation

저자들은 Excitation의 효과도 가시적으로 보고싶었습니다. 

Imagenet에서 성질이 매우다른 class 4개를 가져와 50개씩 샘플링 후 모델에 넣어 layer마다 마지막 SEblock에서 나온 activation 값들의 평균을 분포화한 plot이라고합니다.

(a -> f로 갈수록 깊은 층을 의미)

 

earlier layer에서는 클래스와는 무관하게 분포가 전부 비슷합니다.

이는 초기단계에서 feature channel의 중요성이 다른 클래스에서도 서로 공유가 된다는 것입니다.

아무래도 ealier 필터는 상대적으로 덜 추상적이고 localty하게 바라보기 때문에 클래스와는 무관하게 feature map들이 각자의 정보를 공유하는 것 같습니다. 

 

later layer로 갈수록 점점 더 class에 따라서 값들이 구체화되어 갑니다.

어찌보면, 층이 깊어지면서 더욱 추상적이고 global하게 바라보면서 값들이 class에 구체화되는 건 당연한거겠죠. 

중간에 (e) plot은 그냥 1값에 거의 saturate된 것을 볼 수 있습니다. 이 경우 SE block은 어쩔 수 없이 identity mapping이 된다고 합니다. 

classifier로 가기 직전인 마지막 layer (f) plot은 class 마다 분포가 다르지만 패턴이 유사한 것을 볼 수 있습니다.

이 결과는 후반 레이어 e, f는 SE block의 효과가 매우 미미하고 computational cost만 올리기 때문에 제거하는 것이 좋을 것 같다고 합니다. 마지막 레이어이기 때문에 output feature가 가장 크므로 필요없다면 제거하는 편이 훨씬 좋을 것 같습니다. 

논문의 4절에서도 성능면에서는 top-5 error에서 0.1%보다도 작은 성능의 효과라고 저자들이 언급합니다.

 

상황마다 다를 것 같기도한데 이건 그때 그때 구현해보면서 결과를 보는 편이 좋을 것 같네요!

이 부분은 조금 이해가 안갔었는데,
plot (e)는 아예 saturate되어 버렸기 때문에 채널 간의 정보교환은 의미가 없어서 저자들이 필요없다고 한 것 같고,

plot (f)는 이미 feature map이 스케일이 달라져 버릴 정도로 각 class의 전문가들이 되어버려 featrue map들에 가중치를 곱해주어 봤자 그냥 스케일링의 효과?
class 내부끼리의 정보가 더욱 중요해졌기 때문에 excitataion의 효과가 적을 것같다고 해석할 수도 있을 것 같습니다.

 

 

 

간단한 SE block 구현 (케라스)

 

케라스로는 SE block을 간단히 이 정도로 구현할 수 있을 것 같습니다.

개인적으로 CNN Architecture에 대해서 좀 더 깊게 생각하게 해준 논문이었던 것 같습니다!

 

댓글