深度学习——深卷积网络:实例探究

1. 三个经典网络

红色部分不重要,现在已经不再使用

这篇文章较早,比如现在常用max,而当时用avg,当时也没有softmax

这篇文章让CV开始重视DL的使用,相对于LeNet-5,它的优点有两个:更大,使用ReLU

以作者名字命名

same表示使用same过滤器,也就是输入和输出维度一致

16表示总共有16个CONV和FC,这篇文章指出了信道数和维度变化的规律性(随网络增加/减少),缺点是参数实在太多了

阅读论文顺序:2-3-1

2. 残差网络

残差网络由残差块组成,它使得网络可以变得更深

a[l]到a[l+2]的蓝色是网络的主路径,而紫色部分称为短路/跳跃连接,直接把a[l]的信息传递到下下一层,计算a[l+2]时会加上a[l](残差),它插入的位置是线性计算后,激活前

plain network是一般的网络

在plain network中随着深度增加,优化算法更难执行,所以可能会出现错误率先降后升的情况

网络越深越难训练:梯度消失/爆炸的问题

3. 为什么Residual网络有用

假设对一个大型网络再增加两层(构成残差块)

计算a[l+2]时,如果w为0,b也为0,且使用ReLu函数,那么我们可以得到a[l+2] = a[l],这说明残差网络可以很容易学习恒等函数

因此,增加网络深度不会损害性能,而plain网络当深度增加时可能连恒等函数都不容易学习??

如果z[l+2]和a[l]维度一致就正好,如果不一样的话,那么可以在a[l]前乘以一个矩阵,不需要对矩阵进行处理??

残差网络的结构图

4. 1x1卷积

1x1卷积做事情是:(以下面32信道为例)

对输入的32个元素(32个信道)作一个全连接,然后执行ReLU函数,得到一个实数,作为相应位置上的结果。如果有多个过滤器,则进行叠加

这个也称为网络中的网络

为什么可以用1x1来压缩?这样如果采用一样的过滤器,结果是不一样的吧????

1x1卷积的作用

通过增加一个非线性函数使得信道数减少或保持不变(压缩信道的方法),以减少计算量

使用32个1x1x192的过滤器

5. google Inception网络

Inception可以帮你决定应该采用什么样的过滤器,是否需要pool层等

它的做法是把各种过滤器的结果堆叠在一起

下例中的维度是自己定义的,这样最后输出的结果中会有256个信道

下图是一样Inception的一个基础块

Inception的一个最大问题:计算量很大

以上例中5x5过滤器为例,就需要计算120M次乘法

解决方法:加一个1x1过滤器,也称为bottleneck层(瓶颈层,是网络中是小的层)

下例中计算量就会降成12.4M

6. 一个更完整些的Inception模块

论文中的网络结构

其实就是把上面的模块重复连接,另外,网络后面几层会有一些分支(绿色划圈部分),它们也是和最后的输出一样进行输出,也就是说隐藏层也参与了最后y hat的输出,这样可以避免过拟合的问题

小故事:Inception原名是googlenet,是为了向LeNet致敬,而后引用了Inception(盗梦空间),意在建议更深的网络

6. 迁移学习

在CV中经常会用到迁移学习。一般推荐使用开源的网络来做,而非从0开始。根据拥有的数据量不同,有不同的处理方式,从上到下数据量递增

例:要训练一个识别猫的网络(3个转出)

当数据量很小的时候,可以把最后一层softmax替换掉,而把前面所有的层不变(一般有参数如trainable, freeze可以用于设置参数不变),只训练最后一层

另外,可以把最后的隐藏层的结果保存下来,然后直接将输入映射。这样就不用经过中间层的计算

当数据量大一些的时候,可以多训练几层,也就是把前几层freeze,而后面几层进行训练

当数据量很大时,可以对整个网络进行训练,原来训练好的结果作为初始化值, 这样就不用用随机初始化

7. 数据扩充(augmentation)

对于CV应用,一般来说数据越多,网络性能越好。对于其它应用可能不一定,但是对计算机视觉,数据量是一个重要的因素。数据扩充就是对原有数据进行处理以获得更多的数据

常用的方法:mirror/random crop  其它几个可能比较复杂就比较少用

第二种方法:改变颜色。有一种方法是PCA(主成分分析),根据原有的颜色比例进行调整,使得修改后的颜色和原来一致

data augmentation(增强)的实现

一般是用一个线程从硬盘加载数据进行修改,再把这些数据传给其它的线程进行训练。这样数据处理与网络训练可以实现并行

超参数:颜色要改变多少,裁剪什么位置等

8. 计算机视觉现状

用于竞赛的tips,一般不推荐用于真实应用上

原文地址:https://www.cnblogs.com/coolqiyu/p/8719746.html

时间: 2024-10-08 16:45:52

深度学习——深卷积网络:实例探究的相关文章

深度学习图像分割——U-net网络

