안녕하세요.

이번 글에서는 Class Activation Map (CAM)을 알아보기 전에 Activation Map을 통해 알 수 있는 것들이 무엇인지 알아보도록 하겠습니다.

 

 

 

1.  CNN의 기본적인 연산 과정

 

Activation Map에 대해 설명하기 전에 CNN의 기본구조를 다시 한 번 간단히 살펴보도록 하겠습니다.

 

아래 그림을 보면 특정 입력에 대해서 convolution filter가 어떻게 연산이 되는지 보여주고 있습니다.

  • 아래 그림에서는 input에 해당하는 데이터가 3×3×3의 형태입니다. 다시 말해, input 데이터는 3개의 독립적인(=서로 별개인) channel이 각각 3×3 size로 구성되어 있다고 할 수 있습니다. 
  • 여기서 Conv filter size는 2×2로 구성되어 있습니다.
  • Conv filter channel은 input 데이터의 channel 개수와 동일합니다.
  • 때문에 아래 예시에서는 하나의 conv filter가 "3×3×3"의 format(형태)를 갖고 있다고 할 수 있습니다.
  • 그리고, 아래 예시에서는 하나의 conv filter가 적용되는 과정은 아래와 같습니다. 
  • (실제로는 activation function이 적용 된 후의 값도 고려해야겠죠)

 

이미지 출처: https://wikidocs.net/62306

 

그렇다면 위에서 배운 개념을 입력 이미지에 국한해서 일반화시켜 봅시다.

먼저, 앞서 언급한 하나의 convolution filter(=kernel)는 input image의 depth와 동일합니다.

 

하나의 conv filter가 순차적으로 input 데이터를 거치게 되면 하나의 map형태의 결과값이 나오게 되는데 이를 feature map or activation map이라고 합니다.

 

 

만약 Conv filter가 N개라면 아래와 같이 output에 해당하는 feature map 개수도 N개가 될 것입니다. 

이미지출처: https://indoml.com/2018/03/07/student-notes-convolutional-neural-networks-cnn-introduction/

 

 

위에서 얻은 output은 다음 conv layer(consisting of conv filters)에 적용될 때, input 데이터가 됩니다.

예를 들어, N×N×3의 input 데이터는 6개의 convolution filter와, subsampling(=pooling) 작업을 통해 M×M라는 output feature map을 6개를 생성해냅니다. 그리고, 이 output feature map은 pooling 과정을 거쳐 또 다른 M×M×6 형태의 input 데이터가 됩니다. 아래 그림에서는 M×M×6 형태의 input 데이터에 12개의 conv filter를 적용하여 12개의 feature map을 얻게 됩니다. 

 

이미지 출처: http://daddynkidsmakers.blogspot.com/2019/06/blog-post_5.html

 

 

하나의 feature map이 직관적으로 의미하는 바는 무엇일까요?

지금부터 이것에 대해 천천히 알아보도록 하겠습니다.

 

 

 

2.  Conv filter와 Activation Map의 직관적인 관계

 

Conv filter는 특정 feature들을 걸러줍니다.

각각의 conv layer에서 뽑는 feature map의 특성은 아래와 같습니다. 예를 들어, 아래 그림에서 첫 번째 Conv 1을 거친 feature map은 입력 이미지의 edge같은 feature들을 잘 보여주는 특징을 지닙니다. 

이미지 출처: 밑바닥부터 시작하는 딥러닝

(↓↓↓자세한 설명은 아래 글을 참고해주세요↓↓↓)

https://89douner.tistory.com/57?category=873854

 

3. CNN(Convolution Neural Network)는 어떤 구조인가요?

안녕하세요~ 이번글에서는 Convolution Neural Network(CNN)의 기본구조에 대해서 알아보도록 할거에요. CNN은 기본적으로 Convolution layer-Pooling layer-FC layer 순서로 진행이 되기 때문에 이에 대해서 차..

