최근 kaggle competition 준비를 위해 ResNet 공부를 하기 전 기본적인 image recognition을 위해 CNN 학습을 진행하고자 한다.
feature 값을 얻기 위해 합성곱 연산을 하는 Convolution layer, Convolution을 거쳐 나온 activation map이 있을 때 이를 이루는 convolution layer를 resizing하여 새로운 layer인 pooling layer, 최종 결과를 생성해내는 fully connected layer로 구성된다.
- 인간의 시신경을 모방한 기술
- feature map을 생성하는 filter까지 학습이 가능해 CV 분야에서 성능이 좋음
- 이미지 인식 위해 패턴 찾기에 유용
- 데이터 직접 학습하고 패턴 사용해 이미지 분류
- 이미지 공간 정보를 유지한 상태로 학습이 가능한 모델
Convolution Layer ~ Pooling Layer 과정을 반복적으로 진행해 feature map의 크기를 줄이고 Flatten으로 pooling 결과물을 벡터 형태로 변환하고 Fully-Connected Layer와 softmax를 적용하여 결과물을 출력하는 모델 구조 방식.
- Filter(kernel) 적용
: 하나의 layer에 입력되는 이미지 채널 수만큼 필터가 존재, 각 채널에 할당된 필터를 적용하여 layer 별 출력 이미지 생성- Stride
: 이미지에 대해 필터 적용 시, 필터의 이동량을 의미하는 stride 설정필요- Padding
: 이미지 가장자리에 있는 픽셀 정보가 사라지는 문제를 해결하기 위해 이용참고사항
- Convolution에 ReLU를 사용하여 모델의 비선형성 유지
- Pooling Layer
: 이미지 크기를 유지한 채 classification을 진행한다면 연산량이 기하급수적이므로, 크기를 줄이면서 특정 feature를 강조할 수 있는 역할을 함. + 오버피팅 방지
Max Pooling / Average Pooling / Min Pooling 방식이 존재- Fully-Connected Layer
: Classification 작업을 위해 Flatten layer, softmax layer가 존재.
Flatten : 데이터 타입을 Fully Connected 네트워크 형태로 변경. 데이터 >> 벡터
layer 별 입력 데이터에 대한 출력 feature map 계산
input height : h
input width : w
filter height : fh
filter width : fw
stride size : s
padding size : pOutput size
height : ((h + 2p) - fh) / s + 1
width : ((w + wp) - fw) / s + 1