Self-Attention and Gating Mechanisms in Computer Vision
Self-Attention and Gating Mechanisms 에 대한 개념 및 관련 논문들을 정리한 글입니다.
작년부터 NLP가 아닌 컴퓨터비전에서는 attention이 어떻게 쓰이는지 궁금해서 공부하려고 했는데, 드디어 시간을 투자해서 관련 논문들을 읽어보고 정리해보았습니다.
여러 논문들을 소개하면서 논문에서 어떠한 방식으로 attention 개념을 활용하는지 방법 위주로 설명을 해보도록 하겠습니다.
Attention 이란?
처음 attention 관련 소개하고 싶은 논문은 인용이 8000번 이상 된 Google에서 발표한 매우 유명한 “Attention is All You Need (2017)” 논문입니다. 오직 attention에 기반한 sequence transduction model을 최초로 제안한 논문입니다.
가장 왼쪽과 같은 attention 기반의 Transformer 모델 구조를 제안하였습니다. 이 Transformer는 여러 Multi-Head Attention 으로 이루어져 있고, 이 Multi-Head Attention은 여러 Scaled Dot-Product Attention가 병렬적으로 이루어져 있습니다.
Scaled Dot-Product Attention을 보면 Q(Queue), K(Key), V(Value) 를 input으로 받고, output은 value에 weighted sum을 하여서 구합니다. 이때, Q와 K를 이용하여 각 value에 영향을 미칠 weight를 계산합니다. 쉽게 생각하면 V(Value)의 중요한 값들만 weight 를 적용하여 살려주는 것으로 생각할 수 있습니다. (중요하다고 생각되는 부분에 집중)
이 논문에서 Attention을 적극적으로 활용한 이유는 기존의 RNN에 비해 computing cost 가 줄어들고, 병렬화가 가능하며, long-range dependency를 학습할 수 있는 장점 때문입니다. input의 길이가 길어지는 경우 그 안의 position 간의 의존성을 학습하기 어려운데, attention을 이용하여 이를 해결하였습니다. 또한, attention은 해석 가능합니다. encoder에서 어떠한 것들을 보고 이 결과를 냈는지 알 수 있습니다.
이와 같은 장점 때문에 attention이 적극적으로 활용되었고, computer vision 분야에서도 역시 이를 이용한 논문들이 많이 있습니다.
Non-local Neural Networks
CVPR 2018에서 발표된 Facebook AI Research 논문입니다.
기존의 CNN network에는 convolution이 local 영역에 대해서만 계산된다는 단점이 있습니다. 이를 위해 딥러닝 네트워크가 점점 깊어졌지만, computing cost가 커지고, optimization이 힘들다는 문제점들이 있었습니다.
이를 해결하기 위해, 이 논문에서는 “non-local means method”를 참고하여 deepNN에서 long-range dependencies 를 고려할 수 있는 방법을 제안하였습니다.
non-local means 방법은 denoising을 할때, 비슷한 영역들을 뽑아 평균을 계산하여 noise를 제거하는 것입니다 (BM3D 논문 참고). 이 논문에서도 이와 같은 방법을 참고하여, 연산할 때 self-attention을 이용하여 모든 position을 고려합니다. convolution layer 중간에 삽입하여 사용할 수 있습니다.
방법은 위 그림의 non-local means와 같습니다. 일단 \(x_i, x_j\) 사이의 relation을 구하고 이 값을 모든 position \(x_j\)와 average sum을 해줍니다. 이로써 모든 position을 고려한 연산이 가능합니다. 더 자세한 방식은 왼쪽 그림에서 보여주고 있습니다. 여기서는 video를 예시로 들기 때문에 T라는 시간 dimension이 추가되었습니다.
이 논문에서 제안한 방법은 video task에서는 꽤 좋은 성능을 보이지만, 일반 2D 영상에서 사용하기에는 complexity가 높다는 단점이 있습니다.
이 논문에 대한 더 자세한 설명은 Lunit Blog을 참고하면 좋을 것 같습니다.
SENet, CBAM, ECA-Net
다음 설명할 논문들은
CVPR 2018에서 발표된 “Squeeze-and-Excitation Networks”,
ECCV 2018에서 발표된 “CBAM: Convolutional Block Attention Module”,
CVPR 2020에서 발표된 “ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks” 입니다.
이 논문들은 서로 비슷한 점들이 매우 많기 때문에 같이 설명하려고 합니다. SENet -> CBAM -> ECA-Net 순서로 보면 좋을 것 같습니다.
Squeeze-and-Exictation Networks
SENet 논문에서는 채널 간의 관계에 집중합니다. 네트워크에 의해서 생성되는 feature representation의 퀄리티를 높이기 위해서 채널 간의 interdependency를 explicitly modeling 합니다.
emphasis information features and suppress less useful ones
제안한 방법은 위 그림과 같습니다. 우선 squeeze와 excitation 단계가 있습니다. Squeeze 단계에서는 global spatial information embedding을 통해 global information 을 축약합니다. 그리고 excitation 단계에서는 channel-wise dependency를 fully connected layer를 통해 모두 고려합니다. 이렇게 구한 값을 U와 다시 channel-wise multiplication을 해줍니다.
여기서 Fully connected layer는 2개로 이루어져 있고, 중간에 연산량을 줄이기 위해 dimension reduction을 합니다. 또한, 이 SENet은 오른쪽 그림처럼 ResNet 중간에 삽입하여 사용할 수 있습니다.
이 방법을 통해 더이상 local receptive field 가 아닌 global로 self-attention function on channel을 적용할 수 있습니다. recalibration to the network 가 필요한 경우 (중간 layer 부분)에 이 layer를 삽입하면 좋다고 합니다.
CBAM: Convolutional Block Attention Module
CBAM 논문에서는 위 SENet에서 channel을 고려한 것에 더해서 spatial 방향 까지 고려합니다.
What and Where to attend in the channel and spatial axes respectively
Channel Attention Module은 SENet 과 거의 비슷합니다. CBAM에서는 global average pooling 뿐만 아니라 max pooling 도 사용합니다. global average pooling 은 suboptional을 고르는 것이기 때문에 가장 좋은 값도 생각을 해주기 위해 둘 다 사용합니다. 여기에 Spatial Attention Module까지 적용하여 spatial 정보도 고려한 attention을 해줍니다.
순서는 channel attention을 해준 후 spatial attention을 해주는 것이 가장 성능이 높다고 하고, SENet 과 마찬가지로 ResNet 과 같은 네트워크에 추가하여 사용할 수 있습니다.
더 자세한 내용은 Lunit Blog 를 참고하면 좋을 것 같습니다.
ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
ECA-Net 은 가장 최근에 나온 논문인데요, 실험 과정에서 위에 SENet 과 CBAM 모두 비교평가를 하여 더 뛰어난 것을 증명하였기 때문에 셋 중에서는 가장 성능이 좋은 논문입니다.
Avoids dimensionality reduction and captures cross-channel interaction in an efficient way
이 논문에서는 이전 SENet에서의 몇가지 한계점을 지적하며 이를 해결하기 위한 방법을 제안합니다. 우선, SENet에서 연산량을 줄이기 위해 fully connected layer에서 dimension reduction을 해주는데, 이것이 오히려 채널과 weight 간의 직접적인 correspondence를 파괴한다고 말하고 있습니다. 따라서 여기서는 dimension reduction을 하지 않고 있습니다. 또한 동시에 model complexity를 낮추기 위한 방법을 제안하고 있습니다.
위와 같이 이 논문도 channel-wise attention을 사용합니다. 이때, fully connected layer 에서 dimension reduction을 하지 않고, (이것을 실행하는 것 때문에 성능이 낮아지는 것은 논문에서 보여줍니다) 대신 complexity를 낮추기 위해 1D convolution 과 같은 주변 local 영역만 고려하는 kernel을 사용합니다. local cross-channel interaction을 고려하는 것이죠.
이 방법을 이용해서 충분히 이전 연구들보다 좋은 결과가 나오고, light weight model을 설계할 수 있음을 보여주고 있기 때문에, local 영역의 채널들만 고려하는 것으로도 충분히 성능이 높아지는 것을 알 수 있습니다. 아마 spatial 영역에 대한 attention도 추가하면, 더 좋은 성능이 나올 것 같습니다.
AGUNet
의료영상 분야에서도 attention gate를 이용하여 성능을 높인 논문이 있습니다. 2019년 Medical Image Analysis 저널 논문 “Attention Gated Networks: Learning to Leverage Salient Regions in Medical Images” 입니다.
이 논문에서는 CT 3D Volume 영상을 갖고 liver segmentation을 하는데, attention을 기존 3DUNet에 붙여서 성능을 높였습니다.
Suppress feature responses in irrelevant background regions false-positive prediction
간이 아닌 부분을 간이라고 판단하는 이러한 오류 상황을 줄이기 위해 additive attention을 사용합니다. 위 논문들과 다른 점은 low-level feature를 gating과 같이 사용하여서 gating coefficient를 구했다는 점입니다.
다음 그림을 보면 더 이해하기 쉬울 것 같은데, skip connection을 수행해 줄때, low-level feature를 담고있는 global feature vector g와 skip connection을 해주는 activation map x를 더해주어서 gating coefficient를 구합니다. 이를 통해 각 scale l 에서 가장 object relevant 한 feature를 attend 시켜줍니다, 필요한 feature 만 concatenate 해주는 것이죠.
skip connection 에서도 attention을 이렇게 적용해줘서 성능을 높일 수 있다는 것을 보여준 논문입니다.
이렇게 논문들을 attention 방법 위주로 훑어 보았습니다. 위 논문들과 같이 자세하게 설명할 순 없지만, 소개하고 싶은 논문들이 몇가지 더 있어서 간단하게 소개하려고 합니다.
End-to-End Object Detection with Transformers
이 논문은 Facebook AI에서 2020년에 발표한 논문입니다. 위에서 소개된 transformer 를 object detection에 적용한 논문입니다.
다음과 같이 transformer의 encoder와 decoder를 사용하여서 object box를 detect 합니다. 제가 이 글에서 object detection 관련 방법별로 정리한 글을 쓴 적이 있는데, 이 논문은 거기에 해당하지 않는 최초로 transformer를 사용한 end-to-end 모델이라는 점에서 의의가 있습니다. object detection에 관심이 있다면 한번 읽어보시는 것을 추천합니다.
Volumetric Attention for 3D Medical Image Segmentation and Detection
2020년에 나온 VA를 이용한 medical image segmentation and detection 논문 입니다.
Mask RCNN을 backbone으로 하고 거기에 attention module을 붙인 것입니다. 이때 위에서 설명했던 spatial attention, channel attention을 활용하였습니다.
여기서는 attention을 활용한 것 외에도 feature bag를 제안한 점, 3D Volume을 학습할 때 3개의 인접한 slice를 3-channel 2D image처럼 넣어주었던 점이 인상 깊었던 논문입니다.
medical image segmentation 이나 detection 에 관심있으신 분들은 읽어보면 좋을 것 같습니다.
최근 feature representation power를 높이는 여러가지 방법에 대해 관심이 많은데, 그 중 attention에 대해서 오늘은 정리해보았습니다. 다음에는 backbone architecture나 convolution 방법에 대해서도 정리해보려고 합니다.
Reference:
[1] Attention is All You Need
[2] Non-local Neural Networks
[3] Squeeze-and-Excitation Networks
[4] CBAM: Convolutional Block Attention Module
[5] ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
[6] Attention Gated Networks: Learning to Leverage Salient Regions in Medical Images
[7] End-to-End Object Detection with Transformers
[8] Volumetric Attention for 3D Medical Image Segmentation and Detection
Leave a comment