5. CNN Visualization

5. CNN Visualization

CNN Visualization

코드 내부를 보듯이 CNN의 내부를 살펴보는 과정으로써, 디버깅과 유사한점이 많음

다음과 같은 부분을 중심으로 살펴볼 수 있음

1. CNN의 Blackbox 부분이 어떻게 생겼는지

2. 왜 성능이 잘나오는지

3. 어떻게 하면 성능을 더 높일 수 있는지

Visualization을 시도하여 적용한 연구 - ZFNet (ImageNet Challenge 2013)

CNN의 연산을 반대로한 Deconvolution을 적용하여 Visualization을 시도한 연구

Deconvolution을 통해 Low level feature은 방향성이있는 선 또는 동그란 블럭과 같이 영상처리 필터와 비슷한 형태를 가지고 많이 분포함을 알 수 있음

Middle level feature에 걸쳐 High level feature로 갈수록 더 의미가 있는 표현을 학습함

ZF-Net은 Deconvolution된 결과를 눈으로 확인해가며 CNN의 튜닝을 진행한 네트워크임

Neural network visualization을 위한 방법

Neural network visualization을 위한 방법

모델 자체의 특성을 분석하는데 강점을 둔 방법들(Analysis of model behaviors)과 하나의 입력데이터로부터 모델이 어떤 결론을 내었을 때, 어째서 그런 결론을 내게 되었는지 분석하는 방법(Model decision explanation)으로 나뉨

Analysis of model behaviors (방법 별로 그림 하나씩 추가할 것)

1. Filter Visualization

가장 간단한 방법으로 filter를 visualization으로 하는 방법

하지만 뒤쪽 레이어는 차원의 수가 높기 때문에 사람이 직관적으로 알아볼 수 있는 visualization 형태가 나오지 않음

뒤쪽 레이어는 앞쪽 레이어의 필터들과 합성이되어서 더 추상적이되므로 단독으로 visualization 하는 것에 의미가 없음

따라서, 전체적인 뉴럴네트워크를 해결하기 위해 더 복잡한 방법들이 필요로 하게됨

2. Embedding feature analysis - 1. Nearest neighbors in a feature space (High level)

High level layer를 통과하여 나온 Feature 들을 Embedding space에 저장한 후, Nearest neighbors를 이용하여 데이터를 분석하는 방법

Nearest neighbors in a feature space

순서

데이터들을 FC layer 이전까지, 즉 High level layer를 통과시켜 나온 feature들을 embedding space에 저장을 해놓음 우리가 테스트하고 싶은 데이터를 High level layer를 통과시키고 나온 feature를 embedding space에 매칭 이 후 Nearest neighbors 방법을 이용하여 테스트한 데이터와 가까운 거리의 embedding된 데이터들을 찾아 return 이를 이용하여 주변 데이터를 분석

의미론적으로 비슷한 이미지끼리 잘 클러스터된 것도 확인할 수 있음 (예시 이미지의 빨간색)

물론, 심플하게 비슷 픽셀별로 비교를하여 찾을 수도 있지만, 위치와 다른포즈를 가진 사진을 보임으로써 물체의 위치 변화에 강인하게 컨셉을 잘 학습했는지 확인할 수 있음(예시 이미지의 파란색)

하지만, 이렇게 검색된 예제를 통해서 분석하는 방법은 전체적인 그림을 파악하기 어려움

2. Embedding feature analysis - 2 Dimensionality reduction (High level)

백본 네트워크를 활용하여 특징을 추출하게되면 너무 고차원이어서 해석하기 힘든 문제가 있음

따라서, 고차원이 벡터를 저차원으로 차원축소를 이용하여 눈으로 쉽게 볼 수 있는 분포를 얻어내는 방법

대표적인 방법으로 t-SNE라는 방법이 있음

※ t-SNE란 무엇인가 ??

비슷한 특징끼리는 분포가 가깝도록 표현됨 (ex. mnist 분포를 비교한다하면 3, 8, 5)

3. Activation investigation - 1 Layer activation (Mid, High level)

Layer의 activation을 분석함으로써 모델의 특성을 파악하는 방법

