黄伟林作者

揭秘CVPR2017 WebVision图片分类竞赛冠军背后的技术

编者按:随着终端摄像设备的普及,互联网上存在着海量的数据资源。然而,由于这些数据存在无标注、有噪标注等问题,并不能够直接应用于机器学习任务。在如今“数据为王”的时代,如果能够利用小样本精确标注数据来训练模型,并进一步泛化到大样本有噪标注、乃至无标注数据中,将为基于图像的机器学习任务带来巨大进步。本文中, CVPR2017 WebVision图片分类竞赛冠军黄伟林博士,将为大家介绍,如何利用海量无精确人工标注的网络图片,训练高性能神经网络模型。文末,大讲堂特别提供文中提到所有文章的下载链接。

本文整理自Valse Webinar 2017-11-29期报告。


我所在的码隆科技团队在CVPR 2017 WebVision图片分类竞赛中取得了冠军,这里主要就比赛经验和大家分享一下。

训练一个神经网络通常需要数据 (ImageNet, Webvision)、网络 (AlexNet, GoogleNet, VggNet和ResNet等)、损失函数三个必要成分。这三个方面在训练过程中扮演什么样的角色呢?首先,数据是学习的资源;其次,网络结构主要解决“how to do”的问题,指导网络如何完成一项任务,它提供从输入图像到特征空间的一个映射;然后,损失函数主要解决“what to do”的问题,指导网络做什么事情,比如分类,检测和分割等任务。 最终模型性能高低体现在哪一部分呢? 卷积神经网络其实是一个特征提取过程,只要特征这块提取的好,剩下的任务就相对简单了。而决定特征的好坏,就是中间这个how to do这块,也就是训练CNN得到的参数和最终模型。这里就像人的大脑,是由大量的神经元组成的。我们训练一个神经网络,就好比一个人,或者一个婴儿的学习过程。决定它性能的好坏有三个因素:数据,网络结构,loss方程。除了这三个,还有一个非常重要却经常被人们忽略的因素——学习策略,最近几年在机器学习圈子里它的关注度逐渐升温。所谓学习策略,是指采用一定的学习计策让模型学习得更加高效。比如教一个小孩学习,为了使他学得更高效,就不可能让一个小学生去学习大学课程,而是采用循序渐进的由易及难策略。在这里主要跟大家分享我们在学习策略方面的改进。

此外值得一提的是,在刚才所提的三方面中,我个人认为数据是最重要的,深度学习由数据驱动。在现实应用特别是公司项目中,如果能够较好地定义、收集及标注数据,那么项目就成功了70%。但是在学术圈,大家通常在标准的数据集(benchmark)上进行工作,所以网络结构(方法、模型)更受关注,这大概是学术圈过去五六年一直在做的一个主要东西。从2012年的ImageNet到今年的SENet,网络性能在不断提高,甚至今年ImageNet上top-5 error已经到了2.2%,所以经过多年的发展新模型结果的改进已趋向饱和。

最近两年学术圈的关注点集中在如何设计损失函数,有两个方面的工作。其一,随着数据及任务复杂度的提升,大家设计更加复杂的损失函数来解决更加复杂的问题,比如最近Mask R-CNN是在物体检测的框架上,进一步解决更加复杂的instance-level segmentation问题;其二,通过优化或者额外设计损失函数来提高模型的综合性能,可以添加额外的监督信息或者其他信息来训练模型,比如最近基于attention机制的模型通过额外的损失函数来提高模型的性能。

下面说说WebVision这个比赛。 我们参加CVPR 2017 WebVision竞赛的出发点是什么?首先,ImageNet比赛的性能已经趋向饱和,图片分类top-5错误率从2009年的30%降到了2017年的2.2%,我们想尝试一下更具有挑战性的任务,在没有人工标注的情况下训练高效的卷积神经网络,这属于弱监督学习的一个问题。此外,我们想尝试在现实世界中训练大规模的数据,并探索数据、模型结构、损失函数以及训练策略在训练模型过程中起的作用。最后,WebVision的数据场景跟目前多数AI公司用的数据非常相似。利用网络图片训练网络符合当前工业界的主流和趋势。以上是我们参加比赛的主要出发点。

