본문 바로가기
Python/머신러닝, 딥러닝

[딥러닝] CNN 이미지 학습 모델 개념 정리

by IT두잇 2022. 5. 23.

CNN(Convolution Neural Networks)에 대해 공부한 내용을 정리해보려 합니다 :)

직접 정리해야 이해가 잘 될 것 같아서 학습 및 서칭한 내용을 아래에 작성했습니다.

 

먼저, CNN이란?

이미지, 영상데이터를 처리하는 신경망으로 다차원 데이터를 손실없이 처리할 수 있다는 것이 특징입니다. 

이미지는 픽셀로 되어있으며, 픽셀의 색을 컴퓨터가 이해할 수 있도록 숫자로 변경을 한 후에 신경망을 통해 계산합니다.

 


CNN의 구조

프로세스: 

Input --> Convolution output --> Pooling output --> Convolution output (반복) --> Pooling output (반복)

--> DNN 학습 --> Output

 

* Convolution과 Pooling 과정을 반복한다는 점을 기억하자!

* CNN에는 정규화가 따로 필요하지 않습니다

 

CNN 예제 코드:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D 
from tensorflow.keras.layers import Flatten, Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# CNN 모델 구현
model = Sequential()

model.add(Conv2D(filters = 32, 
                kernel_size = (3,3),
                strides = (1,1),
                activation = 'relu',
                input_shape = (150,150,3)))

model.add(Conv2D(filters = 64, 
                kernel_size = (3,3),
                strides = (1,1),
                activation = 'relu',))

model.add(MaxPooling2D(pool_size = (2,2)))

model.add(Conv2D(filters = 64, 
                kernel_size = (3,3),
                strides = (1,1),
                activation = 'relu'))

CNN 주요 용어 정리

(1) Convolution

: 입력 데이터에 필터 적용 후 활성화 함수를 반영하는 과정

filtering을 64개, 32개 등 몇개로 설정하냐에 따라 output이 달라집니다.

Convolution Layer는 Filter 크기, Stride, Padding 적용 여부, Max Pooling 크기에 따라서 출력 데이터의 Shape이 변경됩니다.

 

 

(2) Pooling

: 결과값의 차원을 축소해 image 데이터를 작은 사이즈로 줄이는 과정

- 목적 : 과적합을 방지하는 용도로 사용됩니다.

- 종류: Max pooling(최대값), Average pooling(평균값), Min pooling(최소값) 

 

(3) Filter

: 커널(kernel)이라고도 불리며, 이미지에 있는 특징 추출

  • 일반적으로 (4,4)이나 (3,3)과 같은 정사각 행렬로 정의
  • 색상(3차원)에는 필터 3개가 필요
  • 필터를 거쳐서 feature map이 생성됨
  • 처음 필터값은 랜덤하게 세팅

 

 

stride 한칸 오늘쪽 이동

stride에 따라 이동하며 연산 --> feature map 생성

 

(4) Feature Map

: filter와 convolution 시킨 결과들을 합한 결과물

 

(5) Padding

: 입력 데이터 주위에 0을 채워서 출력 크기를 조절

 

Padding을 하지 않으면 CNN layer를 통과할 때마다 가로/세로 크기가 감소하지만, Padding을 적용하면 Convolution을 수행해도 데이터의 크기를 동일하게 유지할 수 있습니다.

 

(6) Stride

: 필터를 적용하는 간격

필터 이동시 해당 pixel 만큼 이동하면서 연산합니다. 패딩을 크게하면 출력 데이터의 크기가 커지는 반면 스트라이드를 크게하면 출력 데이터의 크기는 작아집니다.



(7) 활성화함수

  • ReLU 함수 (0 ~ 1값) : 입력이 양수일 때는 x, 음수일 때는 0을 출력
    • 다른 활성화 함수에 비해 학습이 빠름
    • Gradient Vanishing 문제가 발생하지 않음
    • 음수 값을 입력 받으면 항상 0이기 때문에 훈련 능력 감소
  • softmax 함수:
    입력받은 값을 0~1 사이의 출력이 되도록 정규화하여 출력 값들의 총합이 항상 1이 되는 특성을 가진 함수

 

  • sigmoid 함수:
    선형함수의 결과를 0~1 까지의 비선형 형태로 변형하기 위한 함수
    • 모델이 깊으면 깊을 수록 기울기가 사라지는 Gradient Vanishing 현상이 발생