细粒度图像识别数据集Caltech-UCSD bird简介

细粒度图像识别数据集Caltech-UCSD bird简介,第1张

警告:此数据集中的图像与ImageNet中的图像重叠。 使用预先使用ImageNet的网络(或任何预先使用Flickr图像的网络)时要小心,因为CUB的测试集可能与原始网络的训练集重叠。

Caltech-UCSD Birds-200-2011 (CUB-200-2011) 是 CUB-200 dataset 的一个扩充版本,每个类的图像数量大约增加两倍和新的部位注释。 有关数据集的详细信息,请参阅下面链接的技术报告。

(1)类别书目: 200

(2)图像总数目: 11,788

(3)每张图片的标注信息: 15 Part Locations, 312 Binary Attributes, 1 Bounding Box

该数据集是细粒度图像分类最广泛使用的基准。该数据集涵盖了200种鸟类,其中包括5994张训练图像和5794张测试图像。除类别标签外,每个图像都会用1个边界框、15个零件关键点和312个属性进行进一步注释。

一些其他相关的数据集: Caltech-256 , Oxford Flower Dataset , Animals with Attributes . 更多的数据集可以浏览 Caltech Vision Dataset Archive .

[1] Caltech-UCSD Birds-200-2011

[1] The caltech-ucsd birds-200- 2011 dataset

我们在路边看到萌犬可爱至极,然后却不知道这个是哪种狗;看见路边的一个野花却不知道叫什么名字,吃着一种瓜,却不知道是甜瓜还是香瓜傻傻分不清……

细粒度图像分析任务相对通用图像任务的区别和难点在于其图像所属类别的粒度更为精细。

细粒度分类目前的应用场景很广泛,现在的网络大多分为有监督的和半监督的。

有监督的做法基于强监督信息的细粒度图像分类模型,是在模型训练时,为了获得更好的分类精度,除了图像的类别标签外,还使用了物体标注框(bounding box)和部位标注点(part annotation)等额外的人工标注信息。

基于弱监督信息的细粒度图像分类模型,基于强监督信息的分类模型虽然取得了较满意的分类精度,但由于标注信息的获取代价十分昂贵,在一定程度上也局限了这类算法的实际应用。因此,目前细粒度图像分类的一个明显趋势是,希望在模型训练时仅使用图像级别标注信息,而不再使用额外的part annotation信息时,也能取得与强监督分类模型可比的分类精度。

了解了大体的做法,我将从一些paper入手,讲解目前细粒度图像分析的具体实现。

是基于深度学习的细粒度图像检索方法。在SCDA中,细粒度图像作为输入送入Pre-Trained CNN模型得到卷积特征/全连接特征,如下图所示。

区别于传统图像检索的深度学习方法,针对细粒度图像检索问题,作者发现卷积特征优于全连接层特征,同时创新性的提出要对卷积描述子进行选择。

不过SCDA与之前提到的Mask-CNN的不同点在于,在图像检索问题中,不仅没有精细的Part Annotation,就连图像级别标记都无从获取。这就要求算法在无监督条件下依然可以完成物体的定位,根据定位结果进行卷积特征描述子的选择。对保留下来的深度特征,分别做以平均和最大池化 *** 作,之后级联组成最终的图像表示。

很明显,在SCDA中,最重要的就是如何在无监督条件下对物体进行定位。

通过观察得到的卷积层特征,如下图所示,可以发现明显的"分布式表示"特性。

对两种不同鸟类/狗,同一层卷积层的最强响应也差异很大。如此一来,单独选择一层卷积层特征来指导无监督物体定位并不现实,同时全部卷积层特征都拿来帮助定位也不合理。例如,对于第二张鸟的图像来说,第108层卷积层较强响应竟然是一些背景的噪声。

基于这样的观察,作者提出将卷积特征(HxWxD)在深度方向做加和,之后可以获得Aggregation Map(HxWx1)。

