卷积神经网络

深入理解CNN的细节

点点圈 提交于 2020-04-11 19:57:11
数据预处理(Data Preprocessing) 零均值化(Mean subtraction) 为什么要零均值化? 人们对图像信息的摄取通常不是来自于像素色值的高低,而是来自于像素之间的相对色差。零均值化并没有消除像素之间的相对差异(交流信息),仅仅是去掉了直流信息的影响。 数据有过大的均值也可能导致参数的梯度过大。 如果有后续的处理,可能要求数据零均值,比如PCA。 假设数据存放在一个矩阵 X 中,X 的形状为(N,D),N 是样本个数,D 是样本维度,零均值化操作可用 python 的 numpy 来实现: X -= numpy.mean(X, axis=0) 即 X 的每一列都减去该列的均值。 对于灰度图像,也可以减去整张图片的均值: X -= numpy.mean(X) 对于彩色图像,将以上操作在3个颜色通道内分别进行即可。 归一化(Normalization) 为什么要归一化? 归一化是为了让不同纬度的数据具有相同的分布规模。 假如二维数据数据(x1,x2)两个维度都服从均值为零的正态分布,但是x1方差为100,x2方差为1。可以想像对 (x1,x2)进行随机采样并在而为坐标系中标记后的图像,应该是一个非常狭长的椭圆形。 对这些数据做特征提取会用到以下形式的表达式: S = w1*x1 + w2*x2 + b 那么: dS / dw1 = x1 dS / dw2 =

实战级Stand-Alone Self-Attention in CV,快加入到你的trick包吧 | NeurIPS 2019

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-07 15:05:34
> 论文提出stand-alone self-attention layer,并且构建了full attention model,验证了content-based的相互关系能够作为视觉模型特征提取的主要基底。在图像分类和目标检测实验中,相对于传统的卷积模型,在准确率差不多的情况下,能够大幅减少参数量和计算量,论文的工作有很大的参考意义   来源:【晓飞的算法工程笔记】 公众号 论文: Stand-Alone Self-Attention in Vision Models 论文地址: https://arxiv.org/abs/1906.05909 Introduction   目前卷积网络的设计是提高图像任务性能的关键,而卷积操作由于平移不变性使其成为了图像分析的主力。受限于感受域的大小设定,卷积很难获取长距离的像素关系,而在序列模型中,已经能很好地用attention来解决这个问题。目前,attention模块已经开始应用于传统卷积网络中,比如channel-based的attention机制 Squeeze-Excite和spatially-aware的attention机制Non-local Network等。这些工作都是将global attention layers作为插件加入到目前的卷积模块中,这种全局形式考虑输入的所有空间位置,当输入很小时,由于网络需要进行大幅下采样

深度学习论文笔记

泄露秘密 提交于 2020-04-07 11:53:09
/*--> */ /*--> */ 论文笔记 R-CNN 选区域,拉伸,计算特征,用特征训练 svm分类器,分类结果计算重复度去重( nms),回归框的位置 相对以前的不同: 暴力搜索所有框变为预选框计算特征 经典方法提取的是人工设定的特征, RCNN用大的识别库训练深度网络提取特征,然后用小的检测库调优参数 缺点: 多个选取框之间很多重叠,单独计算特征会有很多重复计算,浪费时间 训练过程是多级流水线,卷积神经网络特征训练, SVM分类器训练,检测框回归训练 SPPNET R-CNN中,多个选区框的尺寸不同, resize再提取特征既费时,效果也没有那么好 提出金字塔 pooling针对不同尺寸的图,在 CNN后面加上一个特殊池化层,池化为 4x4, 2x2, 1x1的几个特征,然后拼接起来,变成 21*深度的固定尺寸的特征,并且包含有空间位置信息(与图片缩放的区别是什么?图片缩放会产生图像的畸变,但是 feature map的 pooling只是整合了空间信息) 能反向传播?(pooling 的时候记录max 的location ,这个location 的导数为1 ) 多尺寸训练? Fast R-CNN 分类和框回归化为同级,一起训练,而之前是先训练分类器,再训练框回归 全联接层,用截断 SVD近似全联接层的矩阵,速度加快 Faster R-CNN 区域推荐同样用神经网络实现

ICLR 2020 | 抛开卷积,multi-head self-attention能够表达任何卷积操作