Webvision比赛主要是由ETH(苏黎世联邦理工)、谷歌和CMU共同举办的,如图是举办者的一些信息。

WebVision数据集主要有Google和Flickr两个数据源。 主要是利用ImageNet 1000个类的文本信息从网站上爬数据,所以它的数据类别与ImageNet完全一样,为1000类别,由240万幅图片构成训练数据,比ImageNet的两倍还多,分别由5万张图片构成验证集和测试集(均带有人工标注)。

WebVision数据集主要有两个挑战。

第一个挑战,数据分布非常不平衡。如图横坐标代表1000个类别,纵坐标代表每个类别的图片数量。如图浅蓝色的平稳曲线是ImageNet的数据分布,每一个类别大概有1200张图片。而深蓝色曲线为WebVision数据分布,可以看出有的类别高达11000张而最少的小于400张图片,这种极度不平衡的分布对训练模型影响非常大。

第二个挑战,数据集含有大量错误标签。如图所示,每一行代表一个类别,从图中可以看出数据集中含有大量与类别不相关的图片,也就是所谓的噪声,这也是最主要的一个难点。

处理含有大量错误标签的算法通常有两种。第一种方法直接从有噪数据中学习,这里有两种思想,其一是设计一些对噪声鲁棒的算法,其二是让模型自动检测出干净样本和有噪样本,然后直接丢弃或者修正错误标签,再进行模型训练。这类方法有一个缺点,即很难从难训练样本 (hard training samples)中准确识别出错误标签的样本, 而这些hard samples 通常对提升模型的性能是非常重要的。 第二种方法主要采用半监督学习,只提供一小部分人工标注样本,将有标注的小样本上训练的模型泛化到无标注的样本上,这类方法的缺点是需要一小部分人工标注的样本才能完成, 并且泛化能力和模型性能是主要问题。 近来,深度学习方法在这两方面都有一些相关的工作。

那么,如何在使用标准神经网络的情况下提高模型的性能呢?我们引入了新的训练策略——课程学习(curriculum learning)。

我们可能是第一次将“课程学习”应用到大规模非人工标注的数据上,以解决大量错误标签的问题。课程学习(curriculum learning)是Bengio于2009年提出来的,从论文引用量来看,这个方法最初几年并没有得到特别广泛的应用。但是,随着数据量、学习任务及复杂度的增大,最近两年课程学习的热度不断升温。如何提高模型的泛化能力和综合性能变得愈加重要,特别是在现实应用中,Deepmind,OPEN AI最近一年也有关于课程学习的文章陆续发表。例如:

  • Alex Graves · Marc Bellemare · Jacob Menick · Remi Munos · Koray Kavukcuoglu: Automated Curriculum Learning for Neural Networks, ICML, 2018.                                                                                         

  • Tambet Matiisen, Avital Oliver, Taco Cohen, John Schulman: Teacher-Student Curriculum Learning, arXiv:1707.00183, 2017.   

课程学习的基本思想是,将一个复杂的任务分成一系列子任务,把任务按简单到难的程度进行排序,在学习过程中让模型由易到难地学习。在大规模数据里,我们可以把整个数据集分成一系列子集, 将子集按简单干净数据到复杂有噪数据进行排序,然后在模型训练过程中,让网络从简单干净的数据集开始学习,通过增加数据集的难度逐渐提高模型的能力。这个机理和人的学习机理是非常相似的,人类接受的教育也是经过由易到难高度组织编排的。

