시각화로 컨볼루션 네트워크 이해

2021. 5. 15. 16:30IT/AI

728x90
반응형

시각화로 컨볼루션 네트워크 이해

컨볼루션 신경망 이해

지금까지 우리는 CNN이 이미지 분류에서 정말 잘 수행하는 것을 보았습니다. 그러나 이 시점에서 우리는 이러한 CNN이 실제로 어떻게 작동하는지 실제로 알지 못합니다. CNN이 실제로 무엇을 배우고 있는지 이해할 수 있다면 원칙적으로 더 개선 할 수 있어야합니다. CNN을 이해하는 한 가지 방법은 컨볼루션 레이어를 시각화하는 것입니다. 컨볼 루션 레이어를 시각화하는 방법에 대해 자세히 알아 보려면 아래 링크를 참조하세요.

Imagenet에서 사전 훈련 된 InceptionV3 모델의 컨볼 루션 계층 출력

컴퓨터 비전 분야는 Convolution Neural Networks가 등장한 이후 엄청난 발전을 이루었 습니다. 이 분야의 놀라운 연구 속도와 웹에서 방대한 양의 이미지 데이터베이스를 사용할 수있게 된 덕분에 지난 몇 년 동안 놀라운 결과를 얻을 수있었습니다. 대규모 컨볼 루션 신경망의 부상은 2012 년 AlexNet 에서 시작 되었습니다. Alex Krizhevsky , Ilya Sutskever , Geoffrey Hinton에 의해 생성 되었으며 ImageNet 대규모 시각 인식 챌린지 에서 우승 한 항목이었습니다.그 해. 그 이후로이 분야의 연구자들을 뒤돌아 보지 않았고, Computer Vision의 다양한 분야에서 얻은 결과는 그 증거입니다. 휴대폰의 얼굴 인식에서 자동차 운전에 이르기까지 CNN의 엄청난 힘은 많은 실제 문제를 해결하는 데 사용되고 있습니다.

그러나 대규모 데이터베이스와 사전 훈련 된 CNN 모델의 광범위한 가용성에도 불구하고, 특히 머신 러닝에 대한 배경 지식이없는 사람들의 경우 대규모 모델이 학습하는 내용과 방법을 정확히 이해하는 것이 때때로 상당히 어려워집니다. 기본 통계 및 확률을 읽는 것은 몇 가지 장애물을 극복하는 데 도움이되지만 Inception 모델과 같은 대규모 컨볼 루션 아키텍처를 디버깅 할 때 많은 사람들이 실패합니다. 대부분의 사람들의 목표는 사전 훈련 된 모델을 일부 이미지 분류 또는 기타 관련 문제에 사용하여 최종 결과를 얻는 것입니다. 그들은 네트워크의 내부 작동에 대해 최소한 신경을 쓰지 않으며, 실제로 네트워크가 학습하는 방법과 내용에 대해 많은 것을 알려주고 실패를 디버깅 할 수 있습니다.

최근 에 François Chollet ( twitter ) 의이 멋진 책 Deep Learning with Python을 발견 했습니다 .

추천된 책

이 책은 딥 러닝 여행을 시작하는 경우 보석입니다. 뛰어난 딥 러닝 라이브러리이며 TensorFlow, MXNET 및 Theano에서 실행되는 Keras를 사용하여 기본 사항과 최첨단 및 최신 사건을 설명하고 딥 러닝의 결과를 얻습니다. 이 책을 읽고 배운 많은 새로운 것 중 가장 관심을 끄는 것은 conv-net에 대해 학습하기 위해 시각화를 사용하는 방법이었습니다. 이 블로그에서는 제가 배운 세 가지 기술과 이를 재현 한 결과를 요약했습니다.

Enter Visualizations(시각화로 들어가기)

기계 학습 모델의 출력을 시각화하는 것은 트리 기반 모델이든 대규모 신경망이든 그 진행 상황을 확인할 수있는 좋은 방법입니다. 심층 네트워크를 훈련하는 동안 대부분의 사람들은 훈련 오류 (정확성)와 검증 오류 (정확성)에만 관심이 있습니다. 이 두 가지 요소를 판단하면 네트워크가 각 시대에서 어떻게 수행되는지에 대한 아이디어를 얻을 수 있지만 Inception과 같은 심층 CNN 네트워크의 경우 시각화 할 수있는 것이 훨씬 더 많아서 네트워크 아키텍처에 대해 배울 수 있습니다.

이 게시물에서는 모델 작업에 대한 더 많은 통찰력을 얻는 데 도움이되는 모델 출력 (중간 및 최종 레이어)을 시각화하는 몇 가지 방법을 보여 드리겠습니다. 저는 Kaggle에서 사용할 수있는 Flower 인식 데이터 세트에 대해 Keras에서 사용할 수있는 InceptionV3 모델 (ImageNet에서 사전 훈련 됨)을 훈련했습니다. Inception 모델에 익숙하지 않은 경우 Inception 아키텍처에 대한 원본 문서를 살펴본 다음 이러한 아키텍처의 이론을 이해하기 위해 InceptionV3 문서 를 살펴 보시기 바랍니다 .

