Techbrad

[컴퓨터비전] CNN의 기초 본문

AI & BigData/Deeplearning

[컴퓨터비전] CNN의 기초

brad.min 2021. 12. 26. 16:36
반응형

인공 신경망의 입력데이터로는 1차원의 데이터가 필요. 한 장의 컬러사진은 3차원, 여러 장은 4차원이기 때문에 다차원의 데이터를 1차원의 데이터로 변환해야한다. 차원을 줄이기 때문에 공간정보가 손실이 되는데 공간정보를 유지한채 학습하는 모델이 CNN이다.

 

예제로 mnist 데이터의 형태를 보면 28 X 28 이미지가 60,000개가 있는 3차원 데이터로 되어 있다. (색깔이 추가되면 4차원 가능)

CNN은 다차원의 데이터를 Convolution layer와 Subsampling layer의 반복하면서 이미지의 크기와 공간을 줄여가며 1차원의 데이터로 표한하게 됩니다.

출처: https://www.researchgate.net/figure/Architecture-of-our-unsupervised-CNN-Network-contains-three-stages-each-of-which_283433254

위의 Convolution쪽을 케라스(Keras)로 살펴보자면 아래의 코드와 같다. 처음에 Conv2D(32, (3, 3)은 28, 28, 1의 이미지 데이터를 3 X 3의 32개의 필터로 합성곱을 연산하는 것이다. 

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

그럼 output으로 32개의 채널이 나오게 되며 아래의 그림처럼 입체적인 형태로 출력된다. 즉, Conv2D(64, (3, 3) 인 경우에는 64개의 다른 필터로 합성곱을 구하게 되므로 32개의 채널보다 긴 64개의 채널로 Output이 출력되게 된다.

출처: https://excelsior-cjh.tistory.com/180

 

 

Convolution layer

Convolution layer가 동작하는 방식을 살펴보면, 아래의 그림과 같이 원본 이미지 데이터가 5 X 5일때 3 X 3의 Convolution Filter로 Sliding 을 하는 것을 볼 수 있다. Sliding을 통해 3 X 3의 Feature Map을 만들게 되고 이미지의 공간 특성을 갖고 있다고 볼 수 있다.

http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution

아래의 keras 코드에서 살펴보자면 모델의 레이어를 생성하는데 입력데이터가 (28, 28, 1)의 3차원 데이터이고 3 X 3 크기의 Convolution Filter가 돌아가면서 3 X 

model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))

 

 

Subsampling layer

subsampling 레이어는 컨볼류션 레이어의 출력 데이터를 입력으로 받아서 출력 데이터(Activation Map)의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용됩니다. 플링 레이어를 처리하는 방법으로는 Max Pooling과 Average Pooning, Min Pooling이 있습니다. 

Pooling을 하는 이유는 매개변수를 축소할 수 있으며 과대적합을 발생시키지 않게하기 위해서입니다.

출처 : http://taewan.kim/post/cnn/

이렇게 합성곱, subsampling 레이어를 거치며 이미지의 특징의 표현을 점차 줄여나가는 것을 CNN이라고 하며 후에 보다 자세히 공부하도록 하겠습니다.

반응형