在这张二维图中,可以计算出所有HxW个元素的均值,而此均值m便是该图物体定位的关键:Aggregation Map中大于m的元素位置的卷积特征需保留;小于的则丢弃。

这一做法的一个直观解释是,细粒度物体出现的位置在卷积特征张量的多数通道都有响应,而将卷积特征在深度方向加和后,可以将这些物体位置的响应累积--有点"众人拾柴火焰高"的意味。

而均值则作为一把"尺子",将"不达标"的响应处标记为噪声,将"达标"的位置标为物体所在。而这些被保留下来的位置,也就对应了应保留卷积特征描述子的位置。

实验中,在细粒度图像检索中,SCDA同样获得了最好结果;同时SCDA在传统图像检索任务中,也可取得同目前传统图像检索任务最好方法相差无几(甚至优于)的结果,如下图所示。

RA-CNN算法不需要对数据做类似bounding box的标注就能取得和采用类似bounding box标注的算法效果。在网络结构设计上主要包含3个scale子网络,每个scale子网络的网络结构都是一样的,只是网络参数不一样,在每个scale子网络中包含两种类型的网络:分类网络和APN网络。

数据流是这样的:输入图像通过分类网络提取特征并进行分类,然后attention proposal network(APN)网络基于提取到的特征进行训练得到attention区域信息,再将attention区域crop出来并放大,再作为第二个scale网络的输入,这样重复进行3次就能得到3个scale网络的输出结果,通过融合不同scale网络的结果能达到更好的效果。

针对分类网络和APN网络设计两个loss,通过固定一个网络的参数训练另一个网络的参数来达到交替训练的目的.

如下图所示,网络能够逐渐定位attention area,然后再将此区域放大,继续作为第二个scale网络的输入。

图像分类是计算机视觉中最基础的任务,其中可以分为跨物种语义级别的图像分类,子类细粒度图像分类,以及实例级图像分类三大类别。

在不同物种的层次上识别不同类别的对象,例如猫狗分类,这样的分类任务的特征是,较大的类间方差,较小的类内方差,例如典型的cifar10是在交通工具以及动物内部进行区分,都是语义上完全可以区分开的对象

细粒度图像分类,是一个大类中的子类的分类,例如不同鸟类的分类,不同狗类的分类,不同车型的分类等等。例如Caltech-UCSD Birds-200-2011数据集,他是包含200类,11788张图像的鸟类书籍,为每一张图提供了15哥局部区域位置,1个标注框。这种细粒度级别的检测需要更为精细的分类器设计

如果我们需要区分不同的个体,不仅仅是物种类别或者子类,其就是一个识别问题,例如最典型的任务就是人脸识别。人脸识别对于计算机视觉领域落地是十分有意义的,它能够完成很多任务,例如安全维稳,考勤打卡,人脸解锁等应用场景都是和人脸识别这个实例级图像分类任务密切相关的。

MNIST数据集在当时是一个baseline,其包含60000个训练数据,10000个测试数据,图像均为灰度图像,大小为32*32。在这个数据集中,其实传统方法表现的也不错,例如SVM以及KNN,SVM为代表的方法可以将MNIST分类错误率降低到0.56%, 超过当时的人工神经网络。

后来经过多次迭代,LeNet5在1998年诞生,这是一个经典的卷积神经网络,饱含着一些重要的特性:

虽然LeNet5的错误率在0.7%左右,不如SVM方法,但随着网络结构的发展,神经网络方法很快的超过了其他的所有方法,有着很好的效果。

为了在工业界落地更加复杂的图像分类任务,李飞飞等人数年时间的整理下,2009年,ImageNet数据集发布了。ImageNet数据集共有1400多万张图片,共有2万多个类别,不过论文中常用的都是1000类的基准。

AlexNet在2012年时横空出世,是第一个真正意义上的深度网络,与LeNet5的5层相比,它的层数增加了3层,网络的参数量也大大增加,输入也从28变成了224,同时GPU的面世,也使得深度学习从此进行GPU为王的训练时代。