각 activation의 channel이 CNN에서 히든노드로 볼 수 있기 때문에 이를 이용함

특정 convolution layer의 특정 channel을 적당한 값으로 thresholding하고 masking 이미지로 만들어 원래의 영상에 overlay를 함으로써 어느 부분을 비추고 있는지를 확인하는 방법임

3. Activation investigation - 2 Maximally activating patches (Patch acquisition) (Mid level)

Hidden nodes에서 채널 중 가장 큰 값을 가지고 있는 근방의 패치를 뜯어 확인하는 방법

각 패치를 살펴보면 비슷한 형태를 찾는 것을 볼 수 있음

큰 그림을 보기보다는 국부적인 부분만 보기 때문에 Mid level 분석에 적당함

순서

특정 레이어의 채널을 선택 예제 데이터를 넣음으로써 특정한 레이어의 activation을 저장 저장된 해당 채널에 activation 값 중 가장 큰 값을 갖는 위치를 파악하고 그 위치로 부터 입력 도메인의 receptive field를 뜯어옴(patch) 뜯어온 패치를 통해 분석을 진행

3. Activation investigation - 3 Class visualization

예제 데이터를 사용하지 않고 네트워크가 기억하고 있는 이미지가 어떤 것인지 분석하는 방법

Gradient decent loss를 구하고 최소화 하는 방법과 마찬가지로 최적화를 통해 영상을 학습하도록 만듦

※ I = Input, f = CNN(한 클래스 스코어)

앞의 항 앞에 항은 인풋이 CNN 모델을 거쳐 출력된 클래스 스코어를 I를 변경하여 Maximize함을 의미 즉, 랜덤영상을 넣었을 때, 클래스 스코어가 낮을 텐데 이를 높이는 입력영상 I를 찾으라는 것을 의미함

뒷항 앞 항의 스코어를 높이는 영상을 찾다보면 더 이상 영상이 아닌 것들도 찾게될 것임 ( 보통 영상은 0~ 255 또는 Normalization하여 0 ~1임, 하지만 너무 큰 값이 나올 수 도 있음 ) 이를 막고 이해할 수 있는 영상을 유도하기 위해 뒤에 항 Regularization을 추가함 간단하게 구현하면, 입력픽셀의 L2 Norm에 반영비율 람다를 곱하여 적용할 수 있음

이전 Loss를 구할 땐 error를 최소화하는 방법인데, 여기선 최대화(argmax)하는 방법이므로 Gradient ascent임

순서

임의의 영상(회색 노이즈 등 무상관)으로 분석하고자 하는 CNN 모델에 입력으로 넣고 관심 class score를 추출하게 됨 back propoagation을 통해 입력까지 gradient를 구함 입력이 어떻게 변해야지 타겟 클래스의 스코어가 높아지는지 찾음 타겟 스코어가 높아지는 방향으로 인풋 이미지를 업데이트 1~4 과정을 반복

초깃값 설정(임의의 영상 설정)에 따라 다양한 결과를 얻을 수 있음

Model decision explanation

1. Saliency test - 1 Occlusion map

Saliency test는 영상이 주어졌을 때, 제대로 판정되기 위한 각 영역의 중요도를 추출하는 방법

Network를 확률로 출력하는 모델로 생각

Occulusion map

패치를 이용하여 Occulusion으로 가리고 클래스로 분류할 확률을 확인하여 쉽게 해석할 수 있는 맵으로 기록

1. Saliency test - 2 via Backpropagation

특정 이미지를 Classification을 해보고 최종 Class 분류하는데 결정적인 영향을 미친 부분이 어떤 부분인지 히트맵으로 표시하는 방법

Via back propagation

순서 입력 영상을 넣고 하나의 클래스 스코어를 얻음 입력 도메인까지 Back propagation을 진행 그렇게 얻어진 gradient를 절대값 혹은 제곱을 취하고 이미지 형태로 출력

※ gradient의 크기 자체가 변화량을 보는 것이므로 이를 확인하는 방법임 1~3 과정을 반복하여 누적을 할 수 있음 순서

Class visualization는 임의의 이미지를 넣지만 이 방법은 특정 이미지를 넣음으로써 Data에 의존적인 방법이라고 볼 수 있음

