[18′ CVPR] SENet : Squeeze and excitation networks

This entry is part 16 of 22 in the series Vision Model

내용 요약

기존 CNN에는 중요한 정보에 집중할 수 있는 Attention 기능이 없습니다. 이에 SENet에서는 CNN 중간에 삽입되어 중요한 정보에 집중할 수 있게 하는 Attention 모듈을 제안합니다. 이 Attention 모듈은 Squeeze와 Excitation 모듈로 구성되어 있습니다. SENet 모듈은 기존 CNN에 삽입되었을 때 다양한 task에서 성능을 증가함을 실험으로 입증했습니다.

1. 들어가며

이번 글에서는 2018년 CVPR에 발표된 Squeeze and excitation networks 논문을 리뷰합니다. 이 논문은 SENet이라는 별칭으로 불리며, 이번 글에서도 SENet으로 지칭하겠습니다.

SENet은 기존 CNN에 Attention 모듈을 추가하여 성능을 개선한 방법입니다. 이때 Attention은 중요한 부분에 더 ‘집중’하는 기능을 의미합니다. 이러한 Attention 기능은 크게 정보를 압축하는 Squeeze 모듈과 중요도를 계산하는 Excitation 모듈로 구성했습니다.

이번 글에서는 다음과 같은 순서로 SENet의 주요 내용을 살펴보겠습니다.
첫 번째로 SENet이 해결하고자 했던 문제를 살펴봅니다. 기존 CNN 방식에는 무엇이 결핍되었는지 생각해 보겠습니다.
두 번째로 SENet의 기능을 자세히 살펴봅니다. SENet의 큰 그림을 생각해 보고, SENet을 구성하는 두 개의 모듈인 Squeeze와 Excitation 모듈을 자세히 살펴봅니다.
세 번째로 SENet의 성능을 검증하기 위한 실험 결과를 살펴보며 어떤 효과가 있는지 살펴보겠습니다.
네 번째로 실험을 통해 Squeeze와 Excitation 모듈의 효과와 역할을 살펴보겠습니다.

2. 기존 방법의 문제점

SENet을 살펴보기 전에 SENet이 풀고자 했던 기존 방법의 문제점을 살펴보겠습니다.

이때의 기존 방법이라 함은 기본적인 CNN을 의미합니다. Convolution과 Activation, Pooling 그리고 fully connected layer로 구성된 네트워크 말이죠. 이러한 CNN을 사용하여 Object Detection 문제를 푼다고 상상해 보겠습니다.

1.CNN의 문제점
그림1. CNN의 문제점

위 그림은 입력 이미지를 CNN을 사용하여 feature map을 추출한 뒤 채널별 의미를 나타낸 그림입니다. Object Detection 문제를 풀기 위해 이렇게 추출한 feature map에서 위치 정보와 클래스 정보를 연산해야겠죠. 따라서 이 feature map에는 입력 이미지에 대한 위치 정보와 클래스 정보가 들어있어야 합니다.

일반적으로 CNN으로 추출한 feature map의 각 채널은 특정 정보를 담고 있다고 알려져 있습니다. 예를 들면 1번 채널은 강아지 정보를, 2번 채널은 고양이 정보를 담고 있는 거죠. 위의 예시에서는 첫 번째 채널에는 왼쪽 위에 태양이 있다는 정보를, 두 번째 채널에는 오른쪽 위에 나무가 있다는 정보 등등을 담고 있다고 가정했습니다.

자, 그런데 우리가 풀고자 하는 문제의 정답은 ‘가운데에 강아지가 있다.’는 것이죠. 따라서 해당 정보 외에 나머지 정보는 쓸모가 없습니다. 위의 예시에서는 3번 채널을 제외한 나머지 채널의 정보는 쓸모없는 것이죠. 따라서 3번 채널에만 ‘집중’하고 나머지 채널 정보는 무시하도록 기능을 구현해 주는 게 유리할 겁니다.

하지만 CNN에는 그러한 ‘집중’과 ‘무시’ 기능이 없습니다. 물론 Convolution, Activation, Pooling의 연산을 거치며 중요한 정보만 활성화되어 계산이 되기는 하죠. 하지만 ‘명시적으로’ 어떤 정보에 더 높은 가중치를 주어 연산하게 해주는 기능은 없습니다. 그럼 중요한 정보에 더 집중하게 해주는 기능을 CNN에 추가해 주면 성능 개선 효과를 기대할 수 있겠네요.

