CNN的整体流程


输入层——》卷积层——》池化层(可以接多个卷积和池化,由我们自己设定)—(flatten)—》全连接网络——》输出层

处理图像问题时为什么用CNN而不用DNN?

当我们直接用一般的fully connected的feedforward network来做图像处理的时候,往往会需要太多的参数,CNN做的事情其实是,来简化这个neural network的架构,我们根据自己的知识和对图像处理的理解,一开始就把某些实际上用不到的参数给过滤掉。

数据输入层

该层要做的处理主要是对原始图像数据进行预处理,其中包括:
  • 去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
  • 归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
  • PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化

去均值与归一化效果图:

去相关与白化效果图:

还可以对输入图像先进行一个下采样,减少输入的像素数量。
CNN对不同scale的相同pattern的处理上存在一定的困难,由于现在每一个filter size都是一样的,这意味着,如果你今天有同一个pattern,它有不同的size,有大的鸟嘴,也有小的鸟嘴,CNN并不能够自动处理这个问题;DeepMind曾经发过一篇paper,上面提到了当你input一张image的时候,它在CNN前面,再接另外一个network,这个network做的事情是,它会output一些scalar,告诉你说,它要把这个image的里面的哪些位置做旋转、缩放,然后,再丢到CNN里面,这样你其实会得到比较好的performance。

卷积层

以灰度图像为例进行讲解:从一个小小的权重矩阵,也就是卷积核(kernel)开始,让它逐步在二维输入数据上“扫描”。卷积核“滑动”的同时,计算权重矩阵和扫描所得的数据矩阵的乘积,然后把结果汇总成一个输出像素。

填充

填充值是什么呢?以下图为例子,比如有这么一个5x5的图片(一个格子一个像素),我们卷积核取2x2,步长取2,那么我们发现还剩下1个像素没法滑完,那怎么办呢?

那我们在原先的矩阵加了一层填充值,使得变成6x6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。

通常都用“0”来进行填充的。

卷积核

【卷积核的大小一般为奇数乘奇数】 1x1,3x3,5x5,7x7都是最常见的。这是为什么呢?为什么没有偶数x偶数?

(1)更容易padding

在卷积时,我们有时候需要卷积前后的尺寸不变。这时候我们就需要用到padding。假设图像的大小,也就是被卷积对象的大小为n*n,卷积核大小为kxk,padding的幅度设为(k-1)/2时,卷积后的输出就为(n-k+2x((k-1)/2))/1+1=n,即卷积输出为nxn,保证了卷积前后尺寸不变。但是如果k是偶数的话,(k-1)/2就不是整数了。

(2)更容易找到卷积锚点

在CNN中,进行卷积操作时一般会以卷积核模块的一个位置为基准进行滑动,这个基准通常就是卷积核模块的中心。若卷积核为奇数,卷积锚点很好找,自然就是卷积模块中心,但如果卷积核是偶数,这时候就没有办法确定了,让谁是锚点似乎都不怎么好。

多通道卷积

这里就要涉及到“卷积核”和“filter”这两个术语的区别。在只有一个通道的情况下,“卷积核”就相当于“filter”,这两个概念是可以互换的。但在一般情况下,它们是两个完全不同的概念。每个“filter”实际上恰好是“卷积核”的一个集合,在当前层,每个通道都对应一个卷积核,且这个卷积核是独一无二的。

多通道卷积的计算过程:将矩阵与滤波器对应的每一个通道进行卷积运算,最后相加,形成一个单通道输出,加上偏置项后,我们得到了一个最终的单通道输出。如果存在多个filter,这时我们可以把这些最终的单通道输出组合成一个总输出。

这里我们还需要注意一些问题——滤波器的通道数、输出特征图的通道数。

某一层滤波器的通道数 = 上一层特征图的通道数。如上图所示,我们输入一张 6x6x3 的RGB图片,那么滤波器(3x3x3 )也要有三个通道。

某一层输出特征图的通道数 = 当前层滤波器的个数。如上图所示,当只有一个filter时,输出特征图( 4x4)的通道数为1;当有2个filter时,输出特征图(4x4x2)的通道数为2。

卷积和全连接的关系

卷积可以看成是全连接的局部连接和权值共享。

池化层

池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。

作用:

  1. 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。

  2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。

  3. 在一定程度上防止过拟合,更方便优化。


池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。

Maxpooling的问题
如果取Maxpooling放到network里面,不就没法微分了吗?这个东西,感觉是没有办法对它微分的啊,其实是可以的:

maxpooling和maxout类似,以maxout举例:

实际上我们真正训练的并不是一个含有max函数的network,而是一个化简后如下图所示的linear network;当我们还没有真正开始训练模型的时候,此时这个network含有max函数无法微分,但是只要真的丢进去了一笔data,network就会马上根据这笔data确定具体的形状,此时max函数的问题已经被实际数据给解决了,所以我们完全可以根据这笔training data使用Backpropagation的方法去训练被network留下来的参数