这里是课程学习标准的流程。首先将学习任务分成一系列子任务,然后根据难度对子任务进行排序,再设置一个任务转换的阈值(从一个任务跳转到另一个任务的条件)。从机器学习的角度来看,课程学习就是在各个子任务之间寻找一个最优路径使得整个模型能够收敛得更快且具备更好的泛化能力。它的整体思路非常简单:学习完一个简单任务之后再开始学习一个更难的任务。

如图是理想状态下课程学习的过程。对于三个任务task1,task2,task3,左图中横坐标表示任务学习的进程,纵坐标表示任务完成程度。整个学习过程是先学习task1,然后task2,最后task3。如何进行学习进程的切换以及学习时间段和学习任务是如何对应的呢?如右图所示,每一个学习阶段每一个任务都有其对应的概率分布, 根据这个概率分布来决定左图的tasks顺序。

接下来介绍我们在WebVision比赛中所用的框架。我们将课程学习方法用到WebVision大规模非人工标注的数据上,这个框架主要由三个部分构成。

第一个部分是对所有图片进行特征提取,先用所有数据训练一个基础的卷积神经网络, 来进行图片特征提取。第二部分是课程设计,通过第一部分提取的特征进行课程设计,利用图片特征定义该图片的难易程度,用它来设计课程。第三部分利用设计好的课程进行课程学习,来逐渐优化和迭代模型。

这里面两个主要部分是课程设计和课程学习。课程设计是最重要的,它的好坏直接决定模型的性能。难点在于没有先验知识的情况下如何定义数据集或者图片的难易程度呢?

我们在这里提出了一个无监督方法来设计课程方法,在特征空间里根据这些样本的密集度来定义数据复杂度。我们的猜想是这样的: 样本越密集,表示图片特征越相似,我们假设这些数据集较干净(简单);样本越稀疏,表示图片越多样化,就认为这个数据集较复杂(难)。我们的目标是在整个训练集中, 需要不同空间密度的数据子集。 根据此思路来设计课程。

如上图是课程设计的具体步骤:首先将整个训练集分为一系列子集,然后根据难易程度对子集进行排序,这里我们采用density-distance的聚类方法在每个类别数据中进行子集分类,这个聚类方法最早在2014年的Nature上发表。具体做法分为三步:

第一步,通过卷积神经网络对每一个样本提取特征,在特征空间里计算每一类别所有样本的欧氏距离,构成一个距离矩阵;

第二步,计算每一个样本的密度值,通过设置距离参数d,当距离小于这个参数时,将距离加1,否则认为距离为0,通过上图第二步公式计算样本密度值;

第三步,对每一个样本计算密度距离值,对第二步得到的样本密度进行从高到低排序,然后在密度最大的点处计算离它最远的点的距离,把该点当成该点的密度距离值。 如果该点密度不是最大值,计算密度比它大的所有点中,与它最近的点的距离,当成该点的密度距离值。最后, 我们每一个样本都可以得到一个密度值和密度距离值, 根据这两个值来定义聚类中心点。

如图,横坐标表示密度值,纵坐标表示密度距离值,聚类中心的值通过对应横纵坐标值相乘而得到。简单地把两个值相乘,进行从大到小排序,值越大,说明它为聚类中心的可能性越大,聚类中心点如图右上角三角所示,通过计算横纵坐标乘积值与聚类中心的距离对样本进行聚类。如图可以聚出三类,我们定义了每个聚类子集样本数量的比例为:第一个60%,第二个类20%,第三个类20%。

根据上述方法,我们在Webvision里随机选取图片对“猫”这个类别做了聚类,可以看出图片集的干净程度由subset1, subset2到subset3依次递减。