상세과정(ReLu 활용)

Relu 상세적용

Backward 시에 현재의 음수 부분에 ReLU를 적용하지 않고 Foward 부분에서 음수로써 ReLU가 적용된 부분을 가져와 해당 위치에 적용하였음

하지만, deconvolution의 과정에서는 Foward 부분을 가져오는 것이 아닌 현재의 음수 부분을 ReLU 적용

Guided backpropagation

여기서 한발 더 나아가서, Guided backpropagation은 두 개를 섞어서 사용함

각 결과 비교

의미보다는 경험적으로, 결과적으로 더 잘되었다 이해하면 됨

2. Class activation mapping(CAM)

CAM

어떤 부분을 참조해서 어떤 결과가 나왔는지 보기좋은 heatmap으로 표현 가능한 방법

이 방법을 잘 사용하여 threshold를 잘 설정하면 bounding box를 그려서 물체를 탐지할 수 있음

CAM을 적용하기 위한 구조(보라색 묶음 부분)

CAM은 특별한 구조를 갖도록 만들고 다시 학습해야함. (GAP 이용 및 하나의 FC layer)

따라서, 재학습에 따라 성능이 바뀔수도 있음

CAM을 가져오는 부분

적용원리

위 CAM을 적용하기 위한 구조에서 연산들을 살펴보면 모두 선형이기 때문에 순서를 바꿔줄 수 있음

이에 바꿔준 부분(빨간색 네모 부분)은 global average pooling을 적용하기 전으로 공간에 대한 정보가 남아있고, 이를 영상처럼 표시하면 heat map으로 표현 가능함

다른 방법에 비해서 압도적인 성능과 유용함을 지녔을 뿐더러, 어떠한 정보를 주지않았음에도 불구하고 단순한 영상인식기를 학습했는데 위치를 찾을 수 있는 태스크까지 얻어짐(위클리 슈퍼바이즈드 러닝)

※ 위클리 슈퍼바이즈드 러닝이란? Object Detection과 같은 정교한 태스크를 조금도 러프한 영상인식 태스크 같은걸로 간접해결하는 방법을 일컫음

Object Detection과 같은 정교한 태스크를 조금도 러프한 영상인식 태스크 같은걸로 간접해결하는 방법을 일컫음 CAM을 사용하기에 용이한 모델로는 ResNet과 GoogLeNet이 있음

3. Grad-CAM

CAM이 유용하긴하지만 CAM을 이용하기 위해 CAM의 구조로 모든 네트워크를 바꿔줄 순 없음

기존 CAM에서 결합 weight만 모르므로 이 부분만 구하면됨

Grad-CAM

순서 gradient backporpagation해서 saliency map을 구하는 방법을 응용하여, 우리가 원하는 activation map까지만 back propagation을 하고 그렇게 구해진 gradient를 공간축으로 global average pooling을 적용함으로써 각 채널의 gradient 성분의 크기를 구함 위에서 구한 것을 선형결합을 해주는데 이전 CAM과는 다르게 ReLU를 사용하여 양수값만을 사용

추가적인 사용

한발더 나아가서 guided backpropagation의 saliency map과 grad-cam을 방법을 결합(곱)하여 사용할 수 있음

grad-cam은 클래스의 정보가 있지만 rough하고 smooth한 특성을 가짐.

guided backpropagation은 sharp하지만 전반적인 정보를 가지므로 클래스의 구분성이 떨어짐

이 둘을 결합하여 사용할 수 있음

또한, 백본이 CNN이기만하면 사용가능하기 때문에 이 방법은 영상인식 테스크에 국한되지 않음

4. SCOUTER etc..

SCOUTER

최근에는 Grad-CAM을 개선해서 이 영상이 왜 다른 클래스가 아닌지를 비교대조할 수 있게끔까지 발전함(SCOUTER)

어떤 히든노드가 물체의 어떤 부분을 해석하는데 공헌하는지 해석이 가능하면 응용도 가능함 (ex. User가 컨트롤할 수 있는 GAN)

출처

네이버 부스트캠프

from http://14blacktea.tistory.com/123 by ccl(A) rewrite - 2021-09-17 01:26:46