AlexNet有以下的特点:

VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG仍然被用来提取图像特征。

VGGNet可以看成是加深版本的AlexNet,都是由卷积层、全连接层两大部分构成.全部使用3×3的卷积核和2×2的最大池化核,简化了卷积神经网络的结构。VGGNet很好的展示了如何在先前网络架构的基础上通过简单地增加网络层数和深度就可以提高网络的性能。虽然简单,但是却异常的有效,在今天,VGGNet仍然被很多的任务选为基准模型。

GoogLeNet也是将网络层次加深了,不过GoogLeNet做了更加大胆的网络结构的尝试,其深度只有22层,从参数数量来看,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;但是从模型结果来看,GoogLeNet的性能却更加优越。

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量。但这种方式存在以下问题:

(1)参数太多,如果训练数据集有限,很容易产生过拟合;

(2)网络越大、参数越多,计算复杂度越大,难以应用;

(3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。

解决这些问题的方法当然就是在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。比较通用的方法是使用dropout的方法,相当于从原始的网络中找到一个更”瘦“的网络(有待考究)

GoogLeNet团队提出了Inception网络结构,就是构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构。

什么是Inception呢?Inception历经了V1、V2、V3、V4等多个版本的发展,不断趋于完善,下面一一进行介绍

通过设计一个稀疏网络结构,但是能够产生稠密的数据,既能增加神经网络表现,又能保证计算资源的使用效率。谷歌提出了最原始Inception的基本结构:

该结构将CNN中常用的卷积(1x1,3x3,5x5)、池化 *** 作(3x3)堆叠在一起(卷积、池化后的尺寸相同,将通道相加),一方面增加了网络的宽度,另一方面也增加了网络对尺度的适应性。

网络卷积层中的网络能够提取输入的每一个细节信息,同时5x5的滤波器也能够覆盖大部分接受层的的输入。还可以进行一个池化 *** 作,以减少空间大小,降低过度拟合。在这些层之上,在每一个卷积层后都要做一个ReLU *** 作,以增加网络的非线性特征

然而这个Inception原始版本,所有的卷积核都在上一层的所有输出上来做,而那个5x5的卷积核所需的计算量就太大了,造成了特征图的厚度很大,为了避免这种情况,在3x3前、5x5前、max pooling后分别加上了1x1的卷积核,以起到了降低特征图厚度的作用,这也就形成了Inception v1的网络结构

对上图说明如下:

(1)GoogLeNet采用了模块化的结构(Inception结构),方便增添和修改;

(2)网络最后采用了average pooling(平均池化)来代替全连接层,该想法来自NIN(Network in Network),事实证明这样可以将准确率提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便对输出进行灵活调整;

(3)虽然移除了全连接,但是网络中依然使用了Dropout

(4)为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练很有裨益。而在实际测试的时候,这两个额外的softmax会被去掉。

Inception V2版本的解决方案就是修改Inception的内部计算逻辑,提出了比较特殊的“卷积”计算结构。

2.1 卷积分解(Factorizing Convolutions)

GoogLeNet团队提出可以用2个连续的3x3卷积层组成的小网络来代替单个的5x5卷积层,即在保持感受野范围的同时又减少了参数量

2.2 降低特征图大小

如果想让图像缩小,可以有如下两种方式:先池化再作Inception卷积,或者先作Inception卷积再作池化。但是方法一(左图)先作pooling(池化)会导致特征表示遇到瓶颈(特征缺失),方法二(右图)是正常的缩小,但计算量很大。为了同时保持特征表示且降低计算量,将网络结构改为下图,使用两个并行化的模块来降低计算量(卷积、池化并行执行,再进行合并)

使用Inception V2作改进版的GoogLeNet,网络结构图如下:

Inception V3一个最重要的改进是分解(Factorization),将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。

Inception V4主要利用残差连接(Residual Connection)来改进V3结构,得到Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4网络。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9437425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存