본 포스팅은 2022-11-23(수), 2022-11-28(월) 국민대학교 김장호 교수님의 컴퓨터 비전 수업을 통해 배운내용을 정리하기 위한 게시글입니다.
# 시작하며
이번시간에는 저번 인공지능 시간에 배웠던거와 같이 CNN모델(네트워크)들에 대해서 공부했다.
AlexNet, VGG, GoogLeNet, Residual Networks 이렇게 4가지에 대해서 공부했다.
# AlexNet
AlexNet은 5개의 Convolutional layer와 MaxPooling, 3 Fully-Connected Layer를 사용해서 구현한다. 두개의 GPU를 활용해서 모델을 분리하여 훈련시킨 특징이 있다.
위와 같 각 Layer를 지날때마다, 결정되는 OutputSize와 파라메타들이 존재하는데, OuputSize의 H/W 는 저번에 배웠던 ( H - K + 2P ) / S + 1의 공식을 활용하면 손쉽게 구할 수 있다. 추가적으로 매개변수의 갯수를 곱하는건 딱히 공식을 외운다기보다는 커널의 넓이*input채널의 갯수*아웃풋 채널의 갯수로 구할 수 있다.
AlexNet의 파라메타를 살펴보면, 대부분이 FC레이어에서 생김을 알 수 있다.
# VGGNet
VGGNet은 3*3 conv(stride 1, padding 1, 3*3) 을 계속해서 쌓아주는 형태이다. 해당 레이어가 끝나면 double pooling을 해준다. 이렇게 구성함으로써 층을 거듭할 수록 채널의 갯수는 많아지고 이미지 사이즈는 작아지는 형태로 구성 된다.
3*3 conv을 사용하는 이유는, 5*5를 사용했을때도 동일한 크기를 보게 돼지만, 파라메타의 수가 많아지기 때문에 3*3을 사용한다.
앞서 살펴본 AlexNet에 비해 모델이 커지고 깊어졌기때문에 훨씬 많은 파라메타와 연산 속도를 보임을 알 수 있다. 그러나 그만큼 분류 능력이 더 좋아졌다.
# GoogLeNet
GoogLeNet은 3가지 주요 특징을 가진다.
- Inception module
- Global Average Pooling
- Auxiliary Classifiers
## Inception module
첫번째 특징은, 병렬적인 특징을 가진다는 것이다. 모든 레이어를 연결 시키지 않고, 병렬의 모양을 띈다.
## Global Average Pooling
다음과 같이 분류기의 역할을 하는 단계에서, Global Average Pooling을 사용한다는 것이다. FC Layer를 사용하게 되면 파라메타가 급격히 증가하기 때문에, avg-pooling을 사용한다.
## Auxiliary Classifiers
중간중간층마다, 보조분류기를 사용해서 학습이 저하되는 효과를 없앤다. backward단계를 거쳐 gradient가 전파 될텐데, 끝단에 가면 이 gradient가 미비해질 수 있다. 그렇기 떄문에 중간에 보조 분류기를 사용해서 이문제를 해결 할 수 있도록 한다.
# Residual Networks
모델이 커진다면, 당연히 학습률이 좋아야 할 것이다. 오버피팅이 나더라도. 근데 위처럼 일반적으로 모델을 깊이 쌓았을때, 언더피팅, 즉 학습이 잘 되지 않는 것을 알 수 있다. 못해도 20-layer의 성능보다는 좋아야하는데 말이다. 그래서 나온게 Residual Networks이며 일반적으로 이 모델만 칭한게 아니라 Residual 방법을 많이 활용한다.
shorcut을 구성하여 최소 성능을 보장할 수 있도록 한다. 만일 해당 conv가 다 0이라면 X의 값이 그대로 나올 것이기 때문이다.
## Bottleneck Block
Layer를 거듭하면서 계속해서 채널의 갯수를 늘리고 싶을때 사용하는 방법이다.
1*1 Conv를 사용해서 채널의 개수를 줄여주고, 다시 내보낼때 채널의 개수를 늘려준다.
## Pre-Activation
ReLU를 블럭 안에 넣어줌으로써, X가 말그대로 그대로 통과 할 수 있도록 해준다.
## ResNeXt
병렬과 같은 구조로 만들어 준다. Concate이 아닌 Sum을 사용해야 한다.
## SE
채널별로도 어떤 의미를 더 자세히 보기 위해서 사용한다.
# 분류 성능