인터넷과 컴퓨터

CNN 합성곱신경망 총정리

동사힐 2023. 3. 29.

오늘은 CNN 합성곱신경망에 대해서 총정리하도록 하겠습니다.


CNN합성곱신경망은 Convolutional Neural Network의 약자로 합성곱 신경망이라고 불립니다. 오늘은 이미지 인식 분야에서 많이 사용되는 딥러닝 모델 중 하나인 CNN에 대해서 자세히 살펴보겠습니다.

 

CNN은 입력 데이터로부터 특징을 추출하고 이를 기반으로 분류를 수행하며 입력 데이터의 공간적 구조를 이용하여 특징을 추출하기 때문에 이미지 인식 분야에서 많이 사용됩니다.

 

그러면 CNN 합성곱신경망에 대해서 조금 더 자세히 살폅보도록 하겠습니다.

 

CNN 합성곱신경망은 다음과 같습니다.


CNN합성곱신경망은 이미지 인식, 객체 인식, 언어 번역 등 다양한 분야에서 높은 성능을 보이는 딥러닝 알고리즘 중 하나입니다.

CNN은 이미지 인식에서 가장 많이 사용되며, 입력 이미지를 필터(커널)를 이용해 합성곱 연산을 수행하여 특징 맵(feature map)을 추출하고, 이를 이용해 다음 층으로 전달하는 방식으로 동작합니다.

간단히 말해, CNN은 이미지를 여러 층으로 구성된 필터들을 통해 정보를 추출하고, 추출된 정보를 기반으로 이미지를 인식하는 것입니다. 이 때, 필터의 크기, 개수, 보폭 등의 하이퍼파라미터를 조정하여 모델의 성능을 개선할 수 있습니다.

CNN은 딥러닝 분야에서 가장 중요한 알고리즘 중 하나로, 이해하고 응용하는 것이 중요합니다. 그러나, 이론적으로는 상당히 복잡한 모델입니다. 따라서, CNN을 쉽게 이해하고 활용하기 위해서는 이론적인 부분을 이해하고, 실제로 모델을 구현하며 경험을 쌓는 것이 필요합니다.

합성곱 신경망(CNN)은 커널(kernel)을 입력 X 상에서 이동하면서, 가중치 행렬인 커널을 여러 번 중복 사용하며 컨볼루션 연산을 진행합니다.

CNN 합성곱신경망 활용 분야는 다음과 같습니다.


이미지 분류: CNN은 이미지 분류에서 가장 많이 활용되는 알고리즘 중 하나입니다. 예를 들어, 손글씨 인식, 개와 고양이 분류 등 다양한 이미지 분류 작업에서 사용됩니다.

객체 인식: 객체 인식에서는 이미지에서 특정 객체를 인식하고 분류하는 작업을 수행합니다. 자동차, 사람, 동물 등 다양한 객체를 인식하고 분류할 수 있습니다.

얼굴 인식: 얼굴 인식은 CCTV 등에서 가장 많이 사용됩니다. CNN은 얼굴 인식에서 높은 정확도를 보여줍니다.

자연어 처리: CNN은 자연어 처리 분야에서도 활용됩니다. 예를 들어, 문장 분류, 감정 분석, 기계 번역 등 다양한 작업에 사용됩니다.

음성 인식: CNN은 음성 인식 분야에서도 사용됩니다. 음성 신호를 분석하여 음성 인식 모델을 학습하고, 음성 명령을 처리하는 작업을 수행할 수 있습니다.

게임 AI: CNN은 게임 AI 분야에서도 활용됩니다. 예를 들어, 강화 학습을 통해 게임을 자동으로 학습하고 플레이할 수 있는 게임 AI를 구현할 수 있습니다.

 

그러면 CNN 합성곱신경망에 대해서 '그림으로 이해하는 비전공자를 위한 딥러닝' 책의 일부를 인용해서 조금 더 쉽게 이해해보도록 하겠습니다.

 

그림으로 쉽게 이해하는 CNN 합성곱신경망


다음 내용은 윤준호 작가님이 쓴 '그림으로 이해하는 비전공자를 위한 딥러닝'을 일부 인용한 내용입니다. 조금 더 자세한 내용을 원하시면 윤준호 작가님의 책 그림으로 이해하는 비전공자를 위한 딥러닝을 구입하시는 것을 추천드립니다.

 

'2'라고 적힌 손글씨 이미지 데이터가 있다고 생각해 보겠습니다.


'2'라고 적힌 손글씨 이미지 데이터



이 데이터는 위 그림처럼 2차원 배열의 형태로 컴퓨터에 저장됩니다.

따라서 예시 데이터는 다음과 같은 값들을 가지고 있는 2차원 배열이라고 생각하면 됩니다.

