精华内容
下载资源
问答
  • 卷积神经网络种类
    万次阅读 多人点赞
    2018-01-11 15:32:37

    常用的几种卷积神经网络介绍

    标签(空格分隔): 深度学习


    这是一篇基础理论的博客,基本手法是抄、删、改、查,毕竟介绍这几个基础网络的博文也挺多的,就算是自己的一个笔记吧,以后忘了多看看。主要是想介绍下常用的几种卷积神经网络。卷积神经网络最初为解决图像识别问题而提出,目前广泛应用于图像,视频,音频和文本数据,可以当做深度学习的代名词。目前图像分类中的ResNet, 目标检测领域占统治地位的Faster R-CNN,分割中最牛的Mask-RCNN, UNet和经典的FCN都是以下面几种常见网络为基础。

    LeNet

    网络背景

    LeNet诞生于1994年,由深度学习三巨头之一的Yan LeCun提出,他也被称为卷积神经网络之父。LeNet主要用来进行手写字符的识别与分类,准确率达到了98%,并在美国的银行中投入了使用,被用于读取北美约10%的支票。LeNet奠定了现代卷积神经网络的基础。

    网络结构
    ScreenShot2017-07-06at12.24.42PM.png-143.1kB
    上图为LeNet结构图,是一个6层网络结构:三个卷积层,两个下采样层和一个全连接层(图中C代表卷积层,S代表下采样层,F代表全连接层)。其中,C5层也可以看成是一个全连接层,因为C5层的卷积核大小和输入图像的大小一致,都是5*5(可参考LeNet详细介绍)。

    网络特点

    • 每个卷积层包括三部分:卷积、池化和非线性激活函数(sigmoid激活函数)
    • 使用卷积提取空间特征
    • 降采样层采用平均池化

    AlexNet

    网络背景

    AlexNet由Hinton的学生Alex Krizhevsky于2012年提出,并在当年取得了Imagenet比赛冠军。AlexNet可以算是LeNet的一种更深更宽的版本,证明了卷积神经网络在复杂模型下的有效性,算是神经网络在低谷期的第一次发声,确立了深度学习,或者说卷积神经网络在计算机视觉中的统治地位。

    网络结构
    1689929-063fb60285b6ed42.png-136kB
    AlexNet的结构及参数如上图所示,是8层网络结构(忽略激活,池化,LRN,和dropout层),有5个卷积层和3个全连接层,第一卷积层使用大的卷积核,大小为11*11,步长为4,第二卷积层使用5*5的卷积核大小,步长为1,剩余卷积层都是3*3的大小,步长为1。激活函数使用ReLu(虽然不是他发明,但是他将其发扬光大),池化层使用重叠的最大池化,大小为3*3,步长为2。在全连接层增加了dropout,第一次将其实用化。(参考:AlexNet详细解释

    网络特点

    • 使用两块GPU并行加速训练,大大降低了训练时间
    • 成功使用ReLu作为激活函数,解决了网络较深时的梯度弥散问题
    • 使用数据增强、dropout和LRN层来防止网络过拟合,增强模型的泛化能力

    VggNet

    网络背景

    VGGNet是牛津大学计算机视觉组和Google DeepMind公司一起研发的深度卷积神经网络,并取得了2014年Imagenet比赛定位项目第一名和分类项目第二名。该网络主要是泛化性能很好,容易迁移到其他的图像识别项目上,可以下载VGGNet训练好的参数进行很好的初始化权重操作,很多卷积神经网络都是以该网络为基础,比如FCN,UNet,SegNet等。vgg版本很多,常用的是VGG16,VGG19网络。

    网络结构
    747e2d04-e8c2-49ee-8767-a76f3934f13e.png-340.6kB
    上图为VGG16的网络结构,共16层(不包括池化和softmax层),所有的卷积核都使用3*3的大小,池化都使用大小为2*2,步长为2的最大池化,卷积层深度依次为64 -> 128 -> 256 -> 512 ->512。

    网络特点
    网络结构和AlexNet有点儿像,不同的地方在于:

    • 主要的区别,一个字:深,两个字:更深。把网络层数加到了16-19层(不包括池化和softmax层),而AlexNet是8层结构。
    • 将卷积层提升到卷积块的概念。卷积块有2~3个卷积层构成,使网络有更大感受野的同时能降低网络参数,同时多次使用ReLu激活函数有更多的线性变换,学习能力更强(详细介绍参考:TensorFlow实战P110页)。
    • 在训练时和预测时使用Multi-Scale做数据增强。训练时将同一张图片缩放到不同的尺寸,在随机剪裁到224*224的大小,能够增加数据量。预测时将同一张图片缩放到不同尺寸做预测,最后取平均值。

    ResNet

    网络背景

    ResNet(残差神经网络)由微软研究院的何凯明等4名华人于2015年提出,成功训练了152层超级深的卷积神经网络,效果非常突出,而且容易结合到其他网络结构中。在五个主要任务轨迹中都获得了第一名的成绩:

    • ImageNet分类任务:错误率3.57%
    • ImageNet检测任务:超过第二名16%
    • ImageNet定位任务:超过第二名27%
    • COCO检测任务:超过第二名11%
    • COCO分割任务:超过第二名12%

    作为大神级人物,何凯明凭借Mask R-CNN论文获得ICCV2017最佳论文,也是他第三次斩获顶会最佳论文,另外,他参与的另一篇论文:Focal Loss for Dense Object Detection,也被大会评为最佳学生论文。

    网络结构
    600x299xResNet.png.pagespeed.ic.M1J-VkbWPB.png-35.6kB
    上图为残差神经网络的基本模块(专业术语叫残差学习单元),输入为x,输出为F(x)+x,F(x)代表网络中数据的一系列乘、加操作,假设神经网络最优的拟合结果输出为H(x)=F(x)+x,那么神经网络最优的F(x)即为H(x)与x的残差,通过拟合残差来提升网络效果。为什么转变为拟合残差就比传统卷积网络要好呢?因为训练的时候至少可以保证残差为0,保证增加残差学习单元不会降低网络性能,假设一个浅层网络达到了饱和的准确率,后面再加上这个残差学习单元,起码误差不会增加。(参考:ResNet详细解释
    通过不断堆叠这个基本模块,就可以得到最终的ResNet模型,理论上可以无限堆叠而不改变网络的性能。下图为一个34层的ResNet网络。
    ElFiI.png-97.1kB

    网络特点

    • 使得训练超级深的神经网络成为可能,避免了不断加深神经网络,准确率达到饱和的现象(后来将层数增加到1000层)
    • 输入可以直接连接到输出,使得整个网络只需要学习残差,简化学习目标和难度。
    • ResNet是一个推广性非常好的网络结构,容易和其他网络结合

    论文地址:
    1. LeNet论文
    2. AlexNet论文
    3. VGGNet论文
    4. ResNet论文

    更多相关内容
  • 该文首先概述了卷积神经网络的发展历史,然后分别描述了神经元模型、多层感知器的结构.接着,详细分析了卷积神经网络的结构,包括卷积层、池化层、全连接层,它们发挥着不同的作用.然后,讨论了网中网模型、空间变换网络...
  • 该资源采用Visio绘图软件制作,包含卷积池化操作的绘图,以及线性层的绘图。供各位网友参考。
  • 主要介绍了使用卷积神经网络(CNN)做人脸识别的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 一、制作自己的数据集 源代码 import torch from torch.utils.data import Dataset import pandas as pd import numpy as np # txt文件内容 路径 \t 类别 \t 长度 \n txt_path = 'G:/stock/path.txt' ...
  • 这是基于cnn深度卷积神经网络算法的人脸识别程序代码,用的是Python
  • 本文是利用卷积神经网络VGG16模型对花卉和手势进行分类识别,利用卷积神经网络的卷积层进行特征提取,连接层起到分类器的作用,对图像进行分类。所用软件是pycharm,解释器是python3.6。
  • 用MATLAB实现卷积神经网络,并对图像进行特征提取 文件列表: CNN CNN\cnnapplygrads.m CNN\cnnbp.m CNN\cnnff.m CNN\cnnnumgradcheck.m CNN\cnnsetup.m CNN\cnntest.m CNN\cnntrain.m CNN\expand.m CNN\...
  • 卷积神经网络(cnn)的matlab程序,包含了14个m文件。
  • 激活函数: tf.nn.relu(features, ...input:给定的输入张量,具有[batch,heigth,width,channel],类型为float32,64 **filter:**指定过滤器的大小,[filter_height, filter_width, in_channels, out_channels] stri
  • 造就机器能够获得在这些视觉方面取得优异性能可能是源于一种特定类型的神经网络——卷积神经网络(CNN)。如果你是一个深度学习爱好者,你可能早已听说过这种神经网络,并且可能已经使用一些深度学习框架比如caffe、...
  • 基于深度卷积神经网络的服装图像分类检索算法
  • 基于改进卷积神经网络与集成学习的人脸识别算法.pdf
  • 了解人类活动促使研究人员研究人体的主要器官之一,即大脑。 人脑的顺畅功能增强了人体的活动能力。 人脑的系统工作受到各种原因的影响。 在目前的工作中,我们采取了一个这样的原因,即脑肿瘤,这主要是由于脑中...
  • Google产品分析Zlatan Kremonic介绍了卷积神经网络的机制,并使用TensorFlow框架演示了卷积神经网络在MNIST数据集上的应用。  卷积神经网络(CNN)是一种前馈人工神经网络,其神经元连接模拟了动物的视皮层。在...
  • 5 卷积神经网络(CNN) ...​ 以图像分类任务为例,在表5.1所示卷积神经网络中,一般包含5种类型的网络层次结构: ​ 表5.1 卷积神经网络的组成 CNN层次结构 输出尺寸 作用 输入层 W1×H1×3W_1\times H_1\ti
  • 卷积神经网络水果识别.pdf
  • 深度卷积神经网络在图像分类任务中取得了极大的成功。现有的基于简化卷积的卷积神经网络结构能够减少网络参数, 但会丢失部分特征信息, 降低网络性能。为了提高图像分类正确率, 提出一种二分支卷积单元。该卷积单元...
  • 卷积神经网络原理

    千次阅读 2022-03-23 12:33:42
    简单快速了解卷积神经网络(CNN)原理

    Convolutional Neural Network(CNN)

    • 卷积层
    • 池化层(Pooling)
    • 归一化
    • 全连接
    • 把全连接层转化成卷积层

    ConvNets

    卷积神经网络的结构基于一个假设,即输入数据是图像,基于该假设,我们就向结构中添加了一些特有的性质。这些特有属性使得前向传播函数实现起来更高效,并且大幅度降低了网络中参数的数量。

    常规神经网络

    常规神经网络,神经网络的输入是一个向量,然后在一系列的隐层中对它做变换。每个隐层都是由若干的神经元组成,每个神经元都与前一层中的所有神经元连接。
    在这里插入图片描述

    举例说来,一个尺寸为200x200x3的图像,会让神经元包含200x200x3=120,000个权重值。而网络中肯定不止一个神经元,那么参数的量就会快速增加!显而易见,这种全连接方式效率低下,大量的参数也很快会导致网络过拟合。

    ConvNets

    在这里插入图片描述

    计算机认识的图片:一个有长宽的矩阵,再加上一个通道数;在RGB图片里有3个通道,R\G\B.

    一个简单的卷积神经网络是由各种层按照顺序排列组成,网络中的每个层使用一个可以微分的函数将激活数据从一个层传递到另一个层。卷积神经网络主要由三种类型的层构成:卷积层,池化(Pooling)层和全连接层(全连接层和常规神经网络中的一样)。通过将这些层叠加起来,就可以构建一个完整的卷积神经网络。

    卷积层

    卷积层是构建卷积神经网络的核心层,它产生了网络中大部分的计算量。

    如何简化计算?
    • 让不同的神经元守备不同区域
    • 共享参数
    input
    41008102
    41018002
    41008102
    40018202
    40008002
    41018102
    filter
    010
    010
    010

    在这里插入图片描述

    在前向传播的时候,让每个filter都在输入数据的宽度和高度上滑动(更精确地说是卷积),然后计算整个filter和输入数据任一处的内积。当filter沿着输入数据的宽度和高度滑过后,会生成一个2维的激活图(activation map),激活图给出了在每个空间位置处Receptive field的反应。直观地来说,网络会让filter学习到当它看到某些类型的视觉特征时就激活,具体的视觉特征可能是某些方位上的边界,或者在第一层上某些颜色的斑点.

    在这里插入图片描述

    一个channel的卷积

    在这里插入图片描述

    在每个卷积层上,我们会有一排的filter(比如16个、32、64个,需要多少个,自己定,你开心就好),每个都会生成一个不同的二维激活图。将这些激活映射在深度方向上层叠起来就生成了输出数据。

    在这里插入图片描述

    例如,在100 * 100 * 3的输入下,我定了第一层的 filter 为64个,stride=1,那么输出将是 98 * 98 * 64的矩阵

    一个filter就是一个神经元,当它滑向下一区域时,就相当于切换到下一区域的神经元,这些神经元共享同一组参数也就是filter里的参数,你定了64个filter那么将有64组filter分别扫过一整张图片.

    动画演示

    https://cs231n.github.io/assets/conv-demo/index.html

    例1:假设输入数据体尺寸为[32x32x3](比如CIFAR-10的RGB图像),如果Receptive field是5x5,那么卷积层中的每个神经元会有输入数据体中[5x5x3]区域的权重,共5x5x3=75个权重(还要加一个偏差参数)。注意这个连接在深度维度上的大小必须为3,和输入数据体的深度一致。

    例2:假设输入数据体的尺寸是[16x16x20],filter尺寸是3x3,那么卷积层中每个神经元和输入数据体就有3x3x20=180个连接。再次提示:在空间上连接是局部的(3x3),但是在深度上是和输入数据体一致的(20)。

    怎么控制输出数据?

    3个超参数控制着输出数据体的尺寸:深度(depth),步长(stride)和填充(padding)。

    • 首先,输出数据体的深度是一个超参数:它和使用的filter的数量一致,而每个filter在输入数据中寻找一些不同的东西。举例来说,如果第一个卷积层的输入是原始图像,那么在深度维度上的不同神经元将可能被不同方向的边界,或者是颜色斑点激活。我们将这些沿着深度方向排列、filter相同的神经元集合称为深度列(depth column),也有人使用纤维(fibre)来称呼它们。
    • 其次,在滑动filter的时候,必须指定步长。当步长为1,滤波器每次移动1个像素。当步长为2(或者不常用的3,或者更多,这些在实际中很少使用),filter滑动时每次移动2个像素。这个操作会让输出数据体在空间上变小。
    • 在下文可以看到,有时候将输入数据体用0在边缘处进行填充是很方便的。这个零填充(zero-padding)的尺寸是一个超参数。零填充有一个良好性质,即可以控制输出数据体的空间尺寸(最常用的是用来保持输入数据体在空间上的尺寸,这样输入和输出的宽高都相等)(你可以用0填充,也可以用均值填充,根据需求,你喜欢就好)。

    如何抓取特征

    在这里插入图片描述

    当图片上出现与filter相似的特征时,输出的值会有明显变化,训练时根据这种变化,网络会调整参数,让filter记住这个特征.

    池化层

    在这里插入图片描述

    为了控制数据体的大小,通常,在连续的卷积层之间会周期性地插入一个池化层。这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。池化层使用MAX操作(不一定非要MAX Pooling也可以mean等等,你喜欢),对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是池化层使用尺寸2x2的filter,以步长为2来对每个深度切片进行降采样,将其中75%的激活信息都丢掉。每个MAX操作是从4个数字中取最大值(也就是在深度切片中某个2x2的区域)。深度保持不变。

    在这里插入图片描述

    是不是一定非要用池化层?

    答案是否定的。不是非得用池化,我用池化就一定好。举个栗子,Alpha Go论文中有提到,网络是19 * 19的输入,而恰巧围棋棋盘就是19*19路,Alpha Go设计者就把每一步棋子在棋盘的位置当成一张图片,那么网络就可以用CNN,而确实是用的CNN,那么在这上面使用池化的话会发生什么?会丢了棋子信息,因为每一个棋子都会影响棋局的走势,所有不能丢失任一处的棋子信息。

    归一化层

    在卷积神经网络的结构中,提出了很多不同类型的归一化层,有时候是为了实现在生物大脑中观测到的抑制机制。但是这些层渐渐都不再流行,因为实践证明它们的效果即使存在,也是极其有限的。

    全连接层

    在全连接层中,神经元对于前一层中的所有激活数据是全部连接的,这个常规神经网络中一样。

    在这里插入图片描述

    网络结构

    卷积神经网络通常是由三种层构成:卷积层,池化层(除非特别说明,一般就是最大值池化)和全连接层(简称FC)。ReLU激活函数也应该算是是一层,它逐元素地进行激活函数操作。在本节中将讨论在卷积神经网络中这些层通常是如何组合在一起的。

    层的排列规律

    卷积神经网络最常见的形式就是将一些卷积层和ReLU层放在一起,其后紧跟池化层,然后重复如此直到图像在空间上被缩小到一个足够小的尺寸,在某个地方过渡成成全连接层也较为常见。最后的全连接层得到输出,比如分类评分等。

    • INPUT -> FC,实现一个线性分类器,此处N = M = K = 0。
    • INPUT -> CONV -> RELU -> FC
    • INPUT -> [CONV -> RELU -> POOL]*2 -> FC -> RELU -> FC。此处在每个汇聚层之间有一个卷积层。
    • INPUT -> [CONV -> RELU -> CONV -> RELU -> POOL]*3 -> [FC -> RELU]*2 -> FC。此处每个汇聚层前有两个卷积层,这个思路适用于更大更深的网络,因为在执行具有破坏性的池化操作前,多重的卷积层可以从输入数据中学习到更多的复杂特征。

    层的尺寸设置规律

    • 输入层(包含图像的)应该能被2整除很多次。常用数字包括32(比如CIFAR-10),64,96(比如STL-10)或224(比如ImageNet卷积神经网络),384和512。
    • 卷积层 应该使用小尺寸滤波器(比如3x3或最多5x5),使用步长1 。还有一点非常重要,就是对输入数据进行零填充,这样卷积层就不会改变输入数据在空间维度上的尺寸。
    • 池化层 负责对输入数据的空间维度进行降采样。最常用的设置是用用2x2Receptive field的最大值池化,步长为2。注意这一操作将会把输入数据中75%的激活数据丢弃(因为对宽度和高度都进行了2的降采样)。 另一个不那么常用的设置是使用3x3的Receptive field,步长为2。最大值池化的Receptive field尺寸很少有超过3的,因为池化操作过于激烈,易造成数据信息丢失,这通常会导致算法性能变差。

    减少尺寸设置的问题:上文中展示的两种设置是很好的,因为所有的卷积层都能保持其输入数据的空间尺寸,汇聚层只负责对数据体从空间维度进行降采样。如果使用的步长大于1并且不对卷积层的输入数据使用零填充,那么就必须非常仔细地监督输入数据体通过整个卷积神经网络结构的过程,确认所有的步长和滤波器都尺寸互相吻合

    为什么在卷积层使用1的步长? 在实际应用中,更小的步长效果更好。上文也已经提过,步长为1可以让空间维度的降采样全部由汇聚层负责,卷积层只负责对输入数据体的深度进行变换。
    为何使用零填充? 使用零填充除了前面提到的可以让卷积层的输出数据保持和输入数据在空间维度的不变,还可以提高算法性能。如果卷积层值进行卷积而不进行零填充,那么数据体的尺寸就会略微减小,那么图像边缘的信息就会过快地损失掉。

    网络结构例子:

    一个用于CIFAR-10图像数据分类的卷积神经网络的结构可以是[输入层-卷积层-ReLU层-汇聚层-全连接层]。细节如下:

    • 输入[32x32x3]存有图像的原始像素值,本例中图像宽高均为32,有3个颜色通道。
    • 卷积层中,神经元与输入层中的一个局部区域相连,每个神经元都计算自己与输入层相连的小区域与自己权重的内积。卷积层会计算所有神经元的输出。如果我们使用12个滤波器(也叫作核),得到的输出数据体的维度就是[32x32x12]。
    • ReLU层将会逐个元素地进行激活函数操作,比如使用以0为阈值的 作为激活函数。该层对数据尺寸没有改变,还是[32x32x12]。
    • 池化层在在空间维度(宽度和高度)上进行降采样(downsampling)操作,数据尺寸变为[16x16x12]。
    • 全连接层将会计算分类评分,数据尺寸变为[1x1x10],其中10个数字对应的就是CIFAR-10中10个类别的分类评分值。正如其名,全连接层与常规神经网络一样,其中每个神经元都与前一层中所有神经元相连接。

    由此看来,卷积神经网络一层一层地将图像从原始像素值变换成最终的分类评分值。其中有的层含有参数,有的没有。具体说来,卷积层和全连接层(CONV/FC)对输入执行变换操作的时候,不仅会用到激活函数,还会用到很多参数(神经元的突触权值和偏差)。而ReLU层和汇聚层则是进行一个固定不变的函数操作。卷积层和全连接层中的参数会随着梯度下降被训练,这样卷积神经网络计算出的分类评分就能和训练集中的每个图像的标签吻合了。

    小结:
    • 简单案例中卷积神经网络的结构,就是一系列的层将输入数据变换为输出数据(比如分类评分)。
    • 卷积神经网络结构中有几种不同类型的层(目前最流行的有卷积层、全连接层、ReLU层和汇聚层)。
    • 每个层的输入是3D数据,然后使用一个可导的函数将其变换为3D的输出数据。
    • 有的层有参数,有的没有(卷积层和全连接层有,ReLU层和汇聚层没有)。

    案例学习

    下面是卷积神经网络领域中比较有名的几种结构:

    • LeNet: 第一个成功的卷积神经网络应用,是Yann LeCun在上世纪90年代实现的。当然,最著名还是被应用在识别数字和邮政编码等的LeNet结构。
    • AlexNet: AlexNet卷积神经网络在计算机视觉领域中受到欢迎,它由Alex Krizhevsky,Ilya Sutskever和Geoff Hinton实现。AlexNet在2012年的ImageNet ILSVRC 竞赛中夺冠,性能远远超出第二名(16%的top5错误率,第二名是26%的top5错误率)。这个网络的结构和LeNet非常类似,但是更深更大,并且使用了层叠的卷积层来获取特征(之前通常是只用一个卷积层并且在其后马上跟着一个汇聚层)。
    • ZF Net: Matthew Zeiler和Rob Fergus发明的网络在ILSVRC 2013比赛中夺冠,它被称为ZFNet(Zeiler &Fergus Net的简称)。它通过修改结构中的超参数来实现对AlexNet的改良,具体说来就是增加了中间卷积层的尺寸,让第一层的步长和滤波器尺寸更小。
    • GoogLeNet: ILSVRC 2014的胜利者是谷歌的Szeged等实现的卷积神经网络。它主要的贡献就是实现了一个奠基模块,它能够显著地减少网络中参数的数量(AlexNet中有60M,该网络中只有4M)。还有,这个论文中没有使用卷积神经网络顶部使用全连接层,而是使用了一个平均汇聚,把大量不是很重要的参数都去除掉了。GooLeNet还有几种改进的版本,最新的一个是Inception-v4。
    • VGGNet: ILSVRC 2014的第二名是Karen Simonyan和 Andrew Zisserman实现的卷积神经网络,现在称其为VGGNet。它主要的贡献是展示出网络的深度是算法优良性能的关键部分。他们最好的网络包含了16个卷积/全连接层。网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的汇聚。他们的预训练模型是可以在网络上获得并在Caffe中使用的。VGGNet不好的一点是它耗费更多计算资源,并且使用了更多的参数,导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。后来发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。
    • ResNet: 残差网络(Residual Network)是ILSVRC2015的胜利者,由何恺明等实现。它使用了特殊的跳跃链接,大量使用了批量归一化(batch normalization)。这个结构同样在最后没有使用全连接层。读者可以查看何恺明的的演讲(视频,PPT),以及一些使用Torch重现网络的实验。ResNet当前最好的卷积神经网络模型(2016年五月)。何开明等最近的工作是对原始结构做一些优化,可以看论文 Identity Mappings in Deep Residual Networks,2016年3月发表。

    把全连接层转化成卷积层(摘自CS231n课程笔记翻译:卷积神经网络笔记)

    全连接层和卷积层之间唯一的不同就是卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。然而在两类层中,神经元都是计算点积,所以它们的函数形式是一样的。因此,将此两者相互转化是可能的:

    • 对于任一个卷积层,都存在一个能实现和它一样的前向传播函数的全连接层。权重矩阵是一个巨大的矩阵,除了某些特定块(这是因为有局部连接),其余部分都是零。而在其中大部分块中,元素都是相等的(因为参数共享)。
    • 相反,任何全连接层都可以被转化为卷积层。比如,一个 的全连接层,输入数据体的尺寸是,这个全连接层可以被等效地看做一个的 卷积层。换句话说,就是将滤波器的尺寸设置为和输入数据体的尺寸一致了。因为只有一个单独的深度列覆盖并滑过输入数据体,所以输出将变成 ,这个结果就和使用初始的那个全连接层一样了。

    全连接层转化为卷积层:在两种变换中,将全连接层转化为卷积层在实际运用中更加有用。假设一个卷积神经网络的输入是224x224x3的图像,一系列的卷积层和汇聚层将图像数据变为尺寸为7x7x512的激活数据体(在AlexNet中就是这样,通过使用5个汇聚层来对输入数据进行空间上的降采样,每次尺寸下降一半,所以最终空间尺寸为224/2/2/2/2/2=7)。从这里可以看到,AlexNet使用了两个尺寸为4096的全连接层,最后一个有1000个神经元的全连接层用于计算分类评分。我们可以将这3个全连接层中的任意一个转化为卷积层:

    • 针对第一个连接区域是[7x7x512]的全连接层,令其滤波器尺寸为 ,这样输出数据体就为[1x1x4096]了。
    • 针对第二个全连接层,令其滤波器尺寸为 ,这样输出数据体为[1x1x4096]。
    • 对最后一个全连接层也做类似的,令其 ,最终输出为[1x1x1000]

    实际操作中,每次这样的变换都需要把全连接层的权重W重塑成卷积层的滤波器。那么这样的转化有什么作用呢?
    它在下面的情况下可以更高效:让卷积网络在一张更大的输入图片上滑动(译者注:即把一张更大的图片的不同区域都分别带入到卷积网络,得到每个区域的得分),得到多个输出,这样的转化可以让我们在单个向前传播的过程中完成上述的操作。

    举个例子,如果我们想让224x224尺寸的浮窗,以步长为32在384x384的图片上滑动,把每个经停的位置都带入卷积网络,最后得到6x6个位置的类别得分。上述的把全连接层转换成卷积层的做法会更简便。如果224x224的输入图片经过卷积层和汇聚层之后得到了[7x7x512]的数组,那么,384x384的大图片直接经过同样的卷积层和汇聚层之后会得到[12x12x512]的数组(因为途径5个汇聚层,尺寸变为384/2/2/2/2/2 = 12)。然后再经过上面由3个全连接层转化得到的3个卷积层,最终得到[6x6x1000]的输出(因为(12 - 7)/1 + 1 = 6)。这个结果正是浮窗在原图经停的6x6个位置的得分!(译者注:这一段的翻译与原文不同,经过了译者较多的修改,使更容易理解)

    面对384x384的图像,让(含全连接层)的初始卷积神经网络以32像素的步长独立对图像中的224x224块进行多次评价,其效果和使用把全连接层变换为卷积层后的卷积神经网络进行一次前向传播是一样的。

    自然,相较于使用被转化前的原始卷积神经网络对所有36个位置进行迭代计算,使用转化后的卷积神经网络进行一次前向传播计算要高效得多,因为36次计算都在共享计算资源。这一技巧在实践中经常使用,一次来获得更好的结果。比如,通常将一张图像尺寸变得更大,然后使用变换后的卷积神经网络来对空间上很多不同位置进行评价得到
    分类评分,然后在求这些分值的平均值。

    最后,如果我们想用步长小于32的浮窗怎么办?用多次的向前传播就可以解决。比如我们想用步长为16的浮窗。那么先使用原图在转化后的卷积网络执行向前传播,然后分别沿宽度,沿高度,最后同时沿宽度和高度,把原始图片分别平移16个像素,然后把这些平移之后的图分别带入卷积网络。(译者注:这一段的翻译与原文不同,经过了译者较多的修改,使更容易理解)

    参考台湾大学李宏毅老师的机器学习课程
    参考由杜客和猴子翻译,堃堃和李艺颖进行校对修改的cs231n笔记。来自网址:https://zhuanlan.zhihu.com/p/22038289
    图片分别平移16个像素,然后把这些平移之后的图分别带入卷积网络。(译者注:这一段的翻译与原文不同,经过了译者较多的修改,使更容易理解)
    
    
    

    参考台湾大学李宏毅老师的机器学习课程
    参考由杜客和猴子翻译,堃堃和李艺颖进行校对修改的cs231n笔记。来自网址:https://zhuanlan.zhihu.com/p/22038289

    2021-6-15
    
    展开全文
  • 最近,人们一直在努力使用卷积和深度神经网络架构 (CNNDNN)。 有非常深的神经网络架构可用于图像分类。 这些网络需要几天甚至几周的时间来学习网络。 如果要以各种方式对其进行测试以找到有效的架构,那将是非常...
  • 近年来, 卷积神经网络模型常常被用于文本情感分类的研究中, 但多数研究都会忽略文本特征词本身所携带的情感信息和中文文本分词时被错分的情况. 针对此问题, 提出一种融合情感特征的双通道卷积神经网络情感分类模型...
  • 简述卷积 神经 网络在 图像分 类的优 势 ,为 了简单高效地对植物叶片进行识别 ,提 出一种基 于卷积神 经 网络(Convolutional Neural N etw ork , CN N ) 的植物 叶片识别方法。 在 Sw edish 叶片数 据集上的实验...
  • 卷积神经网络基础知识

    千次阅读 2022-04-10 14:12:13
    卷积神经网络基础知识:输入输出、网络结构、损失函数和评价指标。

    1 卷积神经网络是什么?

    卷积神经网络(Convolution Neural Network)可以简单理解为包含卷积操作且具有深度结构的网络,通过权值共享局部连接的方式对数据进行特征提取并进行预测的过程。在实际应用中往往采用多层网络结构,因此又被称为深度卷积神经网络。卷积神经网络通过反馈修正卷积核和偏置参数使输出与预测偏差减小。所以,构建卷积神经网络进行深度学习开发其实并不复杂。可以从四个方面展开:输入输出、网络结构、损失函数、评价指标

    2 卷积神经网络的输入输出

    卷积神经网络的输入分为两部分,一是数据,二是标签。针对计算机视觉任务来说,通常数据指的是图像数据。标签是针对图像的真实值,针对不同任务有着不同的标签,例如图像分类任务的标签是图像的类别,目标检测任务的标签是图像中的目标的类别和坐标信息等。这类标签信息一般通过人工标定方式(或者自动标定工具)生成。例如VIA标注工具

    3、卷积神经网络的网络结构

    卷积神经网络的基本结构由以下几个部分组成:输入层(input layer)卷积层(convolution layer)池化层(pooling layer)激活函数层全连接层(full-connection layer)。下面以图像分类任务简单介绍一下卷积神经网络结构,具体结构如下图所示。
    在这里插入图片描述

    3.1 输入层

    图像分类任务是输入层是 H ∗ W ∗ C H*W*C HWC的图像,其中H是指图像的长度,W是图像的宽度,C指的是图像的channel数,一般灰度图的channel数为1,彩色图的channel数为3。

    3.2 卷积层

    卷积神经网络的核心是卷积层,卷积层的核心部分是卷积操作。
    卷积层有四个重要的超参数:卷积核的大小F、卷积核的个数K、卷积的步长S和零填充数量P。
    假设输入的参数为: H × W × D H×W×D H×W×D的一个Tensor,则经过一个大小为、个数为K,步长为S和零填充数量为P的卷积操作后输出的参数为:

    H ′ = ( H − F + 2 P ) / S + 1 W ′ = ( W − F + 2 P ) / S + 1 D ′ = K \begin{matrix}H' = (H-F+2P)/S+1 \\W' = (W-F+2P)/S+1 \\ D'=K \end{matrix} H=(HF+2P)/S+1W=(WF+2P)/S+1D=K
    关于卷积计算可以参考这篇文章,我的下面图片就引自该问文,链接: 原来卷积是这么计算的_月来客栈
    其中卷积层的操作可分为四种,分别为:

    • 单输入单输出(输入channel数为1,且只有1个卷积核)
    • 单输入多输出(输入channel数为1,并有n(n>1)个卷积核)
    • 多输入单输出(输入channel数>1,只有1个卷积核)
    • 多输入多输出(输入channel数>1,并有n(n>1)个卷积核)

    3.2.1 单输入单输出

    channel数为1的图像的单一卷积核的计算过程如下图所示:
    在这里插入图片描述
    具体计算过程如下图:
    在这里插入图片描述
    channel数为3的图像的单一卷积核的计算过程如下图所示:
    在这里插入图片描述
    具体计算过程如下图:
    在这里插入图片描述
    channel数为3的图像的多卷积核的计算过程如下图所示:
    在这里插入图片描述
    计算得到的结果如下图:
    在这里插入图片描述

    3.3 池化层

    池化操作将输入矩阵某一位置相邻区域的总体统计特征作为该位置的输出,主要有平均池化(Average Pooling)、最大池化(Max Pooling)等。卷积的作用为:对每一个特征响应图独立进行, 降低特征响应图组中每个特征响应图的宽度和高度,减少后续卷积层的参数的数量, 降低计算资源耗费,进而控制过拟合,简单来说池化就是在该区域上指定一个值来代表整个区域
    池化层的超参数:池化窗口和池化步长。
    池化操作也可以看做是一种卷积操作,下面我们以最大池化来解释池化操作,具体操作如下图所示:
    在这里插入图片描述

    3.4 激活函数层

    激活函数(非线性激活函数,如果激活函数使用线性函数的话,那么它的输出还是一个线性函数。)但使用非线性激活函数可以得到非线性的输出值。常见的激活函数有Sigmoid、tanh和Relu等。一般我们使用Relu作为卷积神经网络的激活函数。
    Relu激活函数提供了一种非常简单的非线性变换方法,它的公式为:
    f ( u ) = m a x ( 0 , u ) f(u)= max(0,u) f(u)=max(0,u)
    函数图像如下所示:
    在这里插入图片描述
    ReLU激活函数相比Sigmoid、tanh等有的优点为:
    1、速度快,和sigmoid函数需要计算指数和倒数相比,relu函数其实就是一个 m a x ( 0 , u ) max(0,u) max(0,u),计算代价小。
    2、稀疏性,通过对大脑的研究发现,大脑在工作的时候只有大约5%的神经元是激活的,而采用sigmoid激活函数的激活率大约是50%。有论文声称人工神经网络在15%-30%的激活率时是比较理想的。因为Relu函数在输入小于0时是完全不激活的,因此可以获得一个更低的激活率。
    3、ReLU的求导特性也非常的好。当输⼊为负时, ReLU函数的导数为0,⽽当输⼊为正时, ReLU函数的导数为1。这就意味着要么让参数消失,要么让参数通过。并且ReLU减轻了困扰以往神经⽹络的梯度消失问题。
    注意: ReLU函数有许多变体,包括参数化ReLU(Parameterized ReLU, pReLU)函数。该变体为ReLU增减了一个线性项,因此即使参数是负的,某些信息仍然可以通过:
    p R e L U = m a x ( 0 , x ) + α m i n ( 0 , x ) pReLU = max(0,x)+\alpha min(0,x) pReLU=max(0,x)+αmin(0,x)

    3.5 全连接层

    全连接层在卷积神经网络中起到分类器的作用,如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。

    3 卷积神经网络的损失函数

    在卷积神经网络中,我们会使用如梯度下降法(Gradient Descent) 等方法去最小化目标函数。但怎样来衡量优化目标函数的好坏呢,这就用到了损失函数。卷积神经网络中损失函数是用于衡量模型所作出的预测值和真实值(Ground Truth)之间的偏离程度,大致可分为两种:分类损失(针对离散型量)和回归损失(针对连续型变量)。

    3.1分类损失

    3.1.1 熵(Entropy)

    即“熵”,熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在信息论里面, 熵是用于描述对事件不确定性的度量,它的计算公式如下:
    E n t r o p y , H ( p ) = − Σ p ( x i ) ∗ l o g 2 ( p ( x i ) ) Entropy,H(p) = -\varSigma p(x_i)*log_2(p(x_i)) Entropy,H(p)=Σp(xi)log2(p(xi))
    其中 p ( i ) p(i) p(i)为事件的概率分布,下面以一个例子来解释一下该公式。
    假设气象台告知我们明天晴天的概率为25%,下雨的概率为75%,则气象站传输给我们的信息熵为:
    − ( 0.25 ∗ l o g 2 ( 0.25 ) + 0.75 ∗ l o g 2 ( 0.75 ) ) = 0.81 -(0.25*log2(0.25) + 0.75*log2(0.75)) =0.81 (0.25log2(0.25)+0.75log2(0.75))=0.81
    如下图所示:
    在这里插入图片描述
    在卷积神经网络中,比如分类任务中,其实也是在做一个判断一个物体到底是不是属于某个类别,其中不确定性就越大,其信息量越大,它的熵值就越高。

    3.1.2 相对熵

    相对熵又称KL散度,用于衡量对于同一个随机变量x的两个分布p(x)和q(x)之间的差异。在机器学习中,p(x)常用于描述样本的真实分布,例如[1,0,0,0]表示样本属于第一类,而q(x)则常常用于表示预测的分布,例如[0.7,0.1,0.1,0.1]。显然使用q(x)来描述样本不如p(x)准确,q(x)需要不断地学习来拟合准确的分布p(x)。
    KL散度的计算公式为:
    D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g 2 ( p ( x i ) q ( x i ) ) D_{KL}(p||q) = \displaystyle\sum_{i=1}^n p(x_i) log_2(\frac {p(x_i)} {q(x_i)}) DKL(pq)=i=1np(xi)log2(q(xi)p(xi))
    KL散度的值越小表示两个分布越接近。

    3.1.3 交叉熵(Cross Entropy)

    我们将KL散度的公式进行变形,得到:
    D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g 2 ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g 2 ( q ( x i ) ) = − H ( p ( x ) ) + [ − ∑ i = 1 n p ( x i ) l o g 2 ( q ( x i ) ) ] D_{KL}(p||q) = \displaystyle\sum_{i=1}^n p(x_i) log_2(p(x_i))- \displaystyle\sum_{i=1}^n p(x_i) log_2(q(x_i)) =-H(p(x))+[-\displaystyle\sum_{i=1}^n p(x_i) log_2(q(x_i))] DKL(pq)=i=1np(xi)log2(p(xi))i=1np(xi)log2(q(xi))=H(p(x))+[i=1np(xi)log2(q(xi))]

    前半部分就是p(x)的熵,它是一个定值,后半部分就是我们的交叉熵:
    C r o s s E n t r o p y , H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g 2 ( q ( x i ) ) Cross Entropy,H(p,q) = -\displaystyle\sum_{i=1}^n p(x_i) log_2(q(x_i)) CrossEntropy,H(p,q)=i=1np(xi)log2(q(xi))
    我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的前半部分是一个常量,所以我们常常将后半部分的交叉熵作为损失函数。假设我们当前做一个3个类别的图像分类任务,如猫、狗、猪。给定一张输入图片其真实类别是猫,模型通过训练用Softmax分类后的输出结果为:{“cat”: 0.3, “dog”: 0.45, “pig”: 0.25},那么此时交叉熵为:-1 * log(0.3) = 1.203。当输出结果为:{“cat”: 0.5, “dog”: 0.3, “pig”: 0.2}时,交叉熵为:-1 * log(0.5) = 0.301。可以发现,当预测值接近真实值时,损失将接近0。

    3.2 回归损失(Regression Loss)

    3.2.1 L1损失

    也称为Mean Absolute Error,即平均绝对误差(MAE),它衡量的是预测值与真实值之间距离的平均误差幅度,作用范围为0到正无穷。其公式如下:
    l o s s = ∑ i = 1 n ∣ y i − y ^ i ∣ loss = \displaystyle\sum_{i=1}^n|y_i - \hat y_i| loss=i=1nyiy^i

    3.2.2 L2损失

    也称为Mean Squred Error,即均方差(MSE),它衡量的是预测值与真实值之间距离的平方和,作用范围同为0到正无穷。其公式如下:
    l o s s = ∑ i = 1 n ( y i − y ^ i ) 2 loss = \displaystyle\sum_{i=1}^n(y_i - \hat y_i)^2 loss=i=1n(yiy^i)2

    3.2.3 L1与L2损失函数对比

    L1损失函数相比于L2损失函数的鲁棒性更好,因为L2将误差平方化(如果误差大于1,则误差会放大很多),模型的误差会比L1范数大的多,因此模型会对这种类型的样本更加敏感,这就需要调整模型来最小化误差。
    但L2收敛速度快,能够对梯度给予合适的惩罚权重,而不是“一视同仁”,使梯度更新的方向可以更加精确。

    3.2.4 Smooth L1损失

    即平滑的L1损失(SLL),出自Fast RCNN。SLL通过综合L1和L2损失的优点,在0点处附近采用了L2损失中的平方函数,解决了L1损失在0点处梯度不可导的问题,使其更加平滑易于收敛。此外,在|x|>1的区间上,它又采用了L1损失中的线性函数,使得梯度能够快速下降。
    s m o o t h L ( x ) = x = { 0.5 x 2 if  ∣ x ∣ < 1 ∣ x ∣ − 0.5 otherwise smooth_L(x) = x = \begin{cases} 0.5x^2 &\text{if } |x|<1 \\ |x|-0.5 &\text{otherwise} \end{cases} smoothL(x)=x={0.5x2x0.5if x<1otherwise

    4 卷积神经网络的评价指标

    评价指标是用来定量衡量模型的性能的,是作为各种模型比较的一个标准。卷积神经网络评价指标分为分类任务评价指标回归任务评价指标

    4.1 分类任务评价指标

    4.1.1 准确率/召回率/精确度/F1-score

    混淆矩阵是最基础的概念,也是最重要的概念。混淆矩阵如下表所示:

    正例(预测值)反例(预测值)
    正例(真实值)TP(True Positive)FN(False Negative)
    反例(真实值)FP(False Positive)TN(True Negative)

    准确率(Accuracy):
    A c c u r a c y = ( T P + T N ) ( T P + F N + F P + T N ) = 预 测 正 确 样 本 数 总 的 样 本 数 Accuracy = \frac {(TP+TN)} {(TP+FN+FP+TN)} = \frac {预测正确样本数}{总的样本数} Accuracy=(TP+FN+FP+TN)(TP+TN)=
    精确度:
    P r e c i s i o n = T P T P + F P = 预 测 正 确 的 正 样 本 数 预 测 为 正 的 样 本 数 Precision = \frac {TP}{TP+FP} =\frac {预测正确的正样本数}{预测为正的样本数} Precision=TP+FPTP=

    P r e c i s i o n = T N T N + F N = 预 测 正 确 的 正 样 本 数 预 测 为 负 的 样 本 数 Precision = \frac{TN}{TN+FN} =\frac {预测正确的正样本数}{预测为负的样本数} Precision=TN+FNTN=

    召回率:
    R e c a l l = T P T P + F N = 预 测 正 确 的 正 样 本 数 真 实 标 签 为 正 确 的 样 本 数 Recall = \frac {TP}{TP+FN} = \frac {预测正确的正样本数}{真实标签为正确的样本数} Recall=TP+FNTP=
    F1-score:
    F 1 s c o r e = 2 ∗ P r e c i s i o n ∗ R e c a l l P r e c i s i o n + R e c a l l F1score = \frac {2*Precision*Recall }{Precision+Recall } F1score=Precision+Recall2PrecisionRecall

    4.1.2 Precision/Recall(P-R)曲线

    Precision/Recall曲线也叫做P-R曲线,其代表的是精准率(查准率)与召回率(查全率)的关系,Precision与Recall是一对矛盾的变量。如下图所示:
    在这里插入图片描述
    其中,曲线与坐标值面积越大,性能越好(能更大的提升精确度和召回率);但是有时面积不好计算,那么就选择 y = x y = x y=x与P-R曲线的交点也叫作平衡点(BEP)比较BEP,越大的学习器越优。
    但PR曲线对正负样本不均衡问题较敏感。

    4.1.3 ROC曲线

    ROC曲线的横坐标是false positive rate(FPR):
    F P R = F P F P + T N = 将 反 例 预 测 为 正 例 的 样 本 数 标 签 为 反 的 样 本 数 FPR = \frac {FP}{FP+TN} = \frac {将反例预测为正例的样本数}{标签为反的样本数} FPR=FP+TNFP=
    纵坐标为true positive rate(TPR):
    T P R = T P T P + F N = 将 正 例 预 测 为 正 例 的 样 本 数 标 签 为 正 的 样 本 数 TPR = \frac {TP}{TP+FN} = \frac {将正例预测为正例的样本数}{标签为正的样本数} TPR=TP+FNTP=
    在这里插入图片描述
    其中ROC曲线对正负样本不均衡问题不敏感。

    4.2回归任务评价指标

    4.2.1 IOU(Intersection-over-Union)交并比

    IOU多用于检测、分割任务中,它的计算公式如下所示:
    在这里插入图片描述

    I O U = A ⋂ B A ⋃ B IOU = \frac {A \bigcap B}{A \bigcup B} IOU=ABAB

    4.2.2 AP

    PR曲线下的面积就定义为AP,由于计算积分相对困难,因此引入插值法,计算AP公式如下:
    A P = ∑ k = 1 N max ⁡ k ′ ≥ k P ( k ′ ) Δ r ( k ) AP= \displaystyle\sum_{k=1}^N \max _{ k' \geq k}P(k') \varDelta{ r(k)} AP=k=1NkkmaxP(k)Δr(k)
    在这里插入图片描述
    计算面积:
    在这里插入图片描述
    计算公式:
    在这里插入图片描述

    5 总结

    在这篇文章中,亦岚君首先引入了卷积的四个主要知识:输入输出、网络结构、损失函数和评价指标。然后围绕着这五个问题依次做了简单介绍。本次内容就到此结束,感谢您的阅读!如果你觉得上述内容对你有所帮助,欢迎关注并传播本文!
    在这里插入图片描述

    展开全文
  • 卷积神经网络四种卷积类型

    千次阅读 2018-12-17 08:59:47
    卷积神经网络四种卷积类型   https://www.toutiao.com/a6631333810287936013/     一般卷积 首先,我们需要就定义卷积层的一些参数达成一致。 卷积核大小(Kernel Size):卷积核定义了卷积的大小范围,...

    卷积神经网络四种卷积类型

     

    https://www.toutiao.com/a6631333810287936013/

     

     

    一般卷积

    首先,我们需要就定义卷积层的一些参数达成一致。

    卷积核大小(Kernel Size):卷积核定义了卷积的大小范围,二维卷积核最常见的就是 3*3 的卷积核。

    步长(Stride):步长定义了当卷积核在图像上面进行卷积操作的时候,每次卷积跨越的长度。在默认情况下,步长通常为 1,但我们也可以采用步长是 2 的下采样过程,类似于 MaxPooling 操作。

    填充(Padding):卷积层采用一定数量的输入通道(I),并且设计特定数量的输出通道(O)。每一层所需的参数可以通过 I*O*K 来进行计算,其中 K 等于卷积核的数量。

    输入和输出管道(Input & Output Channels):卷积层采用一定数量的输入通道

    使用内核大小为3,步长为1和填充的2D卷积

     

    扩张的卷积

    使用3内核进行2D卷积,扩展率为2且无填充

    扩张的卷积为卷积层引入另一个参数,称为扩张率。这定义了卷积核中值之间的间距。扩张率为2的3x3内核与5x5内核具有相同的视野,而仅使用9个参数。想象一下,获取一个5x5内核并删除每一个第二列和第二行(间隔删除),就是我们介绍的卷积。

    这以相同的计算成本提供了更宽的视野。扩张卷积在实时分割领域中特别受欢迎。如果您需要广泛的视野并且无法承受多个卷积或更大的核,请使用它们。

     

    转置卷积

    (又称解卷积或分数跨度卷积)

    有些消息来源使用名称deconvolution,这是不合适的,因为它不是解卷积。为了使事情更糟,确实存在解卷积,但它们在深度学习领域并不常见。实际的反卷积会使卷积过程恢复。想象一下,将图像输入到单个卷积层中。现在取出输出,将它扔进一个黑盒子里然后再出现原始图像。这个黑盒子进行反卷积。它是卷积层的数学逆。

    转置卷积有点类似,因为它产生与假设的反卷积层相同的空间分辨率。但是,对值执行的实际数学运算是不同的。转置卷积层执行常规卷积,但恢复其空间变换。

    2D卷积,没有填充,步幅为2,内核为3

    此时你应该很困惑,让我们看一个具体的例子。将5×5的图像送入卷积层。步幅设置为2,填充停用,内核为3x3。这导致2x2图像。

    如果我们想要反转这个过程,我们需要逆数学运算,以便从我们输入的每个像素生成9个值。然后,我们以2的步幅遍历输出图像。这将是反卷积。

    转换2D卷积,没有填充,步幅为2,内核为3

    转置卷积不会这样做。唯一的共同点是它保证输出也是5x5图像,同时仍然执行正常的卷积操作。为此,我们需要在输入上执行一些花哨的填充。

    正如您现在可以想象的那样,此步骤不会从上面颠倒过程。至少不涉及数值。

    它只是从之前重建空间分辨率并执行卷积。这可能不是数学逆,但对于编码器 - 解码器架构,它仍然非常有用。这样我们就可以将图像的升级与卷积相结合,而不是进行两个单独的处理。

     

    可分离的卷积

    在可分离的卷积中,我们可以将内核操作分成多个步骤。让我们将卷积表示为y = conv(x,k),其中y是输出图像,x是输入图像,k是核。简单。接下来,假设k可以通过以下公式计算:k = k1.dot(k2)。这将使它成为可分离的卷积,因为我们可以通过用k1和k2进行2个1D卷积来得到相同的结果,而不是用k进行2D卷积。

    Sobel X和Y滤镜

    以Sobel内核为例,它通常用于图像处理。你可以通过乘以向量[1,0,-1]和[1,2,1] .T得到相同的内核。在执行相同操作时,这将需要6个而不是9个参数。上面的例子显示了所谓的空间可分卷积,据我所知,它不用于深度学习。

    编辑:实际上,通过堆叠1xN和Nx1内核层,可以创建与空间可分离卷积非常相似的东西。这最近在一个名为EffNet的架构中使用,显示了有希望的结果。

    在神经网络中,我们通常使用称为深度可分离卷积的东西这将执行空间卷积,同时保持通道分离,然后进行深度卷积。在我看来,通过一个例子可以最好地理解它。

    假设我们在16个输入通道和32个输出通道上有一个3x3卷积层。详细情况是,32个3x3核遍历16个通道中的每个通道,产生512(16x32)个特征映射。接下来,我们通过添加它们来合并每个输入通道中的1个特征图。由于我们可以做32次,我们得到了我们想要的32个输出通道。

    对于同一示例中的深度可分离卷积,我们遍历16个通道,每个通道有1个3x3内核,为我们提供了16个特征映射。现在,在合并任何东西之前,我们遍历这16个特征映射,每个特征映射有32个1x1卷积,然后才开始将它们加在一起。这导致656(16x3x3 + 16x32x1x1)参数与上面的4608(16x32x3x3)参数相反。

    该示例是深度可分离卷积的特定实现,其中所谓的深度乘数为1.这是迄今为止这种层的最常见设置。我们这样做是因为空间和深度信息可以解耦的假设。看一下Xception模型的表现,这个理论似乎有效。由于其有效使用参数,深度可分离卷积也用于移动设备。

     

     

     

     

     

     

    展开全文
  • 该工具箱包含CNN,NN,CAE,DBN,SAE等神经网络工具箱。其中CNN工具箱具有详细的中文注释,以便于初学者学习
  • 几种常见卷积神经网络结构

    万次阅读 多人点赞 2020-08-25 17:03:56
    卷积神经网络 图像特征的提取与分类一直是计算机视觉领域的一个基础而重要的研究方向。卷积神经网络( Convolutional NeuralNetwork,CNN) 提供了一种端到端的学习模型,模型中的参数可以通过传统的梯度下降方法进行...
  • 为了能够在处理不同的数据类型或任务时得到良好的结果,设计了基于自适应假近邻方法的卷积神经网络(CNN)架构。将中心矩的思想应用在CNN的池化操作中,利用稀疏滤波算法实现训练过程的无监督化,并设置CNN算法的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,287
精华内容 18,914
关键字:

卷积神经网络种类