지니 코딩일기

[딥러닝/머신러닝] CNN Visualizing & Understanding 본문

Computer Science/딥러닝

[딥러닝/머신러닝] CNN Visualizing & Understanding

zzzl 2023. 6. 10. 01:18

CNN의 Visualizing & Understanding에 대한 강의 내용을 정리해보자.

 

 

목차

1. What's going on inside Convolutional Networks?

2. Which pixels matter

3. Deep dream


 

 

What's going on inside Convolutional Networks?

CNN 안에서는 어떤 작업이 이루어질까?

 

First layer, Intermediate layer, Last layer 각각에서의 feature를 시각화한 것을 살펴보자.

 

첫 단계 - First layer

첫 번째 network의 첫 번째 layer의 output을 visualize한 것

첫 번째 layer에서 하는 것은 convolution1, activation1 ⇒ 할 수 있는 게 많지 않으니까 low level 나온다.

뭘 하고 싶은건지는 아직 알 수 없는 단계

 

 

중간 단계 - intermediate layer

뭘 의미하는지 아직은 잘 모르겠지만, 여러 피쳐 맵들이 있는데, 가운데 초록색 박스 같은 것들을 확대해서 보면, 얼굴에 해당하는 부분이고, 굉장히 밝게 보임

→ 중요한 정보가 있다는 뜻. activation function에서 deactivate된 것과 activate된 것 구분됨

⇒ 중요하지 않은 것은 제거하고 중요한 것만 남기는구나 하는 짐작을 할 수 있음

 

 

마지막 단계 - last layer

가장 마지막 layer를 살펴보자

 

1. Dimension Reduction

 

AlexNet이나 아니더라도 네트워크의 굉장히 뒷부분의 피쳐맵을 가져오면,

100장의 이미지를 넣으면 100개, 500 넣으면 500개의 피쳐가 나올텐데, 그 피쳐를 점으로 찍어볼건데, 피쳐는 dimension이 너무 커서 dimension reduction을 사용하여 중요한 것만 남기고 줄인다.

2차원으로 만들어서 찍어보면, 군집(cluster)이 보인다. 군집은 같은 클래스의 피쳐들이 모인다! ⇒ 이것만 보면, 굉장히 쉽게 분류할 수 있을 것 같은데 → 이 피쳐맵은 굉장히 classification이 잘 된 것의 피쳐맵이다

⇒ 구별이 잘 되는 피쳐맵으로 만든 것이라서 잘 구분되어 보이는 것

⇒ 그림에서는 10개의 군집이 있으므로 10개의 클래스가 있는 것이다

 

Dimension reduction에 사용되는 알고리즘

PCA : 주성분 분석(Principal Component Analysis, PCA)은 가장 널리 사용되는 차원 축소 기법 중 하나로, 원 데이터의 분포를 최대한 보존하면서 고차원 공간의 데이터들을 저차원 공간으로 변환한다.

t-SNE : 높은 차원의 복잡한 데이터를 2차원에 차원 축소하는 방법이다.

 

 

2. Nearest Neighbors

Last layer(4096 dim feature vector)에 Nearest Neighbors를 적용하였다.

 

왼쪽 그림은 학습 전에 pixel space에서 Nearest Neighbors를 적용한 것으로, 비슷한 이미지들을 묶은 것이다. 하지만 개의 이미지를 넣었음에도 그저 흰색 덩어리가 있는 다른 이미지들을 가져오기도 한다.

 

오른쪽 그림은 학습 후에 pixel space가 아니라, feature space(CNN에서 나온 4096-dim feature vectors)에서 L2 Nearst Neighbors를 적용한 것이다. 이를 보면 픽셀 값의 차이가 커도 feature가 비슷하면 비슷한 이미지로 계산한다. 코끼리를 보면 머리의 방향이 달라 픽셀 값의 차이가 매우 다름에도 같은 코끼리로 학습하여 비슷한 feature을 갖는다.

즉, 네트워크가 학습을 통해 이미지의 semantic content features을 잘 포착한 것이다.

 

➡️ 학습을 통해 더 제대로 분류 가능 !

*https://velog.io/@onground/EECS-498-007-598-005-%EA%B0%95%EC%9D%98%EC%A0%95%EB%A6%AC-14%EA%B0%95-Visualizing-and-Understanding 의 설명

 

 

잘 보면 그림이 뭉쳐있다

⇒ 피쳐가 비슷하게 생겼으니까. 서로의 피쳐 간의 거리를 비교해보고, 이미지 space에서 가깝게 위치하도록 하고 본 것.

 

 


 

