Deep Learning

Deep Learning - 훈련된 CNN의 중간층 활성화 시각화하기

electronicprogrammer 2020. 10. 10. 01:21

데이터 출처 : https://www.kaggle.com/puneet6060/intel-image-classification/notebooks

 

Intel Image Classification

Image Scene Classification of Multiclass

www.kaggle.com

ipynb file : github.com/sangHa0411/DataScience/blob/main/Intel%20Multi%20Image%20Classification.ipynb

 

sangHa0411/DataScience

Contribute to sangHa0411/DataScience development by creating an account on GitHub.

github.com

 

이전 단계 포스팅 주소 : eletronicprogrammer.tistory.com/29 

 

Deep Learning - Multi Image Classification 위한 CNN 설계하기

데이터 출처 : https://www.kaggle.com/puneet6060/intel-image-classification/notebooks Intel Image Classification Image Scene Classification of Multiclass www.kaggle.com ipynb file : github.com/sangHa..

electronicprogrammers.com

 

먼저 간략하게 이전 포스팅에 대한 결과를 정리하겠습니다.

 

이전 포스팅에서는 Multi Image Classification 문제를 해결하기 위해서 CNN을 직접 설계해보고 훈련을 해보았습니다.

이제 이 훈련된 CNN에서의 Convolution Layer의 중간층의 활성화를 시각화해보겠습니다.

 

먼저 모델의 정보를 살펴보겠습니다.

제가 설계한 CNN은  Convolution Layer + Pooling Layer 가 총 4번 반복되고 이게 평탄화 과정을 거쳐서 Fully Connected Layer가 연결됩니다.

CNN의 일반적인 구성은 아래와 같습니다.,

저희는 앞서 말씀드린대로 Convolution Layer + RELU + POOLING이 총 4번 반복됩니다.

 

이번 포스팅의 목표는 이 Convolution Layer & Pooling Layer 의 출력을 이미지로써 확인해보는 것입니다.

 

먼저 훈련 때는 사용하지 않은 사진을 한 장 불러옵니다.

 

이제 위 이미지를 CNN 모델에 입력으로 넣기 위해서 Shape을 변경해주고 전처리를 해줍니다.

 

그리고 저희가 설계한 모델에 대한 정보를 살펴보겠습니다.

전체 Layer의 갯수는 12개 입니다.

 

여기서 제가 설계한 모델은 Convolution Layer + Pooling Layer이 총 4번 반복되므로 앞에 8개의 Layer에 대해서만 분석할 것입니다.

먼저 학습한 모델에서 앞의 8개의 Layer만을 가져와서 리스트를 만듭니다.

 

이제 앞에서 가져온 Random Image의 중간층의 결과를 가져오기 위해 필요한 도구들을 불러옵니다.

제가 설계한 CNN의 입력은 (128 , 128 , 3)이므로 이를 입력 인자로 해서 Input을 만듭니다.

그리고 이 입력을 통과시키고 얻은 출력 결과를 계속 다음 입력에 넣으면서 각 Layer의 출력 결과를 리스트에 저장합니다.

 

이제 입력과 출력이 정해졌으니 이를 통해서 Model을 만듭니다.

마지막으로 앞에서 가져온 랜덤 이미지를 이 Model의 입력해서 출력결과를 얻습니다.

 

출력의 형태를 확인합니다.

이제 각 출력을 확인할 차례입니다.

 

확인할 방법은 각 Layer의 출력의 모든 Channel의 이미지를 가지런히 이어 붙인여서 하나의 이미지로 확인할 것입니다.

위 함수는 출력의 리스트와 인덱스를 입력 받으면 해당 인덱스의 출력 결과를 확인하기 위한 함수입니다.

여기서 저는 채널의 수를 64 , 64 , 128 , 128로 설정하였으니 이는 열의 수를 16으로 지정하고, 행을 각 채널의 수에 16을 나눈 수로 설정하였습니다.

 

즉 정리하면 채널이 64개이면

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

등으로 구성이 되어있는 것입니다.

 

이제 아래의 랜덤 이미지의 CNN 중간층 활성화를 시각화해보겠습니다.

 

첫 번째 Convolution Layer

첫 번째 Pooling Layer

 

두 번째 Convolution Layer

두 번째 Pooling Layer

 

세 번째 Convolution Layer

세 번째 Pooling Layer

 

네 번째 Convolution Layer

네 번째 Pooling Layer

 

초반에는 에지와 같은 구체적인 것을 감지하는 것 같다가 후반으로 갈수록 더 추상적으로 되고 시각적으로 어떤 것을 활성화하는지 이해하기 힘들어집니다. 

이는 높은 층의 활성화는 특정 입력에 관한 시각적인 정보가 줄어들고 타깃에 대한 정보가 점점 더 증가하는 것을 의미합니다. 따라서 반복적인 변환을 통해서 관계업는 정보를 걸러내고 유용한 정보만 강조되고 개선될 수 있도록 되는 것입니다.

 

참고 자료 : www.yes24.com/Product/Goods/65050162

 

케라스 창시자에게 배우는 딥러닝

단어 하나, 코드 한 줄 버릴 것이 없다!창시자의 철학까지 담은 딥러닝 입문서케라스 창시자이자 구글 딥러닝 연구원인 저자는 ‘인공 지능의 민주화’를 강조한다. 이 책 역시 많은 사람에게 ��

www.yes24.com