一 如何掌握好图像分类算法
来源:https://mp.weixin.qq.com/s/FcSzjphpsWCB-nrtbjs4gg
1 简介
研究方向,主要包括:
- (1) 多类别图像分类;
- (2) 细粒度图像分类;
- (3) 多标签图像分类;
- (4) 无/半监督图像分类;
- (5) 零样本图像分类;
对于计算机而言,提取并识别其中的特征是有挑战的。目前存在的主要问题有:
- (1) 遮挡:目标物体被遮挡某一部分
- (2) 多视角:每个物体的呈现视角是多样的
- (3) 光照条件:像素层级上而言,不同光照对识别的影响较大
- (4) 样本量较少:某些图像的样本难以获取,导致样本过少
- (5) 类内差异:某种类别下的物体差异性较大,比如桌椅等,呈现形式多样,不具备统一的特征
- (6) 类别不平衡:数据集不同类别的样本数量差异较大
2 经典分类模型的发展简史
LeNet
作为早期的分类网络,LeNet[1]包含了现有CNN的核心模块。其中卷积层由卷积,池化,非线性激活函数构成。从1998年至今,卷积神经网络依然遵循着这样的设计思想。其中,卷积发展出了很多的变种,池化则逐渐被带步长的卷积完全替代,非线性激活函数更是演变出了很多的变种。
ImageNet数据集
后来在李飞飞等人数年时间的整理下,2009年,ImageNet数据集发布了,并且从2010年开始每年举办一次ImageNet大规模视觉识别挑战赛,即ILSVRC。竞赛初期,仍以SVM和Boost等传统算法为主,直到2012年AlexNet的横空出世。
AlexNet
AlexNet[2]是第一个真正意义上的深度网络,与LeNet5的5层相比,它的层数增加了3层,网络的参数量也大大增加,输入也从28变成了224,同时GPU的面世,也使得深度学习从此进行GPU为王的训练时代。
AlexNet在LeNet5的基础上进行改进,包括5个卷积层和3个全连接层。使用Relu激活函数,收敛很快,解决了Sigmoid在网络较深时出现的梯度弥散问题。同时加入了Dropout层,防止过拟合。此外,还使用了LRN归一化层,对局部神经元的活动创建竞争机制,抑制反馈较小的神经元放大反应大的神经元,增强了模型的泛化能力。由于算力限制,AlexNet创新性的采用两块GPU分块运算,并通过全连接的层将两个分支的结果进行融合。
GoogLeNet和VGGNet
2014年的冠亚军网络分别是GoogLeNet[3]和VGGNet[4]。
其中VGGNet包括16层和19层两个版本,共包含参数约为550M。全部使用3×3的卷积核和2×2的最大池化核,简化了卷积神经网络的结构。VGGNet很好的展示了如何在先前网络架构的基础上通过简单地增加网络层数和深度就可以提高网络的性能。虽然简单,但是却异常的有效,在今天,VGGNet仍然被很多的任务选为基准模型。
GoogLeNet是来自于Google的Christian Szegedy等人提出的22层的网络,其top-5分类错误率只有6.7%。
GoogleNet的核心是Inception Module,它采用并行的方式。一个经典的inception结构,包括有四个成分。1×1卷积,3×3卷积,5×5卷积,3×3最大池化,最后对四个成分运算结果进行通道上组合。这就是Inception Module的核心思想。通过多个卷积核提取图像不同尺度的信息然后进行融合,可以得到图像更好的表征。自此,深度学习模型的分类准确率已经达到了人类的水平(5%~10%)。与VGGNet相比,GoogleNet模型架构在精心设计的Inception结构下,模型更深又更小,计算效率更高。
ResNet
2015年,ResNet[5]获得了分类任务冠军。它以3.57%的错误率表现超过了人类的识别水平,并以152层的网络架构创造了新的模型记录。由于ResNet采用了跨层连接的方式,它成功的缓解了深层神经网络中的梯度消散问题,为上千层的网络训练提供了可能。
DenseNet
在ResNet基础上,密集连接的DenseNet[6]在前馈过程中将每一层与其他的层都连接起来。对于每一层网络来说,前面所有网络的特征图都被作为输入,同时其特征图也都被后面的网络层作为输入所利用。
DenseNet中的密集连接还可以缓解梯度消失的问题,同时相比ResNet,可以更强化特征传播和特征的复用,并减少了参数的数目。DenseNet相较于ResNet所需的内存和计算资源更少,并达到更好的性能。
SeNet
2017年,也是ILSVRC图像分类比赛的最后一年,SeNet[7]获得了冠军。这个结构,仅仅使用了注意力机制对特征进行处理,通过学习获取每个特征通道的重要程度,根据重要性去降低或者提升相应的特征通道的权重。
至此,图像分类的比赛基本落幕,也接近算法的极限。但是,在实际的应用中,却面临着比比赛中更加复杂和现实的问题,需要大家不断积累经验。
3 如何完成一个图像分类任务
3.1 构建流程化处理模式
初学者在入门阶段,需要构建流程化处理的思维模式,将一个完整的任务进行拆解,并对其中的各个流程加以掌握。一个完整的图像分类任务,包括以下几个流程:
- (1) 选择开源学习框架
本流程需要掌握主流的深度学习框架,常见的包括Tensorflow、Pytorch、Mxnet等。此外,还需要掌握Linux开发指令以及相应的编程技巧。 - (2) 构建数据集并读取数据
图像分类作为数据驱动的任务,高质量的数据集是准确率的保证。因此,在明确任务需求的初期,就需要着手构建内容清晰、符合实际的数据集,并将其划分为训练集、验证集和测试集。此外,还要根据数据集的格式,结合不同的学习框架,完成对数据集的读取,保证每张图片以张量的形式,送入训练网络。 - (3) 网络模型选择
在选择训练网络时,需要根据现有的研究内容和成果进行筛选。在选定的基础网络结构上进行实验和改进,进一步提升网络的性能。 - (4) 训练及参数调试
选择合适的学习率、优化方式、损失函数进行训练,并可以借助不同的数据增强方式,进一步提升模型对数据的敏感力。参数的选择是否合适,可以通过训练集和验证集的结果对比进行调试。 - (5) 测试
在测试集上达到精度要求后,对模型完成进一步的部署。
3.2 进一步提高分类任务的质量
分类精度的提高主要可以从数据集、网络结构和调参三个方面入手。
- (1) 数据集:质量高、目标清晰
- (2) 网络结构:根据不同任务进行针对性的选择,务必根据现有的研究选取合适的结构,不可以盲目猜想
- (3) 调参:针对任务需求选择合适的损失函数,并选择合适的学习率和优化方式
4 分类损失函数
作为网络模型的优化目标,合理的损失函数可以提高最终的准确率。常见的分类损失函数主要包括0-1损失函数、交叉熵损失函数等等。
0-1损失函数:计算n个样本上的0-1分类损失的和或者平均值。
交叉熵损失函数:图像分类任务中最常用的损失函数,定义在概率分布基础上的,通常用来度量分类器的预测输出的概率分布与真实分布的差异,令n对应于样本数量,m是类别数量,yij 表示第i个样本属于分类j的标签,它是0或者1,f(xij)是预测第i个样本属于分类j的概率。
Hinge损失函数:计算模型与数据之间的平均距离,是一个仅仅考虑了预测误差的单边度量。通常被用于最大间隔分类器。
多标签分类任务函数:多标签分类任务与单分类任务不同,每一张图像可能属于多个类别,因此需要预测样本属于每一类的概率值,sigmoid cross_entropy_loss通常被用于多标签分类任务,单个样本的损失定义如下:
汉明距离损失函数:将预测的标签集合与实际的标签集合进行对比,按照汉明距离的相似度来衡量。汉明距离的相似度越高,即汉明损失函数越小,则模型的准确率越高,也常用于多标签分类任务,∆Y表示距离。
5 图像分类的不同研究方向
5.1 多类别图像分类
多类别图像分类作为图像分类的最基础研究,其目的是将若干不相关类别的图像进行分类。随着深度学习的发展,已经由原有的特征提取方式,转化为数据驱动的深度学习方式,并得到了极大的发展。现有的经典网络,如VGG、ResNet、SENet等均是在此基础上研究而来。对于该方向的研究,笔者建议对经典文章进行精读,并掌握其中经典结构的设计思想。
5.2 细粒度图像分类
细粒度分类即在区分出基本类别的基础上,进行更精细的子类划分,如猫的品种、车的品牌等等。相较于多类别图像分类,细粒度图像具有更加相似的外观和特征,导致数据间的类内差异较大,分类难度也更高。
现有的解决方案主要包括线性网络结构、额外标注信息和注意力机制。
Lin等[8]提出了双线性卷积神经网络结构(Bilinear CNN),通过不同的分支提取到两个特征向量,如KxN和KxM,通过池化函数将两个特征汇聚成MxN的特征向量,即包含了图像的特征信息和位置信息,达到互补的目的。
还有的方法通过引入bounding box和key point等额外的人工标注信息,通过R-CNN提取相关的区域信息,对其进行特征修正,送入相应的分类器进行训练。
还有的方法通过引入视觉注意力机制(Vision Attention Mechanism),在CNN内部嵌入注意力模块,定位图像中有区分性的区域,无需引入额外的标注信息。
5.3 无监督/半监督图像分类
顾名思义,不借助类别标签或只借助部分类别标签对图像完成分类,属于图像分类中较难的任务类型,现阶段的解决方案大都是传统聚类算法与深度学习的融合。
Deep Clustering[9]通过CNN提取图像的特征信息,然后通过K-means算法对特征进行聚类,并赋予相应的伪标签,再用伪标签进行相应的分类训练。
牛津大学构建了信息不变性聚类网络(Invariant Information Clustering CNN)[10],将原有的图像进行平移、旋转得到新的图像,原有图像和新图像输入同一CNN,获得的特征信息相匹配的,则聚合为一类。
5.4 多标签图像分类
现实生活中的图像往往包含多个目标,并非只包含单一种类的物体。针对此问题,多标签分类应运而生。其需要对含有多个目标的图像进行分类,准确识别出多个类别。常见的解决方案主要包括以下几点:
标签转化:假定多标签分类任务中共有N个标签,则针对每张图片,将其标签转化为Nx1的向量,如[1,1,0,…,1,0],同时使用汉明距离作为损失函数,这一方法简单便捷,只需要在标签格式上进行处理。
原图拆分:根据BING理论将图像生成若干含有标签的区域图像,将区域图像送入单标签分类网络得到分类结果,随后将每个区域图像的结果进行融合得到最终结果。
添加词向量:通过添加一定的词向量对不同的类别进行描述,首先利用CNN对图像进行特征提取,随后利用RNN构建图像特征与词向量之间的关系,可以充分考虑类别之间的相关性。
5.5 零样本图像分类
在传统的分类模型中,为了解决多分类问题(例如三个类别:猫、狗和猪),就需要提供大量的猫、狗和猪的图片用以模型训练,然后给定一张新的图片,就能判定属于猫、狗或猪的其中哪一类。但是对于之前训练图片未出现的类别(例如牛),这个模型便无法将牛识别出来,而零样本分类就是为了解决这种问题。在零样本分类中,某一类别在训练样本中未出现,但是我们知道这个类别的特征,然后通过语料知识库,便可以将这个类别识别出来。
利用若干学习器去学习斑马的相关特征,随后输入斑马的图片。如果此时我有一张表,这张表里记录着每一种动物这三种属性的取值,我们就可以通过查表的方式,将这张图片对应到斑马这一类别这里的属性表。相关属性表是事先总结好的,因为收集大量的未知类别的图片是困难的,但是仅仅总结每一类别相应的属性却是可行的。
通过构建词向量(word2vec)的方式,将自然语言中的字词转化为计算机可以理解的数字向量,结合图像和相应的词向量训练学习器。在测试阶段,输入测试的图像,输入预测的词向量,从而得到预测结果与相应类别的距离,距离最近的则为所属类别。
6 如何解决类别不平衡
构建数据集时,不同类别下的样本数目相差过大,从而导致分类模型的性能变差。现有的解决方案包括以下几类:
优化目标设计法:优化目标设计主要是通过修改损失和函数对不同类别进行不同的加权或者归一化处理,比如在交叉熵中添加类别权重。
提升样本(over sampling)法:即对于类别数目较少的类别,从中随机选择一些图片进行复制并添加至该类别包含的图像内,直到这个类别的图片数目和最大数目类的个数相等为止。通过实验发现,这一方法对最终的分类结果有了非常大的提升。
在这个基础上进行改进的方法是动态采样(dynamic sampling)法:该方法根据训练结果对数据集进行动态调整,对结果较好的类别进行随机删除样本操作,对结果较差的类别进行随机复制操作,以保证分类模型每次学习都能学到相关的信息。
两阶段(two-phase)训练法:首先根据数据集分布情况设置一个阈值N,通常为最少类别所包含样例个数。随后对样例个数大于阈值的类别进行随机抽取,直到达到阈值。此时根据阈值抽取的数据集作为第一阶段的训练样本进行训练,并保存模型参数。最后采用第一阶段的模型作为预训练数据,再在整个数据集上进行训练,对最终的分类结果有了一定的提升。
7 如何解决样本量过少的问题
在构建数据集时,由于某些图片的采集难度交大或存在状况较少,往往会导致样本量过少,这一现象同样会导致分类模型的性能降低。现有的解决方案主要包括以下几类:
采用预训练模型:使用在大量样本下足够训练的模型,如果模型的训练数据足够大,且跟你所需求的任务相匹配,那么可以理解为该预训练模型所学到的特征具备一定的通用性。
降低模型复杂度:在样本量过少的情况下,现有的数据无法满足网络模型的庞大参数,因此可以对所用模型进行简化。
数据增强:包括平移、翻转、亮度、对比度、裁剪、缩放等。
8 图像分类的相关竞赛与数据集
自图像分类兴起以来,各行各业均提出了自身的需求,并举办很多图像分类的竞赛,提出了各种数据集。
8.1 竞赛
其中,最著名的即ImageNet分类竞赛,自2009年李飞飞团队发布了ImageNet数据集以来,从2010年开始每年举办一次ImageNet大规模视觉识别挑战赛,即ILSVRC。该竞赛于2017年正式结束。八年间,该竞赛大大促进了图像分类领域的发展,并有无数经典的网络得以提出。
2011 年,谷歌开始赞助举办第一届FGVC Workshop,之后每两年举办一次,到 2017 年已经举办了四届。由于近年来计算机视觉的快速发展,FGVC 活动影响力也越来越大,自2018年开始由两年一次改为了一年一次。FGVC竞赛侧重于子类别的详细划分,每届赛事都包含了多个主题,涵盖了动物种类、零售产品、艺术品属性、木薯叶病、腊叶标本的野牡丹科物种、来自生命科学图片的动物物种、蝴蝶和蛾物种、菜肴烹饪以及博物馆艺术品等多个事物的细粒度属性。
除此了上述两个大型竞赛以外,Kaggle和阿里天池也同样举办了若干图像分类竞赛,不仅解决了实际的应用问题,也进一步促进了分类模型的研究发展。
8.2 数据集
俗话说:巧妇难为无米之炊。数据作为驱动深度学习的源动力之一,更是图像分类任务的根基,直白来说,任何领域的分类研究都离不开数据。
不论学界还是工业界,确定特定的研究方向后,必须搭建相关的高质量数据集才可以进行进一步的研究,同时也能以更统一的标准对模型性能进行评判。
下面根据应用场景的不同,汇总了9个相关领域的数据集,并根据数据集自身特点,注明其容量、类别和适用的分类任务,以供大家参考使用。
初入图像处理领域的同学,主要以MNIST、CIFAR 10数据集进行练手,可以帮助新手迅速了解神经网络的构成,同时掌握深度学习和图像处理的相关基础知识。
对于已经有一定基础的同学,需要通过更多的实操来强化对不同结构和知识的理解以及应用,并实现调参、数据处理、网络结构替换等更高一层的任务,CIFAR 100、表情分类相关的数据集则是其中代表。
对于经过多个任务历练,需要根据实际需求和科研方向来选择数据集的同学,这就涉及到多标签分类、细粒度分类和少样本分类等更复杂的任务,也就需要选择Pascal VOC、ImageNet等更高层级的数据集,同时还有可能同时利用这些数据集,从中选取合适的图像以搭建满足自己需求的数据。
9 参考资料
[1] Lecun Y , Bottou L . Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.
[2] Krizhevsky A , Sutskever I , Hinton G . ImageNet Classification with Deep Convolutional Neural Networks[C]// NIPS. Curran Associates Inc. 2012.
[3] Szegedy C , Liu W , Jia Y , et al. Going Deeper with Convolutions[J]. 2014.
[4] Krizhevsky A , Sutskever I , Hinton G . ImageNet Classification with Deep Convolutional Neural Networks[C]// NIPS. Curran Associates Inc. 2012.
[5] He K , Zhang X , Ren S , et al. Deep Residual Learning for Image Recognition[J]. 2015.
[6] Huang G , Liu Z , Laurens V D M , et al. Densely Connected Convolutional Networks[J]. 2016.
[7] Hu J , Shen L , Albanie S , et al. Squeeze-and-Excitation Networks[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017.
[8] Lin T Y , Roychowdhury A , Maji S . Bilinear CNN Models for Fine-grained Visual Recognition[J]. 2015.
[9] Bhatnagar B L , Singh S , Arora C , et al. Unsupervised Learning of Deep Feature Representation for Clustering Egocentric Actions[C]// IJCAI. 2017.
[10] Ji X , Vedaldi A , Henriques J . Invariant Information Clustering for Unsupervised Image Classification and Segmentation[C]// 2019 IEEE/CVF International Conference on Computer Vision (ICCV). IEEE, 2019.
二 细粒度图像分类
来源:https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA==&mid=2649034832&idx=2&sn=5d66b2d6eec1b05bd6cc95bbd8b0dae1&chksm=8712ae2db065273bc71cffc7decba2f7459f88a60d528f60379d8eb1a99d0b50bd59102ac211&scene=21#wechat_redirect
1 简介
细粒度图像分类是在区分出基本类别的基础上,进行更精细的子类划分,如区分鸟的种类、车的款式、狗的品种等,目前在工业界和实际生活中有着广泛的业务需求和应用场景。
细粒度图像相较于粗粒度图像具有更加相似的外观和特征,加之采集中存在姿态、视角、光照、遮挡、背景干扰等影响,导致数据呈现类间差异性大、类内差异性小的现象,从而使分类更加具有难度。
细粒度图像分类研究,从提出到现在已经经历了一段较长时间的发展。面对这一挑战,人们在粗粒度图像分类模型的基础上进行了更加细致的研究和改进,大致可以分为基于特征提取的传统算法和基于深度学习的算法。早期的基于特征提取的算法,由于特征的表述能力有限,分类效果也往往面临很大的局限性。近年来,随着深度学习的兴起,神经网路强大的特征提取能力促进了该领域的快速进步。
2 基于特征提取的传统算法
三 无监督图像分类
来源:https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA==&mid=2649035364&idx=1&sn=6a4ee7b3fe98e867158cf7c4190d1842&chksm=8712ac19b065250f61810d6faaa04c1493c5c27a0ca1a04cd4a39f21908c7b9939cc444e71d8&scene=21#wechat_redirect
1 简介
近年来,深度学习在图像识别领域取得了前所未有的进步,究其根本,可以归功于数据集容量的扩充和计算资源的提升。
现阶段的图像分类任务在很大程度上是靠监督学习实现的,即每个样本都有其对应的标签,通过深度神经网络来不断学习每个标签所对应的特征,并最终实现分类。这种情况下,数据集的容量、标签的质量往往对模型的性能起到决定性的作用。
如果将神经网络看做一辆在赛道上奔驰的F1赛车,数据集则是为其不断提供动力的能源。如果没有高质量的数据集作为基础,也就无法驱动神经网络进行训练。
高质量数据集自然会带来标注的困难,据统计,标记单张图像中的单个物体类别大约需要2到3秒的时间,但实际应用中的数据集往往包含上千上万张图片,整个标注过程就会变得格外漫长。尤其是在涉及到细粒度分类和多标签分类任务时,标注成本会随着目标数量、可辨识难度呈指数级增长。
四 多标签图像分类
来源:https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA==&mid=2649033904&idx=1&sn=c10d39f2ff0c965bd9e0efda9cdbb426&chksm=8712b2cdb0653bdb0935bd5540248812c840c3b5863e0ab546501ac63b2c96816755e7ed7418&scene=21#wechat_redirect
1 简介
作为计算机视觉领域的基础性任务,图像分类是目标检测、语义分割的重要支撑,其目标是将不同的图像划分到不同的类别,并实现最小的分类误差。经过近30年的研究,图像分类已经成功应用至社会生活的方方面面。如今,在我们的生活中随处可见——智能手机的相册自动分类、产品缺陷识别、无人驾驶等等。
根据分类任务的目标不同,可以将图像分类任务划分成两部分:(1)单标签图像分类;(2)多标签图像分类。
单标签图像分类是指每张图片对应一个类别标签,根据物体类别的数量,又可以将单标签图像分类划分成二分类、多类别分类。如下图所示,可以将该图的标签记为海洋,通过单标签图像分类我们可以判定该图像中是否含有海洋。
然而,现实生活中的图片中往往包含多个类别的物体,这也更加符合人的认知习惯。我们再来观察下图,可以发现图中不仅包含海洋,还包括了海豚。多标签图像分类可以告知我们图像中是否同时包含这些内容,这也能够更好地解决实际生活中的问题。
2 传统机器学习算法
机器学习算法主要包括两个解决思路:
- (1) 问题迁移,即将多标签分类问题转化为单标签分类问题,如将标签转化为向量、训练多个分类器等;
- (2) 根据多标签特点,提出新的适应性算法,包括ML-KNN、Ranking SVM、Multi-label Decision Tree等。现对其中具有代表性的算法进行总结。
2.1 问题迁移
问题迁移方法的主要思想是先将多标签数据集用某种方式转换成单标签数据集,然后运用单标签分类方法进行分类。该方法有可以包括基于标签转换和基于样本实例转换。
2.1.1 基于标签转换
针对每个标签,将属于这个标签的所有实例分为一类,不属于的分为另一类,将所有数据转换为多个单标签分类问题(如下图)。典型算法主要有Binary Relevance和Classifier Chain两种。
2.1.2 基于样本实例转换
这种方法是将多标签实例分解成多个单标签实例。如下图所示。实例E3对应标签y3和y4,则通过分解多标签方法法将E3分解成单独选中标签y3和y4的实例,然后对每一个标签作单独预测。
2.2 适应性方法
如上文所述,新的适应性算法是根据多标签分类的特殊性,改进现有的单标签分类算法,主要包括以下三种:
2.2.1 ML-KNN
ML-KNN由传统的KNN算法发展而来。首先通过KNN算法得到样本最接近的K个邻近样本,然后根据K个邻近样本的标签,统计属于某一标签的邻近样本个数,最后利用最大后验概率原则(MAP)决定测试样本含有的标签集合。
2.2.2 Rank SVM
Rank SVM是在SVM的基础上,加入Ranking Loss损失函数和相应的边际函数作为约束条件,并扩展目标函数而提出的一种多标签学习算法。该算法的简要思路是:首先定义函数s(x)是样本x的标签集的规模大小,然后定义rk(x)=wkTx+bk,如果求得的rk(x)值在最大的s(x)个元素(r1(x),…rQ(x))之间,则认为该样本x选中该标签k,否则就没被选中。在求解过程中定义新的排序函数rk(x)-rl(x)≥1,其中k表示被样本x选中的标签,l表示没有被选中的标签,并基于这个新的排序函来大间隔分类器,同时最小化Ranking Loss,从而推导出适合多标签分类的目标函数和限制条件。
2.2.3 Multi-label Decision Tree
该算法采用决策树技术处理多标签数据,利用基于多标签熵的信息增益准则递归地构建决策树。树形结构包括非叶结点、分支、叶节点。决策树模型用于分类时,特征属性用非叶节点表示,特征属性在某个值域上的输出用非叶节点之间的分支表示,而类别则用叶节点存放。
计算思想如下:首先计算每个特征的信息增益,挑选增益最大的特征来划分样本为左右子集,递归下去,直到满足停止条件,完成决策树的构建。对新的测试样本,沿根节点遍历一条路径到叶子节点,计算叶子节点样本子集中每个标签为0和1的概率,概率超过0.5则表示含有该标签。当遍历所有路径到底不同的叶节点之后,则可判断涵盖的所有标签信息。
除了上述三类主要算法外,还包括诸多以单标签分类进行改进的算法。
3 深度学习算法
深度学习的发展带动了图像分类精度的大幅提升,神经网络强大的非线性表征能力可以在大规模数据中学习到更加有效的特征。近年来,多标签图像分类也开始使用深度学习的思想展开研究。
魏云超等在程明明教授提出的BING理论基础上,提出了Hypotheses-CNN-Pooling。首先对每张图片提取含有标签信息的候选区域(如上图中的Hypotheses Extraction过程),然后将每个候选区域送入CNN进行分类训练,最后利用cross-hypothesis max-pooling融合所有候选区域的分类结果,从而得到多个标签信息完整的图片。
CNN具有强大的语义信息提取能力,而RNN则可以建立信息之间的关联。根据这一理论观点,Jiang Wang等提出了CNN-RNN联合的网络结构。首先利用CNN对输入图像进行训练,得到相应的特征,然后将图片对应的特征投影到与标签一致的空间中,在该空间利用RNN进行单词的搜索训练。该算法充分考虑了类别之间的相关性,可以有效对图像中具有一定关系的标签进行识别。
在CNN-RNN结构的基础上,后续文章又加入Regional LSTM模块。该模块可以对CNN的特征进行导向处理,从而获取特征的位置信息,并计算位置信息和标签之间的相关性。在上文的结果上进一步考虑了特征、位置和标签之间潜在的依赖关系,可以有效计算图片中多个标签同时存在的可能性,并进行图片的分类。
最近,诸多基于image-level进行弱监督分割研究的文章,充分利用了多标签分类网络的信息。其主要思想是将标签统一处理为向量形式,为每幅图片构建一个维度为1xN的矩阵标签(如[0,0,0,1,1,0]形式),并采用专门的损失函数(Hanming loss、Ranking loss等)进行训练。这一方法成功地将多标签的复杂问题,转化为单标签问题,从而可以利用传统的分类网络进行训练。
多标签图像分类的相关算法仍然层出不穷,但不论是基于机器学习还是基于深度学习的算法,都有其优势和不足,如何根据实际应用需求选用合适的算法,才是我们应当关注的重点内容。
五 类别不平衡
来源:https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA==&mid=2649035421&idx=2&sn=bd5fa631a4701734be38e34603a12457&chksm=8712ace0b06525f6cb40a9a1b5341226721916c404a11f39651d3c95b7233902330a844dfe6b&scene=21#wechat_redirect
1 简介
小伙伴们在利用公共数据集动手搭建图像分类模型时,有没有注意到这样一个问题呢——每个数据集不同类别的样本数目几乎都是一样的。这是因为不同类别的样例数目差异较小,对分类器的性能影响不大,可以在避免其他因素的影响下,充分反映分类模型的性能。反之,如果类别间的样例数目相差过大,会对学习过程造成一定的影响,从而导致分类模型的性能变差。这就是本篇文章将要讨论的类别不平衡问题(Class Imbalance)。
类别不平衡是指分类任务中不同类别的训练样本数目相差较大的情况,通常是由于样本较难采集或样本示例较少而引起的,经常出现在疾病类别诊断、欺诈类型判别等任务中。
尽管在传统机器学习领域内,有关类别不平衡的问题已经得到了详尽的研究,但在深度学习领域内,其相关探索随着深度学习的发展,经历了一个先抑后扬的过程。
在反向传播算法诞生初期,有关深度学习的研究尚未成熟,但仍有相关科研人员研究过类别样例的数目对梯度传播的影响,并得出样例数目较多的类别在反向传播时对权重占主导地位。这一现象会使网络训练初期,快速的降低数目较多类别的错误率,但随着训练的迭代次数增加,数目较少类的错误率会随之上升[1]。
随后的十余年里,由于深度学习受到计算资源的限制、数据集采集的难度较大等影响,相关研究并没有得到进一步的探索,直到近年来才大放异,而深度学习领域内的类别不平衡问题,也得到了更加深入的研究。
本篇文章将对目前涉及到的相关解决方案进行汇总,共分为数据层面、算法层面、数据和算法混合层面三个方面,仅列举具有代表性的方案阐述,以供读者参考。
六 深度学习中的数据增强方法
很多实际的项目,我们都难以有充足的数据来完成任务,要保证完美的完成任务,有两件事情需要做好:(1)寻找更多的数据。(2)充分利用已有的数据进行数据增强,今天就来说说数据增强。
1 什么是数据增强?
数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。
比如上图,第1列是原图,后面3列是对第1列作一些随机的裁剪、旋转操作得来。
每张图对于网络来说都是不同的输入,加上原图就将数据扩充到原来的10倍。假如我们输入网络的图片的分辨率大小是256×256,若采用随机裁剪成224×224的方式,那么一张图最多可以产生32×32张不同的图,数据量扩充将近1000倍。虽然许多的图相似度太高,实际的效果并不等价,但仅仅是这样简单的一个操作,效果已经非凡了。
如果再辅助其他的数据增强方法,将获得更好的多样性,这就是数据增强的本质。
数据增强可以分为,有监督的数据增强和无监督的数据增强方法。其中有监督的数据增强又可以分为单样本数据增强和多样本数据增强方法,无监督的数据增强分为生成新的数据和学习增强策略两个方向。
2 有监督的数据增强
有监督数据增强,即采用预设的数据变换规则,在已有数据的基础上进行数据的扩增,包含单样本数据增强和多样本数据增强,其中单样本又包括几何操作类,颜色变换类。
2.1. 单样本数据增强
所谓单样本数据增强,即增强一个样本的时候,全部围绕着该样本本身进行操作,包括几何变换类,颜色变换类等。
(1) 几何变换类
几何变换类即对图像进行几何变换,包括翻转,旋转,裁剪,变形,缩放等各类操作,下面展示其中的若干个操作。
水平翻转和垂直翻转
随机旋转
随机裁剪
变形缩放
翻转操作和旋转操作,对于那些对方向不敏感的任务,比如图像分类,都是很常见的操作,在caffe等框架中翻转对应的就是mirror操作。
翻转和旋转不改变图像的大小,而裁剪会改变图像的大小。通常在训练的时候会采用随机裁剪的方法,在测试的时候选择裁剪中间部分或者不裁剪。值得注意的是,在一些竞赛中进行模型测试时,一般都是裁剪输入的多个版本然后将结果进行融合,对预测的改进效果非常明显。
以上操作都不会产生失真,而缩放变形则是失真的。
很多的时候,网络的训练输入大小是固定的,但是数据集中的图像却大小不一,此时就可以选择上面的裁剪成固定大小输入或者缩放到网络的输入大小的方案,后者就会产生失真,通常效果比前者差。
(2) 颜色变换类
上面的几何变换类操作,没有改变图像本身的内容,它可能是选择了图像的一部分或者对像素进行了重分布。如果要改变图像本身的内容,就属于颜色变换类的数据增强了,常见的包括噪声、模糊、颜色变换、擦除、填充等等。
基于噪声的数据增强就是在原来的图片的基础上,随机叠加一些噪声,最常见的做法就是高斯噪声。更复杂一点的就是在面积大小可选定、位置随机的矩形区域上丢弃像素产生黑色矩形块,从而产生一些彩色噪声,以Coarse Dropout方法为代表,甚至还可以对图片上随机选取一块区域并擦除图像信息。
添加Coarse Dropout噪声
颜色变换的另一个重要变换是颜色扰动,就是在某一个颜色空间通过增加或减少某些颜色分量,或者更改颜色通道的顺序。
颜色扰动
还有一些颜色变换,本文就不再详述。
几何变换类,颜色变换类的数据增强方法细致数来还有非常多,推荐给大家一个git项目:
https://github.com/aleju/imgaug
预览一下它能完成的数据增强操作。
2.2 多样本数据增强
不同于单样本数据增强,多样本数据增强方法利用多个样本来产生新的样本,下面介绍几种方法。
(1) SMOTE[1]
SMOTE即Synthetic Minority Over-sampling Technique方法,它是通过人工合成新样本来处理样本不平衡问题,从而提升分类器性能。
类不平衡现象是很常见的,它指的是数据集中各类别数量不近似相等。如果样本类别之间相差很大,会影响分类器的分类效果。假设小样本数据数量极少,如仅占总体的1%,则即使小样本被错误地全部识别为大样本,在经验风险最小化策略下的分类器识别准确率仍能达到99%,但由于没有学习到小样本的特征,实际分类效果就会很差。
SMOTE方法是基于插值的方法,它可以为小样本类合成新的样本,主要流程为:
第一步,定义好特征空间,将每个样本对应到特征空间中的某一点,根据样本不平衡比例确定好一个采样倍率N;
第二步,对每一个小样本类样本(x,y),按欧氏距离找出K个最近邻样本,从中随机选取一个样本点,假设选择的近邻点为(xn,yn)。在特征空间中样本点与最近邻样本点的连线段上随机选取一点作为新样本点,满足以下公式:
第三步,重复以上的步骤,直到大、小样本数量平衡。
该方法的示意图如下。
在python中,SMOTE算法已经封装到了imbalanced-learn库中,如下图为算法实现的数据增强的实例,左图为原始数据特征空间图,右图为SMOTE算法处理后的特征空间图。
(2) SamplePairing[2]
SamplePairing方法的原理非常简单,从训练集中随机抽取两张图片分别经过基础数据增强操作(如随机翻转等)处理后经像素以取平均值的形式叠加合成一个新的样本,标签为原样本标签中的一种。这两张图片甚至不限制为同一类别,这种方法对于医学图像比较有效。
经SamplePairing处理后可使训练集的规模从N扩增到N×N。实验结果表明,因SamplePairing数据增强操作可能引入不同标签的训练样本,导致在各数据集上使用SamplePairing训练的误差明显增加,而在验证集上误差则有较大幅度降低。
尽管SamplePairing思路简单,性能上提升效果可观,符合奥卡姆剃刀原理,但遗憾的是可解释性不强。
(3) mixup[3]
mixup是Facebook人工智能研究院和MIT在“Beyond Empirical Risk Minimization”中提出的基于邻域风险最小化原则的数据增强方法,它使用线性插值得到新样本数据。
令(xn,yn)是插值生成的新数据,(xi,yi)和(xj,yj)是训练集随机选取的两个数据,则数据生成方式如下
λ的取指范围介于0到1。提出mixup方法的作者们做了丰富的实验,实验结果表明可以改进深度学习模型在ImageNet数据集、CIFAR数据集、语音数据集和表格数据集中的泛化误差,降低模型对已损坏标签的记忆,增强模型对对抗样本的鲁棒性和训练生成对抗网络的稳定性。
SMOTE,SamplePairing,mixup三者思路上有相同之处,都是试图将离散样本点连续化来拟合真实样本分布,不过所增加的样本点在特征空间中仍位于已知小样本点所围成的区域内。如果能够在给定范围之外适当插值,也许能实现更好的数据增强效果。
3 无监督的数据增强
无监督的数据增强方法包括两类:
- (1) 通过模型学习数据的分布,随机生成与训练数据集分布一致的图片,代表方法GAN[4]。
- (2) 通过模型,学习出适合当前任务的数据增强方法,代表方法AutoAugment[5]。
3.1 GAN
关于GAN(generative adversarial networks),我们已经说的太多了。它包含两个网络,一个是生成网络,一个是对抗网络,基本原理如下:
- (1) G是一个生成图片的网络,它接收随机的噪声z,通过噪声生成图片,记做G(z) 。
- (2) D是一个判别网络,判别一张图片是不是“真实的”,即是真实的图片,还是由G生成的图片。
3.2 Autoaugmentation[5]
AutoAugment是Google提出的自动选择最优数据增强方案的研究,这是无监督数据增强的重要研究方向。它的基本思路是使用增强学习从数据本身寻找最佳图像变换策略,对于不同的任务学习不同的增强方法,流程如下:
- (1) 准备16个常用的数据增强操作。
- (2) 从16个中选择5个操作,随机产生使用该操作的概率和相应的幅度,将其称为一个sub-policy,一共产生5个sub-polices。
- (3) 对训练过程中每一个batch的图片,随机采用5个sub-polices操作中的一种。
- (4) 通过模型在验证集上的泛化能力来反馈,使用的优化方法是增强学习方法。
- (5) 经过80~100个epoch后网络开始学习到有效的sub-policies。
- (6) 之后串接这5个sub-policies,然后再进行最后的训练。
总的来说,就是学习已有数据增强的组合策略,对于门牌数字识别等任务,研究表明剪切和平移等几何变换能够获得最佳效果。
而对于ImageNet中的图像分类任务,AutoAugment学习到了不使用剪切,也不完全反转颜色,因为这些变换会导致图像失真。AutoAugment学习到的是侧重于微调颜色和色相分布。
除此之外还有一些数据增强方法。
4 思考
数据增强的本质是为了增强模型的泛化能力,那它与其他的一些方法比如dropout,权重衰减有什么区别?
- (1) 权重衰减,dropout,stochastic depth等方法,是专门设计来限制模型的有效容量的,用于减少过拟合,这一类是显式的正则化方法。研究表明这一类方法可以提高泛化能力,但并非必要,且能力有限,而且参数高度依赖于网络结构等因素。
- (2) 数据增强则没有降低网络的容量,也不增加计算复杂度和调参工程量,是隐式的规整化方法。实际应用中更有意义,所以我们常说,数据至上。
[1] Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of Artificial Intelligence Research, 2002, 16(1):321-357.
[2] Inoue H. Data Augmentation by Pairing Samples for Images Classification[J]. 2018.
[3] Zhang H, Cisse M, Dauphin Y N, et al. mixup: Beyond Empirical Risk Minimization[J]. 2017.
[4] Goodfellow I J, Pouget-Abadie J, Mirza M, et al. Generative Adversarial Networks[J]. Advances in Neural Information Processing Systems, 2014, 3:2672-2680.
[5] Cubuk E D, Zoph B, Mane D, et al. AutoAugment: Learning Augmentation Policies from Data.[J]. arXiv: Computer Vision and Pattern Recognition, 2018.
5 总结
我们总是在使用有限的数据来进行模型的训练,因此数据增强操作是不可缺少的一环。从研究人员手工定义数据增强操作,到基于无监督的方法生成数据和学习增强操作的组合,这仍然是一个开放的研究领域,感兴趣的同学可以自行了解更多。