写在前面: 一直没有整理的习惯,导致很多东西会有所遗忘,遗漏.借着这个机会,养成一个习惯. 对现有东西做一个整理.记录,对新事物去探索.分享. 因此博客主要内容为我做过的,所学的整理记录以及新的算法.网络框架的学习.基本上是深度学习.机器学习方面的东西. 第一篇首先是深度学习图像分割--U-net网络方面的内容.后续将会尽可能系统的学习深度学习并且记录. 更新频率为每周大于等于一篇. 深度学习的图像分割来源于分类,分割即为对像素所属区域的一个分类. 有别于机器学习中使用聚类进行的图像分割,深度学

从软件工程的角度写机器学习6——深度学习之卷积神经网络(CNN)实现

卷积神经网络(CNN)实现 背景 卷积神经网络广泛用于图像检测,它的实现原理与传统神经网络基本上是一样的,因此将普遍意义的神经网络和卷积神经网络的实现合成一篇. 神经网络实现思路 "扔掉神经元" 尽管所有教程在介绍神经网络时都会把一大堆神经元画出来,并且以输入节点--神经元--输出结点连线,但是,在编程实现时,基于神经元去编程是低效的.典型如这篇经典文章里面的代码: http://blog.csdn.net/zzwu/article/details/575125. 比较合适的方法是将神

深度学习经典卷积神经网络之VGGNet

VGGNet是牛津大学计算机视觉组(VisualGeometry Group)和GoogleDeepMind公司的研究员一起研发的的深度卷积神经网络.VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠3*3的小型卷积核和2*2的最大池化层,VGGNet成功地构筑了16~19层深的卷积神经网络.VGGNet相比之前state-of-the-art的网络结构,错误率大幅下降,并取得了ILSVRC 2014比赛分类项目的第2名和定位项目的第1名.同时VGGNet的拓展性很强,迁移到其

深度学习:卷积神经网络(convolution neural network)

(一)卷积神经网络 卷积神经网络最早是由Lecun在1998年提出的. 卷积神经网络通畅使用的三个基本概念为: 1.局部视觉域: 2.权值共享: 3.池化操作. 在卷积神经网络中,局部接受域表明输入图像与隐藏神经元的连接方式.在图像处理操作中采用局部视觉域的原因是:图像中的像素并不是孤立存在的,每一个像素与它周围的像素都有着相互关联,而并不是与整幅图像的像素点相关,因此采用局部视觉接受域可以类似图像的此种特性. 另外,在图像数据中存在大量的冗余数据,因此在图像处理过程中需要对这些冗余数据进行处理

【深度学习】卷积层提速Factorized Convolutional Neural Networks

Wang, Min, Baoyuan Liu, and Hassan Foroosh. "Factorized Convolutional Neural Networks." arXiv preprint arXiv:1608.04337 (2016). 本文着重对深度网络中的卷积层进行优化,独特之处有三: - 可以直接训练.不需要先训练原始模型,再使用稀疏化.压缩比特数等方式进行压缩. - 保持了卷积层原有输入输出,很容易替换已经设计好的网络. - 实现简单,可以由经典卷积层组合得到

深度学习(卷积神经网络)一些问题总结(转)

涉及问题: 1.每个图如何卷积: (1)一个图如何变成几个? (2)卷积核如何选择? 2.节点之间如何连接? 3.S2-C3如何进行分配? 4.16-120全连接如何连接? 5.最后output输出什么形式? ①各个层解释: 我们先要明确一点:每个层有多个Feature Map,每个Feature Map通过一种卷积滤波器提取输入的一种特征,然后每个Feature Map有多个神经元. C1层是一个卷积层(为什么是卷积?卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音

深度学习(一) 卷积神经网络CNN

Contents 图像数据集基础 全连接神经网络解决图片问题的弊端(前世) 卷积神经网络的今生 网络结构 卷积操作 池化操作 小结 图像数据集基础 数字图像划分为彩色图像.灰度图像.二值图像和索引图像几种.其中,像素是构成图像的基本单位,例如一张28×28像素的图片,即表示横向有28个像素点,纵向有28个像素点. 最常用的彩色图像和灰度图像: 彩色图像:每个像素由RGB三个分量来表示,即红绿蓝.每个分量介于(0,255).那么,对于一个28×28的彩色图像,便可以由三个表示RGB颜色分量的28×

深度学习大规模道路网络自动提取

好久没有更新了,近期做了一个工作,就是用深度学习方法来自动提取高分辨率遥感影像上的道路网络,16年的时候都是用的什么SVM,什么增强线性指数等 手工设计的线性目标增强特征,然后去提取道路,那些个东西说白了,没啥用,在一个小区域可能做的有那么点效果,但是换一个场景,立马就没了,没有任何普适性 可言,之前用深度学习方法做过高分辨率影像变化监测工作,这一次,我重新把网络进行了设计,用于提取道路网络,最终生成道路中心,并进行大规模场景实验,结果 还是非常不错的,个人觉得在一定程度上可以减少人工提取道路网

深度学习之卷积神经网络CNN及tensorflow代码实现示例

一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的.当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢,例如一张黑白的 28×28 的手写数字图片,输入层的神经元就有784个,如下图所示: 若在中间只使用一层隐藏层,参数 w 就有 784×15=11760 多个:若输入的是28×28 带有颜色的RGB格式的手写数字图片,输入神经元就有28×28×3=2352 个-- .这很容易看出使用全连接神经网络处理图像中的需要训