반응형
CNN 주요 워드를 정리하면 다음과 같습니다.
- 특징추출
- 컨볼루션 연산 = 합성곱
- 수작업 필터 (수직선/수평선 검출, 흐림(blur)효과, 날카로운 이미지(sharpen)효과
- 수작업 필터를 적용하기에는 3가지 문제점 존재, 도메인 지식 + 시간과 비용 + 좁은 확장성
- 컨볼루션의 역할은 네트워크가 특징을 추출하는 필터를 자동으로 생성해줌
어떻게 특징을 자동으로 추출하는 것일까요?
II. 주요 레이어 정리
지금까지 이 책에 나온 레이어는 Dense 레이어와 Flatten 레이어 두 종류입니다.
- Dense레이어는 신경망에서 가장 기본이 되는 레이어이며 각 뉴런이 완전 연결(Fully-Connected) 레이어라고 불리웁니다.
- Flatten레이어는 다차원의 이미지를 1차원으로 평평하게 바꿔주는 레이어입니다.
위 그림1에서 볼 수 있는 것처럼 CNN은 특징 추출기(Feature Extractor)와 분류기(Classifier)가 합쳐진 형태입니다. 이 때, 특징 추출기의 역할을 하는 것은 CNN 레이어와 Pooling 레이어이며, Dense 레이어는 분류기의 역할을 합니다.
이론적인 자세한 부분은 여기에서는 생략하기로 한다. (교재를 참고하라!) 대신, 각 레이어의 특징 및 역할만 짧게 요약합니다.
- 컨볼루션 레이어
- 네트워크의 학습을 통해 자동으로 특징을 추출함
- 코드에서 지정해야 하는 값은 필터를 채우는 각 픽셀의 값이 아니라 필터의 개수 정도임
- 2차원 이미지를 다루는 컨볼루션 레이어를 생성하는 코드는 다음과 같음
conv1 = tf.keras.layers.Conv2D(kernel_size=(3,3), strides=(2,2), padding='valid', filters=16)
각 인수에 대한 설명은 전체 코드 때 재 설명합니다.
- 풀링 레이어
- 인접한 픽셀의 경우 중요한 정보만 남기기 위해 서브샘플링(subsampling)이라는 기법을 사용합니다. 컴퓨터의 메모리 크기가 한정되어 있다는 걸 고려한 레이어이며, 과적합 방지에 도움을 줍니다.
- 풀링 레이어에는 Max 풀링 레이어, Average 풀링 레이어 등이 있씁니다.
pool1 = tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2))
각 인수에 대한 설명은 전체 코드 때 재 설명합니다.
- 드롭아웃 레이어
- 뉴런의 부분집을 제거하여 뉴런들간의 공모(conspiracy)를 막고 과적합(overfitting)을 감소시키는 것입니다.
- 뉴런들은 결과값에 의해 서로 같은 영향을 받기 때문에, 결과값은 한쪽으로 치우치게 됩니다. 이러한 방지책으로 드롭아웃 레이어를 사용합니다.
pool1 = tf.keras.Dropout(rate=0.3)
간단한 코드이지만 AlexNet, VGG, GoogleNet, DenseNet 등 거의 모든 주요 CNN에서 사용됩니다.
III. 결론 및 정리
컨볼루션 신경망은 크게 3가지 레이어로 구성됩니다. 컨볼루션 레이어, 풀링 레이어, 드롭아웃 레이어입니다. 각 레이어의 역할은 조금씩 다릅니다. 컨볼루션 레이어는 특징을 추출하는 역할, 풀링 레이어는 중요 정보만 남기로 불필요한 연산 줄여주는 역할, 드롭아웃 레이어는 과적합을 방지하는 역할로 구분됩니다.
이제 Fashion MNIST 데이터세트에 CNN을 적용하고, 88%대의 성능을 올려봅니다.
반응형
'개발자 > Computer Vision' 카테고리의 다른 글
OpenVX 스터디(계속 업데이트해나갈예정) (0) | 2022.05.19 |
---|---|
딥러닝 Super resolution 이전 논문 정리 (0) | 2022.05.18 |
[OpenCV 딥러닝] 미리 학습된 파일을 OpenCV DNN 모듈로 딥러닝 (0) | 2021.07.04 |
[OpenCV] 영상처리 푸리에 변환을 이용한 저주파 필터(LPF) 고주파-필터HPF[퍼옴] (1) | 2021.06.18 |
영상처리[주파수 관련+푸리에변환] (1) | 2021.06.18 |