컨볼루션 신경망

합성곱 신경망이란??

Convolutional Neural Network는 이미지를 입력으로 받아 이미지를 구별하는 가장자리와 특징을 식별하고 결과를 제공하는 Deep Learning의 클래스입니다.

CNN은 어떻게 작동합니까?

CNN은 필터와 maxpooling을 사용하여 에지를 수평 및 수직으로 식별하고 필요한 기능 또는 관련 정보를 제공하는 기능만 가져옵니다.

필터:

입력 이미지는 필터와 컨볼루션 연산을 수행하여 가장자리를 추출합니다. 예를 들어 sobel 필터, scharr 필터 등 여러 필터가 있습니다.

7x7 매트릭스와 3x3 필터가 있는 이미지가 있다고 가정합니다.

컨벌루션 함수

입력 이미지의 첫 번째 3x3 블록에 필터(이미지의 Feature Detector)를 곱하고 Feature map의 첫 번째 값을 얻습니다. 이는 아래에 나와 있습니다.

(0x0)+(0x1)+(0x0)+(0x0)+(1x0)+(0x1)+(0x1)+(0x0)+(0x1)=0

마찬가지로 첫 번째 행의 두 번째 블록에 대해

(0x0)+(1x1)+(0x0)+(0x0)+(0x0)+(0x1)+(0x1)+(0x0)+(0x1)=1

각 블록 값의 보폭이 계산되고 이것이 이미지의 가장자리를 나타내는 것과 같습니다.



Feature map 행렬의 크기는 = 입력 이미지의 크기 - 필터의 크기 + 1입니다.

그러나 때로는 크기가 줄어들면서 일부 기능이나 정보가 손실되는 문제가 발생합니다. 패딩이 입력 이미지에 적용되는 경우 이 정보가 중요할 수 있습니다.



패딩 후 7x7 행렬은 9x9가 되므로 기능 맵 크기는 9–3+1=7이 됩니다. 즉, 정보 손실이 없음을 의미하는 7x7이 됩니다.

최대 풀링 계층:

maxpooling에서 maxpooling 레이어의 행렬 크기가 2x2라고 가정하고 imput 이미지의 각 2x2 행렬에서 최대 값을 취하여 출력 행렬 또는 maxpooling 레이어의 출력이 되는 행렬을 형성합니다. 입력에 대한 자세한 정보를 포함합니다.

최대 풀링 계층

필터와 맥스풀링의 장점은 입력 이미지에서 중요한 특징을 얻고 이미지 크기도 줄어든다는 것입니다.

이제 keras를 사용하여 필터 및 maxpooling에 대한 코드를 살펴보겠습니다.

import tensorflow as tf

model = models.Sequential()

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

model.add(layers.MaxPooling2D((2, 2)))

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

model.add(layers.MaxPooling2D((2, 2)))

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

model.add(layers.Flatten())

model.add(layers.Dense(64, activation='relu'))

model.add(layers.Dense(10))

위의 코드에서 첫 번째 레이어는 크기가 3x3인 64개의 필터를 포함하고 입력 모양은 (32,32,3)이며 3개의 채널이 있는 32x32의 이미지를 나타냅니다. 레이어 1의 출력 형태는 (30,30,3)입니다. 두 번째는 2x2 크기의 최대 풀링 계층입니다. 두 번째 레이어의 출력 모양은 (15,15,3)입니다. 마찬가지로 세 번째 레이어에는 32개의 필터가 있고 크기는 3x3이고 출력 모양은 (13,13,3)이고 네 번째 레이어의 출력 모양은 (6,6,3)입니다. 마지막 3개의 레이어는 10개의 클래스가 있는 Flatten, Dense 및 Output 레이어입니다.

좋은 웹페이지 즐겨찾기