89douner.tistory.com

 

 

2-1. Edge feature

입력 이미지가 들어왔을 때 아래와 같이 conv filter 값들을 설정해주면, 세로 edge의 특징들이 뽑힌다는 걸 알 수 있습니다.

 

Vertical filter를 보면, 흰색에서 검은색(밝은 곳에서 어두운 곳) 으로 경계가 바뀌는 vertical 부분이 가장 강하게 activation(=feature map에서 흰색) 될 거라고 예측할 수 있습니다. (※ conv filter나 입력이미지 모두 plt.imshow라는 함수로 visualization 해주는데, visualization을 해줄 시 모든 pixel 값들을 normalization 해줍니다).

 

"즉 feature map을 통해서 어떤 feature들이 뽑힐지 conv filter (vertical filter)만 보고도 추측할 수 있는 것이죠." 

 

앞서 설명한 것과 같은 맥락으로 검은색에서 흰색(어두운 곳에서 밝은 곳으로)으로 경계가 바뀌는 vertical 부분의 feature들을 뽑아낼 거라고 추론할 수 있습니다.

 

아래 conv filter는 horizontal edge feature를 뽑아냅니다. Horizontal filter 1은 흰색에서 검은색(밝은 곳에서 어두운 곳으로)으로 경계가 바뀌는 horizontal 부분의 feature들을 뽑아냅니다. Horizontal filter 2는 검은색에서 흰색(어두운 곳에서 흰색인 곳으로)으로 경계가 바뀌는 horizontal 부분의 feature들을 뽑아냅니다.

 

대각선 관련한 conv filter들은 아래와 같이 구성됩니다.

CNN에서 초기 Conv filter 들은 초기에 random하게 초기화됩니다. Training 과정을 통해 아래와 같은 feature들을 뽑을 수 있게 CNN filter들이 학습(=형성) 됩니다.

 

 

 

 

[Note. 주의하세요!]

1) Conv filter 내부에 구성된 양수, 음수의 비율을 고려하세요!

Conv filter가 아래와 같이 구성되어 있다고 해서 대각선의 특징을 뽑는 것이 아닙니다.

 

위에서 적용된 conv filter에서는 -1의 비율이 많기 때문에 대부분 실제 이미지의 밝기 정도를 반전하는 결과를 도출하게 됩니다. 예를 들어, conv filter가 적용되는 입력 위치가 가장 밝은 부분이라면 conv filter가 적용된 후 가장 어두운 부분이 되게 됩니다.

 

또한, -8값의 필터를 통과한 결과 feature map이 좀 더 contrast(대비)큽니다(=흰색부분이 좀 더 진한거 같음). 그 이유를 추측해보면 곱해주는 배수가 커질 수록 conv filter를 통해 생겨난 출력값들간의 편차가 더 심해지기 대문이라는걸 알 수 있습니다.

 

 

2-2. object feature

앞서 아래와 같은 이야기를 한 적이 있습니다.

 

"즉 feature map을 통해서 어떤 feature들이 뽑힐지 conv filter (vertical filter)만 보고도 추측할 수 있는 것이죠." 

 

하지만, 중간 conv layer에 갈 수록 filter만 보고 어떤 특징을 추출할 것인지 파악하는건 쉽지 않습니다.

 

예를 들어, 중간 conv layer에서 아래와 같은 conv filter가 형성(학습)되었다고 가정해보겠습니다.

conv layer1의 입력 이미지에 해당하는 700x500 크기에서는 아래의 conv filter를 통해 알 수 있는 것이 별로 없습니다. Conv filter만 보면 동그라미와 같은 edge를 뽑을 수 있을 것 같은데, edge가 동그라미일 경우가 그리 많지는 않겠죠 (대부분 edge는 선, 곡선 같은 모양이니까요).

 

