BAM and CBAM: self-attention modules for CNN

Jongchan Park
Lunit Team Blog
Published in
15 min readJun 4, 2020

Intro

이번 글에서는 제가 참여한 2개의 self-attention 연구를 소개합니다.

  1. Jongchan Park*, Sanghyun Woo*, Joon-Young Lee, and In So Kweon: “BAM: Bottleneck Attention Module” , in BMVC 2018 (Oral)
  2. Jongchan Park*, Sanghyun Woo*, Joon-Young Lee, and In So Kweon: “CBAM: Convolutional Block Attention Module” , in ECCV 2018
    (* equal contribution)

두 논문 모두 CNN의 인식 성능 향상을 위한 self-attention module을 제안하고 있습니다.

Previous Works and Motivation

CNN에서의 Attention 개념은 주로 Visual Question Answering 또는 Image Captioning처럼 multi-modal 간의 관계를 이용한 feature selection에 많이 사용되었습니다. 가장 기념비적인 논문인 “Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”[1]에서는 아래의 그림과 같이 어떤 부분을 보고(look, attend) 문장을 생성(tell)했는지 효과적으로 시각화할 수 있습니다. 또 다른 논문인 “Dual Attention Networks for Multimodal Reasoning and Matching”[2]에서는 질문과 이미지의 양방향 attention을 통해서 VQA와 cross-modal retrieval의 성능을 향상시켰습니다.

Show, Attend and Tell[1] 논문 그림. 밑줄의 단어와 상응하는 이미지 파트는 흰 색으로 칠해져있다.

Attention을 일종의 gating이라고 생각한다면, 위의 예시들은 입력에 따라 dynamic feature selection을 한다고 볼 수 있습니다. 질문에 따라서, 또는 생성되는 문장에 따라서 이미지의 feature map을 다르게 선택하기 때문입니다.

더 일반적인 task인 image classification, detection 등에서도 마찬가지로 입력 영상에 따라서 봐야할 부분이 다를 것 입니다. 일반적인 classification CNN에서 입력 영상에 따라서 서로 다른 computational path를 갖게 한다면 성능 향상을 기대해볼 수 있을 것 입니다. 따라서 본 연구에서는 self-attention을 통한 image classification / detection에서의 성능 향상을 목표로 합니다.

네트워크 아키텍쳐 디자인의 관점으로 보면, 이미 depth / width / cardinality (grouped conv)등 많은 측면이 연구가 되어왔습니다. 그 동안 Attention은 각 task에 특화되어 사용되었고, 일반적인 아키텍쳐로써의 연구가 많이 이루어지지 않았습니다. 최근에 들어서야 Residual Attention Networks (CVPR17)[3], Squeeze-and-Excitation (CVPR18)[4], Non-local Neural Network (CVPR18)[5] 등 일반적인 네트워크 구성요소로써의 attention이 주목을 받고 있습니다. Attention은 기존의 네트워크 디자인 요소들과 다소 orthogonal하며, 따라서 complementary하게 네트워크 성능 향상이 가능하다고 가정을 하였습니다. 추후 실험 결과를 보면, 저희가 제안한 attention module은 아주 적은 overhead로도 매우 유의미한 성능 향상을 이끌어냅니다. 그 효과는 여러 벤치마크 (ImageNet classification, COCO detection, VOC detection) 및 여러 아키텍쳐(ResNet, WideResNet, ResNext, MobileNet, etc)에서 입증되었습니다.

아래의 섹션에서는 BAM과 CBAM의 방법 및 결과를 나눠서 소개하도록 하겠습니다.

Method and Results

두 모듈 모두 conv feature를 입력으로 받고, 그에 대한 attention을 계산합니다. Sigmoid로 normalize된 attention map은 conv feature에 element-wise 곱해집니다. Sigmoid 대신 softmax같은 방식이 있겠지만, “가장” 중요한 feature를 찾는 것이 목적이 아니기 때문에 mutually exclusive한 softmax 대신 sigmoid를 사용합니다. 아래의 식에서 F는 conv feature, M(F)는 생성된 attention map을 나타냅니다.

먼저 떠오르는 직관적인 방법은 3D conv feature모양의 attention을 계산하는 것이고, 이미 Residual Attention Networks[3] (RAN)에서 효과가 입증되었습니다. RAN은 encoder-decoder 방식을 이용해서 3D attention map을 생성하는데, 이러한 방식의 단점은 연산량이 매우 많다는 것 입니다. 이 경우, 동일한 연산량으로 더 많은 층을 쌓거나, 여러 네트워크의 앙상블도 가능할 것 입니다. Attention의 효과를 입증하기 위해서는 적은 연산량으로도 큰 성능 향상을 이끌어내는 것이 중요합니다. 따라서, 제안된 두 모듈은 3D attention map을 channel-wise / spatial-wise로 분해하여 계산합니다. 연산 및 파라미터 overhead는 1~2% 수준으로 매우 미미합니다.

