https://www.cnblogs.com/missidiot/p/10174230.html

小卷积核

说到网络深度,这里就不得不提到卷积,虽然AlexNet有使用了11x11和5x5的大卷积,但大多数还是3x3卷积,对于stride=4的11x11的大卷积核,我认为在于一开始原图的尺寸很大因而冗余,最为原始的纹理细节的特征变化用大卷积核尽早捕捉到,后面的更深的层数害怕会丢失掉较大局部范围内的特征相关性,后面转而使用更多3x3的小卷积核(和一个5x5卷积)去捕捉细节变化。

而VGGNet则清一色使用3x3卷积。因为卷积不仅涉及到计算量,还影响到感受野。前者关系到是否方便部署到移动端、是否能满足实时处理、是否易于训练等,后者关系到参数更新、特征图的大小、特征是否提取的足够多、模型的复杂度和参数量等等。

计算量

在计算量这里,为了突出小卷积核的优势,我拿同样conv3x3、conv5x5、conv7x7、conv9x9和conv11x11,在224x224x3的RGB图上(设置pad=1,stride=4,output_channel=96)做卷积,卷积层的参数规模和得到的feature map的大小如下:


从上表可以看出,大卷积核带来的特征图和卷积核得参数量并不大,无论是单独去看卷积核参数或者特征图参数,不同kernel大小下这二者加和的结构都是30万的参数量,也就是说,无论大的卷积核还是小的,对参数量来说影响不大甚至持平。

增大的反而是卷积的计算量,在表格中列出了计算量的公式,最后要乘以2,代表乘加操作。为了尽可能证一致,这里所有卷积核使用的stride均为4,可以看到,conv3x3、conv5x5、conv7x7、conv9x9、conv11x11的计算规模依次为:1600万,4500万,1.4亿、2亿,这种规模下的卷积,虽然参数量增长不大,但是计算量是惊人的。

总结一下,我们可以得出两个结论:

  • 同样stride下,不同卷积核大小的特征图和卷积参数差别不大
  • 越大的卷积核计算量越大

其实对比参数量,卷积核参数的量级在十万,一般都不会超过百万。相比全连接的参数规模是上一层的feature map和全连接的神经元个数相乘,这个计算量也就更大了。其实一个关键的点——多个小卷积核的堆叠比单一大卷积核带来了精度提升,这也是最重要的一点。

感受野

说完了计算量我们再来说感受野。这里给出一张VGG作者的PPT,作者在VGGNet的实验中只用了两种卷积核大小:1x1和3x3。作者认为两个3x3的卷积堆叠获得的感受野大小,相当一个5x5的卷积;而3个3x3卷积的堆叠获取到的感受野相当于一个7x7的卷积。
见下图,输入的8个元素可以视为feature map的宽或者高,当输入为8个神经元经过三层conv3x3的卷积得到2个神经元。三个网络分别对应stride=1,pad=0的conv3x3、conv5x5和conv7x7的卷积核在3层、1层、1层时的结果。因为这三个网络的输入都是8,也可看出2个3x3的卷积堆叠获得的感受野大小,相当1层5x5的卷积;而3层的3x3卷积堆叠获取到的感受野相当于一个7x7的卷积。

input=8,3层conv3x3后,output=2,等同于1层conv7x7的结果;
input=8,2层conv3x3后,output=2,等同于2层conv5x5的结果。
或者我们也可以说,三层的conv3x3的网络,最后两个输出中的一个神经元,可以看到的感受野相当于上一层是3,上上一层是5,上上上一层(也就是输入)是7。

此外,倒着看网络,也就是backprop的过程,每个神经元相对于前一层甚至输入层的感受野大小也就意味着参数更新会影响到的神经元数目。在分割问题中卷积核的大小对结果有一定的影响,在上图三层的conv3x3中,最后一个神经元的计算是基于第一层输入的7个神经元,换句话说,反向传播时,该层会影响到第一层conv3x3的前7个参数。从输出层往回forward同样的层数下,大卷积影响(做参数更新时)到的前面的输入神经元越多。

既然说到了VGG清一色用小卷积核,结合作者和自己的观点,这里整理出小卷积核比用大卷积核的三点优势:

  • 更多的激活函数、更丰富的特征,更强的辨别能力。卷积后都伴有激活函数,更多的卷积核的使用可使决策函数更加具有辨别能力,此外就卷积本身的作用而言,3x3比7x7就足以捕获特征的变化:3x3的9个格子,最中间的格子是一个感受野中心,可以捕获上下左右以及斜对角的特征变化。主要在于3个堆叠起来后,三个3x3近似一个7x7,网络深了两层且多出了两个非线性ReLU函数,(特征多样性和参数参数量的增大)使得网络容量更大(关于model capacity,AlexNet的作者认为可以用模型的深度和宽度来控制capacity),对于不同类别的区分能力更强(此外,从模型压缩角度也是要摒弃7x7,用更少的参数获得更深更宽的网络,也一定程度代表着模型容量,后人也认为更深更宽比矮胖的网络好);

  • 卷积层的参数减少。相比5x5、7x7和11x11的大卷积核,3x3明显地减少了参数量,这点可以回过头去看上面的表格。比方input channel数和output channel数均为C,那么3层conv3x3卷积所需要的卷积层参数是:3×(C×3×3×C)=27C23×(C×3×3×C)=27C^23×(C×3×3×C)=27C2,而一层conv7x7卷积所需要的卷积层参数是:C×7×7×C=49C2C×7×7×C=49C^2C×7×7×C=49C2。conv7×7的卷积核参数比conv3×3多了(49-27)/27x100% ≈ 81%;

  • 小卷积核代替大卷积核的正则作用带来性能提升。作者用三个conv3x3代替一个conv7x7,认为可以进一步分解(decomposition)原本用7x7大卷积核提到的特征,这里的分解是相对于同样大小的感受野来说的。关于正则的理解我觉得还需要进一步分析。

