본문 바로가기
Dev

SENet

by 호랑2 2021. 3. 22.

SENet 은 기존의 VGGNet, GoogLeNet, ResNet 등에 SE block 을 결합하여 성능 향상을 이끌어 내는 개념이다.
성능 향상을 위해서는 필연적으로 연산량의 증가가 수반되나, SENet 을 사용하는 경우 연산량은 크게 늘지 않으면서도 정확도를 높일 수 있다.


출처 : Squeeze-and-Excitation Networks, Jie Hu, Li Shen, Gang Sun; Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2018, pp. 7132-7141

 

feature X 에 대해 convolution 을 처리한 feature U 를 생성한 뒤, U 에 대해 스퀴즈(squeeze) 를 처리한다.
스퀴즈란 2차원 feature 에 대해 global average pooling(GAP) 를 통해 각 2차원의 feature 를 평균내어 1x1 사이즈의 feature 로 변환시켜 주는 것이다.

 

이를 통해 1x1xC(채널 수) 로 스퀴즈 된 feature 에 대해 활성화(excitation) 처리를 해주는데, 먼저 스퀴즈를 통해 얻은 feature 를 인풋으로 삼아서 W1 가중치들과 fully-connected하게 곱해준다. 그래서 얻은 값을 ReLU 함수로 활성화해준 후에 다시 W2 가중치들과 fully-connected 하게 곱해준다. 이때 FC 층들은 여기서도 마찬가지로 Bottleneck 구조로 만들어 준다. 이는 앞서 살펴봤듯이 연산량을 줄이고 복잡도를 낮추기 위한 방법이다.

 

이렇게 얻은 값을 마지막으로 시그모이드 함수로 활성화 해줘서 0과 1사이의 값을 갖게 만든다. 따라서 각 채널의 상대적 중요도를 0과 1의 값으로 파악할 수 있게 된다. 이 값을 다시 U 에 곱해줘서 U 를 재보정하여 최종적으로 feature 를 추출해낸다.

 

결론적으로 feature X 를 convolution 을 통해 U 로 만들고, U에서 SE Block 을 통해 채널당 중요도가 고려된 최종 feature로 재보정 하는 것이다.

 

'Dev' 카테고리의 다른 글

[colab] bash: Bad Substitution  (0) 2021.04.01
[colab] sh: Permission denied 오류  (0) 2021.03.29
Metric Learning and Triplet Loss  (0) 2021.03.28
Few-Shot Learning  (0) 2021.03.24
Bottleneck layer  (2) 2021.03.20

댓글