Convolution Neural Networks
Convolution
두 개의 함수를 섞어주는 operator이다. 합성곱.
5*5*3 이미지 필터로 32*32*3 이미지(텐서)를 컨볼루션하면 28*28*1 피쳐가 나온다. 세 번째 숫자는 뎁스를 가리킨다.
feature맵의 channel 숫자는 convolution filter channel에 따른다. 아래 그림에서 4 5*5*3의 4는 output channel 수이다.
input channel과 output channel의 수를 알면 filter의 수를 알 수 있는데, output channel이 n개라면 filter의 개수도 n개이다.
뉴럴네트워크 성능을 향상시키기 위해 레이어에 투입되는 파라미터를 줄이려는 노력이 있다.
- Stride : 얼마나 건너뛰면서 도장 찍을지 1이면 한 칸씩 옮겨다니는 것
- Padding : 도장 찍기를 위해 가장자리 부분에 어떤 값을 추가하는 것
- 파라미터 수 계산: kernel size * input channel 개수 * output 채널 개수
-Convolution layer : feature를 추출한다.
- Pooling layer : feature를 추출한다.
- Fully connected layer : 분류 따위에서 원하는 출력값을 결정. 최근 추세는 파라미터 감소를 위해 이걸 최소화하려는 추세다
dimension reduction을 위해 1 by 1 convolution에 집중하는 추세다. convolution 레이어를 깊게 쌓는 동시에 파라미터를 줄인다.
Modern Convolution Neural Networks
AlexNet
- ReLU
- 2 GPU
- Data Augmentation
- Dropout
VGGNet
Receptive field를 유지하는 동시에 더 깊은 네트워크 구성 Receptive field : convolution 결과값이 영향을 받은 input의 크기
GoogLeNet
- NIN 구조 : network in network
- Inception block으로 patameter 수 감소
ResNet
parameter가 많으면 training error은 줄어들지만 test error는 늘어나서 overfitting 발생. 그래서 만약에 네트워크가 커진다면 학습이 잘 안 된다.
- convolution layer output에 input을 더해서 convolution layer가 residual(input과의 차이)만 학습한다. 이를 통해 네트워크가 커져도 학습이 잘 이루어진다.
- Bottlenect architecture
DenseNet
- Dense block
- Transition block
Computer Vision Applications
Semantic Segmentation
이미지 픽셀마다 어떤 label에 속하는지 분류한다. 자율주행, 운전 보조장치 등에 사용된다.
fully convolutional network
Convolutionalization : dense layer를 없앤 것. 근데 convolutionalize 해도 파라미터 개수는 같다. 히트맵 결과를 얻을 수 있다.
deconvolution : spatial dimension 키워준다. 사실 convolution의 역연산이 아니다.
Detection
bounding box로 이미지 안에서 물체를 찾는다.
- R-CNN
- SPPNet : cnn이 한 번만 실행됨
- Fast R-CNN
- Faster R-CNN : region proposal network + fast r-cnn
- YOLO
- 이미지를 S by S개의 grid로 나눔
- 각각의 cell은 B개의 bounding box를 예측
- 위와 동시에 각각의 cell은 C개의 class 확률 예측
- 결국 S * S * (5 * B + C) size의 tensor가 나온다.
semantic segmentation 문제랑 detection 문제 해결을 위한 노력에 집중하자.