01. Pooling

- Pooling : 연산량을 크게 늘리지 않고 down sampling 할 때 사용한다.
- 종류
- Max Pooling : 큰값만 뽑아냄
- 이미지의 도드라지는 특징만 남기는 효과가 있음
- Average Pooling : 평균값을 뽑아냄
- 일반적인 양상을 보여주며 노이즈를 줄여주는 효과를 기대할 수 있다.
- Sum Pooling : 그 영역의 값을 다 더해서 뽑아냄
- Max Pooling : 큰값만 뽑아냄
- pooling은 겹치는 부분이 생기지 않고 parameter를 사용하지 않고 정보를 압축할 수 있어서 연산량이 효율적이다.
- feature map으로 표현된 정보를 축약하는 역할을 한다.
- 적절하게 중요한 값만 뽑아낼수 있다.
- 비선형성을 강화하고, feature map의 크기를 줄여서 연산 성능을 향상시킬 수 있다.
➞ 비선형성을 강화하면 뭐가 좋은가?
- 비선형적이어야 단순 변환에 그치지 않기 때문이다.
- 참고 링크
02. Convolution + Pooling 종합

- CNN 구조의 특징
- feature extractor와 classification영역으로 구성
- feature Extraction ➞ convolution과 pooling을 반복
- 연속적인 CNN연산을 순차적으로 수행하면서 일련의 feature Map을 생성
- 순차적으로 생성된 feature map의 크기는 줄어들지만 채널(깊이)은 증가
- 더 복잡하고 다양한 feature정보를 반영하기 위해 , cnn깊이를 증가시키는 방향으로 발전
03. CNN 구조 구현하기
- 기본 CNN
# 모듈 import
import tensorflow as tf
# 가로 28, 세로 28, 채널 수 1의 input 데이터를 받는 input layer 생성하기
input_layer = tf.keras.layers.Input(shape=(28, 28, 1))
# 커널의 가로 세로 사이즈는 3이고, 채널 수는 4, zero-padding을 넣고,
# stride는 1로 한 Conv2D layer
x = tf.keras.layers.Conv2D(filters=4, kernel_size=3, strides=1, padding='same', activation='relu')(input_layer)
- pooling layer가 포함된 CNN
input_tensor = tf.keras.layers.Input(shape=(27,27,1))
x1 = tf.keras.layers.Conv2D(filters = 6, kernel_size = 2, strides = 2, padding = 'same', activation = 'relu')(input_tensor)
x2 = tf.keras.layers.MaxPooling2D(2)(x1)
# 모델객체 생성
input_layer = tf.keras.layers.Input(shape=(7, 7, 5))
convlayer1 = tf.keras.layers.Conv2D(filters=4, kernel_size=3, strides=1, padding='same')(input_layer)
convlayer2 = tf.keras.layers.Conv2D(filters=8, kernel_size=3, strides=1, padding='valid')(convlayer1)
pooling = tf.keras.layers.MaxPooling2D(2)(convlayer2)
model = tf.keras.Model(inputs=input_layer, outputs=pooling)
- 이미지 분류 CNN 모델
input_tensor = tf.keras.layers.Input(shape=(28, 28, 1))
x = tf.keras.layers.Conv2D(filters=32, kernel_size=3, strides=1, padding='same', activation='relu')(input_tensor)
x = tf.keras.layers.Conv2D(filters=64, kernel_size=3, activation='relu')(x)
x = tf.keras.layers.MaxPooling2D(2)(x)
# 3차원으로 되어있는 Feature map 결과를 Fully Connected 연결하기 위해서는 Flatten()을 적용해야 합니다.
x = tf.keras.layers.Flatten()(x)
# Flatten 된 결과를 100의 노드를 가진 Fuly Connected Layer와 연결
x = tf.keras.layers.Dense(100, activation='relu')(x)
output = tf.keras.layers.Dense(10, activation='softmax')(x)
# tf.keras.Model을 사용하여 model을 정의해 주세요.
model = tf.keras.Model(inputs = input_tensor, outputs = output)
# 정의해 준 model이 잘 만들어졌는지 summary를 통해 확인해 보세요.
model.summary()'하루 30분 컴퓨터 비전 공부하기' 카테고리의 다른 글
| CV(5) CNN 정복하기 GoogLeNet - 심화된 CNN 구조 (1) | 2023.10.26 |
|---|---|
| CV(2) CNN 기초 - Convolution, filter, padding (0) | 2023.10.25 |
| CV(3) CNN 기초 - 3 Channel Convolution/Hyper-Parameter (0) | 2023.10.25 |
| CV(1) 이미지 데이터 다루기 기초와 MLP (0) | 2023.10.24 |
| 이미지 모델 다루기 (0) | 2023.09.05 |