3. 제안 방법

지금까지 집중 (Attention) 기능이 없는 CNN의 문제점에 대해 살펴봤습니다. 이번 챕터에서는 중요한 부분에 집중할 수 있는 기능을 구현하기 위한 SENet의 방법을 자세히 살펴보겠습니다.

3-1. 큰 그림

먼저 SENet의 큰 그림을 생각해 보겠습니다.

3-1-1. 채널별 중요도 적용하기

위에서 살펴본 CNN의 문제점을 다시 한번 생각해 보죠. CNN으로 추출한 feature map의 각 채널은 서로 다른 종류의 정보를 포함한다고 했죠. 그리고 우리는 우리에게 필요한 정보만 사용하고 싶습니다. 즉 우리에게 중요한 채널에는 더 큰 가중치를, 안 중요한 채널에는 작은 가중치를 주고 싶은 거죠. 이를 그림으로 표현하면 다음과 같습니다.

2.SENet의 큰 그림
그림2. SENet의 큰 그림

가장 왼쪽은 CNN으로 추출한 feature map을 의미합니다. 이 feature map을 채널별로 분리했고요. 각각의 중요도를 계산해서 채널별로 곱해줄 겁니다. 이렇게 중요도를 곱해서 새로 계산된 채널들은 중요한 정보를 포함한 채널은 값이 더 커지고, 반대 경우는 작아져있겠죠. 이들을 다시 쌓아서 원래의 feature map 사이즈로 만들어줍니다.

그럼 이렇게 새롭게 나온 feature map은 원래의 feature map과 비교했을 때 무엇이 달라졌을까요? 문제를 풀기 위해 중요한 정보를 포함한 채널 정보는 강화되고, 안 중요한 채널 정보는 약화되어 있을 겁니다. 위 그림에서 가장 오른쪽의 Attention이 적용된 feature map은 중요한 채널은 더 진해지고, 안 중요한 채널은 더 흐려진 모습을 볼 수 있습니다.

3-1-2. 채널별 중요도 계산 방법

이제 무얼 하고자 하는지는 알았는데요. 핵심은 채널별 중요도값을 구하는 기능이겠네요. 이를 구현하려면 어떠한 기능을 어떻게 구성해주어야 할까요?

3.SE 모듈의 기능별 구성
그림3. SE 모듈의 기능별 구성

이렇게 두 가지 단계로 나누어서 생각해 볼 수 있을 것 같습니다.

먼저 feature map의 정보를 채널별로 나누어서 생각해 보겠습니다. 이제 각 채널별 정보에 대해 중요도를 계산하여 하나의 ‘값’으로 표현해야 합니다. 우선 드는 생각은 채널별 정보를 압축해 줄 필요가 있습니다. 왜냐하면 해당 정보가 너무 크니까요. Feature map의 텐서가 어떻게 구성되었는지 생각해 보면 WxHxC의 텐서라면 각 채널별 정보 사이즈는 WxH일 겁니다. 이는 정보량이 너무 많으니, 우선 각 채널별 정보를 하나의 값으로 압축해 주자는 거죠. 이렇게 압축된 정보는 위치 정보는 사라지고 물체 정보만 남았다고 생각하겠습니다.

이제는 각 채널별로 남은 물체 정보에 대해 연산을 통해 중요도를 계산해야 합니다. 이렇게 나온 채널별 중요도 값은 해당 채널 정보가 얼마나 중요한지를 나타내게 되는 거죠.

글로 풀어쓰니 조금 장황해졌는데요. 이를 SENet 논문에서는 다음과 같이 간결한 그림으로 표현합니다.

4.SENet 논문 표현
그림4. SENet 논문 표현

첫 번째 연산인 Ftr은 transform (변형)을 의미합니다. 이는 일반적은 CNN 연산을 의미합니다.
이제 WxHxC 사이즈의 feature map에 대해 Attention을 적용할 건데요. 이 과정은 크게 Squeeze 연산과 Excitation 과정으로 구분할 수 있습니다.
Squeeze 과정은 위에서 설명한 ‘정보 압축’ 단계에 해당합니다.
Excitation 과정은 위에서 설명한 ‘중요도 계산’ 단계에 해당하죠.

이제 아래에서는 Squeeze와 Excitation 단계를 각각 자세히 살펴보겠습니다.

3-2. Squeeze : 정보 압축하기

먼저 정보를 압축하는 기능인 Squeeze 단계를 살펴보겠습니다.