모듈을 디자인함에 있어서 가장 중요했던 철학은 “심플함” 입니다. 아무리 좋은 방법이여도 구현이 어려우면 실제 적용이 쉽지 않습니다. BAM과 CBAM은 아주 단순한 pooling 및 convolution으로 이루어져 있습니다. 또한 self-attention을 모듈화(self-contained) 하여 어떠한 CNN에도 쉽게 끼워넣을 수 있게 하였습니다. 또한 두 모듈 다 기존 네트워크과 함께 end-to-end training이 가능합니다. 논문 내 모든 실험에서 모든 실험에서 attention module과 backbone network를 처음부터 동시에 학습(joint training)하였습니다.

Bottleneck Attention Module (BAM)

BAM이 추가된 전체적인 아키텍쳐 모습. attention을 통해서 feature map이 더욱 정제되는 것을 볼 수 있다. feature map과 attention map은 각각 채널 축으로 평균된 이미지이다.

이름에서 볼 수 있듯, Bottleneck Attention Module (BAM)은 각 네트워크의 “bottleneck”에 위치하게 됩니다. 여기서 bottleneck이라 함은, spatial pooling이 이루어지는 부분을 말합니다. Spatial pooling은 CNN의 abstraction과정에서 필수적인 부분이며, feature map의 spatial resolution이 작아지게 됩니다. 예를 들어, ResNet은 여러 conv block으로 이루어진 stage를 4개 사용하며, 각 stage의 첫 operation은 pooling입니다(conv stride=2). 이러한 bottleneck구간에서 정보량이 줄기 전에 BAM을 추가하여, attention으로 중요한 부분의 값을 키우고, 덜 중요한 부분의 값을 줄이도록 합니다.

Bottleneck Attention Module의 연산 과정.

앞서 설명한대로, BAM은 3D conv feature를 입력으로 받고, attention으로 refine된 conv feature를 출력합니다. 아래의 그림을 보면 간단하게 이해가 가능합니다. Channel축과 spatial축의 attention을 나누어서 계산하고, 각 output값을 더하고 sigmoid를 통해서 입력과 같은 사이즈의 3D attention map을 생성하게 됩니다. 3D attention map 생성을 두 가지 축으로 decompose했다고 볼 수 있습니다. 입력 conv feature와 attention map을 곱해준 값을 기존 입력에 더해줍니다.

channel 축은 global average pooling을 통해서 각 채널의 global context를 모아줍니다. 그리고 2-layer MLP를 통과하여 입력 채널과 같은 사이즈를 출력하게 됩니다. spatial 축은 채널이 갖는 의미를 유지하기 위해서 convolution만으로 최종 2D attention을 계산하게 됩니다.

BAM의 디자인에는 2가지 hyper parameter가 있는데, 채널 압축 정도 (r) 그리고 공간 attention에서의 dilation value (d)입니다. 우선 채널 압축 정도는 연산량을 줄이기 위해서 연산 과정의 채널을 줄이는 값 입니다. 여러 실험을 통해서 최적의 값 16을 찾았습니다. 그리고 공간 attention을 계산할 때, 중요한 것은 global한 attentioning을 위해 context 정보를 모으는 것인데, 일반적인 3×3 conv보다 dilated(atrous) conv가 더 넓은 context를 모은다고 알려져있습니다. 이 연산에서의 dilation value 또한 중요한데, 너무 작으면 context를 적게 볼 것이고, 너무 넓으면 지역적 정보를 잘 못 볼 것 입니다. 실험을 통해서 4가 최적의 값임을 실험적으로 찾았습니다.

CIFAR-100, ImageNet classification 실험 결과. BAM은 여러 backbone architecture에서 모두 매우 적은 overhead로 유의미한 성능 향상을 보여주었다.

BAM의 파라미터 / 연산량은 기존 backbone의 1%~2% 수준으로 매우 미미하지만, 유의미한 성능 향상을 보여주었습니다. BAM의 이러한 특성을 잘 활용할 수 있는 mobile-oriented network (MobileNet, SqueezeNet) 에서도 꽤 많은 성능 향상으로 효율성을 보여주었습니다.

MS-COCO, VOC2007 detection 실험 결과. MS-COCO는 Faster-RCNN기반이며, VOC2007은 SSD, StairNet[6] 기반에서 실험하였다.

Classification뿐만 아니라 detection에서도 위의 실험과 같이 유의미하게 성능을 끌어올렸습니다.

자세한 ablation 실험 분석 및 더 많은 실험 결과 등 자세한 내용은 arXiv preprint에서 확인할 수 있습니다.

Convolutional Block Attention Module (CBAM)

CBAM의 개념도. ResNet의 ResBlock에 추가되었을 때의 예시.