所以我们担心的max函数无法微分,它只是理论上的问题;在具体的实践上,我们完全可以先根据data把max函数转化为某个具体的函数,再对这个转化后的thiner linear network进行微分
Flatten
做完convolution和max pooling之后,就是FLatten和Fully connected Feedforward network的部分

Flatten的意思是,把左边的feature map拉直,然后把它丢进一个Fully connected Feedforward network,然后就结束了,也就是说,我们之前通过CNN提取出了image的feature,它相较于原先一整个image的vetor,少了很大一部分内容,因此需要的参数也大幅度地减少了,但最终,也还是要丢到一个Fully connected的network中去做最后的分类工作。

20201227一周学习总结(CNN)相关推荐

  1. OUC暑期培训(深度学习)——第六周学习记录:Vision Transformer amp; Swin Transformer

    第六周学习:Vision Transformer & Swin Transformer Part 1 视频学习及论文阅读 1.Vision Transformer 原文链接:https://a ...

  2. OUC暑期培训(深度学习)——第五周学习记录:ShuffleNet EfficientNet 迁移学习

    第五周学习:ShuffleNet & EfficientNet & 迁移学习 Part 1 视频学习 1.ShuffleNet V1 ShuffleNet和MobileNet一样想,应 ...

  3. 第十五周学习周报(20180611-20180617)

    第十五周学习周报 一.本周学习情况 1.本周主要学习李宏毅老师的机器学习课程 Backpropagation Convolutional Neural Network Semi-supervised ...

  4. 《Java程序设计》第十一周学习总结

    20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...

  5. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...

  6. 2018-2019-1 20165214 《信息安全系统设计基础》第六周学习总结

    20165214 2018-2019-1 <信息安全系统设计基础>第六周学习总结 教材学习内容总结 1.输入操作是从I/O设备复制数据到主存,而输出操作是从主存复制数据到I/O设备 2.U ...

  7. 2017-2018-1 20155204 《信息安全系统设计基础》第十一周学习总结

    2017-2018-1 20155204 <信息安全系统设计基础>第十一周学习总结 教材学习内容总结 9.1物理和虚拟地址 物理地址:计算机系统的主存被组织成一个人由M个连续的字节到校的单 ...

  8. 2017-2018-1 20155202 《信息安全系统设计基础》第9周学习总结

    2017-2018-1 20155202 <信息安全系统设计基础>第9周学习总结 第6章 存储器层次结构 教材学习内容总结 随机访问存储器(Random-AccessMem)分为两类:静态 ...

  9. 20162303 2016-2017-2 《程序设计与数据结构》第六周学习总结

    20162303 2016-2017-2 <程序设计与数据结构>第六周学习总结 教材学习内容总结 通过继承来创建类,比从零开始编写代码来的更快.更容易也更经济. 继承在父类与子类之间建立了 ...

最新文章

  1. serv-u 自定义html,Serv-U架设教程_Serv-U使用教程图文版
  2. eclipse Indigo Helios Galileo几种版本的意思
  3. 单面煎鸡蛋,健康有风险
  4. VTK:绘制BorderPixelSize边框像素大小用法实战
  5. mysql主从配置常见问题_mysql 主从复制配置,以及常见问题解决!
  6. 重磅官宣!统一操作系统UOS正式版发布
  7. filter grok 判断_logstash grok使用案例
  8. 去除XP桌面图标的阴影
  9. Windows上使用VLC插件的方式在IE浏览器上播放RTSP视频流
  10. 微信云函数的使用步骤
  11. 9个Excel小技巧,提高你的数据分析效率
  12. 降采样,过采样,欠采样,子采样,下采样
  13. leetcode动态规划之零钱兑换问题
  14. 多模态神经成像之EEG-fMRI同步
  15. tiny4412 裸机程序 七、重定位代码到DRAM【转】
  16. 【附带全球各国边界等数据分享】ArcGIS如何制作一张世界地图
  17. 电子信息工程专业,大学要学什么
  18. 关于APP上语音播报的完整实现(iOS篇)
  19. 为什么是张一鸣?为什么是抖音?
  20. CAD如何快速转换为PDF

热门文章

  1. numpy中的identity函数
  2. div css布局中CSS图片大小自动按比例等比例缩小图片不变形解决技巧
  3. IBM Http Server 配置问题
  4. 机器学习的相关软件框架下载安装
  5. 现在距离1970年1月1日的天数
  6. 将python文件打包成exe文件(带附属txt文件)
  7. [BZOJ4664]Count/[JOI Open 2016]摩天大楼
  8. Ant Design Upload 照片墙上传,删除
  9. SHAP: 在我眼里,没有黑箱
  10. 解决align-items失效,无法居中问题