5.Squeeze 단계
그림5. Squeeze 단계

Squeeze 단계는 feature map의 채널별 정보를 ‘하나의 값’으로 ‘압축’해주는 단계입니다.
이러한 기능을 구현하기 위해 어떤 연산이 딱 떠오르나요? WxH 사이즈의 정보를 어떤 연산을 사용하면 ‘하나의 값’으로 압축할 수 있을까요? 여러 가지 방법이 있겠지만, SENet에서는 ‘평균값’을 사용합니다. WxH 사이즈 정보의 평균값으로 해당 채널을 대표하겠다는 거죠. 이를 Global Average Pooling이라고 합니다. 수식으로 표현하면 다음과 같습니다.

6.Global Average Pooling 수식
그림6. Global Average Pooling 수식

u는 입력 feature map이고요, i와 j는 위치 좌표입니다. 따라서 위 수식은 ‘Squeeze 연산을 거쳐 나온 output feature map z의 c번째 채널값은 입력 feature map의 c번째 채널의 평균값’이라고 해석할 수 있습니다.

이때 평균값의 의미를 한번 더 생각해 볼까요? WxH 사이즈 정보의 평균값의 특징은 정보의 위치에 대해 달라지지 않습니다.즉 강아지가 왼쪽에 있든 오른쪽에 있든 평균값으로 표현하면 동일한 강아지인 이상 같은 값이 나오게 되죠. 따라서 Squeeze 기능은 채널별 정보에서 위치정보는 버리고 물체 정보만 남기는 역할이라고도 생각할 수 있습니다.

3-3. Excitation : 중요도 계산하기

Squeeze 기능을 통해 채널별 물체 정보를 ‘하나의 값’으로 표현했습니다. 이제 이렇게 표현된 채널별 ‘하나의 값’들을 사용하여 채널별 ‘중요도 값’을 계산해주어야 합니다. Squeeze 기능을 통해 나온 값은 현재 문제를 풀기 위한 중요도는 전혀 반영되어 있지 않습니다. 그저 입력 이미지에 강아지가 있는지 나무가 있는지 등만 표현하고 있죠.

이에 대한 중요도는 정답지를 통해 학습되어야 합니다. ‘입력 이미지에 강아지와 작은 나무가 있지만, 이건 강아지라고 대답해야 하는구나’가 학습되어야 한다는 거죠. 따라서 이 과정은 필연적으로 학습 가능한 파라미터 연산으로 구성되어 정답 정보를 사용하여 학습되어야 합니다.

7.Excitation 단계
그림7. Excitation 단계

위 그림은 채널별 압축 정보 (평균값)을 사용하여 채널별 중요도를 계산하는 과정을 표현한 그림입니다.
SENet에서는 이 과정을 fully connected와 ReLU, Sigmoid를 사용하여 구성했습니다. 정확히는 Fully Connected -> ReLU -> Fully Connected -> Sigmoid 순서로 구성해 주었죠. 이를 수식으로 표현하면 다음과 같습니다.

8.Excitation 연산 구성
그림8. Excitation 연산 구성

두 개의 W는 Fully Connected 연산의 가중치를 의미합니다. 𝛿는 ReLU를, 𝜎는 Sigmoid를 의미하죠. Fully Connected 연산으로만 구성되면 비선형성이 표현이 안되기 때문에 ReLU를 포함했고, 최종 결괏값을 0~1 사이값으로 표현하기 위해 Sigmoid를 사용했다고 이해할 수 있습니다. 최종값이 0~1 사이값으로 나와야 채널별 중요도, 즉 Attention Score로 사용할 수 있기 때문이죠.

3-4. 전체 과정

이제 정보를 압축하는 단계인 Squeeze와 중요도를 계산하는 단계인 Excitation 단계를 모두 살펴봤습니다.
이제 두 가지 기능을 합쳐 전체적으로 SE 모듈이 어떻게 동작하는지 생각해 보겠습니다.

9.SE 모듈의 전체 구성
그림9. SE 모듈의 전체 구성

먼저 입력 feature map이 SE 모듈로 들어갈 겁니다. 그럼 feature map은 채널별로 분리되어 채널별 중요도값, 즉 채널별 Attention Score로 나오게 되죠. 이렇게 계산된 채널별 Attention Score는 다시 원래의 feature map에 곱해져 중요한 정보는 강화되고 중요하지 않은 정보는 약화시키게 됩니다. 즉 SE 모듈이 CNN 중간에 들어가게 되면 feature map에 채널별로 Attention Score를 적용하여 중요도에 따라 정보를 강화 또는 약화시키는 역할을 하게 되는 거죠.

