AI 프로그래밍
CNN의 개념과 장점, 예제 코드와 활용에 대하여
애라니라니
2023. 5. 15. 12:37
- 2023.05.15
이미지 종류
▷ True color (24bit 색상)
: RGB로 색상 채널을 사용하여 모든 색상을 표현한다.
- 각 색상 채널은 8bit로 구성되며, 2^8인 256가지의 색상 값을 표현할 수 있다
- True color는 총 16,777,216가지의 색상 표현이 가능하다
- 사진 및 그래픽 디자인에서 주로 사용
▷ Grey scale
: 검은색과 흰색을 포함한 회색조의 단일 색상 채널로 구성된다.
- 각 픽셀은 단일 색상 채널 값으로 나타내지며, 0~244 사이의 범위 내에서 표현된다
- 256가지 서로 다른 밝기 값을 가질 수 있다
- 흑백 이미지, 그래픽에서 사용
CNN
CNN (Convolutional neural network)
: 데이터로부터 직접 학습하는 딥러닝의 신경망 아키텍처
- 영상에서 객체, 클래스, 범주 인식을 위한 팬턴을 찾을 때 특히 유용
CNN을 사용하는 이유
- 가중치를 공유하여 이미 학습된 특징들은 어디에 있건 추출 가능
- input 크기에 영향을 받지 않음
- 지역적으로 연결되어 있어 원하는 부분에 대한 독립적인 계산 가능
- parameter의 수가 적어 시간이 적게 걸리고 overfitting의 가능성도 적다
- 다른 위치, 회전, 뒤집힘 등의 데이터가 강하다
등등의 장점을 가지고 있다.
Convolution Layer 동작 원리
- 입력 데이터와 커널 간의 element-wise 곱을 수행
- 곱의 결과를 모두 더함
- 결괏값을 특징 맵에 저장
Pooliong Layer 동작 원리
- Max pooling
입력 데이터를 일정한 크기의 윈도우로 나누고, 각 윈도우 내에서 MAX 값을 선택하여 출력하는 방법
-> 입력 데이터의 중요한 특징만 추출해 출력할 수 있음
주로 이미지 분류나 객체 감지에서 사용되며, 이미지 내 특징 위치의 변화에 대한 불변성 제공 - Average pooling
입력 데이터를 윈도우로 나누고, 각 윈도우 내에서 Avg 값을 계산하여 출력하는 방법
-> 입력 데이터의 전반적인 정보를 유지하면서 출력 크기를 줄일 수 있음
주로 CNN에서 Feature map의 차원을 줄이는 용도로 사용
Flatten
: CNN에서 마지막 Convolution layer / Pooling layer의 출력을 1차원 배열로 변환하는 연산
- 1차원 vector로 변환된 Feature map을 Fully Connected layer에 입력할 수 있다
CNN 예제 코드
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 데이터셋 로드
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 이미지 전처리
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0
# 모델 구성
model = keras.Sequential(
[
# Convolution layer 1
layers.Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=(28, 28, 1)),
layers.MaxPooling2D(pool_size=(2, 2)),
# Convolution layer 2
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
# Flatten
layers.Flatten(),
# Fully Connected layer 1
layers.Dense(128, activation="relu"),
# Output layer
layers.Dense(10, activation="softmax"),
]
)
# 모델 컴파일
model.compile(loss="sparse_categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
# 모델 학습
model.fit(x_train.reshape(-1, 28, 28, 1), y_train, batch_size=128, epochs=5, validation_split=0.1)
# 모델 평가
model.evaluate(x_test.reshape(-1, 28, 28, 1), y_test)
CNN 활용 예제
- 음성 인식
- 이미지 분류
- 자율주행 자동차
- 의료 영상 분석
- 휴대폰 잠금해제 인식