论文:Very Deep Convolutional Networks for Large-Scale Image Recognition
-
简单介绍
意义: 证明了增加小卷积核的个数以及网络深度可以提高分类结果的正确率。
预处理: 各通道减去RGB在训练集上的均值。
特点:
1)使用小的卷积核(3 × 3)叠加的形式代替大的卷积核(5 × 5 or 7 × 7)
2)卷积层不会改变layer大小,而是通过max pooling减小layer大小
3)网络层数比较深
优点:
1)网络结构简洁:整个网络都使用了同样大小的卷积核(3x3)和最大池化尺寸(2x2)
2)使用小的卷积核叠加的形式代替大的卷积核,表达能力更强,网络性能更佳
缺点:
1)网络参数比较多,训练时间过长,调参难度大。
2)需要的存储容量大,不利于部署。例如存储VGG16权重值文件的大小为500多MB。
其中需要说明的是2个3 x 3的卷积核是可以代替一个5 x 5的卷积核的,其示意图如下:

-
网络结构

其网络结构图如上图所示,均还有5个block,其中VGG系列包含了vgg11、vgg13、vgg16以及vgg19,其中后面的数字代表的是对应的网络结构中卷积层和全连接层的数量,例如vgg16中含有13个卷积层和3个全连接层。其中vgg11中的LRN(Local Response Normalization)表示局部响应归一化。 -
源码讲解
首先要在电脑中安装torchvision,其源码可在torchvision下的models文件夹中找到,名为vgg.py
torchvision是pytorch框架中一个非常重要且好用的包,该包主要由三个子包组成,分别是:
torchvision.datasets;
torchvision.models;
torchvision.transforms
1)导入相应的包
import torch
import torch.nn as nn
from .utils import load_state_dict_from_url
2)所有的网络名称及其预训练好的参数文件
__all__ = [
'VGG', 'vgg11', 'vgg11_bn', 'vgg13', 'vgg13_bn', 'vgg16', 'vgg16_bn',
'vgg19_bn', 'vgg19',
]
model_urls = {
'vgg11': 'https://download.pytorch.org/models/vgg11-bbd30ac9.pth',
'vgg13': 'https://download.pytorch.org/models/vgg13-c768596a.pth',
'vgg16': 'https://download.pytorch.org/models/vgg16-397923af.pth',
'vgg19': 'https://download.pytorch.org/models/vgg19-dcbb9e9d.pth',
'vgg11_bn': 'https://download.pytorch.org/models/vgg11_bn-6002323d.pth',
'vgg13_bn': 'https://download.pytorch.org/models/vgg13_bn-abd245e5.pth',
'vgg16_bn': 'https://download.pytorch.org/models/vgg16_bn-6c64b313.pth',
'vgg19_bn': 'https://download.pytorch.org/models/vgg19_bn-c79401a0.pth',
}
3)vgg类的定义,其中features表示对应的所有卷积以及池化层,avgpool表示平均池化(池化分为平均池化以及最大池化),classifier表示全连接层,共三层,_initialize_weights函数表示对网络参数进行初始化
class VGG(nn.Module):
def __init__(self, features, num_classes=1000, init_weights=True):
super(VGG, self).__init__()
self.features = features
self.avgpool = nn.AdaptiveAvgPool2d((7, 7))
self.classifier = nn.Sequential(
nn.Linear(512 * 7 * 7, 4096),
nn.ReLU(True),
nn.Dropout()

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



