基于内容的图像检索技术综述-CNN 方法

本文深入探讨了基于内容的图像检索技术,重点介绍了卷积神经网络(CNN)如何革新这一领域。从AlexNet、VGG、Inception系列到ResNet和DenseNet,分析了各种CNN架构的创新点,如权值共享、深度学习的残差连接、特征融合等。此外,还提到了SENet和netVLAD等方法在特征提取和损失函数优化上的贡献,展示深度学习在提高图像检索准确性方面的显著进步。
摘要由CSDN通过智能技术生成

其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

传统方法在图像检索技术上一直表现平平。比如传统方法常用的SIFT特征,它对一定程度内的缩放、平移、旋转、视角改变、亮度调整等畸变,都具有不变性,是当时最重要的图像特征提取方法之一。然而SIFT这类算法提取的特征还是有局限性的,在ImageNet ILSVRC比赛的最好结果的错误率也有26%以上,而且常年难以产生突破。而图像检索的发展目标是希望模型又快又准,因此兴起了基于CNN的方法,从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,再到DenseNet系列无不体现出了这一趋势。和传统方法一样,CNN方法也是对图片提取特征,比如CNN网络中的一个feature map就可以看做是一个类似SIFT的向量。

计算机视觉比赛ILSVRC(ImageNet Large Scale Visual Recognition Competition)使用的数据都来自ImageNet,该项目于2007年由斯坦福大学华人教授李飞飞创办。ImageNet拥有1500万张标注过的高清图片,总共拥有22000类,其中约有100万张标注了图片中主要物体的定位边框。每年度的ILSVRC比赛数据集中大概拥有120万张图片,以及1000类的标注,是ImageNet全部数据的一个子集。比赛一般采用top-5和top-1分类错误率作为模型性能的评测指标。

和SIFT等算法类似,CNN训练的模型同样对缩放、平移、旋转等畸变具有不变性,有着很强的泛化性。CNN的最大特点在于卷积的权值共享结构,可以大幅减少神经网络的参数量,防止过拟合的同时又降低了神经网络模型的复杂度。

一、AlexNet

论文:ImageNet Classification with Deep Convolutional Neural Networks1[1]

AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet。其官方提供的数据模型,准确率达到57.1%,这项对于传统的机器学习分类算法而言,已经相当的出色。

早些的时候,为了打破网络对称性和提高学习能力,传统的网络都使用了随机稀疏连接。但是,计算机软硬件对非均匀稀疏数据的计算效率很差,所以在AlexNet中又重新启用了全连接层,目的是为了更好地优化并行运算。

AlexNet包含了6亿3000万个连接,6000万个参数和65万个神经元,拥有5个卷积层,其中3个卷积层后面连接了最大池化层,最后还有3个全连接层,图中可以看到,AlexNet还用了11×11和5×5的大卷积核,具体的网络参数可以参考这里:https://blog.csdn.net/guoyunfei20/article/details/78122504,网络结构如下图所示:

 

二、VGG(Visual Geometry Group)

论文:Very deep convolutional networks for large-scale image recognition[2]

图片的预处理就是每一个像素减去了均值,算是比较简单的处理。然后缩放图像最小边到256或者384,然后裁剪得到输入数据是224*224进行训练。网络有5个最大池化层,整体使用的卷积核都比较小(3x3),3x3是可以表示「左右」、「上下」、「中心」这些模式的最小单元了,VGG16的网络缩略图如下所示:

 

                                                                                        图2 VGG16网络结构图

VGG是最早利用2个3×3卷积核的组合代替1个5×5卷积核的网络,使用多个较小卷积核代替一个较大的卷积核,一方面可以减少参数,另一方面作者认为相当于是进行了更多的非线性映射,可以增加网络的拟合/表达能力。还有比较特殊的1x1的卷积核(Inception-v1也有这个东西),可看做是空间的线性映射。前面几层是卷积层的堆叠,后面几层是全连接层,最后是softmax层。所有隐层的激活单元都是ReLU,论文中介绍好几个网络结构,只有其中一个应用了局部响应归一化层(Local Response Normalisation)。

图3 A-E的VGG网路结构对比

上图列出了6种VGG网络结构图,其中VGG16和VGG19较为常见,也是性能最好的两个网络结构,下面是对A-E的网络性能进行分析:

A与A-LRN比较:A-LRN结果没有A好,说明LRN作用不大;

A与B, C, D, E比较:A是这当中layer最少的,相比之下A效果不如B,C,D,E,说明Layer越深越好;

B与C比较:增加1x1filter,增加了额外的非线性提升效果;

C与D比较:3x3 的filter(结构D)比1x1(结构C)的效果好。

总结了下VGG网络的结构,可以发现以下趋势:

①可以看到VGG网络中共有5个池化层,所以可以把卷积部分视为5个部分,和AlexNet一样,只不过每一个部分他用了不止一层卷积层;

②所有卷积层都是同样大小的filter!尺寸3x3,卷积步长Stirde = 1,填充Padding = 1;

