본문 바로가기
Computer Science/AL, ML

[CNN] Model Understand

by Gofo 2022. 6. 16.

Visualize Filter

1st Layer의 Filter Visualization

CNN의 filter를 시각화하더라도 필터 자체의 의미를 알기는 어렵다.

따라서 feature map을 visualization을 하는 것이 좋다.

 

Last Layer의 Filter Visualization

CNN의 lst layer는 주로 FC(Fully Connected) layer이다.

많은 이미지에 대해 적용시키면 많은 feature vector가 뽑혀져 나온다.

 

kNN

Last layer로부터 나온 featuer vector를 시각화해서 pixel space에서의 nearest neighbor 끼리 묶으면 제법 유사한 feature를 지닌 그림이 묶이는 것을 확인할 수 있다.

 

Dimension Reduction

PCA(Principla Component Analysis)를 이용해서 4096개 차원을 2개 차원으로 줄일 수 있다.

이 때 최대한 많은 정보를 유지하면서 차원을 줄이는 것이 좋다.

 

차원을 줄이면 비슷한 위치에 뭉쳐있는 벡터들은 비슷한 속성을 갖는 것을 확인할 수 있다.

즉 비슷한 이미지들은 같은 cluster로 분류됨을 볼 수 있다.

 


Saliency : Which Pixel Matter

어떤 픽셀이 결과에 큰 영향을 미치는지 알기 위한 방법이다.

 

via Occlusion

이미지를 CNN에 넣기 전에 일부를 마스킹하여 픽셀을 가림으로써 어떤 픽셀이 중요한지 확인할 수 있다.

각 부분을 마스킹 했을 때 결과에 얼마나 변화가 일어나는지를 보면 그 픽셀이 중요한지를 알 수 있다.

즉, 마스킹 했을 때 결과가 크게 변하는 픽셀은 중요한 픽셀인 것이다.

 

이슈

마스크의 크기나 모양을 어떻게 지정해야하는지에 대한 이슈가 존재한다.

 

예시

이를 heatmap으로 그려보면 다음과 같이 된다.

색이 진할 수록 중요한 픽셀임을 의미한다.

 

via Backprop

Input image를 변수로 생각하고 input image가 바뀔 때 loss의 변화를 관찰한다.

즉 input image에 대한 gradient를 확인하는 셈이다.

 

Gradient가 큰 부분이 중요한 픽셀임을 의미한다.

중요한 픽셀이 오브젝트의 위치와 어느정도 일치한다.

 

이 방법은 마스크의 모양이나 크기에 대한 이슈가 존재하지 않는다.

 

예시

Gradient가 큰 부분은 하얀색으로 찍힌다.

 


Gradient Ascent

어떤 입력 이미지가 들어와야 모델이 잘 동작하는지를 알기 위한 방법이다.

이 방법은 사이즈가 큰 네트워크를 이해하는데 도움을 준다.

 

방법

입력 이미지를 변수로 둔다.

다만 saliency via backprop과 달리 원본 입력 이미지를 주지 않고 0의 값을 주어 수행한다.

 

입력 이미지 : $I* = argmax _I f(I) + R(I)$

* $f(I)$ : neuron value

* $R(I)$ : natural image regularizer

 

주로 L2 norm을 이용한다. → $I* = argmax_I S_c(I) - \lambda ||I||^2 _2$

 

  1. initial image로 0을 입력한다.
  2. forwarding 과정을 통해 현재 score를 계산한다.
  3. Backpropagation을 통해 이미지 픽셀에 대한 gradient를 계산한다.
    • Gradient descent가 아니라 score를 max로 하는 입력 이미지를 찾는다.
  4. 이미지의 값을 update한다.
  5. 2-4 과정을 반복한다.

 

 

 

 

 

댓글