Computer Vision/Deep learning

20. CNN 구조

jwjwvison 2021. 6. 12. 17:44

 전형적인 CNN 구조는 합성곱 층을 몇개 쌓고 (각각 ReLU층을 그 뒤에 놓고), 그 다음에 풀링층을 쌓고, 그다음에 또 합성곱 층(+ReLU)을 몇 개 더 쌓고, 그 다음에 다시 풀링 층을 쌓는 식이다. 네트워크를 통과하여 진행할수록 이미지는 점점 작아지지만, 합성곱 층 때문에 일반적으로 점점 더 깊어진다. (즉, 더 많은 특성 맵을 가진다) 맨 위층에는 몇 개의 완전 연결 층(+ReLU)으로 구성된 일반적인 피드포워드 신경망(feedforward neural network)이 추가되고 마지막 층(예를 들면 클래스 확률을 추정하기 위한 소프트맥스 층)에서 예측을 출력한다.

 

 다음 코드는 패션 MNIST 데이터셋 문제를 해결하기 위한 간단한 CNN이다.

model= keras.models.Sequential([
                                keras.layers.Conv2D(64,7,activation='relu',padding='same',
                                                    input_shape=[28,28,1]),
                                keras.layers.MaxPooling2D(2),
                                keras.layers.Conv2D(128,3,activation='relu',padding='same'),
                                keras.layers.Conv2D(128,3,activation='relu',padding='same'),
                                keras.layers.MaxPooling2D(2),
                                keras.layers.Conv2D(256,3,activation='relu',padding='same'),
                                keras.layers.Conv2D(256,3,activation='relu',padding='same'),
                                keras.layers.MaxPooling2D(2),
                                keras.layers.Flatten(),
                                keras.layers.Dense(128,activation='relu'),
                                keras.layers.Dropout(0.5),
                                keras.layers.Dense(64,activation='relu'),
                                keras.layers.Dropout(0.5),
                                keras.layers.Dense(10,activation='softmax')
])

 

 1. 이미지가 아주 크지 않아서 첫 번째 층은 64개의 클 필터(7x7)와 스트라이드 1을 사용한다. 이미지가 28x28 픽셀 크기이고 하나의 컬러 채널이므로 input_shape=[28,28,1]로 지정한다.

 

 2. 그 다음 풀링 크기가 2인 최대 풀링 층을 추가하여 공간 방향 차원을 절반으로 줄인다.

 

 3. 이와 동일한 구조를 두번 반복한다. 최대 풀링 층이 뒤따르는 합성곱 층이 두번 등장한다. 이미지가 클 때는 동일한 구조를 더 많이 반복할 수 있다(반복 횟수는 튜닝해야 할 하이퍼파라미터 이다).

 

 4. CNN이 출력층에 다다를수록 필터 개수가 늘어난다. 저수준 특성의 개수는 적지만 이를 연결하여 고수준 특성을 만들 수 있는 방법이 많기 때문에 이런 구조가 합리적이다. 풀링 층 다음에 필터 개수를 두 배로 늘리는 것이 일반적인 방법이다. 풀링 층이 공간 방향 차원을 절반으로 줄이므로 이어지는 층에서 파라미터 개수, 메모리 사용량, 계산 비용을 크게 늘리지 않고 특성 맵 개수를 두 배로 늘릴 수 있다.

 

 5. 그다음이 두 개의 은닉층과 하나의 출력층으로 구성된 완전 연결 네트워크이다. 밀집 네트워크는 샘플의 특성으로 1D 배열을 기대하므로 입력을 일렬로 펼쳐야 한다. 또 밀집 층 사이에 과대적합을 줄이기 위해 50%의 드롭아웃 비율을 가진 드롭아웃 층을 추가한다.