卷积神经网络与caffe Convolution层及参数设置

卷积神经网络(Convolutional Neural Network, CNN)是深度学习技术中极具代表的网络结构之一,在图像处理领域取得了很大的成功,在国际标准的ImageNet数据集上,许多成功的模型都是基于CNN的。CNN相较于传统的图像处理算法的优点之一在于,避免了对图像复杂的前期预处理过程(提取人工特征等),可以直接输入原始图像。图像处理中,往往会将图像看成是一个或多个的二维向量,如MNIST手写体图片就可以看做是一个28 × 28的二维向量(黑白图片,只有一个颜色通道;如果是RGB表示的彩色图片则有三个颜色通道,可表示为三张二维向量)。传统的神经网络都是采用全连接的方式,即输入层到隐藏层的神经元都是全部连接的,这样做将导致参数量巨大,使得网络训练耗时甚至难以训练,而CNN则通过局部连接、权值共享等方法避免这一困难。

在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在上一节中提到的神经网络中,如果隐含层数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12,这样就太多了,基本没法训练。所以图像处理要想练成神经网络大法,必先减少参数加快速度。卷积神经网络有两种神器可以降低参数数目,就是CNN中的局部连接(Sparse Connectivity)和权值共享(Shared Weights)方法,理解它们很重要。

左边是全连接,右边是局部连接。对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数,如此数目巨大的参数几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为10 × 10 × 10^6 = 10^8,将直接减少4个数量级。
        尽管减少了几个数量级,但参数数量依然较多。能不能再进一步减少呢?能!方法就是权值共享。具体做法是,在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数,将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中10^6个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核(也称滤波器)的大小)。

在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。
为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

caffe Convolution层:

就是卷积层,是卷积神经网络(CNN)的核心层。
层类型:Convolution
    lr_mult: 学习率的系数,最终的学习率是这个数乘以solver.prototxt配置文件中的base_lr。如果有两个lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率。一般偏置项的学习率是权值学习率的两倍。
在后面的convolution_param中,我们可以设定卷积层的特有参数。
必须设置的参数:
    num_output: 卷积核(filter)的个数
    kernel_size: 卷积核的大小。如果卷积核的长和宽不等,需要用kernel_h和kernel_w分别设定
其它参数:
    stride: 卷积核的步长,默认为1。也可以用stride_h和stride_w来设置。
    pad: 扩充边缘,默认为0,不扩充。 扩充的时候是左右、上下对称的,比如卷积核的大小为5*5,那么pad设置为2,则四个边缘都扩充2个像素,即宽度和高度都扩充了4个像素,这样卷积运算之后的特征图就不会变小。也可以通过pad_h和pad_w来分别设定。
      weight_filler: 权值初始化。 默认为“constant",值全为0,很多时候我们用"xavier"算法来进行初始化,也可以设置为”gaussian"
      bias_filler: 偏置项的初始化。一般设置为"constant",值全为0。
      bias_term: 是否开启偏置项,默认为true, 开启
      group: 分组,默认为1组。如果大于1,我们限制卷积的连接操作在一个子集内。如果我们根据图像的通道来分组,那么第i个输出分组只能与第i个输入分组进行连接。
输入:n*c0*w0*h0
输出:n*c1*w1*h1
其中,c1就是参数中的num_output,生成的特征图个数
 w1=(w0+2*pad-kernel_size)/stride+1;
 h1=(h0+2*pad-kernel_size)/stride+1;
如果设置stride为1,前后两次卷积部分存在重叠。如果设置pad=(kernel_size-1)/2,则运算后,宽度和高度不变。
示例:

layer {name: "conv1"type: "Convolution"bottom: "data"top: "conv1"param {lr_mult: 1}param {lr_mult: 2}convolution_param {num_output: 20kernel_size: 5stride: 1weight_filler {type: "xavier"}bias_filler {type: "constant"}}}

caffe Pooling层
也叫池化层,为了减少运算量和数据维度而设置的一种层。
层类型:Pooling
必须设置的参数:
       kernel_size: 池化的核大小。也可以用kernel_h和kernel_w分别设定。
其它参数:
     pool: 池化方法,默认为MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC
   pad: 和卷积层的pad的一样,进行边缘扩充。默认为0
   stride: 池化的步长,默认为1。一般我们设置为2,即不重叠。也可以用stride_h和stride_w来设置。
示例:

layer {name: "pool1"type: "Pooling"bottom: "conv1"top: "pool1"pooling_param {pool: MAXkernel_size: 3stride: 2}}

pooling层的运算方法基本是和卷积层是一样的。
输入:n*c*w0*h0
输出:n*c*w1*h1
和卷积层的区别就是其中的c保持不变
w1=(w0+2*pad-kernel_size)/stride+1;
h1=(h0+2*pad-kernel_size)/stride+1;
如果设置stride为2,前后两次卷积部分不重叠。100*100的特征图池化后,变成50*50.
参考:

