精华内容
下载资源
问答
  • 多层卷积神经网络
    2022-06-23 10:33:24

           在卷积神经网络中,我们往往需要通过多层来提取特征的更高级的语义信息。

           打个比方,比如在第一层的时候,我们可以通过比较相邻像素的亮度来分辨出边缘信息。

           在第二次层的时候就可以通过上面的边缘信息来更好的识别角和轮廓信息。

           在第三层的时候便可以通过上面一层的角和轮廓信息来识别出物体的类别,即识别出图像中可能存在的对象

    更多相关内容
  • 人工智能-基于多层卷积神经网络的研究与应用.pdf
  • 人工智能-基于多层卷积神经网络的服装图像分类与检索.pdf
  • 人工智能-深度学习-多层卷积神经网络深度学习算法的应用研究.pdf
  • 基于多层卷积神经网络的SAR图像分类方法.pdf
  • 融合多层卷积神经网络特征的快速图像检索方法.pdf
  • 人工智能-目标检测-多层卷积神经网络在SAR图像目标检测与识别的应用研究.pdf
  • 联合显著性和多层卷积神经网络的高分影像场景分类.pdf
  • 基于多层卷积神经网络学习的单帧图像超分辨率重建方法.pdf
  • 糖熏鸡腿颜色快速精准识别的多层卷积神经网络模型研究.pdf
  • 基于多层卷积神经网络特征和双向长短时记忆单元的行为识别(英文).pdf
  • 基于多层卷积神经网络学习的单帧图像超分辨率重建方法,刘娜,李翠华,构建了一个应用于超分辨率重建的PMJ模型(Perception, Memory, Judgment - Super Resolution,简称 PMJ-SR),在感知阶段对图像进行初步的特征...
  • 基于权重初始化-多层卷积神经网络滑动窗口融合的高等教育办学规模预测算法.pdf
  • 多层卷积神经网络深度学习算法可移植性分析.pdf
  • 多联机系统制热工况下的制冷剂充注量故障诊断模型——基于多层卷积神经网络.pdf
  • 在本篇笔记中,将使用mnist数据集,在TensorFlow上训练一个多层卷积神经网络。 下载并导入mnist数据集 首先,利用input_data.py来下载并导入mnist数据集。在这个过程中,数据集会被下载并存储到名

    http://www.cnblogs.com/rgvb178/p/6052541.html

    上一篇笔记主要介绍了卷积神经网络相关的基础知识。在本篇笔记中,将使用mnist数据集,在TensorFlow上训练一个多层卷积神经网络。

    下载并导入mnist数据集

    首先,利用input_data.py来下载并导入mnist数据集。在这个过程中,数据集会被下载并存储到名为"MNIST_data"的目录中。

    import input_data
    mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

    其中mnist是一个轻量级的类,其中以Numpy数组的形式中存储着训练集、验证集、测试集。

    进入一个交互式的TensorFlow会话

    TensorFlow实际上对应的是一个C++后端,TensorFlow使用会话(Session)与后端连接。通常,我们都会先创建一个图,然后再在会话(Session)中启动它。而InteractiveSession给了我们一个交互式会话的机会,使得我们可以在运行图(Graph)的时候再插入计算图,否则就要在启动会话之前构建整个计算图。使用InteractiveSession会使得我们的工作更加便利,所以大部分情况下,尤其是在交互环境下,我们都会选择InteractiveSession。

    import tensorflow as tf
    sess = tf.InteractiveSession()

    利用占位符处理输入数据

    关于占位符的概念,官方给出的解释是“不是特定的值,而是可以在TensorFlow运行某一计算时根据该占位符输入具体的值”。这里也比较容易理解。

    x = tf.placeholder("float", shape=[None,784])

    x代表的是输入图片的浮点数张量,因此定义dtype为"float"。其中,shape的None代表了没有指定张量的shape,可以feed任何shape的张量,在这里指batch的大小未定。一张mnist图像的大小是2828,784是一张展平的mnist图像的维度,即2828=784。

    y_ = tf.placeholder("float", shape=[None,10])

    由于mnist数据集是手写数字的数据集,所以分的类别也只有10类,分别代表了0~9十个数字。

    权重与偏置项初始化

    在对权重初始化的过程中,我们加入少量的噪声来打破对称性与避免梯度消失,在这里我们设定权重的标准差为0.1。 由于我们使用的激活函数是ReLU,而ReLU的定义是

    y={0x(x0)(x<0) y={0(x≥0)x(x<0)

    ReLU对应的图像是下图左边的函数图像。

    但是我们可以注意到,ReLU在 x<0 x<0的部分是硬饱和的,所以随着训练推进,部分输入可能会落到硬饱和区,导致权重无法更新,出现“神经元死亡”。虽然在之后的研究中,有人提出了PReLU和ELU等新的激活函数来改进,但我们在这里的训练,还是应该用一个较小的正数来初始化偏置项,避免神经元节点输出恒为0的问题。

    #初始化权重
    def weight_variable(shape):
        initial = tf.truncated_normal(shape, stddev = 0.1)
        return tf.Variable(initial)
    #初始化偏置项
    def bias_variable(shape):
        initial = tf.constant(0.1, shape = shape )
        return tf.Variable(initial)

    卷积与池化

    在这里,我们使用步长为1、相同填充(padding='SAME')的办法进行卷积,关于相同填充和有效填充的区别在上一篇笔记讲得比较清楚了,在这里就不赘述了。与此同时,使用2x2的网格以max pooling的方法池化。

    #卷积过程
    def conv2d(x,w):
        return tf.nn.conv2d(x,w,
                            strides=[1,1,1,1],padding='SAME')
    #池化过程
    def max_pool_2x2(x):
        return tf.nn.max_pool(x,ksize=[1,2,2,1],
                            strides=[1,2,2,1],padding='SAME')

    第一层卷积

    (1 #28x28->32 #28x28)
    首先在每个5x5网格中,提取出32张特征图。其中weight_variable中前两维是指网格的大小,第三维的1是指输入通道数目,第四维的32是指输出通道数目(也可以理解为使用的卷积核个数、得到的特征图张数)。每个输出通道都有一个偏置项,因此偏置项个数为32。

    w_conv1 = weight_variable([5,5,1,32])
    b_conv1=bias_variable([32])

    为了使之能用于计算,我们使用reshape将其转换为四维的tensor,其中第一维的-1是指我们可以先不指定,第二三维是指图像的大小,第四维对应颜色通道数目,灰度图对应1,rgb图对应3.

    x_image=tf.reshape(x,[-1,28,28,1])

    而后,我们利用ReLU激活函数,对其进行第一次卷积。

    h_conv1=tf.nn.relu(conv2d(x_image,w_conv1)+b_conv1)

    第一次池化

    (32 #28x28->32 #14x14)
    比较容易理解,使用2x2的网格以max pooling的方法池化。

    h_pool1=max_pool_2x2(h_conv1)

    第二层卷积与第二次池化

    (32 #14x14->64 #14x14->64 #7x7)
    与第一层卷积、第一次池化类似的过程。

    w_conv2=weight_variable([5,5,32,64])
    b_conv2=bias_variable([64])
    
    h_conv2=tf.nn.relu(conv2d(h_pool1,w_conv2)+b_conv2)
    h_pool2=max_pool_2x2(h_conv2)

    密集连接层

    此时,图片是7x7的大小。我们在这里加入一个有1024个神经元的全连接层。之后把刚才池化后输出的张量reshape成一个一维向量,再将其与权重相乘,加上偏置项,再通过一个ReLU激活函数。

    w_fc1=weight_variable([7*7*64,1024])
    b_fc1=bias_variable([1024])
    
    h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])
    h_fc1=tf.nn.relu(tf.matmul(h_pool2_flat,w_fc1)+b_fc1)

    Dropout

    keep_prob=tf.placeholder("float")
    h_fc1_drop=tf.nn.dropout(h_fc1,keep_prob)

    这是一个比较新的也非常好用的防止过拟合的方法,想出这个方法的人基本属于非常crazy的存在。在Udacity-Deep Learning的课程中有提到这个方法——完全随机选取经过神经网络流一半的数据来训练,在每次训练过程中用0来替代被丢掉的激活值,其它激活值合理缩放。

    类别预测与输出

    应用了简单的softmax,输出。

    w_fc2=weight_variable([1024,10])
    b_fc2=bias_variable([10])
    
    y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop,w_fc2)+b_fc2)

    模型的评价

    #计算交叉熵的代价函数
    cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
    #使用优化算法使得代价函数最小化
    train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
    #找出预测正确的标签
    correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
    #得出通过正确个数除以总数得出准确率
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    sess.run(tf.initialize_all_variables())
    #每100次迭代输出一次日志,共迭代20000次
    for i in range(20000):
      batch = mnist.train.next_batch(50)
      if i%100 == 0:
        train_accuracy = accuracy.eval(feed_dict={
            x:batch[0], y_: batch[1], keep_prob: 1.0})
        print "step %d, training accuracy %g"%(i, train_accuracy)
      train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
    
    print "test accuracy %g"%accuracy.eval(feed_dict={
        x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})

    本文代码与部分内容来源或参考自:
    TensorFlow官方文档
    深度学习中的激活函数导引
    Udacity-Deep Learning

    展开全文
  • 利用多层卷积神经网络(CNN)特征的互补优势 进行图像检索 本文原网址为:http://www.sciencedirect.com/science/article/pii/S0925231216314734 翻译不当之处请多多指正 摘要:深度卷积神经网络已经证明了图像分类...

    利用多层卷积神经网络(CNN)特征的互补优势

    进行图像检索

    本文原网址为:http://www.sciencedirect.com/science/article/pii/S0925231216314734

    翻译不当之处请多多指正

    摘要:深度卷积神经网络已经证明了图像分类的突破精度。从CNN学到的一系列特征提取器已经用于其他计算机视觉任务。然而,CNN不同层次的特征旨在编码不同层次的信息。高层特征更关注语义信息,更少关注细节信息,而低层特征包含更多细节信息,但与背景混乱和语义歧义问题相关。我们建议以简单但有效的方式利用不同层次的互补优势。一个映射函数被设计来突出低层相似性的有效性,当在相似的语义下测量查询图像和它最近的邻居之间的细粒度的相似性时。大量的实验表明,我们的方法可以在流行的检索基准上获得有竞争力的表现。大量的实验表明,该方法优于单层提取的特征及其直接拼接。同时,我们的方法在流行的检索基准上达到了有竞争力的表现。

     

    1.介绍

       

        最近,深度卷积神经网络(CNN)在图像分类任务中取得了最先进的性能。随着CNN的重生,一系列从低级到高级的特征提取器可以从大规模的训练数据中以端到端的方式自动学习。一些作品表明,这些学习的特征提取器可以成功地转移到其他计算机视觉任务。作为一个热门的研究课题,基于内容的图像检索(CBIR)也可以利用CNN激活作为图像的通用表示。在本文中,我们试图根据不同层的CNN激活图的互补性来获得更好的检索性能。

    CBIR总是依赖描述符表示图像的能力。强大的手工描述符可以捕捉对象的局部特征,如SIFT。大多数现有的方法对这些基于梯度的特征进行编码以克服语义上的差距,诸如词干(BoW),Fisher矢量(FV)或向量局部聚合描述符(VLAD)及其变体。但是,这些编码方法还远没有捕捉到高级语义信息。

        当预先训练好的CNN应用于CBIR时,选择较高层的特征地图来呈现整个图像。在最近的研究结果中,下层的特征图可以在实例级图像检索中获得更好的结果。实际上,不同层次的特征地图从输入图像中提取不同层次的信息。图1说明了一些与CNN学习的一些滤波器的最高激活相对应的补丁。低层特征的维度倾向于以相似的简单模式响应补丁,并且具有更多的模糊性。较高层的特征图更关注语义信息,而较少关于图像的细节信息,因为较高层更接近具有分类标签的最后一层。下层的特征映射包含了更多的图像结构信息,但是背景杂乱和语义歧义的问题更为突出。尽管下层的特征映射与手工特征具有相似的语义差异,但下层的特征提取器可以捕获局部模式来描述实例级别的细节。

     

    1. CNN特征来自不同卷积层的采样维数最高的补丁。每行显示相应维度中具有最大激活的补丁。所有的补丁都是从oxford 5K数据集中采样的。

     

        高层特征用于度量语义相似度,低层特征用于度量细粒度相似度。给出一个简单易懂的例子,当查询图像是一个建筑物时,高层相似性捕捉到的图像包含一个建筑物,而低层相似性则捕获同一个从属同类实体的建筑物。显然,低层和高层特征的互补性可以提高查询图像与其他候选图像之间的相似性度量。一些现有的方法试图利用多尺度无序汇集来进行CNN激活。例如,CNN特征分别从不同层次提取和编码,然后将这些不同层次的聚合特征进行连接以测量图像。但直接拼接不能充分利用高层和低层特征的互补性。高层特征可以搜索具有相似语义的候选图像的集合作为查询图像,但是它不足以描述细粒度的细节。因此,高层相似性会削弱低层相似性的有效性,当最近邻居之间的细粒度差别被区分时,语义相似。

        在本文中,我们建议以一种简单而有效的方式利用不同层次的CNN特征的更多互补优势。我们的方法试图突出低层相似性的有效性,当查询图像和最近的邻居之间的细粒度的相似性与相似的语义。换句话说,低层特征用于细化高层特征的排序结果,而不是直接连接多个层。如图2所示,高层特征不足以描述细节信息,而低层特征则来自背景混乱和语义歧义。以直接拼接的方式,由于高层相似度的影响,低层相似度在区分细粒度差异方面不起重要作用。使用映射函数,我们的方法利用低层特征来测量查询图像与具有相同语义的最近邻居之间的细粒度相似性。在实验中,我们证明了我们的方法比单层功能,多层连接以及其他基于手工特征的方法更好。

     

     

    2.不同CNN特征搜索的排名结果。从上到下,各行显示了高层特征,低层特征,直接拼接和我们的方法的排序结果。从fc1层提取高层特征,从conv4层提取低层特征,直接拼接,我们的方法使用这两个层。绿色边框表示正面候选图像,而红色边框表示错误候选图像。查询图像和候选图像均从Oxford 5K数据集中采样。(对于这个图例中对颜色的引用的解释,读者可以参考这篇文章的web版本。

     

    2.相关工作

         

        传统的CBIR方法依靠强大的手工功能和有效的编码方法。在过去的几十年里,基于Bag-of-WordsBoW)的方法[9,18]被认为是最先进的。基于SIFT [8]等强大的局部不变特征,BoW可以很好地表示图像的缩放,平移,旋转等变化。作为BoW的替代,矢量局部聚合描述符(VLAD)[11]被提出来捕获一个紧凑的图像表示,取得了很好的结果。后来,可以使用一些额外的技术来进一步提高VLAD的性能,如内部归一化[13],幂律归一化[14],单调平方根[19]等等。 Multi-VLAD [13]构建了多级VLAD描述符,并将其匹配以提高定位精度,其中利用RootSIFT提高检索任务的性能。Covariant-VLAD(CVLAD)[14]也使用RootSIFT,并应用幂律归一化来更新VLAD描述符的各个组件。

         其他整体特征编码更多的全球空间信息,其中费舍尔矢量(FV)是这类最知名的描述符。FV也有很多变种。例如,由于FV的密度,采用了一些立式二进制编码技术,并引入了一个简单的规范化过程来提高检索的准确性。考虑到FV的维数降低,利用ImageNet来发现有辨识性的低维子空间,其中一个隐含单元层和一个分类器输出层被添加到FV之上。尽管隐藏层的低维激活被用作图像检索的描述符,但是表示仍然基于手工特征(SIFT和局部颜色直方图),而不是从CNN中的输入图像中学习的特征映射。

        受到图像分类成功的启发,CNN的特征提取器也被应用于其他识别任务。 DeCAF [21]首先发布了这样的特征提取器以及所有相关的网络参数。由于低层不太可能包含丰富的语义信息,因此只评估来自最后卷积层和前两个完全连接层的特征提取器。一些像素标记任务试图通过连接来自不同层的特征提取器(例如对象分割[22,23]和边界检测[24])来利用语义信息来丰富像素表示。这些任务结合了高层和低层的特点,取得了很好的效果。       

     

          OverFeat [25]首先研究了CNN特征在图像检索任务中的应用,其中最后一层的特征没有超越基于SIFT的BoW和VLAD编码方法。神经编码[15]检查高层的神经元激活的图像检索,其中前两个完全连接层和最后一个池层分别用于评估。虽然再培训CNN的特征要素可以取得很好的表现,但是收集培训样本和再培训阶段需要大量的人力和计算资源。 MOP-CNN [17]从VLAD的不同层面提取聚合特征,其中一个完全连接层和两个合并层被预先选择。低层特征提取器可以在实例级图像检索上表现更好。这一观察结果得到了许多鼓舞人心的实验结果的进一步证实和扩展[16],其中分别从OxordNet [2]和GoogLeNet [3]提取的所有卷积层被评估。显然,不同层面的重点是从图像中提取不同的信息,低层和高层的互补性可以进一步改善图像检索任务。

     

    3方法

     

        为了描述图像,需要将卷积图层的激活图聚合成一个特征向量。本文中,完全连接层的特征是对应层的输出,卷积层的特征是聚合特征。特别的是,相似度是用余弦距离来度量的,因此单层相似度的范围是[0,1]。

     

    3.1 使用多层特征的相似性

     

       在现有的方法中,特征拼接S的相似性是作为不同层的总和而得到的:

     

         其中C层被选择来测量相似度,并且Si是两个图像之间的第i个选择层的相似度。

        为了突出低层特征,我们设计了一个映射函数fi,我们的方法的相似性可以概括为:

     

     

        映射函数fi被设计为:

     

        其中ti是第i个选定图层的相似度阈值,p的范围是(0,1)。

        有了这个设计的功能,我们的目标是削弱范围[ti,1]之间的相似性之间的差异。考虑到两层相结合,区域[ti,1]的高层相似度的有效性将会减弱,低层相似度可以更好地区分细粒度的区分。在实际实验中,较高层使用较低的阈值,即t1≤...≤ti≤...≤tC,最低层的阈值tC设置为1。

     

    3.2 分析映射函数

     

         fi的图可以解释这个看似复杂的函数,如图3(a)所示。映射函数被设计用于减少大于阈值ti的相似度之间的差异。指数p控制弱化的程度。特别是,当p设置为0时,我们的方法将转化为使用低层相似度对高层次排名结果进行重新排序。当p被设置为1或者ti被设置为1时,直接使用第i层的相似性,并且将我们的方法直接转换为连接不同层。

     

        图3(a)示出了具有固定t和不同p的映射函数的图。(b)-(d)分别显示Oxford 5K,Holiday和UKB不同场合的表演。(更好地看颜色)。(对于本图中对颜色的引用的解释,读者可参考本文的网页版本。)

       显然,方程(3)是挖掘不同层次互补优势的关键。为了避免一个特别的问题,我们试图设置固定的阈值t和p。为了便于解释,我们使用两层(fc2和conv4)来分析fc2层的阈值t和指数p的影响。如前所述,最低层的阈值t被设置为1,因此conv4的相似性被直接使用。在这种情况下,映射函数只适用于fc2层的相似性。特别地,曲线显示当fc2层的t被设置为1时直接级联的性能。

        图3(b)-(d)显示了不同设置的结果,这说明映射函数可以利用更多的互补优势。尽管不同的设置会导致改进差异,但大多数设置都会改善三个数据集。同时,各种数据集的参数t和p达到最好的改善是相似的。其中t被设置为0.2并且p被设置为0.45。所提出的方法不会导致临时问题。参数设置的细节将在下面的实验中介绍。

     

    4 初步

     

    4.1 单层功能

     

        我们以ImageNet ILSVRC 2012为例,对CNN进行了训练。该网络的结构由Krizhevsky等人提出,其中包含5个卷积层和3个全连通层。所有图层的设置与[1]相同,除非不使用局部对比度归一化图层,因为它们已被证明对ImageNet分类没有帮助。在下面的章节中,fci表示第i个完全连接层,convi表示第i个卷积层。在实验中,我们选择了三个卷积层(conv3,conv4和conv5)和两个完全连接层(fc1和fc2)来测量图像之间的相似度。

        如前所述,完全连接层的输出直接被提取为特征。我们将卷积层的输出作为一组局部特征提取出来,并用超过4 M个特征的近似k-means(AKM)[27]对视觉词进行训练。然后采用BoW对卷积图的输出进行编码,作为图像的通用表示。

     

    4.2 基准的细节

     

        我们在三个众所周知的图像检索基准上展示了我们的方法:Oxford 5K[27],Holiday[28]和UKB[29]。

           Oxford 5K是牛津大厦的数据集,包含5062张对应于牛津大地标的照片。对应于11个地标的图像被手动注释。提供了平均分布在这11个地标上的55个保留查询。

           Holiday是INRIA假期数据集,其包括基于相同场景或对象的对应于500个组的1491个假期照片。来自每个组的一个图像用作查询。

           UKB是肯塔基大学的基准数据集,其中包括10,200个2550个物体的室内照片(每个物体4张照片)。每个图像用于查询数据集的其余部分。按照常规设置,将Oxford 5 K和Holiday的表现报告为所提供查询的平均平均精度(mAP)。UKB的性能被报告为在前4个结果中的同一对象图像的平均数量,并且是在0和4之间的数字。特别地,所有图像的较短边被调整为256。

     

    5实验

     

    5.1 使用单层功能的结果

       为了便于比较,我们报告了从CNN提取的单层特征的性能。表1显示了三个基准的结果比较。对于Oxford 5 K,Holiday和UKB,视觉词的数量分别设置为50K,100K和100K。

     

        由于查询图像是类别级别类似的,并且fc特征不足以描述精细信息,因此conv图层可以胜过Oxford 5K上的fc图层。尽管Holiday和UKB数据集也旨在解决实例级图像检索的任务,但查询图像属于各种类别。因此,具有语义信息的fc特征可以在这两个数据集上获得更好的性能。

     

    5.2  比较两层的不同组合

     

        我们从测试两层的组合开始验证映射函数的有效性。我们的方法旨在利用不同层次之间的互补性,即高层和低层细粒度相似度的语义相似度,从而提取来自fc层的高层特征和来自conv层的低层特征。为了公平的比较,对于两层的所有组合,我们设置t1=0.2,p1=0.45和t2=1。

       表2报告了在三个基准测试中的fc层和conv层之间的组合的性能,其中我们的方法优于直接级联方法。在某种程度上,组合的性能是由单层决定的。例如,fc2层一般优于fc1层,与fc2层的组合可以达到更好的性能。在Oxford 5K中,conv4达到竞争表现,与它的组合可以胜过其他组合。

     

     

    5.3  比较不同的三层组合

     

        在这个实验中,图像相似度是通过三层来测量的,因此我们需要为最上面两层设置两组参数。对于第一层,我们设置t1 = 0.2,p1 = 0.45,设置两层组合。对于第二层,我们设置t2=0.4和p2=0.45。同样,我们设置t3=1为底层。

       基于上述分析和结果,层组合的性能是由单层决定的。我们选择fc2层作为高层,因为与fc2的双层组合优于fc1的组合。因此,我们测试与fc2层的三层组合。表3报告了性能,其中我们的方法也优于直接级联方法。

     

     

        显然,三层结合可以达到更好的性能。但从三层结合到两层结合的改进,比单层到两层结合的改进少。为了分析这个问题,我们测试了两个conv层的组合。性能报告见表4,其中参数设置在第5.2节。比较表2和表4可以看出,从单层到双层的组合改进效果不如从单层到高层和低层组合的改进。例如,fc2和conv3的层次组合在Oxford 5K数据集中从0.488(fc2)提高到0.562,而conv4和conv3的层组合达到0.560(conv4)到0.563的改进。从单一的转换层到两个转换层的改进是很小的,这也导致从两层组合到三层组合的小改进。如前所述,conv层提取本地信息,而fc层代表全局信息。虽然不同的层次往往对不同层次的信息进行编码,但是各个层次之间的信息差异要比conv层次和fc层次之间的信息差异要小。fc层与conv层的互补性较强,fc层与conv层的双层组合可以得到显着的改善。

     

     

     

    5.4 最先进的预训练模型的融合策略

     

        在这一部分,我们尝试引入最先进的CNN模型来展示我们方法的推广。为此,我们在多层融合策略中采用了预先训练的VGG-16模型[2],以使结果更具说服力。测试VGG-16的所有层组合是非常耗时的,因为有13个卷积层和3个完全连接的层。因此,我们还选择两个完全连接的层(fc1和fc2)和三个卷积层(c3_1,c4_1和c5_1)来测量图像之间的相似度。

        表5报告了三个基准的VGG-16的单层结果。 表6报告了fc层和conv层之间的组合的性能。对于VGG-16的三层组合,我们选择fc1层作为高层,因为与fc1的两层组合优于与emphfc2的组合。因此,我们用fc1层测试三层组合,表7报告了fc1层和两个conv层之间的组合的性能。考虑表5-7,当采用预先训练的VGG-16模型时,所提出的方法也得出类似的结论。

     

     

     

    5.5 比较最先进的方法

     

        作为我们实验的最后部分,我们将我们的方法与在图像检索任务上执行的最新方法进行比较。为了验证我们的方法,我们使用两个CNN模型:我们训练的AlexNet和预先训练的VGG-16。对于我们训练的AlexNet,我们利用fc2和conv4的两层结合以及fc2,conv5和conv4的三层结合,其中参数设置遵循5.2和5.3。对于预训练的VGG-16,我们利用两个fcl和c5_1的三层组合以及fcl,c5_1和c4_1的三层组合。表8报告了三个数据集上图像检索的性能,其中上半部分显示了基于手工特征的方法(从Sparse-编码特征到费舍尔+颜色)和底部显示了基于CNN特征的方法(从神经编码到我们的方法)的结果。

     

     

        毫无疑问,我们的方法胜过了所有以前使用手工特征的方法,这证实了CNN特征在CBIR任务上可以更好地工作。我们的方法也明显优于使用预选的单层CNN特征(表示为神经编码)的方法和使用三层(表示为MOP-CNN)的直接级联的方法。特别是从不同尺度上提取特征,并选取性能最好的图层。我们的方法从单一尺度提取特征,并在牛津5K数据集上获得有竞争力的表现。需要指出的是,一些基于CNN特征的方法引入了空间信息并取得了很大的改善,如空间搜索。我们的方法展示了高层和低层之间的互补性,并提出了映射函数来提升性能。 同样,我们相信我们的方法的性能将进一步改善使用空间信息。

     

    6.结论

        

        受到CNN成功启发,我们提出进一步提高不同层次互补信息的图像检索性能。初步结果证明了我们的方法在测量CBIR相似性方面的有效性。 我们今后的工作包含两部分。一方面,我们会进一步改进我们的方法。如前所述,组合的性能是由单层性能决定的。其他方法可以用来编码卷积层的特征,例如VLAD。同时,我们的方法可以应用于更强大的网络,如VGGNet和GooLeNet。另一方面,我们将探索检索性能和存储空间之间的权衡,并试图改进我们的方法的一般性。例如,卷积层的聚合特征需要被压缩成低维表示。

    展开全文
  • 该文首先概述了卷积神经网络的发展历史,然后分别描述了神经元模型、多层感知器的结构.接着,详细分析了卷积神经网络的结构,包括卷积层、池化层、全连接层,它们发挥着不同的作用.然后,讨论了网中网模型、空间变换网络...
  • 卷积神经网络(ConstitutionalNeuralNetworks,CNN)是在多层神经网络的基础上发展起来的针对图像分类和识别而特别设计的一种深度学习方法。先回顾一下多层神经网络:多层神经网络包括一个输入层和一个输出层,中间有...
  • 卷积神经网络 文章目录卷积神经网络一、卷积神经网络基础1.基础知识2.卷积层的简洁实现3.池化二、LeNet三、常见的一些卷积神经网络1.AlexNet2.VGG3.NiN4.GoogLeNet   一、卷积神经网络基础 1.基础知识 二维互相关...
  • 多层前向卷积神经网络Python代码。Theano的CNN代码
  • 基于多层连接卷积神经网络的单帧图像超分辨重建.pdf
  • Spiking neural networks (SNNs) have advantages over traditional, non-spiking networks with respect to bio- realism, potential for low-power hardware implementations, and theoretical computing power....
  • 首先使用双流卷积神经网络提取视频的特征序列,然后使用TAG (Temporal Actionness Grouping)生成行为提议,为了构建高质量的行为提议,将行为提议送入边界回归网络中修正边界,使之更为贴近真实数据,再将行为提议...
  • 你已经知道如何对二维图像做卷积了,现在看看如何执行卷积不仅仅在二维图像上,而是三维立体上。 我们从一个例子开始,假如说你不仅想检测灰度图像的特征,也想检测RGB彩色图像的特征。彩色图像如果是6×6×3,这里...

     

    你已经知道如何对二维图像做卷积了,现在看看如何执行卷积不仅仅在二维图像上,而是三维立体上。

    我们从一个例子开始,假如说你不仅想检测灰度图像的特征,也想检测RGB彩色图像的特征。彩色图像如果是6×6×3,这里的3指的是三个颜色通道,你可以把它想象成三个6×6图像的堆叠。为了检测图像的边缘或者其他的特征,不是把它跟原来的3×3的过滤器做卷积,而是跟一个三维的过滤器,它的维度是3×3×3,这样这个过滤器也有三层,对应红绿、蓝三个通道。

    给这些起个名字(原图像),这里的第一个6代表图像高度,第二个6代表宽度,这个3代表通道的数目。同样你的过滤器也有一个高,宽和通道数,并且图像的通道数必须和过滤器的通道数匹配,所以这两个数(紫色方框标记的两个数)必须相等。下个幻灯片里,我们就会知道这个卷积操作是如何进行的了,这个的输出会是一个4×4的图像,注意是4×4×1,最后一个数不是3了。

    我们研究下这背后的细节,首先先换一张好看的图片。这个是6×6×3的图像,这个是3×3×3的过滤器,最后一个数字通道数必须和过滤器中的通道数相匹配。为了简化这个3×3×3过滤器的图像,我们不把它画成3个矩阵的堆叠,而画成这样,一个三维的立方体。

    为了计算这个卷积操作的输出,你要做的就是把这个3×3×3的过滤器先放到最左上角的位置,这个3×3×3的过滤器有27个数,27个参数就是3的立方。依次取这27个数,然后乘以相应的红绿蓝通道中的数字。先取红色通道的前9个数字,然后是绿色通道,然后再是蓝色通道,乘以左边黄色立方体覆盖的对应的27个数,然后把这些数都加起来,就得到了输出的第一个数字。

    如果要计算下一个输出,你把这个立方体滑动一个单位,再与这27个数相乘,把它们都加起来,就得到了下一个输出,以此类推。

    那么,这个能干什么呢?举个例子,这个过滤器是3×3×3的,如果你想检测图像红色通道的边缘,那么你可以将第一个过滤器设为,和之前一样,而绿色通道全为0,,蓝色也全为0,。如果你把这三个堆叠在一起形成一个3×3×3的过滤器,那么这就是一个检测垂直边界的过滤器,但只对红色通道有用。

    或者如果你不关心垂直边界在哪个颜色通道里,那么你可以用一个这样的过滤器,,所有三个通道都是这样。所以通过设置第二个过滤器参数,你就有了一个边界检测器,3×3×3的边界检测器,用来检测任意颜色通道里的边界。参数的选择不同,你就可以得到不同的特征检测器,所有的都是3×3×3的过滤器。

    按照计算机视觉的惯例,当你的输入有特定的高宽和通道数时,你的过滤器可以有不同的高,不同的宽,但是必须一样的通道数。理论上,我们的过滤器只关注红色通道,或者只关注绿色或者蓝色通道也是可行的。

    再注意一下这个卷积立方体,一个6×6×6的输入图像卷积上一个3×3×3的过滤器,得到一个4×4的二维输出。

    现在你已经了解了如何对立方体卷积,还有最后一个概念,对建立卷积神经网络至关重要。就是,如果我们不仅仅想要检测垂直边缘怎么办?如果我们同时检测垂直边缘和水平边缘,还有45°倾斜的边缘,还有70°倾斜的边缘怎么做?换句话说,如果你想同时用多个过滤器怎么办?

    这是我们上一张幻灯片的图片,我们让这个6×6×3的图像和这个3×3×3的过滤器卷积,得到4×4的输出。(第一个)这可能是一个垂直边界检测器或者是学习检测其他的特征。第二个过滤器可以用橘色来表示,它可以是一个水平边缘检测器。

    所以和第一个过滤器卷积,可以得到第一个4×4的输出,然后卷积第二个过滤器,得到一个不同的4×4的输出。我们做完卷积,然后把这两个4×4的输出,取第一个把它放到前面,然后取第二个过滤器输出,我把它画在这,放到后面。所以把这两个输出堆叠在一起,这样你就都得到了一个4×4×2的输出立方体,你可以把这个立方体当成,重新画在这,就是一个这样的盒子,所以这就是一个4×4×2的输出立方体。它用6×6×3的图像,然后卷积上这两个不同的3×3的过滤器,得到两个4×4的输出,它们堆叠在一起,形成一个4×4×2的立方体,这里的2的来源于我们用了两个不同的过滤器。

    我们总结一下维度,如果你有一个(通道数)的输入图像,在这个例子中就是6×6×3,这里的就是通道数目,然后卷积上一个,这个例子中是3×3×3,按照惯例,这个(前一个nc)和这个(后一个nc)必须数值相同。然后你就得到了(n-f + 1)*(n-f+1)*nc,这里其实就是下一层的通道数,它就是你用的过滤器的个数,在我们的例子中,那就是4×4×2。我写下这个假设时,用的步幅为1,并且没有padding。如果你用了不同的步幅或者padding,那么这个数值会变化,正如前面的视频演示的那样。

    这个对立方体卷积的概念真的很有用,你现在可以用它的一小部分直接在三个通道的RGB图像上进行操作。更重要的是,你可以检测两个特征,比如垂直和水平边缘或者10个或者128个或者几百个不同的特征,并且输出的通道数会等于你要检测的特征数。

    对于这里的符号,我一直用通道数(nc)来表示最后一个维度,在文献里大家也把它叫做3维立方体的深度。这两个术语,即通道或者深度,经常被用在文献中。但我觉得深度容易让人混淆,因为你通常也会说神经网络的深度。所以,在这些视频里我会用通道这个术语来表示过滤器的第三个维度的大小。

    所以你已经知道怎么对立方体做卷积了,你已经准备好了实现卷积神经其中一层了,在下个视频里让我们看看是怎么做的。

     

    展开全文
  • 针对计算机视觉中目标跟踪的问题,提出基于卷积神经网络(CNN)提取深度特征并与边缘特征进行自适应融合的策略来实现视频目标的跟踪算法。卷积神经网络的低层网络可以获取目标的一部分空间结构、形状等特征;高层网络...
  • 卷积神经网络概述

    2021-01-06 19:57:01
    卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深 度结构的前馈神经网络,是多层感知机(MLP)的变种,本质是一个多层感知机,但由于 其采用了局部连接和权值共享的方式,一方面减少...
  • 卷积神经网络是一种多层的、前馈型网络。从结构上,可以分为特征提取阶段和分类识别阶段。 在特征提取阶段,通常由多个特征层堆叠而成,每个特征层又由卷积层和池化层组成。 处于网络前端的特征层,用来捕捉图像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,885
精华内容 11,554
关键字:

多层卷积神经网络

友情链接: libmodbus-master.zip