VGG16 이란?

VGG16은 옥스포드 대학의 연구팀 VGG에 의해 개발된 모델로써,

이미지넷 이미지 인식 대회에서 준우승을 한 모델입니다.

우승은 GoogLeNet이 했지만 사용하기 쉬운 구조와 좋은 성능 덕분에 VGG16이 더 인기를 얻었습니다.

 

VGG16은 네트워크의 깊이를 깊게 만드는 것이 성능에 어떤 영향을 미치는지를 확인하고자 한것입니다.

깊이의 영향만을 확인하고자 필터커널 사이즈를 가장 작은 3x3으로 고정했습니다.

여기서 D에 해당하는것이 VGG16입니다.

conv3을 연속적으로 사용했는데 그 이유를 알아보겠습니다.

① 3x3 필터로 두차례 컨볼루션 = 5x5 필터로 한번 컨볼루션 → 동일한 사이즈

② 3x3 필터로 세차례 컨볼루션 = 7x7 필터로 한번 컨볼루션 → 동일한 사이즈

 

여기서, 가중치 수를 계산해보겠습니다.

① 3x3 + 3x3 = 18 < 5x5 → 즉, 3x3을 두차례 사용한것이 더욱 가볍습니다.

② 3x3 + 3x3 + 3x3 = 27 < 7x7 → 즉, 3x3을 세차례 사용한것이 더욱 가볍습니다.

이렇게 가중치의 수가 적어집니다.

그로인해 학습시킬 가중치의 개수가 줄어들어 학습속도가 빨라지고,

동시에 층의 갯수가 늘어나서 비선형성을 더욱 증가시킬 수 있습니다.

 


VGG16 구조

마지막이 1000인 이유는 이미지넷 대회에서는 1000개의 label이 있기 때문입니다.

또한 위에서 설명한것과 같이 필터 사이즈를 3x3로 공되어 있습니다.

 


Code

 

url은 이미 train된 모델들의 가중치 값들을 다운받아 올 수 있는 url 입니다.

위에서 설명한 것과 같이 VGG16은 손으로 일일이 타이핑 하기에 굉장히 귀찮을 수 있기 때문에

features에 간단한 숫자나 기호를 넣어주면 자동으로 Layer를 구축할 수 있게 해줍니다.

여기서 init_weights=True면 가중치들을 초기화 해주는 함수입니다.

features와 classifier들의 가중치들을 초기화 해줍니다.

nn.init.kaiming_normal_ 이 함수는 어떤 activation을 사용하냐에 따라서 weight 초기화를 해줍니다.

kaiming_he 검색해보기!

make_layers에 cfg를 인수로 넣어줌으로써 layer를 편하게 쌓을 수 있게 됩니다.

 

 

 

 

 

 

출처:

https://www.youtube.com/watch?v=KbNbWTnlYXs&list=PLIMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=38 

https://www.youtube.com/watch?v=opD4z9xoBv4&list=PLQ28Nx3M4JrhkqBVIXg-i5_CVVoS1UzAv&index=24&t=167s 

 

https://bskyvision.com/504

'Deep Learning > Pytorch' 카테고리의 다른 글

21_Pytorch_RNN  (0) 2021.10.06
20_Pytorch_ResNet  (0) 2021.10.06
18_Pytorch_CNN_MNIST  (0) 2021.09.30
17_Pytorch_CNN (Convolutional_Neural_Network)  (0) 2021.09.30
16_Pytorch_Batch_Normalization  (0) 2021.09.29

+ Recent posts