4. 효과

지금까지 SENet의 각 기능을 살펴봤습니다. SE 모듈은 CNN 중간에 삽입될 수 있다고 했는데요. 그럼 기존 CNN 모델들에 SE를 삽입하면 어떤 효과가 있는지 실험 결과를 살펴보겠습니다. Image Classification, Scene Classification, Object Detection 세 개 문제에서의 실험 결과를 통해 SE 모듈을 적용하면 기존 CNN의 성능이 어떻게 변하는지 살펴보겠습니다.

4-1. Image Classification

먼저 Image Classification 실험입니다. 총 세 개 데이터셋에 대한 결과를 보겠습니다.

첫 번째는 ImageNet 실험 결과입니다.

10.ImageNet 실험 결과
그림10. ImageNet 실험 결과

두 번째는 CIFAR10 실험 결과입니다.

11.CIFAR10 실험 결과
그림11. CIFAR10 실험 결과

세 번째는 CIFAR100 실험 결과입니다.

12.CIFAR100 실험 결과
그림12. CIFAR100 실험 결과

위 표에서 original 열은 기존 CNN 방법으로 구성했을 때의 성능을 의미합니다. SENet 열은 기존 방법에 SE 모듈을 추가했을 때의 성능을 의미합니다. 세 개 데이터셋에서 모두 SE 모듈을 추가했을 때 성능이 향상되는 모습을 볼 수 있습니다. 따라서 Image Classification 문제에는 SE 모듈을 추가하면 성능이 개선된다고 결론 내릴 수 있습니다.

4-2. Scene Classification

다음은 Scene Classification 실험입니다.

13.Places365 실험 결과
그림13. Places365 실험 결과

위 그림은 Places365 데이터셋에 대한 실험 결과표입니다. ResNet152와 SE-ResNet-152의 결과를 비교해 보면 SE를 적용했을 때의 성능이 더 좋은 모습을 볼 수 있습니다. 비록 ResNet에 대해서, 한 가지 데이터셋에 대해서만 실험했지만 SE를 적용했을 때의 성능 개선 효과는 확인할 수 있었습니다.

4-3. Object Detection

마지막으로 Object Detection 실험입니다.

14.COCO object detection 실험 결과
그림14. COCO object detection 실험 결과

위 그림은 COCO 데이터셋에 대한 실험 결과표입니다. ResNet-50과 ResNet-101 모델에 대해 SE를 추가한 성능을 비교하고 있습니다. 두 모델 모두 SE를 추가했을 때 성능이 개선되는 모습을 볼 수 있습니다.

이번 챕터에서는 세 가지 서로 다른 문제에 대해 기존 CNN과 SE를 적용한 모델의 성능을 비교해 보았습니다. 그 결과 세 가지 문제에서 모두 SE를 적용하면 기존 CNN의 성능이 개선됨을 확인했습니다. 이를 통해 SE 모듈은 문제에 상관없이 기존 CNN에 적용하면 성능이 개선된다고 말할 수 있습니다.

5. SENet의 효과

지금까지 기존 CNN 모델에 SE 모듈이 추가되면 성능이 개선됨을 확인했습니다. 이번 챕터에서는 Squeeze와 Excitation 모듈 각각의 기능과 역할을 실험을 통해 살펴보겠습니다.

5-1. Squeeze 모듈의 효과

먼저 Squeeze 모듈의 효과에 대해 생각해 보겠습니다.
현재는 Squeeze (Pooling)과 Excitation 모듈로 구성되어 있는데요. Squeeze 기능을 없애면 성능은 어떻게 변할까요? 이를 위해서는 Squeeze 없이 Excitation만으로 구성하되, 공평하게 실험 세팅을 해주려면 연산 파라미터 개수를 맞춰주어야 합니다. 따라서 Pooling 연산은 제거하고, 연산량이 많은 Fully Connected 연산을 1×1 Convolution(동일 채널수 유지)으로 대체해 주겠습니다. 이렇게 되면 기존 SE의 결과가 채널별 Attention Score로 나온 것과 달리 각 픽셀별 Attention score로 나오게 됩니다. 당연히 Squeeze 단계가 없어졌으니 모든 위치값에 대한 Attention Score가 나오게 되겠죠. 이렇게 구성했을 때의 효과는 어떨까요?