쉽게 살펴보기 위해서 밝기를 의미하는 픽셀값을 0, 0.3, 0.6, 1 이렇게 네 개로만 구성했습니다.


픽셀값을 0, 0.3, 0.6, 1 이렇게 네 개로만 구성


이제 이 데이터에 변환을 주겠습니다. 


오른쪽에 있는 붉은 색의 3x3 크기의 2차원 배열을 활용해, 왼쪽의 데이터를 변환시킬 것입니다.

이 붉은색 배열을 필터(filter)라고 합니다.

변환은 간단합니다.


필터가 이미지 데이터 위를 돌면서, 같은 위치에 있는 픽셀값끼리 곱한 뒤 더합니다.

데이터가 2차원 배열인 이미지이며 필터가 이동하면서 이미지의 다른 영역과 가중합을 합니다.


필터가 이미지 데이터의 첫 번째 부분에서 연산한 결과는 아래와 같습니다.

이미지 데이터가 해당 위치에 가지고 있던 값들 중
1. 첫 번째 행인 [1, 0.6, 0.3]이 필터의 [0, 1, 0]과 각각 곱해져 [0, 0.6, 0]이 나온다.
2. 두 번째 행인 [1, 0, 0]이 필터의 [1, 2, 1]과 각각 곱해져 [1, 0, 0]이 나온다.
3. 세 번째 행인 [1, 1, 0]이 필터의 [0, 1, 0]과 각각 곱해져 [0, 1, 0]이 나온다.
4. 이 나온 9개의 값들을 모두 더하면 2.6이 된다. 


필터가 이미지 데이터의 첫 번째 부분에서 연산한 결과


다음 연산은 필터가 한 칸 이동한 뒤 실행됩니다.
필터의 값들은 변하지 않으며, 이동한 필터가 위치하는 부분의 이미지 데이터의 값들과 같은 연산을 합니다.

그리고 그 결과는 이전 결과의 한 칸 오른쪽에 저장합니다.

그 다음 연산도 마찬가지로 진행됩니다.


이동한 필터가 위치하는 부분의 이미지 데이터의 값들 과 같은 연산


이제 그 다음은 필터가 어디로 이동할까요?
한 칸 밑으로 내려간 뒤, 다시 왼쪽에서부터 이동하게 됩니다.

이렇게 이미지 데이터의 마지막 부분까지 한 바퀴를 다 돌게 되면, 다음과 같이 3x3 크기의 결과가 나오게 됩니다.


이렇게 진행되는 연산을 합성곱 (convolution)이라고 한다.


왜 3x3 크기의 결과가 나왔을까요?

가로만 먼저 살펴봤을 때, 5칸 짜리 데이터 위를 3칸 짜리 필터가 한 칸씩 지나갑니다. 그러면 필터가 이미지 데이터의 왼쪽 끝, 정가운데, 오른쪽 끝 세번 위치하게 되며, 총 3번의 연산이 실행됩니다. '

이렇게 진행되는 연산을 합성곱 (convolution)이라고 한다.


이번에는 다른 필터를 사용해서 동일한 과정을 진행해보자. 필터 안에 다른 값들이 들어 있기 때문에, 앞서 구한 결과와 다릅니다.

 

이렇게 계속해서 여러 개의 필터를 사용해서 여러 개의 합성곱 결과를 구할 수 있습니다.


여러 개의 필터를 사용해서 여러 개의 합성곱 결과를 구할 수 있습니다.


이때 한 필터를 사용해서 이미지 데이터를 변환한 결과의 각 칸의 의미를 살펴보겠습니다.


첫 번째 칸은 원본 이미지 데이터의 왼쪽 위 3x3 부분을 필터와 합성곱한 결과입니다.

즉, 원본 이미지 데이터 왼쪽 위의 일정 부분을 어떤 필터를 사용해 "요약"한 것이라고 보면 됩니다.


이렇게 필터를 사용해 합성곱 연산을 하게 되면, 각 칸이 단순히 이미지의 1픽셀의 정보를 가지고 있는 것이 아니라, 이미지의 3x3 부분인 9픽셀의 정보를 가지게 됩니다.

것이 바로 이미지 데이터에 대해서 합성곱 신경망이 잘 동작하는 이유입니다.


이미지를 단순히 각각의 픽셀들로 1개씩 정보를 받아들이는 것이 아니라, 필터들을 사용해 상하좌우 주변의 픽셀들을 동시에 보는 것입니다.


다시 말해 필터를 사용해 나온 결과 배열은, 이미지를 필터 크기만큼의 픽셀을 동시에 보면서 추출된 특성이라고 할 수 있습니다. 하나가 아닌 여러 개의 필터를 사용한다면, 여러 개의 특성을 추출하게 됩니다.

즉, 우리가 알고 있는 신경망 모델의 구조가 나타납니다.