반면에, pooling을 통해 작아진 350x250 입력 데이터는 중간에 위치한 conv layer의 입력 값이라고 볼 수 있습니다. 이 때 activation map을 통해 살펴보면 filter는 좀 더 추상적인 object (=눈, 눈썹, 코, 입술) 와 같은 특징을 잘 뽑아낸다는 것을 알 수 있습니다.

 

Conv filter의 생김새와 상관없이 중간 layer의 activation map이 좀 더 추상적인 정보를 뽑아내는 걸 보여줍니다.

 

 

 

위의 결과를 통해 알 수 있는 사실은 아래와 같습니다.

 

"feature(activation) map을 통해서 중간 conv layer에서 위치한 conv filter들의 역할을 대략적으로 추론 할 수 있습니다."

 

 

 

 

3.  Medical Imaging에서의 activation map

이전까지 Activation map에 대해 살펴 봤습니다.

그렇다면 이러한 activation map을 통해 medical imaging에서는 어떤 도움을 얻을 수 있을까요?

 

가장 도움을 많이 받을 수 있는 부분은 medical imaging에 나타난 병변들을 구분 할 때, CNN이 어떤 근거들을 기반으로 하는지 설명해 줄 수 있다는 점입니다.

 

예를 들어, 아래 이미지들을 살펴봅시다. 

먼저, 아래와 같은 가정을 해보겠습니다.

 

  • COVID-19, Pneumonia(폐렴), Normal(정상인) 을 분류하기 위해 CNN 모델을 학습시켰다.
  • i 이미지들은 Conv layer 1에 해당하는 conv filter (=주로 edge 특징을 뽑아냄) 들을 통해 출력한 feature map들이다.
    • ii 이미지에서 왼쪽 부분은 original image(input image)를 의미하고, 오른쪽 부분은 i 이미지들(=feature maps by conv layer 1's filters) 중에 가장 activation이 활성화된 feature map을 의미한다.
  • iii 이미지들은 좀 더 뒷 쪽(=N번째 layer)에 위치한 Conv layer에 해당하는 conv filter(=주로 좀 더 추상화된 object or texture 등의 특징을 뽑아냄) 들을 통해 출력한 feature map들이다.
    • iv 이미지는 iii 이미지들(=feature maps by conv layer N's filters) 중에 가장 activation이 활성화된 feature map을 의미한다.

논문: Can AI help in screening Viral and COVID-19 pneumonia?

 

 

논문에 의하면 초기 COVID-19 병변 같은 경우는 사람(=숙련된 radiologist)들이 발견하기 어렵다고 합니다. 예를 들어, 아래 빨간색으로 표시된 부분들은 사람들이 볼 수 없는 특징이라고 합니다. 하지만, deep layer는 normal, pneumonia와 구분되는 COVID-19만의 특징(=abnormality)을 뽑을 수 있는데 이러한 것을 시각화하여 보여줄 수 있습니다.

 

예를 들어, 아래와 같이 DenseNet201 모델의 14번째 convolution layer의 23번째 conv filter를 이용하면 normal, COVID-19, Penumonia를 구분할 수 있는 feature들을 감지할 수 있다는걸 알 수 있습니다. 

 

논문: Can AI help in screening Viral and COVID-19 pneumonia?

 

 

 

 

지금까지 Activation Map에 대해 간단히 알아보았습니다.

Activation Map과 관련한 pytorch 코드는 아래 링크를 참조하시면 될 것 같습니다.

 

https://androidkt.com/how-to-visualize-feature-maps-in-convolutional-neural-networks-using-pytorch/

 

How to Visualize Feature Maps in Convolutional Neural Networks using PyTorch - knowledge Transfer

The idea of visualizing a feature map for a specific input image would be to understand what features of the input are detected or preserved in the feature maps.

androidkt.com

 

 

 

 

다음 글에서는 Class Activation Map이 무엇인지 본격적으로 알아보도록 하겠습니다.

읽어주셔서 감사합니다~

+ Recent posts