첨부파일

Inception 아키텍처.pdf

 파일 다운로드

첨부파일

InceptionV3 paper.pdf

 파일 다운로드

배치 크기가 32 인 10 에포크 모델을 훈련 시켰으며 각 이미지의 크기는 사전 훈련 된 InceptionV3 모델에 필요한 (299, 299, 3) 모양으로 조정되었습니다. 내 모델은 훈련 손실 0.3195와 검증 손실 0.6377에 도달 할 수있었습니다. 이미지를 늘리기 위해 Keras 내장 ImageDataGenerator 모듈을 사용하여 모델이 너무 빨리 맞지 않도록했습니다. 내 github 저장소 에서 코드를 볼 수 있습니다 .

https://github.com/anktplwl91/visualizing_convnets

 

anktplwl91/visualizing_convnets

This is the code repository for my Medium post "Understanding your Convolution network with Visualizations" - anktplwl91/visualizing_convnets

github.com

중간 계층 활성화 시각화하기

심층 CNN 모델이 입력 이미지를 분류 할 수있는 방법을 이해하려면 중간 레이어의 출력을보고 모델이 입력 이미지를 보는 방법을 이해해야합니다. 그렇게함으로써 우리는 이러한 레이어의 작동에 대해 더 많이 배울 수 있습니다.

예를 들어, 다음은 테스트 세트에서 꽃 이미지가 제공 될 때 훈련 된 InceptionV3 모델의 일부 중간 컨볼 루션 및 해당 활성화 레이어의 출력입니다.

원본 이미지

InceptionV3의 First, Fourth 및 Ninth 컨볼 루션 레이어의 필터

InceptionV3의 First, Fourth 및 Ninth 컨볼 루션 계층에 대한 ReLU 활성화 계층의 필터

위의 그림은 InceptionV3 네트워크에서 각각 몇 개의 중간 컨볼 루션 및 ReLU 계층의 필터를 보여줍니다. 테스트 이미지 중 하나에서 훈련 된 모델을 실행하여 이러한 이미지를 캡처했습니다.

컨볼루션 레이어 필터에서 다른 이미지를 살펴보면 다른 레이어의 다른 필터가 이미지의 다른 부분을 강조하거나 활성화하는 방법을 알 수 있습니다. 일부 필터는 가장자리 감지기로 작동하고 다른 필터는 중앙 부분과 같이 꽃의 특정 영역을 감지하고 다른 필터는 배경 감지기로 작동합니다. 컨볼루션 커널에 의해 캡처 된 패턴이 점점 더 희박 해지기 때문에 시작 레이어에서 컨볼루션 레이어의 이러한 동작을 더 쉽게 볼 수 있습니다. 따라서 이러한 패턴이 이미지에 존재하지 않을 수도 있으므로 캡처되지 않습니다.

해당 컨볼루션 레이어의 ReLU (Rectified Linear Units) 활성화에 도달하면 ReLU(z) = max(0, z)아래 그림과 같이 각 픽셀에 Relu 함수를 적용하기 만하면됩니다 . 따라서 기본적으로 각 픽셀에서 활성화 함수는 모든 음수 값에 대해 0을 입력하거나 0보다 크면 픽셀 값 자체를 입력합니다.

ReLU 기능

이러한 방식으로 서로 다른 컨볼 루션 레이어의 출력을 시각화하면 가장 중요한 점은 네트워크에서 더 깊은 계층은 더 많은 훈련 데이터 특정 기능을 시각화하는 반면, 이전 계층은 가장자리, 질감, 배경과 같은 일반적인 패턴을 시각화하는 경향이 있습니다.등.이 지식은 완전히 다른 데이터 세트에서 사전 훈련 된 네트워크 (이 경우 ImageNet과 같은 다른 데이터 세트에서 사전 훈련 된)의 일부를 훈련하는 전이 학습을 사용할 때 매우 중요합니다. 일반적인 아이디어는 이전 레이어의 가중치를 고정시키는 것입니다. 왜냐하면 그들은 어쨌든 일반적인 특징을 배울 것이기 때문입니다. 그리고 이것이 실제로 당신의 객체를 인식하는 레이어이기 때문에 더 깊은 레이어의 가중치 만 훈련시키는 것입니다.

Convnet 필터 시각화

컨볼루션 네트워크가 이미지에서 무엇을 찾고 있는지 알아 보는 또 다른 방법은 컨볼루션 레이어 필터를 시각화하는 것입니다. 네트워크 계층 필터를 표시하면 각 필터가 응답하는 패턴에 대해 알 수 있습니다. 이는 빈 입력 이미지에서 시작하여 특정 필터의 응답을 최대화하기 위해 convnet의 값에 대해 Gradient Descent를 실행하여 수행 할 수 있습니다.

다음은 Flowers 데이터 세트에서 학습 한 InceptionV3 모델의 몇 가지 패턴입니다.

