精华内容
下载资源
问答
  • 使用卷积神经网络处理时间序列,属于最新的处理模型,非常适合处理时间序列
  • 卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导博客pdf 原博客链接:https://blog.csdn.net/yyl424525/article/details/100058264#comments_12499724
  • 可变形卷积网络的官方实现,Deformable Convolutional Networks
  • FCN(完全卷积网络)中最简单,最容易使用的pytorch实现
  • 利用Pytorch实现的可变形卷积网络v2
  • 卷积神经网络原理介绍,实验使用,仅供参考
  • 四、全卷积网络FCN详细讲解(超级详细哦)

    万次阅读 多人点赞 2019-07-27 20:57:53
    四、FCN全卷积网络+upsampling上采样+opencv图像金字塔(超级详细哦)1、全卷积网络(FCN)的简单介绍1.1、CNN与FCN的比较1、上采样理论2、OpenCV图像金字塔 1、全卷积网络(FCN)的简单介绍 1.1、CNN与FCN的比较 ...

    1、全卷积网络(FCN)的简单介绍

    1.1、CNN与FCN的比较

    CNN: 在传统的CNN网络中,在最后的卷积层之后会连接上若干个全连接层,将卷积层产生的特征图(feature map)映射成为一个固定长度的特征向量。一般的CNN结构适用于图像级别的分类和回归任务,因为它们最后都期望得到输入图像的分类的概率,如ALexNet网络最后输出一个1000维的向量表示输入图像属于每一类的概率。如下图所示:
    在这里插入图片描述
    在CNN中, 猫的图片输入到AlexNet, 得到一个长为1000的输出向量, 表示输入图像属于每一类的概率, 其中在“tabby cat”这一类统计概率最高, 用来做分类任务。

    FCN: FCN是对图像进行像素级的分类(也就是每个像素点都进行分类),从而解决了语义级别的图像分割问题。与上面介绍的经典CNN在卷积层使用全连接层得到固定长度的特征向量进行分类不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷基层的特征图(feature map)进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后奇偶在上采样的特征图进行像素的分类。如下图所示:
    在这里插入图片描述
    简单的说,FCN与CNN的区别在于FCN把CNN最后的全连接层换成卷积层,其输出的是一张已经标记好的图,而不是一个概率值。

    2、FCN上采样理论讲解

    FCN网络一般是用来对图像进行语义分割的,于是就需要对图像上的各个像素进行分类,这就需要一个上采样将最后得到的输出上采样到原图的大小。上采样对于低分辨率的特征图,常常采用上采样的方式将它还原高分辨率,这里陈述上采样的三种方法。

    2.1、双线性插值上采样

    单线性插值(一个方向上)就是知道两个点的值,并将两点连成一条直线,来确定中间的点的值,假设,现在有两点 ( x 1 , y 1 ) 、 ( x 2 , y 2 ) (x_1,y_1 )、(x_2,y_2) x1,y1x2,y2连成一条直线, [ x 1 , x 2 ] [x_1,x_2] [x1,x2]中的点就可以用线上的点表示。双线性插值(两个方向上)是一个三维的坐标系,因此,需要找到4个点来确定中心点坐标,如下图所示的例子:
    在这里插入图片描述
    假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q 1 1 = ( x 1 , y 1 ) 、 Q 1 2 = ( x 1 , y 2 ) , Q 2 1 = ( x 2 , y 1 ) Q_11 = (x_1, y_1)、Q_12 = (x_1, y_2), Q_21 = (x_2, y_1) Q11=(x1,y1)Q12=(x1,y2),Q21=(x2,y1)以及 Q 2 2 = ( x 2 , y 2 ) Q_22 = (x_2, y_2) Q22=(x2,y2) 四个点的值。最常见的情况,f就是一个像素点的像素值。首先在 x 方向进行线性插值,得到:
    在这里插入图片描述
    然后在 y 方向进行线性插值,得到:
    在这里插入图片描述
    综合起来就是双线性插值最后的结果:
    在这里插入图片描述
    由于图像双线性插值只会用相邻的4个点,因此上述公式的分母都是1。opencv中的源码如下,用了一些优化手段,比如用整数计算代替float(下面代码中的*2048就是变11位小数为整数,最后有两个连乘,因此>>22位),以及源图像和目标图像几何中心的对齐

    • SrcX=(dstX+0.5)* (srcWidth/dstWidth) -0.5
    • SrcY=(dstY+0.5) * (srcHeight/dstHeight)-0.5,
      这个要重点说一下,源图像和目标图像的原点(0,0)均选择左上角,然后根据插值公式计算目标图像每点像素,假设你需要将一幅5x5的图像缩小成3x3,那么源图像和目标图像各个像素之间的对应关系如下。如果没有这个中心对齐,根据基本公式去算,就会得到左边这样的结果;而用了对齐,就会得到右边的结果:
      在这里插入图片描述

    2.2、反卷积上采样

    怎样上采样: 普通的卷积操作,会使得分辨率降低,如下图33的卷积核去卷积44得到2*2的输出。
    在这里插入图片描述
    上采样的过程也是卷积,那么怎么会得到分辨率提高呢?之前我们看卷积时有个保持输出与输入同分辨率的方法就是周围补0。
    在这里插入图片描述
    其实上面这种补0的方法事有问题的,你想一下,只在四周补0会导致最边上的信息不太好,那我们把这个信息平均下,在每个像素与像素之间补0,如下图所示:
    在这里插入图片描述

    2.3、反池化上采样

    反池化可以用下图来理解,再池化时需要记录下池化的位置,反池化时把池化的位置直接还原,其他位置填0。
    在这里插入图片描述
    上面三种方法各有优缺,双线性插值方法实现简单,无需训练;反卷积上采样需要训练,但能更好的还原特征图;

    2、 FCN具体实现过程

    FCN与CNN的核心区别就是FCN将CNN末尾的全连接层转化成了卷积层:以Alexnet为例,输入是2272273的图像,前5层是卷积层,第5层的输出是256个特征图,大小是66,即25666,第6、7、8层分别是长度是4096、4096、1000的一维向量。如下图所示:
    在这里插入图片描述
    在FCN中第6、7、8层都是通过卷积得到的,卷积核的大小全部是1 * 1,第6层的输出是4096 * 7 * 7,第7层的输出是4096 * 7 * 7,第8层的输出是1000 * 7 * 7(7是输入图像大小的1/32),即1000个大小是7
    7的特征图(称为heatmap),如下图所示:
    在这里插入图片描述
    经过多次卷积后,图像的分辨率越来越低,为了从低分辨率的热图heatmap恢复到原图大小,以便对原图上每一个像素点进行分类预测,需要对热图heatmap进行反卷积,也就是上采样。论文中首先进行了一个上池化操作,再进行反卷积(上述所提到的上池化操作和反卷积操作,其实可以理解为上卷积操作),使得图像分辨率提高到原图大小。如下图所示:
    在这里插入图片描述
    跳级(strip)结构:对第5层的输出执行32倍的反卷积得到原图,得到的结果不是很精确,论文中同时执行了第4层和第3层输出的反卷积操作(分别需要16倍和8倍的上采样),再把这3个反卷积的结果图像融合,提升了结果的精确度:
    在这里插入图片描述
    最后像素的分类按照该点在1000张上采样得到的图上的最大的概率来定。FCN可以接受任意大小的输入图像,但是FCN的分类结果还是不够精细,对细节不太敏感,再者没有考虑到像素与像素之间的关联关系,丢失了部分空间信息。

    3、 FCN模型实现过程

    3.1、模型训练

    • 用AlexNet,VGG16或者GoogleNet训练好的模型做初始化,在这个基础上做fine-tuning,只需在末尾加上upsampling,参数的学习还是利用CNN本身的反向传播原理。

    • 采用全图做训练,不进行局部抽样。实验证明直接用全图已经很高效。
    FCN例子: 输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,深度为:20类目标+背景=21,模型基于AlexNet。

    • 蓝色:卷积层。

    • 绿色:Max Pooling层。

    • 黄色: 求和运算, 使用逐数据相加,把三个不同深度的预测结果进行融合:较浅的结果更为精细,较深的结果更为鲁棒。

    • 灰色: 裁剪, 在融合之前,使用裁剪层统一两者大小, 最后裁剪成和输入相同尺寸输出。

    • 对于不同尺寸的输入图像,各层数据的尺寸(height,width)相应变化,深度(channel)不变。
    在这里插入图片描述
    • 全卷积层部分进行特征提取, 提取卷积层(3个蓝色层)的输出来作为预测21个类别的特征。

    • 图中虚线内是反卷积层的运算, 反卷积层(3个橙色层)可以把输入数据尺寸放大。和卷积层一样,升采样的具体参数经过训练确定。

    1、 以经典的AlexNet分类网络为初始化。最后两级是全连接(红色),参数弃去不用。
    在这里插入图片描述
    2、 反卷积(橙色)的步长为32,这个网络称为FCN-32s

    从特征小图()预测分割小图(),之后直接升采样为大图。
    在这里插入图片描述
    3、 第二次反卷积步长为16,这个网络称为FCN-16s

    升采样分为两次完成(橙色×2), 在第二次升采样前,把第4个pooling层(绿色)的预测结果(蓝色)融合进来。使用跳级结构提升精确性。
    在这里插入图片描述
    4、 第三次反卷积步长为8,记为FCN-8s。

    升采样分为三次完成(橙色×3), 进一步融合了第3个pooling层的预测结果。
    在这里插入图片描述
    其他参数:
    • minibatch:20张图片
    • learning rate:0.001
    • 初始化:分类网络之外的卷积层参数初始化为0
    • 反卷积参数初始化为bilinear插值。最后一层反卷积固定位bilinear插值不做学习
    在这里插入图片描述
    总体来说,本文的逻辑如下:

    • 想要精确预测每个像素的分割结果
    • 必须经历从大到小,再从小到大的两个过程
    • 在升采样过程中,分阶段增大比一步到位效果更好
    • 在升采样的每个阶段,使用降采样对应层的特征进行辅助

    缺点:

    1. 得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感
    2. 对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性

    3.2、FCN模型的简单总结

    FCN的卷积网络部分可以采用VGG、GoogleNet、AlexNet等作为前置基础网络,在这些的预训练基础上进行迁移学习与finetuning,对反卷积的结果跟对应的正向feature map进行叠加输出(这样做的目的是得到更加准确的像素级别分割),根据上采样的倍数不一样分为FCN-8S、FCN-16S、FCN-32S,图示如下:

    详情:

    对原图像进行卷积 conv1、pool1后原图像缩小为1/2;

    之后对图像进行第二次 conv2、pool2后图像缩小为1/4;

    继续对图像进行第三次卷积操作conv3、pool3缩小为原图像的1/8,此时保留pool3的featureMap;

    继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;

    最后对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32,

    然后把原来CNN操作中的全连接变成卷积操作conv6、conv7,图像的featureMap数量改变但是图像大小依然为原图的1/32,此时图像不再叫featureMap而是叫heatMap。

    实例

    现在我们有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap,1/32尺寸的heatMap进行upsampling操作之后,因为这样的操作还原的图片仅仅是conv5中的卷积核中的特征,限于精度问题不能够很好地还原图像当中的特征,因此在这里向前迭代。把conv4中的卷积核对上一次upsampling之后的图进行反卷积补充细节(相当于一个差值过程),最后把conv3中的卷积核对刚才upsampling之后的图像进行再次反卷积补充细节,最后就完成了整个图像的还原。(具体怎么做,本博客已经在3.1节进行了详细的讲解,不懂的地方可以回过头不查看。)如下图所示:注,上下两个图表达相同的意思。
    在这里插入图片描述

    展开全文
  • 深度学习中的卷积网络简介

    千次阅读 2018-10-04 08:44:13
    卷积网络(convolutional network)也叫做卷积神经网络(convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维...

          卷积网络(convolutional network)也叫做卷积神经网络(convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看作是二维的像素网格)。卷积网络在诸多应用领域都表现优异。”卷积神经网络”一词表明该网络使用了卷积(convolution)这种数学运算。卷积是一种特殊的线性运算。卷积网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。

            通常来说,卷积神经网络中用到的卷积运算和其他领域(例如工程领域以及纯数学领域)中的定义并不完全一致。卷积网络是神经科学原理影响深度学习的典型代表。

            1. 卷积运算

            在通常形式中,卷积是对两个实变函数的一种数学运算。卷积运算通常用星号表示。在卷积网络的术语中,卷积的第一个参数通常叫做输入,第二个参数叫做核函数。输出有时被称作特征映射(feature map)。在机器学习的应用中,输入通常是多维数组的数据,而核通常是由学习算法优化得到的多维数组的参数。我们把这些多维数组叫做张量。因为在输入与核中的每一个元素都必须明确地分开存储,我们通常假设在存储了数值的有限点集以外,这些函数的值都为零。这意味着在实际操作中,我们可以通过对有限个数组元素的求和来实现无限求和。我们经常一次在多个维度上进行卷积运算。卷积是可交换的(commutative)。

            卷积运算可交换性的出现是因为我们将核相对输入进行了翻转(flip),从m增大的角度来看,输入的索引在增大,但是核的索引在减小。我们将核翻转的唯一目是实现可交换性。尽管可交换性在证明时很有用,但在神经网络的应用中却不是一个重要的性质。与之不同的是,许多神经网络库会实现一个相关的函数,称为互相关函数(cross-correlation),和卷积运算几乎一样但是并没有对核进行翻转,如下式,把一张二维的图像I作为输入,使用一个二维的核K:

           许多机器学习的库实现的是互相关函数但是称之为卷积。在机器学习中,学习算法会在核合适的位置学得恰当的值,所以一个基于核翻转的卷积运算的学习算法所学得的核,是对未进行翻转的算法学得的核的翻转。单独使用卷积运算在机器学习中是很少见的,卷积经常与其它的函数一起使用,无论卷积运算是否对它的核进行了翻转,这些函数的组合通常是不可交换的。我们限制只对核完全处在图像中的位置进行输出,在一些上下文中称为”有效”卷积。

            2. 动机

            卷积运算通过三个重要的思想来帮助改进机器学习系统:稀疏交互(sparse interactions)、参数共享(parameter sharing)、等变表示(equivariant representations)。另外,卷积提供了一种处理大小可变的输入的方法。

            传统的神经网络使用矩阵乘法来建立输入与输出的连接关系。其中,参数矩阵中每一个单独的参数都描述了一个输入单元与一个输出单元间的交互。这意味着每一个输出单元与每一个输入单元都产生交互。然而,卷积网络具有稀疏交互(sparse interactions)(也叫做稀疏连接(sparse connectivity)或者稀疏权重(sparse weights))的特征。这是使核的大小远小于输入的大小来达到的。举个例子,当处理一张图像时,输入的图像可能包含成千上万个像素点,但是我们可以通过只占用几十到上百个像素点的核来检测一些小的有意义的特征,例如图像的边缘。这意味着我们需要存储的参数更少,不仅减少了模型的存储需求,而且提高了它的统计效率。这也意味着为了得到输出我们只需要更少的计算量。这些效率上的提高往往是很显著的。如果有m个输入和n个输出,那么矩阵乘法需要m*n 个参数并且相应算法的时间复杂度为O(m*n)(对于每一个例子)。如果我们限制每一个输出拥有的连接数为k,那么稀疏的连接方法只需要k *n个参数以及O(k*n)的运行时间。在很多实际应用中,只需保持k比m小几个数量级,就能在机器学习的任务中取得好的表现。在深度卷积网络中,处在网络深层的单元可能与绝大部分输入是间接交互的,这允许网络可以通过只描述稀疏交互的基石来高效地描述多个变量的复杂交互。

            参数共享(parameter sharing)是指在一个模型的多个函数中使用相同的参数。在传统的神经网络中,当计算一层的输出时,权重矩阵的每一个元素只使用一次,当它乘以输入的一个元素后就再也不会用到了。作为参数共享的同义词,我们可以说一个网络含有绑定的权重(tiedweights),因为用于一个输入的权重也会被绑定在其他的权重上。在卷积神经网络中,核的每一个元素都作用在输入的每一位置上(是否考虑边界像素取决于对边界决策的设计)。卷积运算中的参数共享保证了我们只需要学习一个参数集合,而不是对于每一位置都需要学习一个单独的参数集合。这虽然没有改变前向传播的运行时间(仍然是O(k*n)),但它显著地把模型的存储需求降低至k个参数,并且k通常要比m小很多个数量级。因为m和n通常有着大致相同的大小,k在实际中相对于m*n 是很小的。因此,卷积在存储需求和统计效率方面极大地优于稠密矩阵的乘法运算。

            对于卷积,参数共享的特殊形式使得神经网络层具有对平移等变(equivariance)的性质。如果一个函数满足输入改变,输出也以同样的方式改变这一性质,我们就说它是等变(equivariant)的。特别地,如果函数f(x)与g(x)满足f(g(x)) = g(f(x)),我们就说f(x)对于变换g具有等变性。对于卷积来说,如果令g是输入的任意平移函数,那么卷积函数对于g具有等变性。举个例子,令I表示图像在整数坐标上的亮度函数,g表示图像函数的变换函数(把一个图像函数映射到另一个图像函数的函数)使得I’= g(I),其中图像函数I’满足I’(x, y) = I(x-1,y)。这个函数把I中的每个像素向右移动一个单位。如果我们先对I进行这种变换然后进行卷积操作所得到的结果,与先对I进行卷积然后再对输出使用平移函数g得到的结果是一样的。当处理时间序列数据时,这意味着通过卷积可以得到一个由输入中出现不同特征的时刻所组成的时间轴。如果我们把输入中的一个事件向后延时,在输出中仍然会有完全相同的表示,只是时间延后了。图像与之类似,卷积产生了一个2维映射来表明某些特征在输入中出现的位置。如果我们移动输入中的对象,它的表示也在输出中移动同样的量。当处理多个输入位置时,一些作用在邻居像素的函数是很有用的。例如在处理图像时,在卷积网络的第一层进行图像的边缘检测是很有用的。相同的边缘或多或少地散落在图像的各处,所以应当对整个图像进行参数共享。但在某些情况下,我们并不希望对整幅图进行参数共享。例如,在处理已经通过剪裁而使其居中的人脸图像时,我们可能想要提取不同位置上的不同特征(处理人脸上部的部分网络需要去搜寻眉毛,处理人脸下部的部分网络就需要去搜寻下巴了)。

            卷积对其他的一些变换并不是天然等变的,例如对于图像的放缩或者旋转变换,需要其他的一些机制来处理这些变换。最后,一些不能被传统的由(固定大小的)矩阵乘法定义的神经网络处理的特殊数据,可能通过卷积神经网络来处理。

            3. 池化

            卷积网络中一个典型层包含三级。在第一级中,这一层并行地计算多个卷积产生一组线性激活响应。在第二级中,每一个线性激活响应将会通过一个非线性的激活函数,例如整流线性激活函数。这一级有时也被称为探测级(detector stage)。在第三级中,我们使用池化函数(pooling function)来进一步调整这一层的输出

            池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。例如, 最大池化(max pooling)函数给出相邻矩形区域内的最大值。其他常用的池化函数包括相邻矩形区域内的平均值、L2范数以及基于据中心像素距离的加权平均函数。不管采用什么样的池化函数,当输入作出少量平移时,池化能够帮助输入的表示近似不变(invariant)对于平移的不变性是指当我们对输入进行少量平移时,经过池化函数后的大多数输出并不会发生改变。局部平移不变性是一个很有用的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时。例如,当判定一张图像中是否包含人脸时,我们并不需要知道眼睛的精确像素位置,我们只需要知道有一只眼睛在脸的左边,有一只在右边就行了。但在一些其他领域,保存特征的具体位置却很重要。例如当我们想要寻找一个由两条边相交而成的拐角时,我们就需要很好地保存边的位置来判定它们是否相交。

            使用池化可以看作是增加了一个无限强的先验:这一层学得的函数必须具有对少量平移的不变性。当这个假设成立时,池化可以极大地提高网络的统计效率。因为池化综合了全部邻居的反馈,这使得池化单元少于探测单元成为可能,我们可以通过综合池化区域的k个像素的统计特征而不是单个像素来实现。

            一些理论工作对于在不同情况下应当使用哪种池化函数给出了一些指导。将特征一起动态地池化也是可行的,例如,对于感兴趣特征的位置进行聚类算法。这种方法对于每幅图像产生一个不同的池化区域集合。另一种方法是先学习一个单独的池化结构,再应用到全部的图像中。

            4. 卷积与池化作为一种无限强的先验

            先验被认为是强或者弱取决于先验中概率密度的集中程度。弱先验具有较高的熵值,例如方差很大的高斯分布。这样的先验允许数据对于参数的改变具有或多或少的自由性。强先验具有较低的熵值,例如方差很小的高斯分布。这样的先验在决定参数最终取值时起着更加积极的作用。一个无限强的先验需要对一些参数的概率置零并且完全禁止对这些参数赋值,无论数据对于这些参数的值给出了多大的支持。

            我们可以把卷积网络类比成全连接网络,但对于这个全连接网络的权重有一个无限强的先验。这个无限强的先验是说一个隐藏单元的权重必须和它邻居的权重相同,但可以在空间上移动。这个先验也要求除了那些处在隐藏单元的小的空间连续的接受域内的权重以外,其余的权重都为零。总之,我们可以把卷积的使用当作是对网络中一层的参数引入了一个无限强的先验概率分布。这个先验说明了该层应该学得的函数只包含局部连接关系并且对平移具有等变性。类似的,使用池化也是一个无限强的先验:每一个单元都具有对少量平移的不变性。当然,把卷积神经网络当作一个具有无限强先验的全连接网络来实现会导致极大的计算浪费。但把卷积神经网络想成具有无限强先验的全连接网络可以帮助我们更好地洞察卷积神经网络是如何工作的。

            其中一个关键的洞察是卷积和池化可能导致欠拟合。与任何其他先验类似,卷积和池化只有当先验的假设合理且正确时才有用。如果一项任务依赖于保存精确的空间信息,那么在所有的特征上使用池化将会增大训练误差。一些卷积网络结构为了既获得具有较高不变性的特征又获得当平移不变性不合理时不会导致欠拟合的特征,被设计成在一些通道上使用池化而在另一些通道上不使用。当一项任务涉及到要对输入中相隔较远的信息进行合并时,那么卷积所利用的先验可能就不正确了。

            另一个关键洞察是当我们比较卷积模型的统计学习表现时,只能以基准中的其他卷积模型作为比较的对象。其他不使用卷积的模型即使我们把图像中的所有像素点都置换后依然有可能进行学习。对于许多图像数据集,还有一些分别的基准,有些是针对那些具有置换不变性(permutation invariant)并且必须通过学习发现拓扑结构的模型,还有一些是针对模型设计者将空间关系的知识植入了它们的模型。

            5. 基本卷积函数的变体

            当在神经网络的上下文中讨论卷积时,我们通常不是特指数学文献中使用的那种标准的离散卷积运算。实际应用中的函数略有不同。

            首先,当我们提到神经网络中的卷积时,我们通常是指由多个并行卷积组成的运算。这是因为具有单个核的卷积只能提取一种类型的特征,尽管它作用在多个空间位置上。我们通常希望网络的每一层能够在多个位置提取多种类型的特征。

            另外,输入通常也不仅仅是实值的网格,而是由一系列观测数据的向量构成的网格。例如,一幅彩色图像在每一个像素点都会有红绿蓝三种颜色的亮度。在多层的卷积网络中,第二层的输入是第一层的输出,通常在每个位置包含多个不同卷积的输出。当处理图像时,我们通常把卷积的输入输出都看作是3维的张量,其中一个索引用于标明不同的通道(例如红绿蓝),另外两个索引标明在每个通道上的空间坐标。软件实现通常使用批处理模式,所以实际上会使用4维的张量,第四维索引用于标明批处理中不同的实例。

            因为卷积网络通常使用多通道的卷积,所以即使使用了核翻转,也不一定保证网络的线性运算是可交换的。只有当其中的每个运算的输出和输入具有相同的通道数时,这些多通道的运算才是可交换的。

            我们有时会希望跳过核中的一些位置来降低计算的开销(相应的代价是提取特征没有先前那么好了)。我们可以把这一过程看作是对全卷积函数输出的下采样(downsampling)。如果我们只想在输出的每个方向上每间隔s个像素进行采样。我们把s称为下采样卷积的步幅(stride)。当然也可以对每个移动方向定义不同的步幅

            在任何卷积网络的实现中都有一个重要性质,那就是能够隐含地对输入V用零进行填充(pad)使得它加宽。如果没有这个性质,表示的宽度在每一层就会缩减,缩减的幅度是比核少一个像素这么多。对输入进行零填充允许我们对核的宽度和输出的大小进行独立的控制。如果没有零填充,我们就被迫面临二选一的局面,要么选择网络空间宽度的快速缩减,要么选择一个小型的核----这两种情境都会极大得限制网络的表示能力。

            有三种零填充设定的情况值得注意。第一种是无论怎样都不使用零填充的极端情况,并且卷积核只允许访问那些图像中能够完全包含整个核的位置。在MATLAB的术语中,这称为有效(valid)卷积。在这种情况下,输出的所有像素都是输入中相同数量像素的函数,这使得输出像素的表示更加规范。然而,输出的大小在每一层都会缩减。如果输入的图像宽度是m,核的宽度是k,那么输出的宽度就会变成m-k+1。如果卷积核非常大的话缩减率会非常显著。因为缩减数大于0,这限制了网络中能够包含的卷积层的层数。当层数增加时,网络的空间维度最终会缩减到1*1,这种情况下增加的层就不可能进行有意义的卷积了。第二种特殊的情况是只进行足够的零填充来保持输出和输入具有相同的大小。在MATLAB的术语中,这称为相同(same)卷积。在这种情况下,只要硬件支持,网络就能包含任意多的卷积层,这是因为卷积运算不改变下一层的结构。然而,输入像素中靠近边界的部分相比于中间部分对于输出像素的影响更小。这可能会导致边界像素存在一定程度的欠表示。这使得第三种极端情况产生了,在MATLAB中称为全(full)卷积。它进行了足够多的零填充使得每个像素在每个方向上恰好被访问了k次,最终输出图像的宽度为m+k -1。在这种情况下,输出像素中靠近边界的部分相比于中间部分是更少像素的函数。这将导致学得一个在卷积特征映射的所有位置都表现不错的单核更为困难。通常零填充的最优数量(对于测试集的分类正确率)处于”有效卷积”和”相同卷积”之间的某个位置。

            在一些情况下,我们并不是真的想使用卷积,而是想用一些局部连接的网络层。在这种情况下,我们的多层感知机对应的邻接矩阵是相同的,但每一个连接都有它自己的权重。这有时也被称为非共享卷积(unsharedconvolution),因为它和具有一个小核的离散卷积运算很像,但并不横跨位置来共享参数。当我们知道每一个特征都是一小块空间的函数并且相同的特征不会出现在所有的空间上时,局部连接层是很有用的。例如,如果我们想要辨别一张图片是否是人脸图像时,我们只需要去寻找嘴是否在图像下半部分即可。

            平铺卷积(tiled convolution)对卷积层和局部连接层进行了折衷。这里并不是对每一个空间位置的权重集合进行学习,我们学习一组核使得当我们在空间移动时它们可以循环利用。这意味着在近邻的位置上拥有不同的过滤器,就像局部连接层一样,但是对于这些参数的存储需求仅仅会增长常数倍,这个常数就是核的集合的大小,而不是整个输出的特征映射的大小。

            这三种运算----卷积、从输出到权重的反向传播和从输出到输入的反向传播----对于训练任意深度的前馈卷积网络,以及训练带有(基于卷积的转置的)重构函数的卷积网络,这三种运算都足以计算它们所需的所有梯度。对于完全一般的多维、多样例情况下的公式,完整的推导可以参考Goodfellow。

            一般来说,在卷积层从输入到输出的变换中我们不仅仅只用线性运算。我们一般也会在进行非线性运算前,对每个输出加入一些偏置项。这样就产生了如何在偏置项中共享参数的问题。对于局部连接层,很自然地对每个单元都给定它特有的偏置,对于平铺卷积,也很自然地用与核一样的平铺模式来共享参数。对于卷积层来说,通常的做法是在输出的每一个通道上都设置一个偏置,这个偏置在每个卷积映射的所有位置上共享。然而,如果输入是已知的固定大小,也可以在输出映射的每个位置学习一个单独的偏置。分离这些偏置可能会稍稍降低模型的统计效率,但同时也允许模型来校正图像中不同位置的统计差异。例如,当使用隐含的零填充时,图像边缘的探测单元接收到较少的输入,因此需要较大的偏置

            6. 结构化输出:卷积神经网络可以用于输出高维的结构化对象,而不仅仅是预测分类任务的类标签或回归任务的实数值。通常这个对象只是一个张量,由标准卷积层产生。

            7. 数据类型:卷积网络使用的数据通常包含多个通道,每个通道是时间上或空间中某一点的不同观测量。

            注意,使用卷积处理可变尺寸的输入,仅对输入是因为包含对同种事物的不同量的观察(时间上不同长度的记录,空间上不同宽度的观察等)而导致的尺寸变化这种情况才有意义。如果输入是因为它可以选择性地包括不同种类的观察而具有可变尺寸,使用卷积是不合理的。例如,如果我们正在处理大学申请,并且我们的特征包括成绩等级和标准化测试分数,但不是每个申请人都进行了标准化测试,则使用相同的权重来对成绩特征和测试分数特征进行卷积是没有意义的。

            8. 高效的卷积算法

            9. 随机或无监督的特征

            通常,卷积网络训练中最昂贵的部分是学习特征。输出层的计算代价通常相对不高,因为在通过若干层池化之后作为该层输入的特征的数量较少。当使用梯度下降执行监督训练时,每步梯度计算需要完整地运行整个网络的前向传播和反向传播。减少卷积网络训练成本的一种方式是使用那些不是由监督方式训练得到的特征。

            有三种基本策略可以不通过监督训练而得到卷积核。其中一种是简单地随机初始化它们。另一种是手动设计它们,例如设置每个核在一个特定的方向或尺度来检测边缘。最后,可以使用无监督的标准来学习核。使用无监督的标准来学习特征,使得它们能够与位于网络结构顶层的分类层相互独立地确定。然后只需提取一次全部训练集的特征,构造用于最后一层的新训练集。

            随机过滤器经常在卷积网络中表现得出乎意料得好。Saxe说明,由卷积和随后的池化组成的层,当赋予随机权重时,自然地变得具有频率选择性和平移不变性。他们认为这提供了一种廉价的方法来选择卷积网络的结构:首先通过仅训练最后一层来评估几个卷积网络结构的性能,然后选择最好的结构并使用更昂贵的方法来训练整个网络。

            一个中间方法是学习特征,但是使用那种不需要在每个梯度计算步骤中都进行完整的前向和反向传播的方法。与多层感知机一样,我们使用贪心逐层预训练,单独训练第一层,然后一次性地从第一层提取所有特征,之后用那些特征单独训练第二层,以此类推。大多数卷积网络以纯粹监督的方式训练,在每次训练迭代中使用通过整个网络的完整的前向和反向传播。

            10.  卷积网络的神经科学基础

            11. 卷积网络与深度学习的历史

            以上内容摘自: 《深度学习中文版》

            GitHub: https://github.com/fengbingchun/NN_Test 

    --------------------- 本文来自 fengbingchun 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/fengbingchun/article/details/79977843?utm_source=copy

    展开全文
  • 卷积网络的结构

    千次阅读 2021-04-06 15:22:28
    卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的下采样层(S-层),这种特有的两次...

    卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的下采样层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。

                           图3  经典的卷积神经网络结构图

    原始图像的大小决定了输入向量的尺寸,隐层由C-层(特征提取层)和S-层(下采样层)组成,每层均包含多个平面。C1层神经元提取图像的局部特征,因此每个神经元都与前一层的局部感受野(也就是局部输入窗口)相连。C1层中各平面(由神经元构成)提取图像中不同的局部特征,如边缘特征,上下左右方向特征等,C1层中的输入是有由上一层局部窗口的数值和连接的权值的加权和(也就是卷积,后面会具体解释为什么是卷积),然后通过一个激活函数(如sigmoid 函数,反正切函数)得到C1层的输出,接下来S2层是下采样层,简单来书,由4个点下采样为1个点,也就是4个数的加权平均。换句话说,就是我们把2*2的像素缩小成为一个像素,某种意义上来说可以认识是图像处理中的模糊。然后按照这个C—S的结构继续构成隐层,当然这些隐层的连接都是局部相连的。同时有人会问了,例如S2和C3层具体要怎么连接呢,为什么会从6张变成16张特征图呢。C3层的特征图是由S2层图像的感受野和对应权值的卷积后,通过随机的组合而形成的,也就意味着S2层和C3层并不像C1层和S2层那样是一一对应的。但当我们感受野的大小和图像一样时,我们经过特征提取后就变成一个像素了,这里我们开始使用全连接(这样才能完整的把特征保留)。

    展开全文
  • 卷积神经网络python实现。 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积或相关计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之...
  • TCN-时间卷积网络

    万次阅读 多人点赞 2019-06-03 14:42:01
    二、时序卷积神经网络 2.1 因果卷积(Causal Convolution) 2.2 膨胀卷积(Dilated Convolution) 2.3 残差链接(Residual Connections) 三、讨论和总结 1. TCN的优点 2. TCN的缺点 参考论文:An Empirical ...

    目录

    一、引言

    二、时序卷积神经网络

    2.1 因果卷积(Causal Convolution)

    2.2 膨胀卷积(Dilated Convolution)

    2.3 残差链接(Residual Connections)

    三、讨论和总结

    1. TCN的优点

    2. TCN的缺点


    参考论文:An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling

    Github:https://github.com/LOCUSLAB/tcn

    参考链接:

           序列建模之时间卷积网络TCN - 杨镒铭的文章 - 知乎

          TCN时间卷积网络 - 剪水作花飞的文章 - 知乎

           时间卷积网络(TCN)在 NLP 多领域发光,RNN 或将没落

    一、引言

           时序问题的建模大家一般习惯性的采用循环神经网络(RNN)来建模,这是因为RNN天生的循环自回归的结构是对时间序列的很好的表示。传统的卷积神经网络一般认为不太适合时序问题的建模,这主要由于其卷积核大小的限制,不能很好的抓取长时的依赖信息。 但是最近也有很多的工作显示,特定的卷积神经网络结构也可以达到很好的效果,比如Goolgle提出的用来做语音合成的wavenet,Facebook提出的用来做翻译的卷积神经网络。这就带来一个问题,用卷积来做神经网络到底是只适用于特定的领域还是一种普适的模型? 本文就带着这个问题,将一种特殊的卷积神经网络——时序卷积网络(Temporal convolutional network, TCN)与多种RNN结构相对比,发现在多种任务上TCN都能达到甚至超过RNN模型。

    二、时序卷积神经网络

    2.1 因果卷积(Causal Convolution)

                        preview

            因果卷积可以用上图直观表示。 即对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。和传统的卷积神经网络的不同之处在于,因果卷积不能看到未来的数据,它是单向的结构,不是双向的。也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此被成为因果卷积。

    2.2 膨胀卷积(Dilated Convolution)

           单纯的因果卷积还是存在传统卷积神经网络的问题,即对时间的建模长度受限于卷积核大小的,如果要想抓去更长的依赖关系,就需要线性的堆叠很多的层。为了解决这个问题,研究人员提出了膨胀卷积。如下图所示。

                                    preview

            和传统卷积不同的是,膨胀卷积允许卷积时的输入存在间隔采样,采样率受图中的d控制。 最下面一层的d=1,表示输入时每个点都采样,中间层d=2,表示输入时每2个点采样一个作为输入。一般来讲,越高的层级使用的d的大小越大。所以,膨胀卷积使得有效窗口的大小随着层数呈指数型增长。这样卷积网络用比较少的层,就可以获得很大的感受野。

    2.3 残差链接(Residual Connections)

                    preview

            残差链接被证明是训练深层网络的有效方法,它使得网络可以以跨层的方式传递信息。本文构建了一个残差块来代替一层的卷积。如上图所示,一个残差块包含两层的卷积和非线性映射,在每层中还加入了WeightNorm和Dropout来正则化网络。

    三、讨论和总结

           总体来讲,TCN模型上的创新并不是很大,因果卷积和扩展卷积也并不是本论文提出来,本文主要是将TCN的结构梳理了一下,相比于wavenet中的结构,去掉了门机制,加入了残差结构,并在很多的序列问题上进行了实验。实验效果如下:

                  

    在多个任务上,都比标准的LSTM、GRU等效果好。

    1. TCN的优点

        (1)并行性。当给定一个句子时,TCN可以将句子并行的处理,而不需要像RNN那样顺序的处理。

        (2)灵活的感受野。TCN的感受野的大小受层数、卷积核大小、扩张系数等决定。可以根据不同的任务不同的特性灵活定制。

        (3)稳定的梯度。RNN经常存在梯度消失和梯度爆炸的问题,这主要是由不同时间段上共用参数导致的,和传统卷积神经网络一样,TCN不太存在梯度消失和爆炸问题。

        (4)内存更低。RNN在使用时需要将每步的信息都保存下来,这会占据大量的内存,TCN在一层里面卷积核是共享的,内存使用更低。

    2. TCN的缺点

        (1)TCN 在迁移学习方面可能没有那么强的适应能力。这是因为在不同的领域,模型预测所需要的历史信息量可能是不同的。因此,在将一个模型从一个对记忆信息需求量少的问题迁移到一个需要更长记忆的问题上时,TCN 可能会表现得很差,因为其感受野不够大。

        (2)论文中描述的TCN还是一种单向的结构,在语音识别和语音合成等任务上,纯单向的结构还是相当有用的。但是在文本中大多使用双向的结构,当然将TCN也很容易扩展成双向的结构,不使用因果卷积,使用传统的卷积结构即可。

        (3)TCN毕竟是卷积神经网络的变种,虽然使用扩展卷积可以扩大感受野,但是仍然受到限制,相比于Transformer那种可以任意长度的相关信息都可以抓取到的特性还是差了点。TCN在文本中的应用还有待检验。

    展开全文
  • GCN (Graph Convolutional Network) 图卷积网络解析

    万次阅读 多人点赞 2019-04-16 11:37:33
    目的:图卷积网络近两年大火,博主实习需要用到。接下来几个月就会在图卷积网络上做很多东西。这篇是刚开始对图卷积网络的学习,所以会广泛参考相关论文与网上的技术博客,总结归纳,希望提炼出有用的知识,加深对于...
  • 四大经典卷积网络介绍

    千次阅读 2017-07-15 22:16:45
    原标题:独家 |《TensorFlow实战》作者黄文坚:四大经典CNN网络技术原理主要介绍四种经典的卷积神经网络,它们分别是: AlexNet VGGNet Google Inception Net ResNet 这4种网络依照出现的先后顺序排列,...
  • 卷积网络的进化史

    千次阅读 2018-06-22 18:08:01
    这篇文章是对卷积网络进化过程的详细描述,非常的全面,思路清晰,转自https://tracholar.github.io/machine-learning/2017/07/23/cnn-evalution.html, 留作学习资料学习卷积网络有一段时间了,对卷积网络的演变...
  • 卷积网络FCN详解

    千次阅读 2018-05-24 22:06:20
    背景CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题。神经网络大神Jonathan Long发表了《Fully ...全卷积网络 Fully Convolutional NetworksCNN 与 FCN...
  • 时域卷积网络(Temporal Convolutional Network,TCN)由Shaojie Bai et al.在2018年提出的,可以用于时序数据处理,详细内容请看论文。 1.因果卷积(Causal Convolution) [外链图片转存失败,源站可能有防盗链机制,...
  • 卷积网络FCN与卷积神经网络CNN的区别

    万次阅读 多人点赞 2018-06-05 13:59:34
    背景CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题。神经网络大神Jonathan Long发表了《Fully ...全卷积网络 Fully Convolutional NetworksCNN 与 FCN...
  • 卷积网络

    千次阅读 2017-12-27 20:18:05
    概念概念相信对卷积网络不太陌生的人都知道,几个著名的网络LeNet-5,AlexNet,VGGNet,GoogLeNet,它们在重复了数次“卷积-池化”后,最后总要Flatten一下,得到一个长向量,然后用MLP,最后再softmax也好,SVM也好...
  • 作者 | 凯隐责编 | Jane出品 | AI科技大本营(id:rgznai100)【导读】图卷积网络(Graph Convolutional Network,GCN)是...
  • 卷积网络(概念介绍)

    千次阅读 2017-01-19 17:29:52
    第一点,在学习Deep learning和CNN之前,总以为它们是很了不得的知识,总以为它们能解决很多问题,学习了之后,才知道它们不过与其他机器学习算法...第二点,Deep Learning强大的地方就是可以利用网络中间某一层的
  • 深度卷积网络详细解释

    万次阅读 2018-06-21 18:51:44
    深度卷积网络 涉及问题:1.每个图如何卷积: (1)一个图如何变成几个? (2)卷积核如何选择?2.节点之间如何连接?3.S2-C3如何进行分配?4.16-120全连接如何连接?5.最后output输出什么形式?①各个层解释: ...
  • 前言:语义分割(Semantic Segmentation)是计算机视觉领域的热点领域之一,当前与目标检测、实例分割等都是非常热门的研究,但是语义分割的历史溯源却非常早,知道深度学习的兴起,特别是卷积神经网络的兴起,给...
  • 卷积网络 FCN 详解

    万次阅读 多人点赞 2018-07-11 17:59:15
    原文链接:全卷积网络 FCN 详解背景CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题。神经网络大神Jonathan Long发表了《Fully Convolutional Networks for Semantic...
  • 卷积神经网络架构

    万次阅读 多人点赞 2018-11-20 17:14:48
    卷积神经网络(conv)架构 卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的...
  • 卷积网络(FCN)理解

    千次阅读 2019-11-25 14:31:18
    用和全连接层相同维度大小的卷积层替换掉全连接层,能够使得卷积网络在一张更大的输入图像上滑动,使得输出图像具有位置信息。 2.上采样:在网络深处以上采样(反卷积)增大图像尺寸,提高输出精确度。 在论文...
  • 卷积神经网络

    千次阅读 多人点赞 2019-07-04 23:30:48
      最近在研究DCGAN,需要卷积神经网络的相关知识,之前零零散散地看过一些卷积神经网络的相关博客,打算乘此机会好好做一个总结,也算是为后面的学习打下基础。   卷积神经网络主要用于图像方面的应用例如图像...
  • 卷积网络参数量和计算量(FLOPs)的计算公式及代码

    千次阅读 热门讨论 2021-01-15 20:06:59
    我们经常用参数量和浮点计算数FLOPs来衡量卷积网络的复杂度。下面推导其公式并在pytorch中实现,以二维卷积Conv2d为例。
  • 卷积网络中的通道(Channel)理解

    千次阅读 2020-06-27 10:51:50
    卷积网络中的通道(Channel)理解 卷积网络中有一个很重要的概念,通道(Channel),也有叫特征图(feature map)的。 卷积网络中主要有两个操作,一个是卷积(Convolution),一个是池化(Pooling)。 其中池化层并不会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 191,347
精华内容 76,538
关键字:

卷积网络