其实最重要的还是多个小卷积堆叠在分类精度上比单个大卷积要好

小卷积核的特征图与卷积参数变化不大,计算量变化明显相关推荐

  1. 卷积核、特征图可视化

    卷积核,及特征层可视化 一.卷积核可视化 1.准备一个训练好的模型 2.卷积核可视化 二.特征层可视化 最近在读AlexNet这篇CNN的开山之作,里面有卷积层卷积核可视化这一部分,故记录一下,其他网 ...

  2. 卷积核输出特征图大小的计算 深度学习

    20201218

  3. 卷积网络中的通道、特征图、过滤器和卷积核

    卷积网络中的通道.特征图.过滤器和卷积核 1.feature map 1 feature map 在cnn的每个卷积层,数据都是以三维形式存在的.你可以把它看成许多个二维图片叠在一起(像豆腐皮一样), ...

  4. group convolution (分组卷积)的计算量详解、卷积计算量特征图大小,池化特征图大小、深度通道deep-wise 卷积

    group convolution (分组卷积)的计算量详解.卷积计算量特征图大小,池化特征图大小.深度通道deep-wise 卷积 提示:最近忙着各种提前批的笔试面试,所以没太多空刷题了都,先复盘一 ...

  5. 卷积网络中的通道(Channel)和特征图

    卷积网络中有一个很重要的概念,通道(Channel),也有叫特征图(feature map)的. 首先,卷积网络中主要有两个操作,一个是卷积(Convolution),一个是池化(Pooling). ...

  6. (转)卷积网络中的通道(Channel)和特征图

    今天介绍卷积网络中一个很重要的概念,通道(Channel),也有叫特征图(feature map)的. 首先,之前的文章也提到过了,卷积网络中主要有两个操作,一个是卷积(Convolution),一个 ...

  7. 卷积网络中的通道(channel)和特征图(feature map)

    卷积网络中的通道(Channel)和特征图 转载自:https://www.jianshu.com/p/bf8749e15566 今天介绍卷积网络中一个很重要的概念,通道(Channel),也有叫特征 ...

  8. 重读GhostNet:使用轻量操作代替部分传统卷积层生成冗余特征以减少计算量

    本文为CVPR 2020 录用论文,作者来自华为.北京大学.悉尼大学,截止目前已有36次引用,github 星标1.2K,是近年来值得关注的轻量级CNN模型. 使用轻量操作代替部分传统卷积层生成冗余特 ...

  9. 深度学习 卷积层与全连接层权重参数个数的计算

    1.卷积网络实例分析 构建卷积网络如下: from tensorflow.python.keras import datasets, models, layers class CNN(object): ...

  10. yolov5特征图可视化

    文章目录 前言 一.效果图 二.使用步骤 1.使用方法 2.注意事项 总结 参考 前言 最近写论文需要观察中间特征层的特征图,使用的是yolov5的代码仓库,但是苦于找不到很好的轮子,于是参考了很多, ...

最新文章

  1. PWA项目实战分享(听书APP)
  2. java打印出继承体系的类(包括抽象类)、接口、域字段
  3. python怎么加载图片-python爬虫--图片懒加载
  4. redis 3.0 集群__数据迁移和伸缩容
  5. 编程之美-求二叉树中节点的最大距离方法整理
  6. 【JavaSE03】Java中分支语句-练习
  7. 变分自编码器VAE:这样做为什么能成?
  8. 初探swift语言的学习笔记九(OC与Swift混编)
  9. 公司裁员优先裁掉这类员工
  10. tomcat报错:This is very likely to create a memory leak问题解决
  11. 重新认识C#: 玩转指针
  12. Wayland 1.0 发布,图形服务器
  13. struts2中struts:iterator标签的使用
  14. IMCASH:2019年区块链不会风平浪静,至少还有10件事值得期待
  15. Mathcad tips_学习笔记
  16. python之window下安装python2版的pyv8库 (window install python2 pyv8)
  17. java 导出word简历_java导出生成word(类似简历导出)
  18. 使用多个路由器有线桥接实现无线漫游
  19. 用html做一个漂亮的网站,个人网页,css
  20. 分类问题的评价指标(Precision、Recall、Accuracy、F1-Score、Micro-F1、Macro-F1)以及混淆矩阵、ROC曲线

热门文章

  1. ArcGIS 计算地块容积率
  2. mysql插入时unique字段重复插入失败
  3. 实习成长之路——设计模式二:为什么项目都是基于接口而非实现编程?有必要为每个类都定义接口吗?
  4. 实习成长之路:MySQL五:全局锁和表锁 :给表加个字段怎么有这么多阻碍?
  5. 倒计时 5 天!Apache Flink Meetup · 北京站,1.13 新版本 x 互娱实践分享的开发者盛筵!...
  6. 新版 IDEA 发布,牛逼!网友:内存占用有所好转!
  7. 细聊一下我面试Java开发人员的3条面试标准
  8. 基于 MVP+RxJava2+Retrofit2 的应用—熊猫眼
  9. php td背景颜色改变,JavaScript实现点击单元格改变背景色的方法
  10. python实现excel的覆盖写入和追加