이전 포스팅에서는 [파이토치로 시작하는 딥러닝 기초] 강의에서 다룬 advanced CNN - VGG에 관하여 포스팅했다.
그런데 그 강의에서는 이론적인 내용이 부족하다고 생각되어 조금 더 찾아본 후 , 포스팅을 남긴다.
실습에 관한 포스팅을 보고 싶을 경우, 아래의 포스팅을 참고하면 될 듯 하다.
2021/01/07 - [Study/DL_Basic] - [파이토치로 시작하는 딥러닝 기초]10.4_Advance CNN(VGG)
개요
VGG는 Oxford University에서 개발되었고, 2014 ImageNet Challenge에서 GoogLeNet에 근소한 차이로 밀려 아쉽게 2위를 차지한 네트워크이다. 그러나 GoogleNet에 비해 구조가 매우 간단하고, 성능도 큰차이가 없어서 사람들이 많이 찾는 알고리즘이 되었다. 신경망의 깊이가 딥러닝의 정확도에 큰 영향을 미친다는것을 보여준 알고리즘이다.
VGG 모델의 의미는 아래와 같다.
- VGG : Visual Geometry Group
신경망 모델의 깊이(모델의 레이어 수)에 따라서 VGG11, VGG13, VGG16, VGG19 등으로 나타낼 수 있다.
구조
VGG16의 구조는 아래와 같다.
- 13 Convolution Layers + 3 Fully connected Layers
- 3x3 convolution filters
- 1 stride & 1 padding
- 2x2 max pooling (2 stride)
- ReLU
위처럼 레이어의 수에 따라 VGG의 구조는 조금씩 바뀌지만 기본적인 구조는 동일하다.
사실 VGG net은 network의 깊이가 어떤 영향을 주는 지 연구를 하기 위해 설계된 network이다.
그래서 모든 convolution kernel의 사이즈를 한 사이즈로 정하고 convolution의 개수를 늘리는 방식으로 테스트를 진행한다.
깊이에 따른 각 레이어의 크기는 아래와 같다.
VGG16을 예로 들면, convolution kernel이 3x3인 64개의 필터를 매개변수로 사용하여 2 레이어를 쌓고, maxpooling을 거쳐 이미지의 사이즈를 줄인다.
그리고 128개 layer 2개, maxpooling, 256개 filter를 가진 layer 2, maxpooling, 512개 filter를 가진 layer 3, maxpooling, 이후 fully connected layer -> soft max를 사용함으로써 구조를 마무리했다.
왜 3X3필터를 사용했을까?
VGG 모델 이전에 Convolutional Network를 활용한 모델들은 비교적 큰 11x11이나 7x7 filter를 사용했다.
그러나 VGG모델은 filter의 최소 단위인 3x3필터만 사용했음에도 이미지 분류 정확도에서 높은 성능을 보였다.
이를 통해 필터의 크기보다 깊이를 늘렸을 경우에 대한 장점은 아래와 같이 나타났다.
1. 결정 함수의 비선형성 증가
각 Convolution 연산은 ReLU 함수를 포함한다. 그렇게 되면, 7X7필터링을 한번 하는 것보다 3x3 필터링을 3번 한 것이 비선형 함수가 더 많이 적용된다.
레이어가 증가함에 따라 비선형성이 증가하게 되면 모델의 특징 식별성 증가로 이어진다.
2. 학습 파라미터 수의 감소
Convolution Network구조를 학습할 때, 학습 대상인 가중치는 필터의 크기에 해당한다.
따라서 7x7 필터 1개에 대한 학습 파라미터 수는 49이고, 3x3 필터 3개에 대한 학습 파라미터 수는 27이 된다.
그렇기 때문에 큰 필터 하나를 사용하는 것보다 작은 필터 레이어를 깊이 쌓는 것이 학습 파라미터 수를 크게 감소시킬 수 있다.
Fully convolutional net
convolutional layer 끝에는 3개의 Fully connected layer를 Convloutional layer로 변환하여 사용하였다.
첫번째 Fully Connected layer는 7x7 Conv로, 마지막 Fully Connected layer는 1x1 Conv로 변환하였다. 이런식으로 변환된 신경망을 Fully Convolutional Networks라고 부란다. 변환하는 과정은 Average Pooling과정을 거쳤다.
결론
VGG를 통해 네트워크의 깊이가 깊어질수록 이미지 분류 정확도가 높아지는 것을 확인할 수 있다. 그러나 이들이 실험한 VGG19 이상으로 layer를 쌓을 경우 오버피팅의 가능성으로 성능이 더 나빠질 수 있음을 고려해야 한다. 그리고
네 개의 NVIDIA Titan Black GPU를 사용했음에도 네트워크 하나를 학습시키는데 2~3주가 걸렸다는 비효율의 문제를 안고 있다.
그럼에도 간단한 구조로도 깊이에 따라 높은 성능을 보일 수 있다는 것이 VGG의 가장 큰 영향이었다고 생각이 된다.
참고 :
m.blog.naver.com/laonple/221259295035
'Study > DL_Basic' 카테고리의 다른 글
[Deep Learning] Activation function(활성화함수)이란? (0) | 2021.04.22 |
---|---|
[파이토치로 시작하는 딥러닝 기초]10.4_Advance CNN(VGG) (0) | 2021.01.07 |
[파이토치로 시작하는 딥러닝 기초]10.3 ImageFolder / 모델 저장 / 모델 불러오기 (0) | 2021.01.04 |
[파이토치로 시작하는 딥러닝 기초]10.2_visdom (0) | 2020.12.31 |
[파이토치로 시작하는 딥러닝 기초]10.1_Convolutional Neural Network (0) | 2020.12.30 |