分类任务

CNN对于常见的分类任务,基本是一个鲁棒且有效的方法。例如,做物体分类的话,入门级别的做法就是利用caffe提供的alexnet的模型,然后把输出的全连接层稍稍修改称为自己想要的类别数,然后再根据实际需要修改网络模型(通常是瘦身)。下面记录几个point。

关于crop

一般在训练的时候会利用两个手段做data augmentation,分别是mirror和crop。其中,mirror没什么特别,但是crop有一些东西我们需要了解。

  • 在训练的时候,crop操作会在大图上随机切小图,然后小图才是进入CNN的数据;而在测试的时候,crop操作是直接在大图中间取小图;
  • 我们做前向的时候,可以考虑模拟训练时候的crop机制,多crop几份,然后每一个crop都前向一遍,然后综合考虑多个crop的前向结果;
  • 上一点提到的多个crop类似于多次试验求平均的感觉;
  • 多crop求平均的手法可以构成一个batch来一起走一次前向;

以上是比较普通的trick,仔细思考第四点的计算性能,我们会发现,这种做法对于一张完整的大图而言,有很多像素都被重复计算了。那么,下面介绍一种较为巧妙的思路(需要对卷积层以及对特征有比较深刻的理理解)。

  • 依然用普通的方式训练一个CNN
  • 一般我们的网络在最后面会加入全连接层把feature map压成一个一维向量,然后我们需要先理解一个说法:全连接层实际上是n个1*1的卷积核对上层feature进行卷积,然后在对卷积后的feature做一次均值pooling;

下面用两个简单的例子说明:

例1
<fc1> output: 9
<fc2> output: 1  [1 2 3 4 5 6 7 8 9]
[a b c d e f g h i]
得到
[1*a+2*b+3*c+...+9*i]

则需要的9个权值,每个权值一一对应fc1的值。那么假如,fc2换成卷积层,那么

<fc1> output:9
<conv2> output:1, kernel:(1,1)  [1 2 3 4 5 6 7 8 9]
[a b c d e f g h i]
得到
[1*a 2*b 3*c ... 9*i]

刚好也是需要9个权值,一一对应fc1。但是呢,这时候经过conv2的卷积,目前的feature实际上就保持了和fc1一致的形状。那么怎么把它变成我们想要的output=1呢?这时候就是一个均值加权的过程,即卷积后的九个值求加权平均得到真正的输出。

例2

理解了例1后,再来理解例2

<conv1> outputsize:(1,2,2)  # 1通道,宽高各为2
<fc2> output: 21 2
3 4 a b       e  f
c d   ,   g  h得到
[a*1+b*2+c*3+d*4, e*1+f*2+g*3+h*4]

这个网络需要的同样是4*2=8个权值,每4个一组分别对应展开conv1后的4个像素,共两组,故可以得到两个计算值。这时候,把网络变成

<conv1> shape:(1,2,2)  # 1通道,宽高各为2
<conv2> kernel:(1,1), output:21 2
3 4 a b      e  f
c d   ,  g  h得到两个特征矩阵
1a 2b   1e 2f
3c 4d , 3g 4h 

实际上只需要分别把两个矩阵所有元素求和就可以得到与全连接一样的值。

回到正题,花了很多笔墨提出这个全连接层等同与1*1卷积核,是为了在前向时把全连接层替换掉。为什么呢?假设没有全连接层,实际上我们对于输入图片的大小是没有任何限制的,大图小图一样都经过卷积池化激活。这种网络有人称为全卷积网络(FCN)。

好,那么现在替换全连接层为卷积层之后,输入图片大小是任意的,那么意味着最后一层出来的feature不再是1*1,而可能是m*n。所以为了映射到分类任务的结果,把最后的featuremap做一下求和,然后送入softmax层,就得到了每个类别的可能性。

那么,为什么我将这部分内容放在“关于crop”这个标签下面呢?思考一下,假如用普通的crop策略,那么是不是相当于全卷积到最后一层只取出crop区域对应的特征图的点区域?全卷积是不是就相当于crop了全图的所有能crop的区域并融合在一起?(有点拗口)核心的思想是,CNN训练得到的是滤波器,本质上是对于某种特定的模式有响应,反之无响应,所以全卷积一直到最后一层,响应最强的特征图,就是对应的分类。

