04. VGG
04. VGG¶
๊ฐ์¶
VGGNet์ 2014๋ ILSVRC์์ 2์๋ฅผ ์ฐจ์งํ ๋ชจ๋ธ๋ก, Karen Simonyan๊ณผ Andrew Zisserman์ด ์ ์ํ์ต๋๋ค. "Very Deep Convolutional Networks for Large-Scale Image Recognition" ๋ ผ๋ฌธ์์ 3x3 ์์ ํํฐ๋ฅผ ๊น๊ฒ ์๋ ๊ฒ์ด ํจ๊ณผ์ ์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
์ํ์ ๋ฐฐ๊ฒฝ¶
1. 3x3 ํํฐ ์คํ์ ํจ๊ณผ¶
์ 3x3 ํํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ์๋๊ฐ?
2๊ฐ์ 3x3 conv โ 1๊ฐ์ 5x5 conv (๊ฐ์ receptive field)
3๊ฐ์ 3x3 conv โ 1๊ฐ์ 7x7 conv
์ฅ์ :
1. ํ๋ผ๋ฏธํฐ ์ ๊ฐ์:
- 7x7: 49Cยฒ ํ๋ผ๋ฏธํฐ
- 3x3 ร 3: 27Cยฒ ํ๋ผ๋ฏธํฐ (45% ๊ฐ์)
2. ๋น์ ํ์ฑ ์ฆ๊ฐ:
- 7x7: 1๊ฐ์ ReLU
- 3x3 ร 3: 3๊ฐ์ ReLU โ ๋ ๋ณต์กํ ํจ์ ํ์ต ๊ฐ๋ฅ
2. Receptive Field ๊ณ์ฐ¶
๋ ์ด์ด๊ฐ ์์ผ์๋ก receptive field ์ฆ๊ฐ:
RF = (RF_prev - 1) ร stride + kernel_size
์์ (stride=1, kernel=3):
- Layer 1: RF = 3
- Layer 2: RF = 5
- Layer 3: RF = 7
- Layer 4: RF = 9
...
MaxPool (kernel=2, stride=2) ํ:
- RF๊ฐ 2๋ฐฐ๋ก ํ์ฅ
3. Feature Map ํฌ๊ธฐ ๋ณํ¶
Conv (stride=1, padding=1, kernel=3):
H_out = H_in (ํฌ๊ธฐ ์ ์ง)
MaxPool (kernel=2, stride=2):
H_out = H_in / 2 (ํฌ๊ธฐ ์ ๋ฐ)
224 โ [Convร2] โ 224 โ Pool โ 112 โ [Convร2] โ 112 โ Pool โ 56 โ ...
VGG ์ํคํ ์ฒ¶
VGG ๋ณํ ๋น๊ต¶
| ๊ตฌ์ฑ | VGG11 | VGG13 | VGG16 | VGG19 |
|---|---|---|---|---|
| Conv Layers | 8 | 10 | 13 | 16 |
| FC Layers | 3 | 3 | 3 | 3 |
| Total Layers | 11 | 13 | 16 | 19 |
| Parameters | 133M | 133M | 138M | 144M |
VGG16 ์์ธ ๊ตฌ์กฐ¶
์
๋ ฅ: 224ร224ร3 RGB ์ด๋ฏธ์ง
Block 1: [Conv3-64] ร 2 + MaxPool
(224ร224ร3) โ (224ร224ร64) โ (112ร112ร64)
Block 2: [Conv3-128] ร 2 + MaxPool
(112ร112ร64) โ (112ร112ร128) โ (56ร56ร128)
Block 3: [Conv3-256] ร 3 + MaxPool
(56ร56ร128) โ (56ร56ร256) โ (28ร28ร256)
Block 4: [Conv3-512] ร 3 + MaxPool
(28ร28ร256) โ (28ร28ร512) โ (14ร14ร512)
Block 5: [Conv3-512] ร 3 + MaxPool
(14ร14ร512) โ (14ร14ร512) โ (7ร7ร512)
Classifier:
Flatten: 7ร7ร512 = 25,088
FC1: 25088 โ 4096 + ReLU + Dropout
FC2: 4096 โ 4096 + ReLU + Dropout
FC3: 4096 โ 1000 (classes)
ํ๋ผ๋ฏธํฐ ๋ถํฌ:
- Conv layers: ~15M (11%)
- FC layers: ~124M (89%) โ ๋๋ถ๋ถ!
VGG ์ค์ (Configuration)¶
cfg = {
'VGG11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
'VGG13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
'VGG16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],
'VGG19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
}
# 'M' = MaxPool
ํ์ผ ๊ตฌ์กฐ¶
04_VGG/
โโโ README.md # ์ด ํ์ผ
โโโ pytorch_lowlevel/
โ โโโ vgg_lowlevel.py # F.conv2d, F.linear ์ฌ์ฉ
โโโ paper/
โ โโโ vgg_paper.py # ๋
ผ๋ฌธ ์ํคํ
์ฒ ์ ํ ์ฌํ
โโโ exercises/
โโโ 01_feature_visualization.md # ๊ฐ ๋ธ๋ก feature map ์๊ฐํ
โโโ 02_transfer_learning.md # ์ฌ์ ํ์ต ๊ฐ์ค์น ํ์ฉ
ํต์ฌ ๊ฐ๋ ¶
1. Deep & Narrow vs Shallow & Wide¶
VGG ์ด์ : ํฐ ํํฐ + ์์ ๋คํธ์ํฌ
- AlexNet: 11ร11, 5ร5 ํํฐ
- ์ ์ ๋ ์ด์ด
VGG: ์์ ํํฐ + ๊น์ ๋คํธ์ํฌ
- ์ค์ง 3ร3 ํํฐ (+ ์ผ๋ถ 1ร1)
- 16~19 ๋ ์ด์ด
๊ฒฐ๋ก : ๊น์ด๊ฐ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์
2. ๊ท ์ผํ ๊ตฌ์กฐ¶
VGG์ ์ค๊ณ ์์น:
1. ๋ชจ๋ Conv๋ 3ร3, stride=1, padding=1
2. ๋ชจ๋ MaxPool์ 2ร2, stride=2
3. ๋ธ๋ก๋ง๋ค ์ฑ๋ ์ 2๋ฐฐ ์ฆ๊ฐ (64โ128โ256โ512)
4. ๊ฐ๋จํ๊ณ ๊ท์น์ โ ์ดํด/๊ตฌํ ์ฉ์ด
3. VGG์ ํ๊ณ¶
๋จ์ :
1. ํ๋ผ๋ฏธํฐ ๊ณผ๋ค (138M, ResNet-50: 25M)
2. ๋ฉ๋ชจ๋ฆฌ ์๋น ํผ (FC ๋ ์ด์ด)
3. ํ์ต ๋๋ฆผ
4. Gradient vanishing (๊น์ด์ง์๋ก)
ํ์ ์ฐ๊ตฌ:
- GoogLeNet: Inception ๋ชจ๋๋ก ํจ์จ์ฑ
- ResNet: Skip connection์ผ๋ก ๋ ๊น๊ฒ
- MobileNet: Depthwise separable conv
4. VGG as Feature Extractor¶
VGG๋ ํน์ง ์ถ์ถ๊ธฐ๋ก ๋๋ฆฌ ์ฌ์ฉ:
1. Style Transfer
- ์ฝํ
์ธ : block4_conv2
- ์คํ์ผ: block1~5_conv1
2. Perceptual Loss
- ํฝ์
์์ค ๋์ VGG ํน์ง ๋น๊ต
3. Object Detection
- VGG backbone + detection head
๊ตฌํ ๋ ๋ฒจ¶
Level 2: PyTorch Low-Level (pytorch_lowlevel/)¶
- F.conv2d, F.max_pool2d, F.linear ์ฌ์ฉ
- nn.Conv2d, nn.Linear ๋ฏธ์ฌ์ฉ
- ํ๋ผ๋ฏธํฐ ์๋ ์ด๊ธฐํ ๋ฐ ๊ด๋ฆฌ
- ๋ธ๋ก ๋จ์ ๋ชจ๋ํ
Level 3: Paper Implementation (paper/)¶
- ๋ ผ๋ฌธ์ ๋ชจ๋ ์ค์ ์ฌํ
- Batch Normalization ์ถ๊ฐ (VGG-BN)
- ๋ค์ํ VGG ๋ณํ ์ง์
ํ์ต ์ฒดํฌ๋ฆฌ์คํธ¶
- [ ] 3ร3 ํํฐ ์คํ์ ์ฅ์ ์ดํด
- [ ] Receptive field ๊ณ์ฐ ๋ฐฉ๋ฒ ์์ง
- [ ] VGG16 ์ํคํ ์ฒ ์๊ธฐ
- [ ] ํ๋ผ๋ฏธํฐ ๋ถํฌ ์ดํด (Conv vs FC)
- [ ] VGG๋ฅผ feature extractor๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ
- [ ] VGG์ ํ๊ณ์ ํ์ ๋ชจ๋ธ ๋น๊ต
์ฐธ๊ณ ์๋ฃ¶
- Simonyan & Zisserman (2014). "Very Deep Convolutional Networks for Large-Scale Image Recognition"
- torchvision VGG
- CS231n: ConvNets
- ../03_CNN_LeNet/README.md