우리가 알고 있는 신경망 모델의 구조


하나의 필터를 통해 나오는 결과 배열을 특성맵(feature map)이라고 합니다. 출력되는 특성맵의 수를 채널(channel) 수'라고 표현합니다. 3개의 필터를 사용한다면 출력 채널 수가 3이 되고, 10개의 필터를 사용한다면 출력 채널 수가 10이 됩니다.

 

일반적으로 합성곱 신경망의 구조를 표현하는 그림으로 표현하면 다음과 같습니다.


일반적으로 합성곱 신경망의 구조를 표현하는 그림


그런데 필터에는 어떤 값이 들어가야 될까요?


딥러닝이 등장하기 전에는 이 필터의 값들을 정해놓고 사용했습니다. 포토샵이나 사진 편집 앱에서 "선명하게” 효과는선명 효과 필터(sharpenfilter)를 사용한 것입니다.


하지만 딥러닝에서는 필터의 값들이 정해져 있지 않습니다. 학습의 원리는 가중치의 값들 이 점점 더 좋은 예측을 하는 방향으로 변해가는 것이며, 합성곱 신경망에서는 바로 이 필터의 값들이 가중치라고 보면 됩니다.

 

즉, 우리는 학습을 시작하기 전에 신경망의 몇 층에서 몇 개의 필터를 사용할 것인지는 미리 정해놓지만, 그 필터들의 값들은 학습을 진행하면서 계속 바뀌게 됩니다. 필터의 값들이 최적화되면서, 더 유의미한 특성맵이 추출되고, 그로 인해 예측의 정확도가 높아 지는 것입니다.


필터의 값 들이 최적화되면서, 더 유의미한 특성맵이 추출되고, 그로 인해 예측의 정확도가 높아  지는 것


합성공신경망 예제 파이썬 코드는 다음과 같습니다.


# 필요한 라이브러리 import
import numpy as np
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# 모델 생성
model = Sequential()

# 입력층
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))

# 합성곱층 1
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# 합성곱층 2
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# 출력층
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))

# 모델 컴파일
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# 데이터 로드 및 전처리
X_train = np.load('train_data.npy')
y_train = np.load('train_labels.npy')
X_test = np.load('test_data.npy')
y_test = np.load('test_labels.npy')

# 모델 학습
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=32)

이 코드는 간단한 숫자 이미지 분류 모델을 생성하는 예제입니다. Conv2D 층을 이용해 합성곱 연산을 수행하고, MaxPooling2D 층을 이용해 풀링 연산을 수행하며, Dense 층을 이용해 완전 연결층을 구성합니다. model.compile() 함수를 이용해 모델을 컴파일하고, model.fit() 함수를 이용해 모델을 학습시킵니다.

데이터 전처리 및 로드 부분은 생략되어 있으며, 데이터는 각자 준비하여 사용하시면 됩니다.

 

오늘은 CNN 합성곱신경망에 대해서 총정리하였습니다.


이번 포스팅에는 합성곱 신경망(CNN)의 주요 내용을 총정리하였으니, 추가적인 질문이나 이해가 안 가는 부분이 있으면 댓글로 남겨주시기 바랍니다. 함께 공부하면 좋을 것 같습니다.

앞에서 살펴본 것처럼 CNN은 이미지 분류, 객체 감지 등에서 높은 성능을 보이는 딥러닝 모델 중 하나입니다. CNN은 이미지를 입력으로 받아서, 합성곱 연산과 풀링 연산을 통해 이미지의 특징을 추출하는 과정을 거칩니다. 이후, 추출된 특징을 이용하여 분류 또는 감지 등의 작업을 수행합니다.

CNN 모델의 주요 구성 요소는 합성곱층(convolutional layer), 풀링층(pooling layer), 완전연결층(fully connected layer)입니다. 합성곱층은 입력 이미지에서 특징을 추출하고, 풀링층은 특징 맵을 축소하여 계산 효율성을 높입니다. 마지막으로, 완전연결층은 추출된 특징을 이용해 분류 작업을 수행합니다.

CNN 모델은 학습을 위해 역전파(backpropagation) 알고리즘과 경사 하강법(gradient descent)을 사용합니다. 학습된 CNN 모델은 새로운 이미지를 입력으로 받아서 해당 이미지의 분류 또는 객체 감지 등을 수행할 수 있습니다.

마지막으로, CNN 모델은 이미지 분류, 객체 감지, 얼굴 인식, 자연어 처리 등 다양한 분야에서 활용됩니다. 또한, 다른 딥러닝 모델과 결합하여 더 높은 성능을 보이는 모델을 만들어 내는 데에도 사용됩니다.

 

이상으로 CNN 합성곱신경망 총정리 포스팅을 마칩니다. 감사합니다.

 

반응형

댓글

💲 추천 글