雨石          http://blog.csdn.net/stdcoutzyx/article/details/41596663

denny402   http://www.cnblogs.com/denny402/p/5071126.html

(0)

相关推荐

  • 自动驾驶-使用fcn语义分割

    上一章利用卷积神经网络处理分类问题,卷积神经网络在图像分类问题中取得了很高的精度,很好的解决了图像是什么的问题,然而其在处理过程中丢失了空间信息,无法回答目标物体在哪里的问题.本章介绍的全卷积神经网络 ...

  • 【darknet速成】Darknet图像分类从模型自定义到测试

    欢迎来到专栏<2小时玩转开源框架系列>,这是我们第12篇文章,前面已经说过了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,c ...

  • mmdetection最小复刻版(六):FCOS深入可视化分析

    AI编辑:深度眸 0 概要 论文名称:FCOS: A simple and strong anchor-free object detector 论文地址:https://arxiv.org/pdf/ ...

  • 神经网络之CNN与RNN的关系

    机器学习算法与Python实战 长期跟踪关注统计学.数据挖掘.机器学习算法.深度学习.人工智能技术与行业发展动态,分享Python.机器学习等技术文章.回复机器学习有惊喜资料. 215篇原创内容 公众 ...

  • 2020 图像超分最新综述及上采样技术一览

    作者丨科技猛兽 编辑丨极市平台 极市导读 本文对超分网络的数据集,常用的4种框架,上采样的方法,训练策略等进行了综述,同时详细解读了如何在多个金字塔级别上逐步重建高分辨率图像以及如何同时设计渐进式的超 ...

  • 【学术论文】基于深度学习的图像分类搜索系统

    摘要: 图像分类是根据图像的信息将不同类别的图像区分开来,是计算机视觉中重要的基本问题,也是图像检测.图像分割.物体跟踪.行为分析等其他高层视觉任务的基础.深度学习是机器学习研究中的一个新的领域,其动 ...

  • 再思考可变形卷积

    作者丨BBuf 来源丨GiantPandaCV 编辑丨极市平台 极市导读 重新思考可变形卷积.逐行代码解析,希望读者能一起完全理解DCN并明白DCN的好处,同时也清楚DCN的缺点在哪里.最后对什么时候 ...

  • 深入卷积神经网络:高级卷积层原理和计算的可视化

    在深度计算机视觉领域中,有几种类型的卷积层与我们经常使用的原始卷积层不同.在计算机视觉的深度学习研究方面,许多流行的高级卷积神经网络实现都使用了这些层.这些层中的每一层都有不同于原始卷积层的机制,这使 ...

  • 【阿里云课程】卷积神经网络:结构单元、卷积层反向传播求解与典型模型

    大家好,继续更新有三AI与阿里天池联合推出的深度学习系列课程,本次更新内容为第5课中的两节,介绍如下: 第1节:卷积神经网络(上) 第1节课内容为:卷积神经网络的上篇,简单介绍卷积神经网络的生物学机制 ...

  • Caffe学习系列(2):数据层及参数

    要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件 ...

  •  卷积神经网络的参数计算

    前言 这篇文章会简单写一下卷积神经网络上参数的计算方法,然后计算各个常见神经网络的参数.一个是加强对网络结构的了解,另一方面对网络参数的量级有一个大概的认识,也可以当作备忘录,免得想知道的时候还要再算 ...

  • 带动画效果的卷积神经网络的讲解.pptx

    刚在学习深度学习的时候,对卷积神经网络还比较模糊,后来发现一位黄海广老师的卷积神经网络课件,带很多动画,把卷积神经网络讲得很清楚.值得推荐. 文末提供原版的ppt的下载方式,ppt效果见下图: 下载方 ...

  • 卷积神经网络是如何实现不变性特征提取的?

    转载于 :OpenCV学堂 图像特征 传统的图像特征提取(特征工程)主要是基于各种先验模型,通过提取图像关键点.生成描述子特征数据.进行数据匹配或者机器学习方法对特征数据二分类/多分类实现图像的对象检 ...

  • 深度信号处理:利用卷积神经网络测量距离

    在信号处理中,有时需要测量信号某些特征(例如峰)之间的水平距离. 一个很好的例子就是解释心电图(ECG),这在很大程度上取决于测量距离. 我们将考虑下图中只有两个峰的平滑信号的一个样例. 解决这个问题 ...

  • 【时间序列】时间卷积神经网络

    在深度学习的知识宝库中,除了前面文章中介绍的RNN,还有一个重要的分支:卷积神经网络(CNN),其广泛应用于视觉,视频等二维或者多维的图像领域.卷积网络具有深度,可并行等多种特性,这种技术是否可以应用 ...

  • 总结 | 卷积神经网络必读的40篇经典论文,包含检测/识别/分类/分割多个领域

    转载于 :极市平台 作为深度学习的代表算法之一,卷积神经网络(Convolutional Neural Networks,CNN)在计算机视觉等领域上取得了当前最好的效果. 1998 年,Yann L ...