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 동작 원리
  1. 입력 데이터와 커널 간의 element-wise 곱을 수행
  2. 곱의 결과를 모두 더함
  3. 결괏값을 특징 맵에 저장

 

Pooliong Layer 동작 원리
  1. Max pooling
    입력 데이터를 일정한 크기의 윈도우로 나누고, 각 윈도우 내에서 MAX 값을 선택하여 출력하는 방법
    -> 입력 데이터의 중요한 특징만 추출해 출력할 수 있음
    주로 이미지 분류나 객체 감지에서 사용되며, 이미지 내 특징 위치의 변화에 대한 불변성 제공
  2. 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 활용 예제
  • 음성 인식
  • 이미지 분류
  • 자율주행 자동차
  • 의료 영상 분석
  • 휴대폰 잠금해제 인식