感情迁移 提交于 2020-04-06 18:07:33
> 近年来很多研究将nlp中的attention机制融入到视觉的研究中,得到很不错的结果,于是,论文侧重于从理论和实验去验证self-attention可以代替卷积网络独立进行类似卷积的操作,给self-attention在图像领域的应用奠定基础 论文: On the Relationship between Self-Attention and Convolutional Layers 论文地址: https://arxiv.org/abs/1911.03584 论文代码: https://github.com/epfml/attention-cnn Introduction   transformer的提出对NLP领域的研究有很大的促进作用,得益于attention机制,特别是self-attention,会考虑词间的相似性,对当前词进行加权输出。受到词间关系学习的启发,self-attention也开始用于视觉任务中,但大都是attention和convonlution的结合。Ramachandran在19年的研究中,用full attention model达到了resnet baseline的精度,模型参数和计算量相比卷积网络减轻了不少   因此,论文主要研究self-attention layer在图片处理上是否能达到convolutional layer的效果

深度学习常用方法

吃可爱长大的小学妹 提交于 2020-03-31 05:18:56
Deep Learning的常用模型或者方法   1、AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。 具体过程简单的说明如下:   1)给定无标签数据,用非监督学习学习特征:            在我们之前的神经网络中,如第一个图,我们输入的样本是有标签的,即(input, target),这样我们根据当前输出和target(label)之间的差去改变前面各层的参数,直到收敛。但现在我们只有无标签数据,也就是右边的图。那么这个误差怎么得到呢?          如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?我们加一个decoder解码器,这时候decoder就会输出一个信息

GoogLeNet 之 Inception v1 v2 v3 v4

主宰稳场 提交于 2020-03-29 15:15:30
论文地址 Inception V1 : Going Deeper with Convolutions Inception-v2 : Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Inception-v3 : Rethinking the Inception Architecture for Computer Vision Inception-v4 : Inception-ResNet and the Impact of Residual Connections on Learning GitHub源码 Inception-v4 最原始的Google-net结构图 Inception V1 上图是论文中提出的最原始的版本,所有的卷积核都在上一层的所有输出上来做,那5×5的卷积核所需的计算量就太大了,造成了特征图厚度很大。为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低特征图厚度的作用,也就是Inception v1的网络结构。 Google Inception Net首次出现在ILSVRC 2014的比赛中(和VGGNet同年),就以较大优势取得了第一名

Inception V1、V2、V3和V4

回眸只為那壹抹淺笑 提交于 2020-03-29 12:31:38
Inception模块分为V1、V2、V3和V4。 V1(GoogLeNet)的介绍 论文:Going deeper with convolutions 论文链接:https://arxiv.org/pdf/1409.4842v1.pdf 主要问题: 每张图中主体所占区域大小差别很大。由于主体信息位置的巨大差异,那选择合适的卷积核相对来说就比较困难。信息分布更全局性的图像适合选用较大的卷积核,信息分布较局部的图像适合较小的卷积核。 非常深的网络更容易过拟合。将梯度更新传输到整个网络是很困难的。 简单地堆叠较大的卷积层非常消耗计算资源。 解决方法: 作者在神经网络设计上不是增加深度而是增加网络宽度,并且为了降低算力成本,作者在3*3和5*5卷积层之前添加额外的1*1卷积层,来限制输入信道的数量。   2. V2介绍 论文:Rethinking the Inception Architecture for Computer Vision 论文地址:https://arxiv.org/pdf/1512.00567v3.pdf 主要问题: 减少特征的表征性瓶颈。直观来说,当卷积不会大幅度改变输入维度时,神经网络可能会执行地更好。过多地减少维度可能会造成信息的损失,也成为[特征性瓶颈]。 使用更优秀的因子分解方法,卷积才能在计算复杂度上更加高效。 解决方法: 最左侧一排将5*5分解成两个3

卷积 Convolution 原理及可视化

