본문 바로가기
딥러닝

[딥러닝] 혼자 공부하는 머신러닝 + 딥러닝 | Chapter 08. 이미지를 위한 인공 신경망 |

by Hessedist 2022. 5. 18.

Chapter 08. 이미지를 위한 인공 신경망


학습목표

  1. 이미지 분류 문제에 뛰어난 성능을 발휘하는 합성곱 신경망의 개념과 구성 요소에 대해 배움.
  2. 케라스 API로 합성곱 신경망을 만들어 패션  MNIST 데이터에서 성능을 평가해 봄. 
  3. 합성곱 층의 필터와 활성화 출력을 시각화하여 합성곱 신경망이 학습한 내용을 고찰해 봄. 

 


Chapter 08. 이미지를 위한 인공 신경망- 1) 합성곱 신경망의 구성 요소


합성곱 신경망을 구성하는 기본 개념과 동작 원리를 배우고 간단한 합성곱, 풀링 계산 방법을 익힘. 

 

키워드로 끝내는 핵심 포인트

  • 합성곱은 밀집층과 비슷하게 입력과 가중치를 곱하고 절편을 더하는 선형 계산임. 하지만 밀집층과 달리 각 합성곱은 입력 전체가 아니라 일부만 사용하여 선형 계산을 수행함. 
  • 합성곱 층의 필터는 밀집층의 뉴런에 해당함. 필터의 가중치와 절편을 종종 커널이라고 부름. 자주 사용되는 커널의 크기는 (3, 3) 또는 (5, 5) 임. 커널의 깊이는 입력의 깊이와 같음
  • 특성 맵은 합성곱 층이나 풀링 층의 출력 배열을 의미. 필터 하나가 하나의 특성 맵을 만듬. 합성곱 층에서 5개의 필터를 적용하면 5개의 특성 맵이 만들어짐. 
  • 패딩은 합성곱 층의 입력 주위에 추가한 0으로 채워진 픽셀. 패딩을 사용하지 않는 것을 밸리드 패딩이라고 함. 합성곱 층의 출력 크기를 입력과 동일하게 만들기 위해 입력에 패딩을 추가하는 것을 세임 패딩이라고 함. 
  • 스트라이드는 합성곱 층에서 필터가 입력 위를 이동하는 크기임. 일반적으로 스트라이는 1픽셀을 사용.
  • 풀링은 가중치가 없고 특성 맵의 가로세로 크기를 줄이는 역할을 수행함. 대표적으로 최대 풀링과 평균 풀링이 있으며 (2, 2) 풀링으로 입력을 절반으로 줄임. 

 

합성곱 층과 풀링 층 이해하기

  • 이번 절에서 합성곱 신경망을 구성하는 핵심 개념을 살펴보았다. 여기에는 합성곱, 필터, 패딩, 스트라이드, 풀링 등이 포함. 합성곱 신경망은 직관적으로 이해하기 쉽지 않지만 이미지 처리에서 뛰어난 성능을 발휘할 수 있도록 발전된 결과물. 우리 뇌 속에 있는 신경 조직을 흉내내기 위해 만든 것이 아님.
  • 합성곱 층과 풀링 층은 거의 항상 함께 사용됨. 합성곱 층에서 입력의 크기를 유지하며 각 필터가 추출한 특성 맵을 출력하면 풀링층에서 특성 맵의 가로세로를 줄임. 일반적으로 최대 풀링을 즐겨 사용하며 특성 맵을 절반으로 줄임. 마지막에는 특성 맵을 1차원 배열로 펼쳐서 1개 이상의 밀집층에 통과시켜 클래스에 대한 확률을 만듬. 
  • 합성곱 신경망에는 새로운 개념이 많이 등장하기 때문에 이 절에서는 코드보다는 구조를 이해하는데 집중함. 이 개념을 머릿속에 잘 담아두고 다음 절에서 케라스 API로 실제 합성곱 신경망을 만들어 패션 MNIST 데이터에 적용해 보겠음. 

 


Chapter 08. 이미지를 위한 인공 신경망- 2) 합성곱 신경망을 사용한 이미지 분류

 


케라스 API를 사용해 합성곱 신경망 모델을 만들어 패션 MNIST 이미지를 분류하는 방법을 배움

 

키워드로 끝내는 핵심 포인트

  • 텐서플로의 Conv2D, MaxPooling2D, plot_model 을 활용한 실습 
  • TensorFlow
    • Conv2D : 입력의 너비와 높이 방향의 합성곱 연산을 구현한 클래스
    • MaxPooling2D : 입력의 너비와 높이를 줄이는 풀링 연산을 구현한 클래스
    • plot_model() : 케라스 모델 구조를 주피터 노트북에 그리거나 파일로 저장. 
  • matplotlib
    • bar() : 막대그래프 출력

 

  •  