这也是根据我们的方法对Webvision数据集中另外两类的结果。可以看出,我们的课程设计算法能够有效地把训练样本分成不同难易程度,从而让这些样本按照设定的顺序来逐步训练CNN。 课程学习的思路比较简单,但是课程设计的方法却是多样的。需要指出的是,最近斯坦福大学的李飞飞教授和她在谷歌的团队也同样利用了课程学习这个思路来解决错误标签问题,她们设计了一个MentorNet来评估每个样本的难易程度。详细内容见Arxiv上2017年12月14日的文章:Lu Jiang, Zhengyuan Zhou, Thomas Leung, Li-Jia Li, Li Fei-Fei: MentorNet: Regularizing Very Deep Neural Networks on Corrupted Labels, arXiv:1712.05055, 2017.  

接下来介绍课程学习的基本流程。根据上述课程设计的方法,我们将每个类别中的数据分成了三个子集,然后将整个数据集中所有类别数据的第一子集合成一个数据集,作为整个数据集的subset1(第一子集)。对二、三子集进行同样的操作。这就构成了整个数据集的subset1(比较干净的数据),subset2(含有部分噪声的数据),subset3(噪声较大的数据)。我们采用逐步迭代的思想对这三个子集依此进行模型训练:首先在第一个子集上训练一个模型,然后将前两个子集合起来作为训练集, 并在第一个模型的基础上再训练, 最后将三个子集结合在一起, 并在第二个模型的基础上再训练。我们在训练过程中给三个子集的样本设置不同的权重(1,0.5,0.5),更多依赖于置信度高的子集以提高模型的准确率

我们用了四个模型来做对比试验。模型A是由subset1(较干净子集)训练得到的,模型B是由所有数据直接训练得到的,模型C和D都采用课程学习的策略训练得到,不同之处在于模型C是将训练数据分为两个子集而得到的,模型D是将训练数据分为三个子集而训练得到的。

由于WebVision数据集是极度不平衡的,我们做了选择性的数据平衡。在课程子集个数为3,mini-batch为256的情况下,我们做了两个层面的数据平衡。第一,在子集之间做数据平衡,每个mini-batch里面,将第一子集图片个数定义为128,其他两个分别为64,在训练过程中它们的比重是相同的;第二,在干净子集上做类别之间的平衡,比如在子集一上随机选取128个类别,每一个类别只随机选取一个样本。实验表明,类别平衡只适用于干净子集,而对于含噪子集其效果反而下降。

为了加强底层特征,我们在底层使用了大小分别为5,7,9三种大小的卷积核,然后将分别得到的特征图连接作为底层的特征图。实验表明该方法对模型整体性能有0.5%的提升。

我们对比了四个模型的test loss的曲线,同时对比了k-means聚类方法来做课程设计的效果,虚线部分为k-means的。从图中可以看出,聚类方法对课程学习有很强的影响,课程设计有效提高了整个模型性能。

如表1是对四个模型错误率的对比,可以看出使用课程学习的模型C,D相对于未使用课程学习的模型A,B性能有明显提升。

如表2,加入第三子集(含大量噪声数据)会对模型性能有所提升,实验表明当采用第三子集50%的数据量时,模型能力最优。我们发现在不使用subset3 情况下,模型性能反而不如加入这些含有大量噪声的数据。这说明,在使用了我们课程学习的算法后,即使是噪声数据,也对模型的综合能力有一定的正面作用。这些噪声数据更像是对模型提供了一个regularizer的作用,提高模型泛化能力。

之前的实验都是在Inception_v2上做的,我们也利用了其他网络进行对比,结果如表3所示。Inception_v3之后的模型性能提升很明显。

如图,我们对比了使用全部数据集而未使用课程学习的模型B与使用课程学习策略得到的模型D对每个类别数据的识别准确率。挑选了提高最多的15个类别。横坐标为类别,纵坐标为准确率。使用课程学习策略后,1000个类别中,有668类性能提升,195类性能下降,137类基本没有变化。

这是加入课程学习后性能降得最多的15个类。可以看出其实性能下降得并不是很多。

这是我们提交的最终结果,最终合成了大概6个模型。最高准确率为94.78%,错误率为5.2%,这非常接近ImageNet上人类的performance。