转载于:https://www.cnblogs.com/byteHuang/p/6959714.html

FCN用卷积层代替FC层原因(转)相关推荐

  1. AI神经网络-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)

    <link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON"> &l ...

  2. ​卷积层和分类层,哪个更重要?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎 https://www.zhihu.com/que ...

  3. 突然想到一个可以减少fc层权重数的方法

    如图所示 假设 小方块的长度是a打方块的长度是b b=2a 我们平时的fc层就是这样的 大块 b2=4a2 而要得到同样输出可以使用 a2+a2的形式=2a**2 可以看大权重少了一半 同理分的越多使 ...

  4. 卷积神经网络CNN-全连接层

    全连接层(Fully Connected layer,FC) 全连接层在整个卷积神经网络中起到了分类器的作用.如果说卷积层.池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则是起到了 ...

  5. 狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层

    狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层 在这篇文章中您将会从数学和算法两个角度去重新温习一下卷积层,激活函数,池化层,Dropout层,BN层,全链接 ...

  6. 卷积神经网络---卷积层、激励层、池化层以及全连接层

    文章目录 概述 卷积神经网络 局部连接+权值共享** 输入层 卷积层 激励层 池化层 全连接层 参考资料 概述 这两天在看论文,涉及到卷积神经网络的知识,之前一直对这块迷迷糊糊.看到了一篇博文写的很好 ...

  7. 合并bn层到conv或FC层原理介绍及代码实现

    原 合并bn层到conv或FC层原理介绍及代码实现 2017年11月09日 17:38:27 crazy-ye 阅读数:5932更多 <div class="tags-box spac ...

  8. 卷积神经网络CNN各层基本知识

    卷积神经网络 卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层以及全连接层构成. INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层) 简单来说 ...

  9. cs231n-(7)卷积神经网络:架构,卷积层/池化层

    架构总览 常用的层 卷积层 概述 池化层 归一化层 全连接层 全连接层转为卷积层 卷积网络架构 层模式 层大小设计模式 实例 计算资源考虑 额外资源 卷积神经网络和普通神经网络非常类似.卷积神经网络由 ...

最新文章

  1. C#基础篇--文件(流)
  2. MyEclipse Enterprise Workbench 9.0 破解及注册机 注册码
  3. python中print输出格式汇总_python中print输出格式有哪些
  4. SpringBoot快速开发利器:Spring Boot CLI
  5. 计算机组装与维修案例分析,计算机组装毕业论文
  6. android object比较大小
  7. EasyUI 分页 偶遇 问题
  8. Linux平台常用命令
  9. How Much Memory Your Code Is Using? Gym - 101955J
  10. redis java序列化_java处理redis的几种序列化策略
  11. 搜狐提出畅游私有化要约 后者收盘涨近50%
  12. 谈谈原子变量与锁的性能比较
  13. 12.04 安装svn
  14. 苹果Mac智能的Python集成开发环境:PyCharm Pro
  15. python中tolist()命令
  16. 西门子PLC常用指令
  17. 标号法(Dijkstra)求最短路 matlab
  18. LNK1104:无法打开文件 “.exe”
  19. ViewFlipper的用法
  20. 【1024社区大奖】助你狂揽大奖[保姆级教程①]

热门文章

  1. python2和python3哪个_python2与python3的区别(持续更新)
  2. springboot整合jpa_SpringBoot与SpringDataJPA整合 Ehcache
  3. iphone双卡_满屏的iPhone12评测来了,看哪个不重要,买哪个才重要|iphone|国行|iphone12...
  4. 【debug】UnicodeDecodeError: codec can't decode byte 0xbd in position 4: invalid start byte
  5. ssm框架使用重定向报404_如何在 ASP.NET Core MVC 中处理 404 错误
  6. seo日常工作表_seo工作者的日常和苦与甜
  7. android string.format()长度,Android通过String.format格式化(动态改变)字符串资源的显示内容...
  8. docker 随笔记录
  9. 20145212 《信息安全系统设计基础》第3周学习总结
  10. python time,datetime与highchart中的time