0) CNN Visualization
- 개요
지금 까지 배운 CNN 기반 Network는 학습가능한 Conv와 non-linear function이 연속으로 되어있는 것으로 볼 수 있다. 이러한 학습이 왜 잘 되는지, CNN 내부에서는 어떻게 학습하고 있는지 등을 보기 위해서는 내부를 까봐야한다. 하지만 여러 단계의 weight로 이루어져 있어 복잡한 내부를 이루고 있다(Black Box) 따라서 이러한 Black Box 의 내부를 까봐야하기 때문에 Visualization이 필요하다.
CNN에서 낮은 레벨의 계층에서는 방향성을 가진 선이나 block들이 분포되어 있는 것으로 관찰된다. 또 높아질 수록 의미있는 표현이 학습된다. 첫번째 계층의 Activation visualization을 봐보자.
Alexnet 의 11 x 11 filter이다. 보면 기본적인 operator를 학습하는 것을 알 수 있다. 여기서 왜 첫 번째 계층만 해석하는지에 대해 궁금할 수 있다. 왜냐하면 계층이 높아질 수록 채널이 깊어지기 때문이다. 채널이 깊어진다는 뜻은 쉽게 visualization하기 힘들다는 것을 말한다. 추상적으로 feature를 학습하기 때문이다.
이러한 Visualization에는 크게 2가지 관점이 있다.
- 모델 자체의 특성에 초점을 맞춘 관점
- 특정 data를 모델이 어떻게 바라보는지에 초점을 맞춘 관점
위에서 보았던 filter visualization은 model behavior에 초점으 맞춘 방법이다. 이제 각각의 관점에서의 Visualization에 대해 살펴보자.
2) Analysis of model behaviors
먼저 High level feature 이후에 나온 feature를 분석하는 방법에 대해 알아보자.
2.1. NN(Nearest neighbor)
이 방법은 먼저 미리 학습된 네트워크를 준비한다. 그 후 input으로 data를 넣어주어 특징을 DB에 저장한다. 이 때 이러한feature 들은 고차원 공간상에 존재한다. 그리고 Query image가 들어오면 이미지를 빼주어 절댓값을 구하던지 같은 방법을 통해 가장 가까운 feature를 보여준다.
2.1. Dimensionality reduction
2번 째 방법은 차원을 줄여주는 방법이다. 위의 feature들이 고차원에 있어 해석하기가 힘들었다. 이 때 차원을 내린다면 우리가 해석하기 편해질 것 이다. 차원을 내리는데 여러가지 방법이 있는데 그 중 하나가 t-SNE라는 방법이다.
2.2 Layer activation
여기서부터는 중간 layer를 해석하는 방법이다. Activation을 이용한 1번째 분석방법이다. 이것을 통해 중간 중간에 hidden unit 들이 각각 간단한 것들을 detection한 후 조합을 통해 인식한다는 해석이 가능하다.
2.2 - 1 Maximally activating patches
activation을 이용한 분석방법 2번째으로 patch를 뜯어서 사용한다. 각 layer에서 하는 일을 판단하기 위해 hidden node에서 가장 높은값 갖는 patch를 뜯는다. 이과정을 자세히 봐보자.
먼저 뜯어보고 싶은 layer를 정한다. 위의 사진에서는 5번째layer의 14번째 channel을 선택했다.
그 후 예제 data를 backbone data에 넣어서 각 layer의 activation을 뽑느다. 그 후 14번째 channel 의 activation을 저장한다. 그 후 가장 큰 값의 위치를 파악한 후 입력 도메인의 receptive field를 계산 후 해당 patch를 뜯어온다. 그러면 해당 layer가 어떤 feature를 분류하는지 알 수 있게 된다.
2.2 - 2 Class visualization
지금까지는 activation 분석하기위해 data를 사용하였다. 이번에는 data를 사용하지 않고 network가 기억하고 있는 이미지가 무엇인지 파악한다. 즉 각 class를 판단할 때 이 network는 어떤 모습을 상상하고 있을지 보는것이다.
이 네트워크가 분류할 때 생각하는 것의 이미지이다. 강아지를 해석 할때 옆에 아이도 같이 있는 모습을 상상하는 것을 볼수있고 이는 편향을 가진다는 해석을 해볼 수 있다. 새 또한 주변의 나무까지 같이 예상하는 것을 알 수 있다.
그렇다면 위와 같은 그림을 어케 추출할 수 있을 까?? 간단한 수식으로는 불가능하고 network를 학습시키듯 loss를 정해 최적화하여 찾아나가는 과정을 거친다. 이제 이 과정을 수식으로 알아보자.
수식
위와 같이 Loss 를 정의 한다. 먼저 f(I)는 입력 data를 CNN모델에 넣어 나온 하나의 class score라고 볼 수 있다. 뒤에 있는 Regulaization term 은 앞의 값이 만약 0 ~255의 rgb 값이나 정규화한 0 ~ 1값이 넘어가는 곤란한 상황을 처리하기 위한 term 이다. 이 때 값을 최대화 시키기 때문에 이는 Gradient Ascent 라고 불린다. 반대로 - 를 붙여준다면 gradient descent가 된다.
최적화 과정
먼저 이 과정은 중간 분석을 하는 것이 아니라 최종적 결론을 보고 해석을 내놓는다. 그리고 이를 최적화 시키는 과정은 다음과 같다.
먼저 임의의 이미지를 넣어준다. 이것은 data를 넣는 의미가 아니라 그냥 검은색이미지나 회색이미지나 노이즈이미지를 말한다. 그 후 역전파를 통해 input까지 전달한다. 그 후 이미지를 update한다. 이러한 과정을 반복하면 위와 같은 이미지가 나오게 된다.
이 때 앞에서 임의의 이미지를 넣어준다고 했는데 어떤 입력이 들어오느냐에 따라서 적절하게 바뀐 이미지가 나와 다양한 이미지를 얻을 수 있다.
3) Model decision explanation
이제 model이 특정입력을 보았을 때 이 data를 어떤 각도로 바라보고 있는지에 대한 해석방법에 대해 배워보자.
1. Saliency test 1
이 방법은 이미지가 주어졌을 때 영상이 제대로 판정되기 위한 각영역의 중요도를 추출하는 방법이다.
예를 들어 위에서 A로 가려주었을 때 코끼리라고 판별한 확률은 0.34이고, B를 가렸을 때는 이보다 높은 0.88이 나온다. 이 때 알 수 있는 것은 어떤 위치로 가려주느냐에 따라 Score가 달라진 다는 점이다. 이러한 관찰을 활용하여 score의 지도를 만들어준다.
2. Saliency test 2
2번 째 방법은 역전파를 활용하는 방법이다. 전에 역전파를 썼던 class Visualization과 비슷하지만 class Visualization과 달리 임의의 이미지를 넣어주는 것이 아닌 특정이미지를 넣어준다는 것이다.
이 방법은 특정 이미지를 input으로 넣어주어 classification을 진행한 후 최종결론이 나온 class에 결정적으로 영향을 미치는 게 어디인지 heatmap 형식으로 나타내어 준다.
위 이미지의 흰색부분이 분류의 특징이 되었음을 알려준다.
최적화 과정을 알아보자.
1. 먼저 class score를 얻는다.
2. 그 후 역전파를 통해 gradient 를 구해 주어 절댓값을 취하거나 제곱을 취해준다.
-> why? gradient의 크기 자체가 중요한 정보이기 때문이다. gradient가 크다는 것은 input에서 많이 바껴야 score가 바뀌는 것을 의미한다. 따라서 부호보단 절대적인 크기를 중요하게 여긴다.
다시 한번 말하면 이러한 방법은 input이 들어가서 최종출력에서 input의 어떤 부분에 민감한지 알아내는것이다. 즉 data를 넣어주면 data의 어떤 feature를 바탕으로 분류했는지 알 수 있는 것이다.
3. advanced BackPropagation (Guided- backprop)
이제 조금더 심화된 역전파 방법에 대해 알아보자.
보통의 ReLU로 forward pass를 하면 0보다 작은 수는 0으로 된다. 이 때 역전파를 할 때도 이러한 0 마스킹을 이용한다.
하지만 deconvnet은 온 역전파의 gradient에 맞춰 Relu를 적용하여 masking을 해준다.
이 때 이 두방법을 섞어주면 Visualization이 잘된다. 딱히 수학적 의미는 없지만 그렇다고 한다.
4. CAM (Class activaton mapping)
유명하고 가장 많이 사용되는 visual algorithm 이다.
위에서 볼 수 있듯 잘 찝혀진 heatmap 형식으로 표현한다.
이 방법을 어떻게 사용하는지 보자. 이 방법은 conv feature map 에 FC layer에 바로 통과시키지 않는다. 대신 GAP(Global average pooling)을 한번 거치고 FC layer를 통과시킨다. 그리고 이것을 수식으로 표현하면 밑에 처럼 되는데
이 때 CAM term 에서 Gap 을 하기 전이기 때문에 공간정보가 남아있다.
하지만 요러한 방법은 몇가지 단점이 있다.
1. 마지막 layer가 GAP 과 FC layer로 이루어져 있어야한다.
2. Network 구조를 바꾸어야 해서 재학습해야하고, Param 수가 바뀌어 성능이 바뀔 수도 있다.
5. Grad-CAM
그래서 모든 아키텍처에서 구조변경없이 재학습 없이 학습할 수 있도록 해결한것이 Grad-CAM 이다.
기존 pre-train 된 모델을 변경없이 heatmap을 구할 수 있어 꼭 CV에 국한 되지않는다. backbone Netowrk이 CNN이면 적용가능하다.
이러한 grad-CAM의 수식은 전의 CAM에서 Fully Connected layer의 weight를 어떻게 처리할지만 생각해주면 된다.
이 방법은 입력까지 역전파를 보내지 않고 activation map까지만 역전파를 보낸다.
결론
이러한 Visualization을 GAN에도 사용할 수 있는데, 생성모델에서 어떤 hidden node가 물체의 어떤 부분을 담당하는지 알아내면 그부분을 수정해서 이미지를 만들 수 있게 된다.
'AI > CV' 카테고리의 다른 글
Conditional Generative Model (0) | 2023.04.04 |
---|---|
Instance Panoptic Segmentation (0) | 2023.03.31 |
Object Detection (R-CNN, YOLO, SSD, DETR, Transformer) (1) | 2023.03.29 |
Sementic Segmentation(FCN, U-Net, DeepLab) (1) | 2023.03.27 |
Computer Vision 개요 (0) | 2023.03.27 |