케라스 API로 합성곱 신경망 구현

  • 이전 절에서 살펴본 합성곱 신경망의 주요 개념을 토대로 이번 절에서는 케라스 API를 사용해 합성곱 신경망을 만들어 보았음. 케라스의 Conv2D 클래스를 사용해 32개의 필터와 64개의 필터를 둔 2개의 합성곱 층을 추가했음. 두 합성곱 층 다음에는 모두 (2, 2) 크기의 최대 풀링 층을 배치했음. 두 번째 풀링 층을 통과한 특성 맵을 펼친 다음 밀집 은닉층에 연결하고 최종적으로 10개의 뉴런을 가진 출력층에서 샘플에 대한 확률을 출력했음
  • 7장에서 사용했던 조기 종료 기법을 사용해 모델을 훈련한 다음 검증 세트로 최적의 에포크에서 성능을 평가했음. 또 샘플 데이터 하나를 선택해 예측 클래스를 출력하는 방법을 살펴보았음. 
  • 마지막으로 이제까지 사용하지 않았던 테스트 세트를 사용해 최종 모델의 일반화 성능을 평가하였음. 항상 테스트 세트는 모델을 출시하기 직전 딱 한 번만 사용해야 함. 그렇지 않다면 모델을 실전에 투입했을 때 성능을 올바르게 예측하지 못함. 
  • 합성곱 신경망은 이미지를 주로 다루기 때문에 각 층의 출력을 시각화하기 좋음. 다음 절에서는 합성곱 층의 가중치와 특성 맵을 시각화하여 신경망이 학습한 내용을 고찰해 보겠음. 
  • 전체 소스 코드 
 

8-2.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

 


Chapter 08. 이미지를 위한 인공 신경망 - 3) 합성곱 신경망의 시각화

 

 


합성곱 층의 가중치와 특성 맵을 시각화하여 신경망이 이미지에서 어떤 것을 학습하는지 이해해 봄. 

 

키워드로 끝내는 핵심 포인트

  • 가중치 시각화는 합성곱 층의 가중치를 이미지로 출력하는 것을 말함. 합성곱 신경망은 주로 이미지를 다루기 때문에 가중치가 시각적인 패턴을 학습하는지 알아볼 수 있음. 
  • 특성 맵 시각화는 합성곱 층의 활성화 출력을 이미지로 그리는 것을 말함. 가중치 시각화와 함께 비교하여 각 필터가 이미지의 어느 부분을 활성화시키는지 확인할 수 있음. 
  • 함수형 API는 케라스에서 신경망 모델을 만드는 방법 중 하나임. Model 클래스에 모델의 입력과 출력을 지정함. 전형적으로 입력은 Input() 함수를 사용하여 정의하고 출력은 마지막 층의 출력으로 정의함
  • TensorFlow
    • Model : 케라스 모델을 만드는 클래스

 

시각화로 이해하는 합성곱 신경망

  • 2절을 훈련하며 저장한 합성곱 신경망 모델을 읽어 들인 후 이 모델의 가중치특성 맵시각화해 보았음. 이를 통해 합성곱 층이 어떻게 입력에서 특성을 학습하는지 관찰할 수 있었음. 
  • 입력에 가까운 합성곱 층은 이미지에서 시각적인 정보패턴을 감지하도록 훈련됨. 이어지는 합성곱 층은 이런 시각적인 정보를 활용해 조금 더 고차원적인 개념을 학습함. 층이 추가될수록 이런 현상은 더욱 강해짐. 결국 주어진 이미지가 패션 MNIST 데이터셋에 있는 10개의 클래스 중 어떤 것인지를 판단할 수 있음. 
  • 특성 맵시각화하면서 케라스 API의 핵심 기능 중 하나인 함수형 API를 배웠음. 함수형 API를 사용하면 복잡한 조합의 모델을 자유롭게 구성할 수 있음. 이 절에서는 입력과 합성곱 층의 출력을 연결하여 특성 맵을 시각화하기 위한 용도로 사용했음. 
  • 전체 소스 코드
 

8-3.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 


예제 파일

 

GitHub - rickiepark/hg-mldl: <혼자 공부하는 머신러닝+딥러닝>의 코드 저장소입니다.

<혼자 공부하는 머신러닝+딥러닝>의 코드 저장소입니다. Contribute to rickiepark/hg-mldl development by creating an account on GitHub.

github.com