대외활동/DSC CV Study

week3 - CNN(Convolutional Neural Network)

여니여니_ 2020. 1. 27. 16:56

Fully-Connected Layer 완전연결층

 

Affine - ReLU - Affine - ReLU - Affine - Softmax 

 

 

 

 

CNN(Convolutional Neural Network)

 

 

 

 

완전 연결 신경망에서는 Affine층 뒤에 활성화함수 ReLU로

마지막 Layer 부분에는 활성화함수 소프트맥스로 최종 결과를 출력합니다.

 

반면, CNN은 Conv층과 Pooling층이 추가되었습니다.

마지막에는 Affine - ReLU와 Affie - Sofrmax 조합이 그대로 사용됩니다. 

 

Fully Connected Layer는 1차원(배열) 형태로 한정되는데,

한 장의 컬러사진은 3차원 데이터입니다.

 

Fully Connected로 학습시킬 경우,

3차원의 이미지를 1차원으로 평면화 시켜야하는데 이 과정에서 공간 정보가 손상됩니다. 

 

그리하여 CNN이 나오게 되었고, CNN의 특징은 다음과 같습니다.

 

  • 각 레이어의 입출력 데이터 형상 유지

  • 이미지의 공간 정보를 유지하면서 인접 이미지와 특징을 효과적으로 인식

  • 복수의 필터로 이미지의 특징 추출 및 학습

  • 추출한 이미지 피쳐를 모으고 강화하는 풀링층

 

CNN은 이미지의 특칭을 추출하는 부분 + 클래스를 분류하는 부분으로 나눌 수 있습니다.

 

특징 추출 영역은 컨볼루션층과 풀링층을 겹쳐 쌓는 형태입니다.

 

CNN의 마지막 부분에는 이미지 분류를 위한 Fully Connected 층이 추가됩니다. 

 

이미지의 특징을 추출하는 부분과 이미지를 분류하는 부분 사이에 이미지 형태의 데이터를 배열 형태로 만드는 Flatten Layer가 위치합니다.

 

CNN의 특징

 

Convolution 합성곱

 

Conv층에서 처리되는 합성곱이다. 이미지 처리에서 필터 연산을 말합니다.

윈도우를 일정 보폭(stride)만큼 이동하며 입력 데이터에 적용합니다.

이미지와 필터에 대응하는 값들끼리 곱하고 그 합을 출력합니다.

위 그림을 보면 이해가 쉬운데, 노란색이 필터이고 오른쪽과 같은 피쳐가 출력됩니다.

 

1열의 그림에 여러가지 커널(필터)를 적용한 결과입니다. 필터를 적용시키면 이미지에서 필터 모양의 특징을 뽑아냅니다. 수직 엣지 커널로 필터링한 결과 세로로된 엣지를 검출해낸 것입니다. 반면 수평엣지를 적용했을 때는 아무것도 검출되지 않은 것입니다.

 

아래 물고기 그림을 보면 더 이해가 잘될 수 있습니다 :>   

 

Filter 필터

 

 

Stride 스트라이드

 

Stride를 해석하면 보폭입니다.

필터를 얼마만큼 이동하며 적용할 것인지를 나타내는 숫자입니다.

스트라이드가 커지면 값을 듬성듬성 뽑아내는 것과 같습니다.

따라서 출력 데이터(이미지)가 작아집니다.

 

(stride의 변화를 잘 나타내는 이미지를 찾지 못했다..!)

 

Padding 패딩

 

 

합성곱 연산을 수행하기 전에 입력 데이터 주변을 특정 값으로 채우는 것을 말합니다. 

 

위는 식빵 테두리처럼 0으로 두른 것을 볼 수 있습니다. 

 

이같은 처리를 하는 이유는 주로 입력 데이터와 출력 데이터의 크기를 맞추기 위함입니다.

패딩처리를 하지 않았다면 2x2 사이즈의 데이터가 나왔을 것입니다.

패딩처리를 했기때문에 처음과 같은 4x4 사이즈의 데이터를 유지했습니다.

 

 

 

Pooling 풀링

 

 

풀링은 큰 이미지의 크기를 줄이기 위해 사용됩니다. 가로, 세로 방향의 공간을 줄이는 연산으로 sub-sampling이라고도 불립니다. 

 

위 그림은 Max-pooling을 나타내는데 2x2 사이즈의 윈도우에서 가장 큰(max) 값인 2를 뽑아내고,

그 다음은 3, 4, 2와 같은 최댓값으로 이루어지고, 전체적으로 사이즈가 작아진 것을 확인할 수 있습니다. 그렇다면 Average-pooling은 최댓값이 아닌 윈도우의 평균값을 뽑아낸다는 것을 유추해볼 수 있습니다.

 

풀링은 최댓값이나 평균을 취하는 처리이므로 학습해야할 매개변수가 없고,

각 채널마다 독립적으로 계산하기 때문에 입력 데이터의 채널 수를 그대로 내보냅니다.

또 입력 데이터에 약간의 변화가 있어도 결과가 영향을 크게 받지 않아 강건하다고 할 수 있습니다. 

 

 

 

 

Reference

 

https://towardsdatascience.com/a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way-3bd2b1164a53

 

A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way

Artificial Intelligence has been witnessing a monumental growth in bridging the gap between the capabilities of humans and machines…

towardsdatascience.com

 

 

 

https://tykimos.github.io/lecture/

 

 

케라스 강좌 내용

케라스로 배워보는 딥러닝 강좌를 아래 내용를 아래 순서대로 진행하고자 합니다. 1권 (블록과 함께하는) 파이썬 딥러닝 “케라스” 기초 케라스 시작하기 딥러닝 개념잡기 레이어 개념잡기 레시피 따라해보기 부록 2권 (블록과 함께하는) 파이션 딥러닝 “케라스” 활용 [시계열영상입력 이진분류 모델 레시피] [시계열영상입력 다중클래스분류 모델 레시피] [특징맵 살펴보기] [시퀀스 출력을 가지는 모델 구성] 객체 검출(object detection) 해보기 영상 분

tykimos.github.io

https://gomguard.tistory.com/188?category=712467

 

[딥러닝] 컨볼루션 뉴럴 네트워크 Part. 1 - MLP 의 문제점과 CNN

이전 까지의 내용 이전 글에서는 각 층의 출력값 자체를 안정화하는 방법인 배치 정규화를 다루고 학습식을 개선할 필요성에 대해 살펴보았습니다. 이번 글에서는 학습식을 어떻게 개선해나가고 있는지에 대해 살..

gomguard.tistory.com