해당 글은 CS231n 12강 Visualization and Understanding 의 내용을 공부하고 재구성하여 정리한 글입니다.

Visualization and Understanding (1)과 이어지는 포스팅입니다!


특징시각화

이번에 알아볼 사항은 다시 처음으로 돌아가서,

이미지를 넣었을때 이 이미지에서 CNN이 도대체 무엇을 찾았길래 답을 도출할 수 있을까?

를 알아보기 위한 기법들에 대해 설명해 드리겠습니다.

 

Occulusion

제일 먼저 나오는 방법은 Occulusion방법 입니다.

CNN에게 이러한 사진을 건네주어 보면, 아마 잘 학습된 CNN은 이 사진을 개라고 판단할 겁니다.

그러면 이사진의 어떤 부분을 보고 CNN은 이 사진을 개라고 판단했을 까요?

 

이것을 알아내기 위해 사람들은 한가지 실험을 하게 됩니다.

바로 이미지의 일부를 조금씩 가려보면서

이미지를 가린 패치의 위치에 따른 네트워크 예측 확률의 변화를 시각화 해보는 실험입니다.

 

이미지를 일부 가렸는데 네트워크 스코어의 변화가 크게 발생하면

가려진 바로 그 부분이 분류를 결정 짓는데 아주 중요한 부분이었다는 사실을 짐작할 수 있습니다.

이러한 결과들로 보아 오른쪽 예시에서는 강아지의 얼굴부분이 강아지라고 분류하는것을 결정 짓는데

아주 중요한 부분이었다는 사실을 짐작할 수 있게 됩니다.

 

Maximally Activating Patches

이제 Maximally Activating Patches 방법에 대해 알아보겠습니다.

어떤 이미지가 각 뉴런의 활성화를 최대화 시키는지를 시각화 해 보는 방법입니다.

 

Gradient

이를 위해서 Gradient를 사용하는 방법이 있습니다.

먼저 입력 이미지에 대한 클래스 스코어에 대해서 Gradient값을 구해 Saliency Map을 구하게 됩니다.

이러한 Saliency Map을 구하면 클래스 스코어가 입력 이미지의 어떤부분에 영향을 끼쳤는지를 알 수 있게 됩니다.

위쪽 수식에서 X는 이미지이고 Y_c는 Prediction된 값 입니다.

 

Intermediate Feature via (Guided) Backpropagation

이렇게 Gradient를 구하여 Prediction값에서 뿐만 아니라 네트워크 중간에서도 Saliency Map을 얻을 수 있습니다.

이때 Guided backpropagation을 사용하게 되면 조금 더 깨끗한 이미지를 얻을 수 있다고 합니다.

Guided backpropagation을 아주 간단하게 설명하면 양수의 Gradient값만을 사용하여 최적화 하는 기법이라고 합니다.

 

 

그렇다면...

이제 어떤 이미지가 뉴런을 활성화 시키느냐가 아니라

반대로 저 뉴런을 활성화 시키는 일반적인 이미지가 있을까?라는 궁금증을 저희는 가질 수 있습니다.

즉 저 점수가 최대화 되는 모범답안, 모범 이미지는 무엇일까? 라는 질문입니다.

 

Gradient Ascent

여기서 나온 방법은 Gradient Ascent입니다.

이 방법은 먼저 초기화된 초기 이미지가 필요한데, 보통 Zeros, Uniform, Noise 등으로 초기화 합니다.

Weight값을 고정시키고 원하는 뉴런 스코어의 그레디언트를 계산해서 back propagation을 수행합니다.

여기서 Gradient Ascent를 이용해서 스코어를 최대화 하기 위해 이미지 픽셀 자체를 업데이트 합니다.

이때 Regularizer가 필요한데, 여기서는 L2 norm을 계산해서 더해줍니다.

왜 L2 norm을 쓸까? => 큰 의미는 없고 초창기에 나와 관습적으로 쓰이는 Regularizer라고 합니다.

 

그래서 초기화 된 이미지에 대해서 Gradient Ascent를 진행하게 된다면 다음과 같은 이미지를 얻을 수 있습니다.

덤벨의 사진에서는 여러 덤벨의 모양이,

컵 사진에서는 여러 컵의 사진 등이 보입니다.

이 사진이 의미하는 바는 요렇게 생긴 이미지가 덤벨의 점수를 얻기 위한 모범 답안임을 뜻합니다.

더보기
덤벨

만약 요렇게 생긴 사진이 들어왔다면 덤벨의 스코어가 커져 덤벨로 예측될 확률이 크겠죠?

달마시안

달마시안도 흰색, 검정색 패턴을 가진 강아지 형상이 보입니다.

평균적으로 저런 색상, 저런형태의 이미지가 들어온다면 달마시안으로 예측될 확률이 크다는 것을 짐작할 수 있습니다.

 

즉 네트워크가 클래스에 대해 가지는 대략적인 심상같은 느낌입니다.

 

이미지를 더 잘 시각화 하기

시각화를 하는 이유중 하나가 저희가 해당 네트워크를 더 잘 이해하기 위함이라고 했습니다.

그러니 시각화가 저희가 이해하기 쉽게 표현되면 더 좋겠죠?

그래서 이렇게 시각화 했던 이미지를 최적화 하는 기법들이 나오게 됩니다.

1 주기적으로 가우시안 블러도 적용하고,

2 Gradient값이 작은 값도 모두 0으로 만들고

3 생성된 이미지를 더 좋은 특성을 가진 이미지 집합으로 주기적으로 매핑시키는 방법입니다.

자세히 사진을 보면 위쪽에서 Gradient Ascent한 것과 다르게

색상도 형태도 좀 더 플라밍고 스러운 것을 볼 수 있습니다.

플라밍고에 대한 4가지 그리드는 각각 서로 다르게 초기화 된 이미지로 만들어진 사진입니다. (Zeros, Uniform, Noise....)

 

Fooling Images

마지막으로 이 Gradient Ascent를 이용해서 Fooling Image를 만들어 낼 수 있습니다.

해석을 해보자면 네트워크를 속이는 이미지를 만드는 것인데요!

우선 사진들을 보면 좌는 코끼리 입니다. 그런데 저희는 이 코끼리를 코알라라고 주장하고 싶어진 겁니다.

그래서 앞서 말했던 Gradient Ascent기법을 사용해서 해당 코끼리를 코알라로 분류 하게끔

픽셀들을 아주 미세하게 조작을 해줍니다. 저희 눈엔 여전히 코끼리지만 CNN은 이 코끼리를 코알라라고 합니다.

 


 

다음 글(Visualization and Understanding (3))에서는

시각화로 하는 다양한 실험들에 대한 내용에 대해서 설명해 드리겠습니다!

 

[CS231n] 12. Visualization and Understanding (3)

해당 글은 CS231n 12강 Visualization and Understanding 의 내용을 공부하고 재구성하여 정리한 글입니다. 시각화로 재밌는 실험해보기 앞선 내용들을 바탕으로 재밌는 일들을 할 수 있습니다! Deep Dream Deep.

kimyo-s.tistory.com

감사합니다 :D

+ Recent posts