Which pixels matter 

해당 이미지를 만들기 위해 어떤 pixel/뉴런이 활성화되어야 하는지를 알아보자.

 

Saliency via Occulusion

이미지(input)의 어떤 부분이 분류(Classification)에 큰 영향을 주는지 확인하기 위한 실험이다.

 

Occulusion : 가려짐
Saliency : 중요점 (핵심)

 

코끼리 이미지의 일부분을 masking한 뒤, 네트워크에 통과시키는 실험을 통해 해당 이미지의 어떤 부분이 결과에 영향을 주는지 확인할 수 있다.

 

첫 번째 이미지를 보면, 오른쪽 아래 부분 masking 함 ⇒ 제거해도 코끼리를 제대로 찾을 확률 0.95

두 번째 이미지를 보면, facial part를 masking 함 얼굴 부분이 비어 있으면 코끼리 찾을 확률 0.75로 많이 내려감

⇒ 얼굴 부분이 많이 중요함

 

💡 이미지의 일부를 가렸을 때 네트워크 스코어의 변화가 크게 발생한다면, 가려진 부분이 분류에 아주 중요한 부분이라는 의미

각 부분을 masking 한 결과 확률값으로 heating map을 나타내보면, 붉은 부분이 확률이 낮은 부분이다.

배의 형태, 코끼리의 얼굴, 카트와 나무가 각각 붉게 나타남

 

➡️ 즉, 이것들이 가렸을 때 network score에 영향을 많이 주는 이미지의 중요한 부분이라는 뜻!

 

 

 

Saliency via Backprop

 

이 방법은 입력 이미지의 각 픽셀들에 대해서 예측한 클래스 스코어의 gradient를 계산하는 방법이다. 어떤 픽셀이 개를 분류하는데 있어서 중요한지 알 수 있다.

 

보통 입력 이미지는 변수가 아니고, 상수다 ⇒ 훈련할 때 입력 이미지의 pixel에 대한 gradient는 계산할 필요가 없는데, 계산을 해보면 어떤 이미지들은 gradient값이 크고, 다른 어떤 것들은 작다

⇒ 이때, gradient 값이 크면 더 정확하게 구분할 수 있다

⇒ classification task에서 굉장히 중요한 부분이다 

 

 

이거는 그냥 참고로만 알고 계시면 되는데,

segmentation을 한다는 것은, 이미지에서 내가 원하는 영역을 긁어내는 것인데, Neural Network로 많이 한다.

 

gradient map(Saliency map)을 학습 타겟으로 둔다. ⇒ 이런걸 가지고 학습하면 이정도로 구할 수 있다

 

 


 

Deep Dream

 

지금까지는 이미지를 보고 그런 이미지를 만들기 위해 어떤 pixel/뉴런이 활성화되어야 하는지를 알아봤다.

이번에는 해당 pixel/뉴런을 활성화시키기 위한 synthetic image를 생성해보자는 것! (어떤 이미지여야 하는지 생각해보자는)

 

즉, 그동안 우리는 loss의 최소화를 위해 gradient descent를 사용했다. 하지만, gradient ascent에서는 네트워크 가중치를 전부 고정시키고 gradient ascent를 통해 중간 뉴런 혹은 클래스 스코어를 최대화시키는 이미지의 픽셀들을 만들어낸다. 

➡️ 즉, 가중치를 최적화하는 것이 아니라 뉴런 또는 클래스 스코어가 최대화될 수 있도록 입력 이미지의 픽셀값을 바꿔주는 방법이다.

 

 

gradient ascent를 위해 초기 이미지가 필요한데 이는 zeros, uniform, noise등으로 초기화한다.

1. 그리고 이를 네트워크에 통과시키고 우리가 선택한 뉴런의 스코어를 계산한다.

2. 그리고 이미지의 각 픽셀에 대한 해당 뉴런 스코어의 gradient를 계산하여 back prop을 한다.

3. 스코어를 최대화시키기 위해 이미지 픽셀 자체를 업데이트한다.

 

input이 이렇게 이상한 이미지로 나오고, 이것을 AlexNet에 넣었을 때 가장 적합하다고 나온다(score높게.) 이런 이미지를 가장 선호한다는 뜻

 

더 좋은 visualization

아직 unclear하다. 중간단계에서 뭐가 나오는지. 하지만, 우리는 그걸 이해하려고 하는 중

 

 

 

 

인터넷 자료 + 학부에서 배운 강의 내용을 정리한 자료입니다.