CBAM은 BAM의 후속 연구로, 더욱 향상된 성능을 보여주었습니다. 모듈의 pooling, spatial과 channel attention의 결합 방식, 그리고 interpretability(더 정확한 object extent를 봄)에 대한 실험 등이 추가되었습니다. 개념도에서 볼 수 있듯, 기존 BAM은 channel & spatial을 하나의 3D로 더해서 구현하였지만, CBAM은 순차적으로, 그것도 channel을 먼저 적용하는 것이 더 나은 성능으로 이어지는 것을 보였습니다.

CBAM의 channel, spatial 각각의 구성

디테일하게 각 attention의 구성을 보면, 위의 그림과 같습니다. Channel attention의 경우, 기존 BAM은 average pooling을 사용했지만, CBAM은 average pool, max pool 두가지를 결합하여 사용합니다. 3D feature map의 max pool과 avg pool값은 global한 attentioning에서 유의미한 statistic으로 사용될 수 있다고 생각하였습니다. 두 가지 pooled feature는 같은 의미를 공유하는 값이기 때문에, 하나의 공유된 MLP를 사용할 수 있으며, 파라미터 양을 줄일 수 있습니다. Spatial attention 역시 대칭적으로 구성되어, 단 하나의 convolution으로 spatial attention을 계산합니다. 더 구체적인 모듈 구조 및 분석은 논문 본문을 참고하시기 바랍니다.

CNN들은 일반적으로 conv block으로 구성이 되는데, 경량화된 CBAM은 모든 conv block의 마지막에 매우 쉽게 추가될 수 있습니다.

ImageNet classification 실험 결과. 여전히 매우 적은 overhead로 더욱 큰 성능 향상을 보여준다.

ImageNet classification에서 여전히 큰 성능 향상을 확인할 수 있다. BAM에 비해서, 그리고 Squeeze-and-Excitation(SE)[4]에 비해서도 거의 항상 더 나은 성능을 보여주고 있습니다.

MS-COCO, VOC2007 detection 실험 결과. MS-COCO는 Faster-RCNN기반이며, VOC2007은 SSD, StairNet[6] 기반에서 실험하였다.

BAM에 이어 CBAM도 detection실험을 진행하였는데, 역시 일관되게 유의미한 성능 향상을 보여주었습니다.

GradCAM 결과. P는 정답 클래스의 softmax probability를 나타낸다.

GradCAM을 이용해서 각 네트워크가 예측한 타겟 물체의 위치 (object extent)를 시각화 하였습니다. Baseline + CBAM > Baseline + SE > Baseline 순으로 정성적인 결과가 더 좋게 보입니다. 곧 업데이트 될 컨퍼런스 버전에는 GradCAM결과를 이용한 user study 실험이 추가되었습니다. 이를 통해 CBAM의 interpretability (object extent)가 더 좋음을 정량적으로 보였습니다.

더 많은 실험 및 결과는 arXiv preprint를 참고해주시기 바랍니다.

Conclusion

그 동안 딥러닝에서 attention은 cross-modal feature selection 등의 역할을 하며 다양하게 활용되었습니다[1][2]. 기존의 cross-modal과 더불어, 최근에는 self-attention으로 일반 CNN에서의 활용 방안도 제시되고 있습니다[3][4][5]. BAM과 CBAM은 모든 CNN에서 손쉽게 사용 가능하도록 디자인 된 attention module입니다. 매우 적은 overhead로 유의미한 성능 향상을 가져온다는 것을 다양한 벤치마크와 아키텍쳐에서 보였습니다. 또한, network가 더 명확한 object extent를 본다는 것도 실험적으로 보여주었습니다. 앞으로도 self-attention이 아키텍쳐 디자인에 다양하게 활용될 것으로 기대되며, BAM과 CBAM도 많이 사용되기를 기대해봅니다.

코드 및 pretrained model은 Github에 공개되었습니다.

References

[1] Xu, K., Ba, J., Kiros, R., Cho, K., Courville, A., Salakhudinov, R., Zemel, R., Bengio, Y.: Show, attend and tell: Neural Image Caption Generation with Visual Attention. ICML 2015
[2] Nam, H., Ha, J., Kim, J.: Dual Attention Networks for Multimodal Reasoning and Matching. CVPR 2017
[3] Wang, F., Jiang, M., Qian, C., Yang, S., Li, C., Zhang, H., Wang, X., Tang, X.: Residual Attention Network for Image Classification. CVPR 2017
[4] Hu, J., Shen, L., Sun, G.: Squeeze-and-Excitation Networks. CVPR 2018
[5] Wang, X., Girshick, R., Gupta, A., He, K.: Non-local Neural Networks. CVPR 2018
[6] Woo, S., Hwang, S., Kweon, I.: StairNet: Top-Down Semantic Aggregation for Accurate One Shot Detection. WACV 2018

--

--

Jongchan Park
Lunit Team Blog

Deep Learning Researcher, working at Lunit Inc. Mainly interested in computer vision for recognition. https://sites.google.com/view/jongchanpark