③卷积层变多了。结构E有16层卷积层,加上全连接层共19层。这也是对深度学习继续往深处走的一个推动。因为深度神经网络的参数特别多(可以达到上亿,目前已经可以支持到万亿参数)。参数多,表示模型的搜索空间就越大,必须有足够的数据才能更好地刻画出模型在空间上的分布。

图4 VGG网络性能比较

 

三、Incepetion V1

论文:Going deeper with convolutions[3]

在 ILSVRC 2014 取得了最好的成绩的 GoogLeNet,及其核心结构是Inception,传统的网络中,计算机软硬件对非均匀稀疏数据的计算效率很差,故AlexNet又重新启用了全连接层,目的是为了更好地优化并行运算。所以,现在考虑有没有一种既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能的方法。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,据此论文提出了名为Inception 的结构来实现此目的。

Incepetion V1总共有22层layers,只有500万的参数量,仅为AlexNet参数量(6000万)的1/12,却可以达到远胜于AlexNet的准确率,可以说是非常优秀并且非常实用的模型。

Incepetion V1有一个重要的特点:每层使用多个卷积核。传统的层叠式网络,基本上都是一个个卷积层的堆叠,每层只用一个尺寸的卷积核,例如VGG结构中使用了大量的3×3卷积层。事实上,同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,谷歌的GoogleNet,或者说Inception系列的网络,就使用了多个卷积核的结构:

图5 Incepetion V1的多尺度卷积层

如果仅仅引入多个尺寸的卷积核,会带来大量的额外的参数,受到Network In Network中1×1卷积核的启发,为了解决这个问题,他们往Inception结构中加入了一些1×1的卷积核,如图所示:

图6 Incepetion V1引入1×1卷积核

1×1的卷积核能降低计算量,如下图所示,左图表示引入1×1的卷积核之前的网络,其参数量为256×3×3×256=589824,右图表示引入1×1的卷积核之后的网络,其参数量为256×1×1×64+64×3×3×256+64×1×1×256=69632,参数量几乎减少了一个数量级。1×1卷积核也被认为是影响深远的操作,往后大型的网络为了降低参数量都会应用上1×1卷积核,引入1×1的卷积核能达到降维和升维的目的。

图7 引入1×1卷积核前后对比

四、Incepetion V2

论文:Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift

下面的准则来源于大量的实验,因此包含一定的推测,但实际证明基本都是有效的:

1 . 避免表达瓶颈,特别是在网络靠前的地方。 信息流前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map基本都会逐渐变小,但是一下子就变得很小显然不合适。 另外输出的维度channel,一般来说会逐渐增多,否则网络会很难训练。(特征维度并不代表信息的多少,只是作为一种估计的手段)

Inception V2 学习了 VGG 用两个3×3的卷积代替一个5×5的大卷积,在降低参数的同时建立了更多的非线性变换,使得 CNN 对特征的学习能力更强:

图8 替换5×5的卷积核

另外Inception V2还提出了著名的 Batch Normalization(简称BN)方法。BN 是一个非常有效的正则化方法,可以让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高。BN 在用于神经网络某层时,会对每一个 mini-batch 数据的内部进行标准化处理,使输出规范化到 N(0,1) 的正态分布,减少了内部神经元分布改变的影响。

其相对于传统神经网络的差别是:传统神经网络只是在将样本输入层之前对样本进行标准化处理(减均值,除标准差),以降低样本间的差异性。BN是在此基础上,不仅仅只对输入进行标准化,还对每个隐藏层的输入进行标准化。

BN 的论文指出,传统的深度神经网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用 BN 之后,我们就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数只有之前的1/14,训练时间大大缩短。而达到之前的准确率后,可以继续训练,并最终取得远超于 Inception V1 模型的性能: top-5 错误率 4.8%,远低于Inception V1的6.7%,已经优于人眼水平。因为 BN 某种意义上还起到了正则化的作用,所以可以减少或者取消 Dropout 和 LRN,简化网络结构。

 

五、Incepetion V3

论文:Rethinking the Inception Architecture for Computer Vision[5]

一是引入了 Factorization into small convolutions 的思想,将一个较大的二维卷积拆成两个较小的一维卷积,比如将7x7卷积拆成1x7卷积和7x1卷积,或者将3x3卷积拆成1x3卷积和3x1卷积,另外也使用了将5x5 用两个 3x3 卷积替换,7x7 用三个 3x3 卷积替换,如下图所示。一方面节约了大量参数,加速运算并减轻了过拟合,同时增加了一层非线性扩展模型表达能力。论文中指出,这种非对称的卷积结构拆分,其结果比对称地拆为几个相同的小卷积核效果更明显,可以处理更多、更丰富的空间特征,增加特征多样性。

另一方面,Inception V3 优化了 Inception Module 的结构,网络输入从224x224变为了299x299,现在 Inception Module 有35×35、17×17和8×8三种不同结构。这些 Inception Module 只在网络的后部出现,前部还是普通的卷积层。并且 Inception V3 除了在 Inception Module 中使用分支,还在分支中使用了分支(8×8的结构中),可以说是Network In Network In Network。最终取得 top-5 错误率 3.5%的效果。

图9 使用一维卷积核代替二维卷积核

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值