InceptionV3의 세 번째 컨볼 루션 레이어의 필터

InceptionV3의 8 개 컨볼 루션 레이어의 필터

InceptionV3의 40 번째 컨볼 루션 레이어의 필터

서로 다른 컨볼 루션레이어의 필터 이미지를 자세히 살펴보면 다른 레이어가 실제로 제공된 이미지 데이터에서 학습하려고하는 것이 무엇인지 매우 명확 해집니다. 시작 레이어의 필터에서 발견되는 패턴은 선과 기타 기본 모양으로 구성된 매우 기본적인 것 같습니다. 이는 이전 레이어가 가장자리, 색상 등과 같은 이미지의 기본 기능에 대해 학습한다는 것을 알려줍니다.하지만 네트워크로 더 깊이 들어가면 , 패턴이 더 복잡해지면서 더 깊은 계층이 실제로 훨씬 더 추상적인 정보에 대해 학습하고 있음을 나타내므로 이러한 계층이 특정 이미지가 아닌 클래스에 대해 일반화하는 데 도움이됩니다. 이것이 바로 이전 섹션에서 더 깊은 레이어에서 몇 개의 빈 필터 활성화를 확인한 이유입니다. 특정 필터가 해당 이미지에 대해 활성화되지 않았기 때문입니다. 즉,

클래스 활성화의 히트 맵 시각화

이미지에 대한 클래스 레이블을 예측하는 동안 때때로 모델이 클래스에 대해 잘못된 레이블을 예측합니다. 즉, 올바른 레이블의 확률이 최대가 아닙니다. 이러한 경우 이미지의 어느 부분이 convnet인지 시각화하고 클래스 레이블을 추론 할 수 있다면 도움이 될 것입니다.

이러한 기술의 일반적인 범주를 CAM ( Class Activation Map ) 시각화라고합니다. CAM을 사용하는 기술 중 하나는 입력 이미지에 대한 클래스 활성화의 히트 맵을 생성하는 것입니다. 클래스 활성화 히트 맵은 입력 이미지의 모든 위치에 대해 계산 된 특정 출력 클래스와 관련된 점수의 2D 그리드로, 해당 출력 클래스와 관련하여 각 위치가 얼마나 중요한지 나타냅니다.

위의 이미지에서이 기술이 어떻게 작동하는지 볼 수 있습니다. 왼쪽에서 시작하여 먼저 입력 이미지이고 InceptionV3 아키텍처에서 마지막 혼합 레이어의 활성화 히트 맵이 나오고 마지막으로 입력 이미지 위에 히트 맵을 겹쳐 놓았습니다. 기본적으로 히트 맵이 알려 주려는 것은 특정 레이어가 대상 클래스로 분류하는 데 중요한 이미지의 위치입니다 . 이 경우에는 데이지 입니다 .

첫 번째 이미지에서 전체 이미지에 다른 개체가 없기 때문에 네트워크가 꽃을 분류하는 데 문제가 없음이 매우 분명합니다. 다음 이미지에서 네트워크는 이미지를 데이지 로 분류 할 수 없었지만 활성화 맵의 히트 맵을 살펴보면 네트워크가 이미지의 올바른 부분에서 꽃을 찾고있는 것이 분명합니다. 세 번째 이미지의 경우와 마찬가지로 네트워크는 작은 데이지 꽃이있는 이미지의 왼쪽 하단 부분을 강조 표시 할 수 있습니다. 따라서 네트워크가 두 번째 및 세 번째 이미지를 올바르게 분류 할 수는 없지만이 결정의 이유는 네트워크의 부정확성이 아니라 두 이미지에서 다른 개체가 차지하는 이미지의 더 큰 부분 때문입니다.

모든 레이어가 입력 이미지를 다르게보고 필터를 기반으로 고유 한 이미지 추상화를 생성하므로 활성화 히트 맵은 네트워크의 레이어마다 다를 수 있습니다. 이 예에서는 클래스 예측 레이블이 크게 의존하므로 모델의 최종 레이어에 중점을 두었습니다. 그러나 다른 레이어의 활성화 히트 맵을 비교하는 것은 좋은 실험이 될 수 있습니다.

결론

이 기사에서는 딥 컨볼루션 네트워크를 시각화하는 세 가지 방법을 설명했습니다. 앞서 설명했듯이 이와 같은 시각화는 신경망과 같은 블랙 박스 기술의 작동을 더 잘 이해하는 데 도움이 될 수 있으며, 이는 모든 오류 또는 전체 네트워크 성능을 디버깅하는 데 유용 할 수 있습니다.


본 내용은 아래 페이지에 대한 한국어판 번역 및 보조자료를 추가하였습니다.

https://towardsdatascience.com/understanding-your-convolution-network-with-visualizations-a4883441533b

Understanding your Convolution network with Visualizations

The field of Computer Vision has seen tremendous advancements since Convolution Neural Networks have come into being. The incredible speed…

towardsdatascience.com

728x90
반응형