15.Squeeze 효과 실험 결과
그림15. Squeeze 효과 실험 결과

위 그림은 ResNet-50과 Squeeze를 제거한 SE를 적용한 모델 (NoSqueeze), 그리고 SE를 적용한 모델의 ImageNet 성능을 나타낸 표입니다. 우선 ResNet보다는 NoSqueeze 모델의 성능이 더 좋은 모습이네요. 이는 추가 기능을 넣었으니 당연한 결과라고 할 수 있습니다. 그런데 SE 모델이 NoSqueeze 모델보다 성능이 더 좋네요. 이 둘은 동일한 파라미터수를 갖고 있습니다. 심지어 연산량은 NoSqueeze 모델이 더 많죠. 하지만 성능은 SE 모델이 더 좋습니다. 따라서 Squeeze 기능은 분명 효과가 있다고 말할 수 있습니다.

5-2. Excitation 모듈의 효과

다음은 Excitation 모듈의 효과를 살펴보겠습니다.

16.Excitation 역할 실험 결과
그림16. Excitation 역할 실험 결과

위 그림은 ImageNet의 goldfish, plane 클래스에 대해 50개 샘플의 Activation 평균값을 나타낸 그래프입니다.
SE 뒤의 첫 번째 숫자는 Layer의 깊이를 의미합니다. 큰 숫자일수록 깊은 Layer를 의미하죠. 두 번째 숫자는 SE 블록의 순서를 의미합니다. 예를 들어 SE_5_2는 5번째 Layer의 두 번째 SE 블록을 의미하죠.

이제 실험 결과를 생각해 보겠습니다. 위 실험 결과를 통해 네 가지의 교훈을 얻을 수 있습니다.
첫 번째는 초기 Layer에서는 클래스별로 두드러진 특징을 학습하지 않는다는 걸 알 수 있습니다. 이는 SE_2_3의 결과를 보면 알 수 있죠. 초기 Layer에서는 클래스별 Activation 결과가 비슷한 모습을 볼 수 있습니다. 
두 번째는 초기 Layer에서는 일반적인 정보를, 깊은 Layer에서는 클래스별 특화된 정보를 학습한다는 걸 알 수 있습니다. 이는 SE_3_4와 SE_4_6 결과를 보면 알 수 있죠. 깊은 Layer에서는 클래스마다 Channel Activation 값이 달라지는 모습을 볼 수 있습니다.
세 번째는 마지막 Layer에서의 Attention은 의미가 없다는 것입니다. 이는 SE_5_2 결과를 보면 알 수 있죠. 모든 Activation 값이 1로 동일한 모습을 볼 수 있습니다.
네 번째는 Attention이 클래스가 아닌 Instance에 따라 반응한다는 것입니다. 이는 모든 SE 블록들에서의 Activation 값이 모든 채널에 걸쳐 고루 분포하는 모습을 보면 알 수 있습니다.

이번 챕터에서는 실험을 통해 Squeeze와 Excitation 모듈의 기능과 역할을 살펴봤습니다. Squeeze 모듈이 포함되었을 때 성능 개선 효과가 더 크다는 걸 알 수 있었습니다. Excitation 모듈의 결괏값은 Instance에 따라 중요한 채널값에서 활성화되는 모습을 살펴봤습니다.

5. 결론

지금까지 SENet 논문의 주요 내용을 살펴봤습니다.
먼저 기존 CNN 방법의 문제점을 알아봤습니다. CNN에는 feature map의 중요 정보에 더 높은 가중치를 부여하는 Attention 기능이 없습니다. 이에 SENet에서는 CNN 중간에 삽입할 수 있는 Attention 모듈을 제안했습니다. SE Attention 모듈은 정보를 압축하는 기능인 Squeeze 모듈과 중요도를 계산하는 기능인 Excitation 모듈로 구성되어 있습니다. Squeeze 기능은 정보를 채널별 정보를 압축하여 표현하기 위해 Global Average Pooling 연산을 사용했습니다. Excitation 기능은 정답으로부터 중요 정보를 계산하기 위해 Fully Connected와 ReLU, Sigmoid 연산을 조합하여 구현하였습니다. 이렇게 구성된 SE 모듈은 기존 CNN 모델 중간에 삽입되었을 때 다양한 문제에서의 성능을 개선함을 보였습니다.

Series Navigation<< [17′ CVPR] Residual Attention Network for Image Classification[18′ BMVC] BAM: Bottleneck Attention Module >>
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top