-
VGG Net (2014.09)AI\ML\DL/๋ ผ๋ฌธ ๋ฆฌ๋ทฐ 2023. 9. 16. 14:25๋ฐ์ํ
* * *
ํ 1. VGGNet์ ConvNet ๊ตฌ์ฑ VGGNet์ 2014๋ ๋ ILSVRC (ImageNet Large Scale Visual Recognition Challenge)์์ ์ค์ฐ์นํ CNN ๋คํธ์ํฌ์ด๋ค. VGGNet์ ๋ ผ๋ฌธ ์ ๋ชฉ์ "Very deep convolutional networks for large-scale image recognition"์ผ๋ก, ๋คํธ์ํฌ ๊น์ด๋ฅผ ๊น๊ฒ ๋ง๋๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋ ์ง ํ์ธํ๋ ๋ชฉ์ ์ ๊ฐ์ง๋ค. VGGNet์๋ A, A-LRN, B, C, D, E๊ฐ ์๋๋ฐ ๋ณธ ํฌ์คํ ์ 16๊ฐ์ layer ๋ฅผ ๊ฐ์ง D์ ๋ํด์ ์ ๋ฆฌํ๋ค.
D๋ถ๋ถ๊ณผ ์๋์ MLP๋ฅผ ํฉ์ณ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ธ ๊ฒ์ ์๋์ ๊ฐ๋ค.
ํ 1์ D ๋ชจ๋ธ์ ํต๊ณผํ output์ shape์ ๊ณ์ฐํด๋ณด์๋ค. conv3 ๋ฅผ ๋ฐ๋ณตํ๋ฉด์ ์ฑ๋ ์๋ฅผ ๊น๊ฒ ๋ง๋ค๊ณ max pooling์ ํตํด์ spatial size๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ฌ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ padding๊ณผ stride๋ฅผ ๊ฐ๊ฐ 1๋ก ์ฃผ์ด์ spatial size๋ฅผ ์ ์งํ๋ค.
๋ง์ง๋ง conv3-512 ๋ฅผ ํตํด 7x7๊น์ง ์ฌ์ด์ฆ๋ฅผ ์ค์ฌ์ FC layer๋ฅผ ํต๊ณผํ๋ ์ด์ ๋ 7x7 ์ feature map์์ ํฝ์ ๊ฐ๊ฐ์ด ๊ฐ์ง๋ receptive field๋ ์ด๋ฏธ์ง์ ์ ์ฒด๋ฅผ ํฌํจํ์ง๋ ๋ชปํ๊ณ ์ผ๋ถ๋ฅผ ๋ณด๊ณ ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ FC layer๋ก ๋ค ์ฐ๊ฒฐํด์ฃผ์ด์ ๋ชจ๋ ์์ญ์ ๊ณ ๋ คํด ์ฃผ๋ ๊ฒ์ด๋ค.
VGG Net์์ ๋๊น์ง conv + maxpooling ๋ฅผ ํด์ 1x1๊น์ง ์ค์ด์ง ๋ชปํ ์ด์ ๋ฅผ ์๊ฐํด๋ณด๋ฉด,
- *loss landscape๊ฐ ๊ผฌ๋ถํด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ ์ด์ด๋ฅผ ๋๋ฌด ๊น๊ฒ ๋ง๋ค๋ฉด underfitting์ด ๋ฐ์ํ๋ ๋ฌธ์ ๋ฐ์
*Li, Hao, et al. "Visualizing the loss landscape of neural nets." 62 Advances in neural information processing systems 31 (2018). - Max-pooling์ ๋๋ฌด ๋ง์ด ํ๋ค๋ฉด ๊ณต๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ๋๋ฌด ์๋๋ค! ์ด๋์ ํน์ง์ด ์์นํ๋์ง์ ์ ๋ณด๊ฐ ๋๋ฌด ๋ญ๋ฑ๊ทธ๋ ค์ง..
FC layer๋ฅผ ํต๊ณผํ๋ฉด ๋ชจ๋ธ์ ๊ฐ์ค์น์ ๊ฐ์๊ฐ ๋งค์ฐ ๋์ด๋๊ฒ ๋๋๋ฐ, ์ค์ ๋ก vgg16์ ์ ์ฒด ๋ ์ด์ด์ ๊ฐ์ค์น ์ค 80%์ ๋น์ค์ FC layer ๋จ์์ ์ฐจ์ง ํ๊ณ ์๋ค.
VGG Net๋ณด๋ค ์๋ฑํ ์ฑ๋ฅ์ด ์ข์ Inception Net, ResNet์ conv layer ๋ง์ง๋ง์ 1x1์ด ๋๋๋ก GAP๋ฅผ ํด๋ฒ๋ฆฌ๋๋ฐ, ์ด๋
- 7x7๋ก ์ค์ธ ๋ค์ conv ๋ช ๋ฒ ๋ ๊ฑฐ์ณ์ 1x1๊น์ง ์ค์ด๋ฉด ํฝ์ ํ๋์ receptive field๊ฐ ๊ฑฐ์ ์ด๋ฏธ์ง ์ ์ฒด ์ ๋ณด๋ฅผ ๋ด๊ฒ ๋๋ค.
- ๋ชจ๋ธ ์์ฒด๊ฐ ํจ์ฌ ๊น๋ค.
๋ฐ๋ผ์ GAPํ๋๋ผ๋ ๊ต์ฅํ ์ ์๋ฏธํ ํน์ง๋ค์ ๋ด์ ์ ์๊ฒ ๋๋ค.
๊ทธ๋์ GAP ์ดํ fc ๋ง ํต๊ณผํด๋ ์ถฉ๋ถํ๋ค. ์ฆ, MLP์ ์์กดํ์ง ์๊ณ CNN์ ํจ๊ณผ๋ฅผ ์ต๋๋ก ๋ณผ ์ ์๋ค.
๋ชจ๋ธ ๊ตฌํ
1. import ํ๊ธฐ
import torch from torch import nn !pip install torchinfo from torchinfo import summary
2. D ๋ถ๋ถ์ dictionary๋ก ์ ์ฅํ๊ธฐ
cfgs = {"D": [64, 64, "M", 128, 128, "M", 256, 256, 256, "M", 512, 512, 512, "M", 512, 512, 512, "M"]}
ํ 1์ D (ConvNet).
int ํ์ output_channel์ ์๋ฏธํ๊ณ , "M" (strํ)์ Max pooling์ ์๋ฏธํ๋ค.
3. VGG ๋ชจ๋ธ ํด๋์ค ์ ์
1) ํด๋์ค ์ ์
- ConvNet ๋ถ๋ถ์ make_layers ํจ์๋ฅผ ๋ฐ๋ก ์ ์ํ์ฌ ๋ ์ด์ด๋ฅผ cfg์ ์์์ ๋ง๊ฒ append ์์ผ์ค ๊ฒ์ด๋ค.
- ConvNet ์ดํ์ Adaptive average pooling์ ์ ์ฉํด์ฃผ๋ ์ด์ : ์๋ฌ ๋ฐฉ์ง์ฉ
๋ง์ง๋ง Max-pooling ์ ํ๋ฉด 512x7x7 ๊ฐ ๋์ด์ผ ํ๋๋ฐ ์ ๋ ฅ ์ด๋ฏธ์ง๋ก 224x224 ํฌ๊ธฐ๋ฅผ ์์ฃผ๊ณ
64x64 ๋ฅผ ์ค๋ค๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค (Max-pooling ๋ค์ฏ๋ฒ ํ๋ฉด 7x7์ด ์๋๋ผ 2x2 ๊ฐ ๋จ์ผ๋๊น).
์ด๋ฐ ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๋ณต์ ๋ฅผ ํด์๋ผ๋ ConvNet ์ดํ์ 7x7๋ก ๋๋ ค์ฃผ๋ ์ญํ ์ ํ๋
Adaptive average pooling์ ์ ์ฉํด์ค๋ค.
- classifier ๋ถ๋ถ์ fc layer ์ค๊ฐ์ค๊ฐ์ relu, dropout์ ์ ์ฉํด์ฃผ์๋ค.
2) ๊ฐ์ค์น ์ด๊ธฐํ
- init_weights๊ฐ True์ผ ๊ฒฝ์ฐ, ๊ฐ์ค์น ์ด๊ธฐํ๋ฅผ ํด์ฃผ๋ ๋ถ๋ถ์ด๋ค. nn.modules()๋ฅผ ํด์ฃผ๋ฉด ๋ชจ๋ธ์ ๋ชจ๋ ๋ชจ๋๋ค (๋ ์ด์ด)๋ฅผ ๋ถ๋ฌ์จ๋ค. nn.Conv2d ๋ ์ด์ด์ ๋ํด์๋ Kaiming He ๋ฐฉ์์ผ๋ก weight initialization์ ํด์ฃผ๊ณ ,
nn.Linear ๋ ์ด์ด์ ๋ํด์๋ ํด๋น ๋ ์ด์ด์ ๊ฐ์ค์น๋ฅผ ํ๊ท 0, ํ์คํธ์ฐจ 0.01์ธ ์ ๊ท๋ถํฌ๋ฅผ ๋ฐ๋ฅด๋๋ก ์ด๊ธฐํ ํด์ค๋ค. ๋ ๊ฐ์ง ์ข ๋ฅ ๋ ์ด์ด์ ๋ชจ๋ ์ ์ฉ๋ nn.init.constant_()๋ bias๋ฅผ 0์ผ๋ก ์ค์ ํด์ค๋ค.
3) ๋ ์ด์ด ํต๊ณผ
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ ๋ ์ด์ด์ ํต๊ณผ์์ผ์ค๋ค.
4) ConvNet ๋ ์ด์ด ์ ์
ConvNet ์ ๋ ์ด์ด๋ฅผ append ํด์ฃผ๋ ํจ์์ด๋ค. ์ด๋ ํ 1์ D ๋ง๊ณ ๋ ๋ค๋ฅธ ์ ํ์ ๊ตฌํํ ๋๋ ๋๊ฐ์ด ์ ์ฉํ ์ ์์ด์ ์ ์ฉํ๋ค.
์ด๊ธฐ์ layers ๋ ๋น ๋ฆฌ์คํธ๋ก ์ ์ฅํด์ฃผ๊ณ ๋งจ ์ฒ์ in_channels ๋ RGB ์ด๋ฏธ์ง๋๊น 3์ผ๋ก ์ค์ ํด์ค๋ค.
model ๋ถ๋ฌ์ฌ ๋ VGG(cfgs["D"]) ์ด๋ ๊ฒ ์ธ์๋ฅผ ๋ฃ์ด์ฃผ๊ธฐ ๋๋ฌธ์ intํ๊ณผ str ํ์ด ๋ชจ๋ ํฌํจ๋ D ์ ํด๋นํ๋ ๋ฆฌ์คํธ์์,
๋ฆฌ์คํธ ์์๊ฐ int ํ์ด๋ผ๋ฉด nn.Conv2d ๋ ์ด์ด๋ฅผ ์์์ค๋ค.
๋ฆฌ์คํธ ์์๊ฐ str ํ์ด๋ผ๋ฉด nn.MaxPool2d ๋ ์ด์ด๋ฅผ ์์์ค๋ค.
๋ฆฌ์คํธ์ ํฌํจ๋ ์ซ์๋ค์ out_channels๋ฅผ ์๋ฏธํ๊ณ , ์ด ์ซ์๋ ๋ค์ ๋ ์ด์ด์ in_channel์ด ๋๋ฌธ์
in_channels = v ๋ก ์ ๋ฐ์ดํธ ํด์ค๋ค.
๋ง์ง๋ง์ผ๋ก ๋ชจ๋ ๋ ์ด์ด๋ฅผ nn.Sequential ๋ก ๋ฌถ์ด์ค๋ค. (์ด๋ ๋ฆฌ์คํธ๋ก ๋ค์ด๊ฐ ์ ์์ด์ *์ ๊ผญ! ๋ถ์ฌ์ค๋ค.)
5) model summary
model = VGG(cfgs["D"], batch_norm=False) summary(model, input_size=(2, 3, 224, 224), device='cpu')
torchinfo์ summary ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ธ์ ๊ตฌ์กฐ์ ํ๋ผ๋ฏธํฐ ํฌ๊ธฐ๋ฅผ ๋ณด๊ธฐ ์ข๊ฒ ํํํด์ค๋ค.
output shape์ ํ์ธํด๋ณด์!
code: https://github.com/jeongin7103/VGGNet/blob/main/vggnet.ipynb
Receptive field of 3x3
https://deep-learning-basics.tistory.com/58
Receptive field
In the context of artificial neural networks, the receptive field is defined as the size of the region in the input that produces the featres. Wikipedia CNN์ local operation(i.e., convolution, pooling)์ ํตํด ์ฌ๋ฌ ๋ฒ ๋ ์ด์ด๋ฅผ ๊ฑฐ์น๋ฉด์ ์
deep-learning-basics.tistory.com
์์ ํฌ์คํธ ๋ด์ฉ์ ๊ณต๋ถํ๋ฉด 3x3 Conv ๋ฅผ ๋ ๋ฒ ํ๋ฉด 5x5 ํฌ๊ธฐ์ receptive field๋ฅผ ์ป์ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
VGGNet ์์๋ 3x3 conv ๋ฅผ ๋ ๋ฒํด์ 5x5 receptive field๋ฅผ ์ป์๋ค.
vggnet์ ์ผ๋ถ 3x3 ๋๋ฒ์ผ๋ก 5x5์ receptive field๋ฅผ ์ป์ VGGNet ๊ทธ๋ฐ๋ฐ ์ 3x3 ๋ฅผ ๊ตณ์ด 2๋ฒ ํ ๊น? ๊ทธ๋ฅ 5x5 conv ํ ๋ฒ ํ๋ฉด ํ ๋ฒ์ ๋ฐ๋ก receptive field 5x5๋ฅผ ์ป์ ์ ์์ ํ ๋ฐ..
์ด์ ๋ ๋ฐ๋ก ํ๋ผ๋ฏธํฐ ์๋ฅผ ์ค์ผ ์ ์๋ค๋ ๋ฐ ์๋ค.
3x3 conv ๋ฅผ ๋ ๋ฒ ํ๋ฉด ํ๋ผ๋ฏธํฐ ๊ฐ์๊ฐ 9+9 ๊ฐ๋งํผ ํ์ํ๋ค.
๊ทธ๋ฐ๋ฐ 5x5 conv๋ฅผ ํ ๋ฒ ํ๋ฉด ํ๋ผ๋ฏธํฐ ๊ฐ์๊ฐ ๋ฐ๋ก 25๊ฐ ๋งํผ ์๊ธด๋ค.
๋๊ฐ์ receptive field๋ฅผ ์ป๋๋ฐ 3x3 conv๋ฅผ ๋ ๋ฒ ํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ๋ก (ํ๋ผ๋ฏธํฐ ์๋ฅผ ๋ ์ ๊ฒ) ์ป์ ์ ์๋ค๋ ๊ฒ์ด๋ค.
'AI\ML\DL > ๋ ผ๋ฌธ ๋ฆฌ๋ทฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Evaluation for Weakly Supervised Object Localization: Protocol, Metrics, and Datasets (0) 2023.10.03 Inception Net (2014.09) (0) 2023.09.17 SSD: Single-Shot Multibox Detector (0) 2023.08.24 cyclic ordinal regression ํ์ต๋ฒ (0) 2023.07.28 - *loss landscape๊ฐ ๊ผฌ๋ถํด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ ์ด์ด๋ฅผ ๋๋ฌด ๊น๊ฒ ๋ง๋ค๋ฉด underfitting์ด ๋ฐ์ํ๋ ๋ฌธ์ ๋ฐ์