只愿长相守 提交于 2020-03-28 19:18:21
文章抄自 知乎-王贵波 本文主要介绍了卷积 Convolution 的背景、基本原理、特点、与全连接的区别与联系、不同的卷积模式,进行了卷积可视化以及代码实现了一个简单的 2 维卷积操作,并针对卷积操作进行了计算优化。 目录 卷积背景及原理 卷积的特点(与全连接的区别与联系) 卷积的三种模式 卷积操作 Numpy 简单实现 卷积优化实现 卷积背景及原理 卷积操作历史上来发展于信号处理领域,在信号处理中原始信号通常会被混入噪音,假设传感器在每个时刻 \(t\) 会输出一个信号 \(f(t)\) ,这个信号通常混入了一些噪声,我们可以通过过个测量点进行加权平均来抵消掉噪声,并且离当前时间点 \(t\) 越近的测量点权重应该越高,我们可以用下面的公式表示 \[h(t)=\sum_{t'}g(t-t')f(t') \] 上式中 \(g\) 是一个权重函数,参数是时间点 \(t'\) 距离当前时间 的 \(t\) 距离,输出 \(t'\) 时间点测量的权重; \(f\) 是信号测量函数。在这个例子中, \(t'\) 的采样是离散的,因此采用了加和的形式,同时 \(g\) 还应该是一个概率密度函数,因为在这个例子中表示了一种权重。下图就是这个例子的可视化,灰色是 \(f(t)\) ,红色的部分就是经过翻转的 \(g\) ,绿色部分是生成的 \(h\) 。 这个例子实际上就是卷积操作的一种特例

卷积神经网络(CNN)之一维卷积、二维卷积、三维卷积详解

你离开我真会死。 提交于 2020-03-27 01:27:28
1、卷积的数学意义   从数学上讲,卷积与加减乘除一样是一种运算,其运算的根本操作是将两个函数的其中一个先平移,然后再与另一个函数相称后的累加和。这个运算过程中,因为涉及到积分、级数的操作,所以看起来很复杂。在 卷积(转自wiki百科) 中已经讲过了卷积的定义如下所示: 对于定义在连续域的函数,卷积定义为 对于定义在离散域的函数,卷积定义为   这里令U(x,y) = f(x)g(y) ,考虑到函数 f 和 g 应该地位平等,即变量 x 和 y 应该地位平等,一种可取的办法就是沿直线 x+y = t将U(x,y)卷起来。下面为t取实际值的时候的坐标图,可以看到不同取值的t可以遍历整个平面。   将x+y=t中t取一次定值(这个定值可能是我们想要知道的某时刻的结果或着某种特征,由我们赋值),代入到U(x,y)中,就相当于U(x,y)所在平面沿着x+y=t直线做一次旋转如下列动图所示:   这里便是完成了整个卷积的降维过程,完成降维过程后,U(x,y)也就从一个二元函数 U(x,y) = f(x)g(y) 被卷成一元函数 V(x)=f(x)g(t-x),最后再对x求积分(即遍历降维后的轴上的特征点之和)。 2、卷积的C语言编写   编写卷积的程序,需要根据其离散方程组来进行了解。前面已经知道了卷积的离散函数的定义公式为:    在用C语言等其他语言进行实现是可以采用定义

卷积神经网络处理文本序列

强颜欢笑 提交于 2020-03-19 11:22:22
3 月,跳不动了?>>> 我们之前讨论了卷积神经网络,从局部可以提取出特征,用于小猫小狗的图片识别处理,非常有效;也讨论了循环神经网络进行文本的处理,因为文本的顺序是顺序相关的。基于以上特点,我们把时间或者说文本的前后看做一个维度,那一段文本就是一个一维空间,相比图片的二维空间,变得更加简单了,那卷积神经网络是否可以处理这样的情况呢? 先亮出结论,答案是肯定的。图片是二维的数据,文本是一维的数据,因此我们可以对训练的神经网络进行简化,让网络去提取一维的特征。既然如此,一维神经网络与二维的神经网络是类似的,因此我们可以把二维卷积神经网络的特性迁移到一维的卷积神经网络上。 我们在讨论神经网络的时候,我们知道了卷积神经网络具有平移不变性,非常好的特性,这个特性可以抓住问题的关键,识别出特殊的特征。在一维的卷积神经网络(用到的方法:Conv1D)中,一小段文本所具有的特性,进行学习后,在文本的其他位置仍然可以被识别出来。可以这样理解,一句话在开头说与在结束的时候说,表达的感情应该是一致的,效果也是一样的(绝大多数情况下),这就是文本的平移不变性。 同样的,在处理图片的时候,为了防止数据量过大,防止过拟合,我们需要进行池化的操作,在一维的神经网络中,我们也需要进行池化操作(用到的方法:MaxPooling1D)。 说到这里,大概的主要内容我们就说完了,比较简单,我们该举一个例子了