概念:
CNN感受野
在卷積神經網絡中,決定某一層輸出結果中的一個元素所對應的輸入層的區域大小,被稱作感受野(receptive field)。通俗的解釋是,輸出feature map上的一個單元對應輸入層上的區域大小。
VGG結構
?代碼
model.py
配置
cfgs = {'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'],
}
字典文件:每一個key代表的是模型的配置文件
含義:
比如說vgg11:64表示卷積核個數,‘M’表示池化層的結構(maxpooling)
提取特征網絡
def make_features(cfg: list):layers = []in_channels = 3for v in cfg:if v == "M":layers += [nn.MaxPool2d(kernel_size=2, stride=2)]else:conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)layers += [conv2d, nn.ReLU(True)]in_channels = vreturn nn.Sequential(*layers)
傳入的是配置變量cfg,是一個list類型。
**kwargs
def vgg(model_name="vgg16", **kwargs):assert model_name in cfgs, "Warning: model number {} not in cfgs dict!".format(model_name)cfg = cfgs[model_name]model = VGG(make_features(cfg), **kwargs)return model
**kwargs,是傳入的字典變量,字典變量可能包含了分類的個數以及是否初始化權重的布爾變量
訓練時間長,效果也不好,所以訓練細節忽略。