总结一下,WebVision比赛旨在利用大规模网络图片训练高性能的卷积神经网络,使其能够抑制标注不一致和数据不平衡问题,并探讨提高模型泛化能力的方法,使得能够在现实场景中利用从网络上爬的数据。我们的研究团队今后还会继续开发弱监督或者半监督方法在这些方面的算法和应用。

我们团队一共有9个人。该工作主要由我们的研究员郭胜博士完成。

过去两年中,我们团队在大规模比赛中取得了优异的成绩:

ICCV 2015: ILSVRC2015(ImageNet):场景分类,第二名;

CVPR 2015:大规模场景理解竞赛(LSUN):场景分类,第二名;

CVPR 2015:ChaLearn Looking at People Chanllenge 2015:文化活动识别,第三名;

CVPR 2016:大规模场景理解竞赛(LSUN):场景分类,第一名;

ECCV 2016:ILSVRC2016(ImageNet):场景分类,第四名;

CVPR 2017: Webvision图像分类竞赛,第一名。

简单介绍一下码隆科技,公司旨在利用深度学习计算机视觉技术做通用商品识别,比如进行10万类的商品识别。我们的主要产品是ProductAI。利用商品识别的优势,我们也在大力拓展最近很火的新零售行业,比如无人售货店,无人超市。 另外,我们也在做工业检测及分子级别的检测,深挖垂直行业的AI应用场景,为行业提供“新”的生产力。

谢谢大家,我们长期招收Research Intern,Research Engineer 和 Research Scientist。 我们会提供非常有竞争力的Package。诚挚欢迎有志之士的加入!


文中黄老师提到的文章下载链接为: 

https://pan.baidu.com/s/1miGcSly

深度学习大讲堂
深度学习大讲堂

高质量原创内容平台,邀请学术界、工业界一线专家撰稿,致力于推送人工智能与深度学习最新技术、产品和活动信息。

入门图像分类CVPR2017
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

半监督学习技术

半监督学习属于无监督学习(没有任何标记的训练数据)和监督学习(完全标记的训练数据)之间。许多机器学习研究人员发现,将未标记数据与少量标记数据结合使用可以显着提高学习准确性。对于学习问题的标记数据的获取通常需要熟练的人类代理(例如转录音频片段)或物理实验(例如,确定蛋白质的3D结构或确定在特定位置处是否存在油)。因此与标签处理相关的成本可能使得完全标注的训练集不可行,而获取未标记的数据相对便宜。在这种情况下,半监督学习可能具有很大的实用价值。半监督学习对机器学习也是理论上的兴趣,也是人类学习的典范。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

先验知识技术

先验(apriori ;也译作 先天)在拉丁文中指“来自先前的东西”,或稍稍引申指“在经验之前”。近代西方传统中,认为先验指无需经验或先于经验获得的知识。先验知识不依赖于经验,比如,数学式子2+2=4;恒真命题“所有的单身汉一定没有结婚”;以及来自纯粹理性的推断“本体论证明”

Alex网络技术

AlexNet是一个卷积神经网络的名字,最初是与CUDA一起使用GPU支持运行的,AlexNet是2012年ImageNet竞赛冠军获得者Alex Krizhevsky设计的。该网络达错误率大大减小了15.3%,比亚军高出10.8个百分点。AlexNet是由SuperVision组设计的,由Alex Krizhevsky, Geoffrey Hinton和Ilya Sutskever组成。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

掩饰的基于区域的卷积神经网络技术

Mask R-CNN是一个概念上简单,灵活和通用的对象实例分割框架。 该方法能够高效地检测图像中的对象,同时为每个实例生成高质量的分割蒙版。 这种方法通过添加一个用于预测对象蒙版的分支来扩展R-CNN使之更快,该分支与现有的用于边界框识别的分支并行。

暂无评论
暂无评论~