일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- GoogLeNet
- Skip Connectioin
- Manager
- DCGAN
- Inception Module
- Inception V1
- RNN
- classification
- Generative
- Peephole Connection
- ResNet
- Vanilla RNN
- python
- vim-plug
- Optimizer
- Gated Skip Connection
- Residual Connection
- DL
- Regression
- jupyter
- version
- Bottleneck Layer
- Skip Connection
- AI
- iTerm2
- Linear
- cnn
- virtualenv
- GCN
- sigmoid
- Today
- Total
IT Repository
(5) VGGNet (Small Filters with Deeper Networks) 본문
VGGNet (2014)¶
2014년도 ILSVRC 에서 근소한 차이로 2위를 차지한 모델입니다.
그 해에 1위를 차지한 모델은 이후 설명할 GoogLeNet 입니다. 그러나 GoogLeNet에 비해 훨씬 더 간단한 구조로써 이해가 쉽고 변형하기에 용이하기 때문에
실제로 많은 논문과 실험에서 GoogLeNet 보다 더 많이 사용되는 모델이었습니다.
16~19개의 레이어를 사용하고 16개를 사용한 모델을 VGG16, 19개를 VGG19로 명명했습니다.
VGGNet의 특징은 작은 필터로 더 깊은 네트워크를 구성하는 것입니다.
Small filters, Deeper networks¶
동일한 Receptive Field를 가지는 두 개의 뉴런이 있다고 가정합니다.
(1) 9x9 filter 1개를 통과한 뉴런의 Receptive Field는 9x9 입니다.
(2) 3x3 filter 4개를 stride 1로 통과한 뉴런의 Receptive Field는 9x9 입니다.
(1개 통과했을 때의 Receptive Field는 3x3, 2개는 5x5, 3개는 7x7, 4개는 9x9 가 됩니다.)
그러면 파라미터 관점에서 볼 때 두 모델은 어떠한 차이가 있을까요?
(1)의 경우 9x9 filter 1개이므로 9x9 개의 파라미터를 갖게 됩니다. (81개)
(2)의 경우 3x3 filter 4개이므로 3x3x4 개의 파라미터를 갖게 됩니다. (36개)
이와 같이 동일한 Receptive Field를 볼 때 작은 필터를 여러개 사용해서 깊은 네트워크를 만드는 것은 파라미터의 수를 획기적으로 줄일 수 있습니다.
위의 사례에서도 (2)가 (1)에 비해 1/2 이하의 파라미터를 갖게 됩니다.
파라미터의 수를 줄인다는 것은 두 가지 장점을 가져오게 됩니다.
- 연산량 감소
- 트레이닝이 더 쉬워지고 Overfitting이 덜 일어남
- 층이 더 깊어지므로 더 많은 Activation을 사용하게 되고 더 많은 Non-linearity, 즉 복잡성을 갖게 됨 (= 더 복잡한 정보를 다룰 수 있음)
Problem of VGGNet¶
- 여전히 파라미터 수가 너무 많음 (특히 FC layer에서 122M개의 파라미터)
- 이미지 1개당 Memory 사용량이 약 96MB x 2 (Gradient 포함)으로 너무 큼
(즉, 배치사이즈가 작아질 수 밖에 없어 속도가 느림)
Architecture of VGG16
Conv layer: 3x3 filter size, stride 1, pad 1
Maxpool: 2x2 filter size, stride 2
(http://cs231n.github.io/convolutional-networks/#case 참고)
Layer | Filter size | Number of filters | Output size | Memory | Params |
---|---|---|---|---|---|
Input | - | - | 224x224x3 | 224x224x3 = 150K | 0 |
Conv | 3 | 64 | 224x224x64 | 224x224x64 = 3.2M | (3x3x3)x64 = 1,728 |
Conv | 3 | 64 | 224x224x64 | 224x224x64 = 3.2M | (3x3x64)x64 = 36,864 |
Pool | 2 | - | 112x112x64 | 112x112x64 = 800K | 0 |
Conv | 3 | 128 | 112x112x128 | 112x112x128 = 1.6M | (3x3x64)x128 = 73,728 |
Conv | 3 | 128 | 112x112x128 | 112x112x128 = 1.6M | (3x3x128)x128 = 147,456 |
Pool | 2 | - | 56x56x128 | 56x56x128 = 400K | 0 |
Conv | 3 | 256 | 56x56x256 | 56x56x256 = 800K | (3x3x128)x256 = 294,912 |
Conv | 3 | 256 | 56x56x256 | 56x56x256 = 800K | (3x3x256)x256 = 589,824 |
Conv | 3 | 256 | 56x56x256 | 56x56x256 = 800K | (3x3x256)x256 = 589,824 |
Pool | 2 | - | 28x28x256 | 28x28x256 = 200K | 0 |
Conv | 3 | 512 | 28x28x512 | 28x28x512 = 400K | (3x3x256)x512 = 1,179,648 |
Conv | 3 | 512 | 28x28x512 | 28x28x512 = 400K | (3x3x512)x512 = 2,359,296 |
Conv | 3 | 512 | 28x28x512 | 28x28x512 = 400K | (3x3x512)x512 = 2,359,296 |
Pool | 2 | - | 14x14x512 | 14x14x512 = 100K | 0 |
Conv | 3 | 512 | 14x14x512 | 14x14x512 = 100K | (3x3x512)x512 = 2,359,296 |
Conv | 3 | 512 | 14x14x512 | 14x14x512 = 100K | (3x3x512)x512 = 2,359,296 |
Conv | 3 | 512 | 14x14x512 | 14x14x512 = 100K | (3x3x512)x512 = 2,359,296 |
Pool | 2 | - | 7x7x512 | 7x7x512 = 25K | 0 |
FC | - | - | 4096 | - | 7x7x512x4096 = 102,760,448 |
FC | - | - | 4096 | - | 4096x4096 = 16,777,216 |
FC | - | - | 1000 | - | 4096x1000 = 4,096,000 |
Total | - | - | - | 24M x 4bytes = 93MB | 138M |
Memory: 메모리에 올리는 인풋 이미지를 포함한 각 레이어의 텐서들
Params: 필터(weight)에 있는 파라미터의 개수
Convolution layer: 필터 1개의 파라미터 수(H x W x Depth) x 필터의 수 (참고. Depth = 인풋 tensor의 channel 개수)
FC layer: 인풋 노드의 수 x 아웃풋 노드의 수
직접 확인하고 싶으신 분은 아래 코드를 참조하여 모델의 구조를 확인해보시기 바랍니다.
from tensorflow import keras
VGG16 = keras.applications.vgg16.VGG16()
VGG16.summary()
'CNN > Study' 카테고리의 다른 글
(7) ResNet (Residual Connection) (16) | 2020.01.14 |
---|---|
(6) GoogLeNet (Inception Module & BottleNeck Layer) (0) | 2020.01.14 |
(4) AlexNet (0) | 2020.01.14 |
(3) Basic of CNN - Structure of CNN (4) | 2020.01.14 |
(2) Basic of CNN - Convolutional Operation (0) | 2020.01.14 |