모플로 2021. 9. 13. 15:28
반응형

CNN은 blackbox이기 때문에 왜 학습이 잘 안되는지 보기가 힘들다.
CNN내부를 보고 시각화 한다는 것은 debugging tools를 갖는것과 같은의미다

Visualizing CNN

1-1. ZFNet

ZFNet은 2013년 imagenet 대회에서 우승함으로 cnn을 시각화하는것이 눈을 호강하기 위함이 아닌 실질적으로 유의미한 작업이라고 판별받음

1-2. Filter weight visualization - Low level feature

  • 2차원부터는 필터수가 많아져서 사람이 보기 힘들다
  • visualization을 하는것은 사람의 눈으로 보는거기때문에 뒷쪽 레이어는더 추상적합성이된다.

1-3. visualization type

  • 크게 왼쪽으로 이동하는건 모델에대하여 분석, 오른쪽으로 이동하는건 모델의 결과물에 대하여 분석 하는 방법이있다.
  • 왼쪽으로

Analysis of model behaviors

2-1. Embedding feature analysis - High level feature

1) Nearest neighbors(NN) in feature space를 활용

  • 쿼리가 주어지면 쿼리영상과 유사한 이웃 영상을 찾아준다.

2) Dimensionality reduction

  • 고차원 space에 있는 vector를 차원축소를 사용한다

t-SNE - High level feature

  • 숫자 데이터에대한 클래스를 보면 8과 3과 5가 유사하게 생겼기 때문에 feature space에서도 유사하게 보고있구나를 예상가능

Layer Activation - Mid, High level feature

  • Alexnet의 conv5에 있는 138번째 channel(hidden-node)을 보고 강조를 했더니 얼굴을 나타내는 필터임을 알 수 있다
  • 53번째의 channel은 계단을 찾는 필터임을 알 수 있다.

Maximally activating patches - Mid level feature

  • hidden node의 한 채널에서 가장 큰값의 주변을 patch해서 확인
  • 동그란 코에대한 색에대한 패턴,
  • 분석하고자 하는 특정 layer를 하나 정한다
    • ex) conv5 layer 중의 14/256 의 layer
  • 예제 데이터를 backbone 네트워크에 넣어서 각 layer의 activation을 저장한다
  • 해당 layer에서 가장 큰값을 갖는 위치를 파악하고, 그 위치에 오기전의 첫 입력 domain(이미지)에서 파악된 위치의 receptive fields에 대한 patch를 뜯어온다

Class Visualization - Last level feature

  • 각 클래스를 판단할때 이 네트워크는 어떤 모습을 상상하고있구나 라는 생각이 가능
  • 최종결론을 보고 CNN에 대한 해석을 내놓는다.
  • 위의 값은추출하는 방법은 최적화를 통해서 찾아야한다.
  • loss를 만들어준다
    • 두개의 loss를 합성한다.
    • \begin{equation} I^{*}=\arg \max f(I)-\operatorname{Reg}(I) \end{equation}
    • argmax 부분
      • I는 입력이고 f는 CNN모델
      • ex) 강아지 클래스에대한 스코어를 출력하는 부분만 고려해서 maximize
      • 랜덤한 이미지를 마구 넣으면 클래스 스코어가 낮게 나올텐데 이 값이 높게나오는 I를 찾는과정
    • Regularization term
      • 앞부분 argmax만 사용하면 영상이 아닌 부분도 찾게된다 (0255 or norm된 01 의 값이아닌값)
      • 그렇기때문에 Reg term을 추가한다
      • 각 픽셀의 제곱의 sum이 0이될수록 유리하다.
      • 람다를 곱해서 값을 컨트롤한다.
    • Gradient Ascent를 사용한다, 부호만 다르고 같다.
  • Gradient ascent - Image synthesis
    • 임의의 영상(random init or blank)을 분석하고자하는 cnn모델에 넣어준다
    • backpropagation을 통해 입력이 어떻게 변해야 target score가 높아지는지 학습하고 input image를 업데이트
    • 두번째 부터는 임의의 영상이 아닌 updated된 input image를 사용
    • 위의 과정들을 여러번 반복

