精华内容
下载资源
问答
  • VGG

    2019-11-12 07:49:52
    VGG

    VGG



    四 问题思索

    一 论文导读

    《Very Deep Convolutional Networks For Large-scale Image Recongnition》
    作者:Karen Simonyan & Andrew Zisserman
    单位:牛津大学
    发表会议与时间:arxiv 2015

    arxiv是一个网站,发布在其上,可以防止自己的idea被抢用

    1.论文的研究背景和成果
    2.论文的研究方法
    3.论文结论
    4.感受野

    1.论文的研究背景和成果
    自2012年的AlexNet异军突起,在其基础上,
    (1)小卷积核
    在第一个卷积层用了更小的卷积核和卷积stride
    (2)多尺度
    训练和测试使用整张图不同的尺度

    vgg作者在将上两种方法应用到自己的网络设计和训练测试阶段,同时还考虑了网络深度对结果的影响。

    2.论文的研究方法
    14年在ILSVRC比赛上获得了分类项目的第二名,第一是googlLeNet,和定位项目的第一名。
    同时模型对其他数据集也有很好的泛化能力。

    VGG由于结构简单、特征提取能力强,所以应用场景广泛。

    例如:
    风格迁移
    目标检测的backbone,提取特征(faster rcnn ,ssd等)
    gan网络内容特征提取,进行内容计算

    下图展示了作者的研究思路与方法,通过六组不同卷积核大小和层数的比对,得出了相关的结论

    实验结果如下图:

    从而得出三个主要结论:

    1. LRN对网路性能没有帮助(从A与A-LRN的对比得出)
    2. 对于同一个网络结构多尺度训练可以提高网络精度(从C、D、E分别都可以看出多尺度训练的好处,[256,512]意思是随机从其中抽取224*224的训练图片)
    3. VGG19模型的效果最后,从而得出一定程度的加深网络可以提高网络精度
      在这里插入图片描述
      通过Table3和Table4的对比可以得到:
    4. 对比单尺度预测,多尺度综合预测,能够提升预测的精度,证明了scale jittering(尺度抖动)的作用
    5. vgg16综合上是最好的模型
      在这里插入图片描述
      得出结论:
    6. dense evluation & multi-crop 两种测试方法联合使用效果最好
      在这里插入图片描述
      得出结论:
    7. 融合模型D、E之后的模型错误率进一步下降
      在这里插入图片描述
      结论:
    8. vgg很好

    3.论文结论
    1.在一定范围内,通过增加深度能有效的提升网络性能
    2.最佳模型:vgg16,只用33卷积和22池化,简洁实用
    3.多个卷积核比单个大卷积核性能好
    4.LRN并不能带来性能上的提升
    5.尺度抖动(多尺度训练、多尺度测试)有利于网络性能的提升

    4.感受野

    感受野的定义:卷积神经网络每一层输出的特征图上的像素点在输入图片上映射的区域大小。(特征图上的一个点和原图上多少点有关系)

    感受野十分重要,目标检测中的流行算法,如SSD,Faster Rcnn等中的prior box 和Anchor box的设计都以感受野为依据做的设计

    二 论文精读

    1.论文整体框架
    2.网络结构及权重参数设计
    3.网络超参数及训练数据处理
    4.网络特点

    1.论文整体框架
    (0)Abstract
    论文的创新点和论文成果

    (1)Introduction
    论文研究背景

    (2)Convnet Configuration
    2.1 Architecture 介绍网络构成
    2.2 Configurations A-E网络结构通道设置
    2.3 Disscusion 使用小卷积、可以使用参数减少

    (3)Classification Framework
    3.1 Training 网络超参数 训练数据处理
    3.2 Testing fc变成conv
    3.3 Implementtation detailis 实验环境、训练时长

    (4)Classification Experiments
    4.1 Single Scale Evaluation
    4.2 Multi-scale Evaluation
    4.3 Multi-crop Evaluation
    4.4 ConNet Fusion
    4.5 Comparison with the State of the art

    (5)Conclusions
    增强网络深度可以提高分类精确度

    2.网络结构及权重参数设计
    VGG16:12层3*3 的卷积层、5层池化层、3层全连接层和一个softmax输出层

    第一个全连接层参数量为102760448,有大约1亿参数,全连接层的参数量很大

    1.为什么使用3*3的卷积核?

    (1)深度更深并增加了非线性
    3个33的卷积核感受野与一个77卷积核感受野等效,但是三个33卷积之间加入了激活函数,与仅使用一个77卷积核相比,深度更深且增加了非线性。
    (2)参数量减少
    假设输入数据通道大小为C
    3个C通道的3*3的卷积核参数量为

    3*C*3*3*C=27C*C
    

    1个C通道的7*7卷积核参数量为

    C*7*7*C=49C*C
    

    2.1*1的卷积核的作用
    (1)为决策增加非线性因素
    (2)调整网络维度扩维或者缩小维度

    3.网络超参数及训练数据处理

    4.网络特点

    三 代码实现

    import torch
    import torch.nn as nn
    import torchvision
    
    def Conv3x3BNReLU(in_channels,out_channels):
        return nn.Sequential(
            nn.Conv2d(in_channels=in_channels,out_channels=out_channels,kernel_size=3,stride=1,padding=1),
            nn.BatchNorm2d(out_channels),
            nn.ReLU6(inplace=True)
        )
    
    class VGGNet(nn.Module):
        def __init__(self, block_nums,num_classes=5):
            super(VGGNet, self).__init__()
    
            self.stage1 = self._make_layers(in_channels=3, out_channels=64, block_num=block_nums[0])
            self.stage2 = self._make_layers(in_channels=64, out_channels=128, block_num=block_nums[1])
            self.stage3 = self._make_layers(in_channels=128, out_channels=256, block_num=block_nums[2])
            self.stage4 = self._make_layers(in_channels=256, out_channels=512, block_num=block_nums[3])
            self.stage5 = self._make_layers(in_channels=512, out_channels=512, block_num=block_nums[4])
    
            self.classifier = nn.Sequential(
                nn.Linear(in_features=512*7*7,out_features=4096),
                nn.ReLU6(inplace=True),
                nn.Dropout(p=0.2),
                nn.Linear(in_features=4096, out_features=4096),
                nn.ReLU6(inplace=True),
                nn.Dropout(p=0.2),
                nn.Linear(in_features=4096, out_features=num_classes)
            )
    
        def _make_layers(self, in_channels, out_channels, block_num):
            layers = []
            layers.append(Conv3x3BNReLU(in_channels,out_channels))
            for i in range(1,block_num):
                layers.append(Conv3x3BNReLU(out_channels,out_channels))
            layers.append(nn.MaxPool2d(kernel_size=2,stride=2))
            return nn.Sequential(*layers)
    
        def forward(self, x):
            x = self.stage1(x)
            x = self.stage2(x)
            x = self.stage3(x)
            x = self.stage4(x)
            x = self.stage5(x)
            x = x.view(x.size(0),-1)
            out = self.classifier(x)
            return out
    
    def VGG16():
        block_nums = [2, 2, 3, 3, 3]
        model = VGGNet(block_nums)
        return model
    
    def VGG19():
        block_nums = [2, 2, 4, 4, 4]
        model = VGGNet(block_nums)
        return model
    
    if __name__ == '__main__':
        model = VGG19()
        print(model)
    
        input = torch.randn(1,3,224,224)
        out = model(input)
        print(out.shape)
    
    展开全文
  • VGG:VGG模型测试-源码

    2021-03-07 19:07:02
    VGG:VGG模型测试
  • VGG11、VGG13、VGG16、VGG19网络结构图

    VGG11、VGG13、VGG16、VGG19网络结构图

    前言

    VGG网络采用重复堆叠的小卷积核替代大卷积核,在保证具有相同感受野的条件下,提升了网络的深度,从而提升网络特征提取的能力。
    可以把VGG网络看成是数个vgg_block的堆叠,每个vgg_block由几个卷积层+ReLU层,最后加上一层池化层组成。VGG网络名称后面的数字表示整个网络中包含参数层的数量(卷积层或全连接层,不含池化层),如图所示。
    以VGG19为例,5个VGG块的卷积层数量分别为(2, 2, 4, 4, 4),再加上3个全连接层,总的参数层数量为19,因此命名为VGG19。
    在这里插入图片描述

    展开全文
  • VGG论文 1409.1556-VGG

    2018-09-09 12:05:14
    VGG论文 1409.1556-VGG-VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
  • VGG16和VGG19介绍

    万次阅读 2019-03-12 16:12:18
    VGG16和VGG19介绍 转载自:https://www.jianshu.com/p/e0845ecaf7f7 image.png 《Very Deep Convolutional Networks for Large-Scale Image Recognition》 arXiv:[1409.1556] Very Deep Convolutional ...

    VGG16和VGG19介绍

    转载自:https://www.jianshu.com/p/e0845ecaf7f7

    image.png

    《Very Deep Convolutional Networks for Large-Scale Image Recognition》

    前言

    VGG是Oxford的Visual Geometry Group的组提出的(大家应该能看出VGG名字的由来了)。该网络是在ILSVRC 2014上的相关工作,主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG有两种结构,分别是VGG16和VGG19,两者并没有本质上的区别,只是网络深度不一样。

    VGG原理

    VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。

    简单来说,在VGG中,使用了3个3x3卷积核来代替7x7卷积核,使用了2个3x3卷积核来代替5*5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。

    比如,3个步长为1的3x3卷积核的一层层叠加作用可看成一个大小为7的感受野(其实就表示3个3x3连续卷积相当于一个7x7卷积),其参数总量为 3x(9xC^2) ,如果直接使用7x7卷积核,其参数总量为 49xC^2 ,这里 C 指的是输入和输出的通道数。很明显,27xC2小于49xC2,即减少了参数;而且3x3卷积核有利于更好地保持图像性质。

    这里解释一下为什么使用2个3x3卷积核可以来代替55卷积核:*

    5x5卷积看做一个小的全连接网络在5x5区域滑动,我们可以先用一个3x3的卷积滤波器卷积,然后再用一个全连接层连接这个3x3卷积输出,这个全连接层我们也可以看做一个3x3卷积层。这样我们就可以用两个3x3卷积级联(叠加)起来代替一个 5x5卷积。

    具体如下图所示:

     

    image.png

    至于为什么使用3个3x3卷积核可以来代替7*7卷积核,推导过程与上述类似,大家可以自行绘图理解。
    参考
    3x3卷积的作用
    连续使用两个3x3的卷积核的感受野相当于5x5,连续使用三个3x3的卷积核的感受野相当于7x7。 那么举例来说,使用3个3x3的卷积核而不是一个7x7的卷积核的好处是什么?有两点原因:

    我们使用了3次非线性函数而不是1次,这样增加了函数的判别能力。
    这样减少了参数的数量:假设三个堆叠的3x3卷积层的输入和输出的通道数都是C,参数数目为。对于一个7x7的卷积核,参数数目为。这相当于对7x7的卷积核施加了正则化。
    1x1卷积的作用
    增加决策函数(decision function)的非线性,因为引入了非线性激活函数。

    VGG网络结构

    下面是VGG网络的结构(VGG16和VGG19都在):

     

    image.png

    • VGG16包含了16个隐藏层(13个卷积层和3个全连接层),如上图中的D列所示

    • VGG19包含了19个隐藏层(16个卷积层和3个全连接层),如上图中的E列所示

    VGG网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的max pooling。

    如果你想看到更加形象化的VGG网络,可以使用经典卷积神经网络(CNN)结构可视化工具来查看高清无码的VGG网络

    VGG优缺点

    VGG优点

    • VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和最大池化尺寸(2x2)。
    • 几个小滤波器(3x3)卷积层的组合比一个大滤波器(5x5或7x7)卷积层好:
    • 验证了通过不断加深网络结构可以提升性能。

    VGG缺点

    • VGG耗费更多计算资源,并且使用了更多的参数(这里不是3x3卷积的锅),导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。VGG可是有3个全连接层啊!

    PS:有的文章称:发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。

    注:很多pretrained的方法就是使用VGG的model(主要是16和19),VGG相对其他的方法,参数空间很大,最终的model有500多m,AlexNet只有200m,GoogLeNet更少,所以train一个vgg模型通常要花费更长的时间,所幸有公开的pretrained model让我们很方便的使用。

    代码篇:VGG训练与测试

    这里推荐两个开源库,训练请参考tensorflow-vgg,快速测试请参考VGG-in TensorFlow

    代码我就不介绍了,其实跟上述内容一致,跟着原理看code应该会很快。我快速跑了一下,VGG-in TensorFlow,代码亲测可用,效果很nice,就是model下载比较烦。

    贴心的Amusi已经为你准备好了[VGG-in TensorFlow](VGG in TensorFlow)的测试代码、model和图像。需要的同学可以关注CVer微信公众号,后台回复:VGG。

    天道酬勤,还有很多知识要学,想想都刺激~Fighting!

    参考

    [1409.1556] Very Deep Convolutional Networks for Large-Scale Image Recognition

    深度网络VGG理解 - CSDN博客

    深度学习经典卷积神经网络之VGGNet - CSDN博客

    Netscope CNN Analyzer

    machrisaa/tensorflow-vgg

    VGG in TensorFlow

    展开全文
  • VGG16和VGG19网络结构图

    万次阅读 2018-11-07 10:31:24
    VGG16 VGG19

    VGG16

    VGG19

    VGG19ç»æå¾

    展开全文
  • VGGNet

    2021-06-09 19:48:55
    VGGNet
  • VGG16结构图

    万次阅读 2018-06-02 11:35:49
    为了更好的了解VGG16的结构图,其可视化结构如下:vgg16构造模型图官方数据表格参考:https://blog.csdn.net/zhyj3038/article/details/52448102
  • vgg19和vgg16百度云链接-附件资源
  • VGG16和VGG19

    2021-01-18 18:15:30
    VGG16只能识别48*48大小的图像
  • VGG16的实施 除了代码本身的注释外,我还写了一篇文章,您可以在找到有关VGGNet的进一步说明。 内容 vgg16.py :带有vgg16.py的图形定义的类。 VGG16 Train.ipynb :笔记本,用于培训和测试VGG16的实现。 如果您在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,772
精华内容 5,908
关键字:

vgg