depthwise separable convolution(깊이별 분리 합성곱)
2021. 7. 7. 14:29ㆍArtificial_Intelligence/Computer Vision
SeparableConv2D
입력 채널별로 따로따로 공간 방향의 합성곱 수행 후, 1*1 합성곱 (점별 합성곱)으로 출력 채널을 합치는 것.
이로 인해 공간 특성의 학습과 채널 방향 특성의 학습을 분리하는 효과를 얻을 수 있음.
모델 파라미터와 연산의 수를 크게 줄여주어 더 작고 빠른 모델을 제작할 수 있음.
여기서 1 * 1 합성곱이란,
1 * 1 크기의 Convolution Filter 사용한 Convolution Layer를 말하는데, Channel / Spatial의 특성파악에 도움이 된다.
이렇게 1*1 합성곱을 쓰면 파라미터 수가 확연히 줄게 된다.
일반적으로 합성곱에서 channel을 크게 주면 파라미터 수가 급격히 증가하는데, 1*1 합성곱을 사용하면 효율적으로 모델을 구성할 수 있음. 즉, channel 수를 조절할 수 있음.
채널의 수가 줄면 파라미터가 줄어드는 것으로, 동시에 계산량이 같이 줄어듬.
이 특성들을 가지고 모델을 더 깊게 구성하면, 기존의 모델보다 더 많은 비선형성 활성화 함수를 사용할 수 있고, 더 구체적인 패턴을 파악해 성능 향상으로 이어짐.
from keras.models import Sequential, Model
from keras import layers
height = 64
width = 64
channels = 3
num_classes = 10
model = Sequential()
model.add(layers.SeparableConv2D(32, 3, activation='relu', input_shape=(height. width, channels,)))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layer.MaxPooling2D(2))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.SeparableConv2D(128, 3, activation='relu'))
model.add(layers.MaxPooling2D(2))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.SeparableConv2D(128, 3, activation='relu'))
model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(num_classes, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
728x90
'Artificial_Intelligence > Computer Vision' 카테고리의 다른 글
Neural Style Transfer (0) | 2021.10.07 |
---|---|
DCGAN(Deep Convolutional Generative Adversarial Networks) (0) | 2021.09.19 |
[CNN] HeatMap (1) | 2021.06.12 |
[CNN] Dogs vs Cats (0) | 2021.05.13 |
[GAN] 적대적 생성 신경망 <숫자생성AI> 제작 (0) | 2021.02.21 |