Model decision explanation

  • 모델이 특정 입력을 봤을때 어떤 각도로 봤는지에 대한 해석

3-1. Saliency test

1) Occulusion map

  • A라는 map을 넣었을때 elephant라고 말할 확률
  • map을 어느 위치에 넣느냐에 따라 값이 바뀐다
  • 검은색 부분은 연관성이 높고, 밝은 부분은 연관성이 낮다

2) via Backpropagation

  • 위의 graident ascent를 이용한 몽환적인 이미지를 확인한것과 유사하다
  • 랜덤이미지가 아니라 특정 이미지를 classification해보고 최종 결론이 나온 class에 결정적으로 영향이 미친부분에 heatmap표시
  • input에서 어떤 부분이 민감한지를 알 수 있다.
  • 현재 데이터가 어떻게 해석되는지를 볼 수 있다.

과정

  • 입력 영상을 넣어서 class score를 얻는다.
  • backpropagation을 입력 도메인(이미지)까지 쭉 한다.
  • 입력부분의 흰 영역이 많이 바껴야 score가 바뀐다는 것을 의미
  • 음수 양수보다는 크기가 더 중요해서 절대값을 사용한다.
  • 이 과정을 반복한다

3-2. based Saliency

1) Rectified unit (backward pass)

  • cnn을 할 때에 relu를 많이 사용해서 relu를 기준으로보면 음수는 무조건 0 으로 대체한다
  • forward연산할때 음수 위치값을 기억해두고 backward할 때 그 부분을 0으로 대체한다

이런 deconv의 방식과 forward의 위치를 저장해놨다가 backward할때 해당 위치값을 0으로 만드는 방식에서 새로운 아이디어를 만들어내게된다.

올라갈때와 내려갈때의 값 모두 0으로 만든다 이 방식을 Guided Backprop이라고한다.
확인이 가장 잘 된다

3-3 Class Activation mapping (CAM)

1) CAM

  • 유명하고 가장 많이 사용되는 방법
  • heatmap을 그려주고 이를 잘 활용하면 boundingbox도 생성가능

  • FCLayer를 하기 전에 GAP(GlobalAveragePooling)을 먼저 통과한다.
  • CAM architecture를 갖는 모델을 다시 학습한다.
  • 재학습하기 때문에 성능도 변한다. (떨어질 수 있다)
  • GoogleNet 경우에는 마지막이 GAP와 1개의FC layer가 있으므로 변형하지 않고 바로 사용이 가능하다.

2) Grad-CAM

  • CNN이기만 하면 뒷부분이 얼마나 복잡하던지 상관없다
  • 모든 아키텍처가 이렇게 할 수 없기 때문에 구조변경도없고, 재학습도없이 사용할 수 있는 Grad-CAM이 개발됨
  • 어느 부분을 보고 강아지라고, 고양이라고 예측했는지 알기 편하다.
    알파는 weight를 나타냄

Guided Grad CAM

  • Guided backprop의 sharp한 부분과 Grad-CAM을 곱해서 핵심부분을 더 sharp하게 visualization해준다.

SCOUTER

  • 최근에는 7을보고 왜 1이 아닌지 2가 아닌지에대한 비교대조 가능한 해석이 됨

ConClusion

GAN dissection

  • GAN의 어떤 hidden node가 어떤 역할을 하는지 어떤 부분에 기여하는지에 대한 파악도가능하다.
  • 아래의경우 door 생성에 대한 히든노드를 찾아놨다면 특정 영역을 마스킹해서 문을 만들게한다.
  • 유저가 컨트롤할 수 있는 GAN을 만들 수 있다.

해석가능하면 응용도가능하다

반응형