应用深度学习

2017-05-01 12:13:36 aliceyangxi1987 阅读数 21549

参考资料

最喜欢圆,尤其如此灵动

今天简单说一下 Deep Leaning 在各领域应用的几个例子,可以轻松地看一下它是怎么用在 Computer Vision,Speech Recognition, Text Processing, Medical, Finance, Advertising 等领域的。

Computer Vision

Image Classification 图片识别

例如下面这个网站:

https://www.clarifai.com/

可以自己上传图片,它就可以返回识别出来的关键词和相关图片。

下面这个图,除了识别出 table 物体,还可以识别出 elegant ,no person 这样的氛围相关的标签。

游乐园这张图,还可以识别出 fun 。还是蛮好玩的。

这样的话,你在网页输入 fun 就会返回相关的图片啦,而更多的图片是可以自动学习出来的了。当然还有更高级的应用,例如最近火热的话题唇语识别。

Speech Recognition:

Text Processing:

Fact Extraction

给一段文字,提取出里面的 fact。

Machine Translation

每天都在用的谷歌翻译。

Sentiment Analysis

情感识别,判断一段话是积极的还是消极的态度。

MetaMind 有个分析twitter情感的应用,输入 word,会显示出 positive,neutral,negative 的twitter和所占比例。

https://www.metamind.io/language/twitter

例如,输入 coffee,可以看到可视化的结果。

Medical

在医疗领域,可以用于识别癌细胞,发现新药物等。

CNN 还可以用来识别异常的肿瘤或者癌细胞。

Finance

金融领域可以用来预测股价,还可以用来识别欺诈。

Advertising

精准营销,为用户推荐感兴趣的产品广告。

农业上,还可以用来识别哪些地方的环境适合种植。

有了 Deep Learning ,很多事情可以变的更加自动化,省下来的时间打算干什么呢?大家看到感兴趣的领域,可以多多开脑洞,来让生活更智能吧。


历史技术博文链接汇总

2017-06-19 16:38:37 byplane 阅读数 12705

原文链接:http://geek.csdn.net/news/detail/202622


这篇文章对深度学习在工程级别应用上遇到的问题进行了很好地总结,并且提出一些有建设性的解决方案,很有实际意义。


当我们需要用深度学习处理现实问题时,除了相关的技术和数据,你还需要掌握一系列的小诀窍,并将这些技巧用在级联模型、智能增强、合理的评价标准、建立可重用的训练管道、有效推断与减小模型大小等等方面。

本文由深度学习的实践者,位于柏林的创业公司Merantix所著,五个案例,三大心得,带你在深度学习的应用之路上快速打怪升级。

作者 | Rasmus Rothe 
编译 | AI100(rgznai100)

近年来,人工智能正迅速崛起,这主要归功于深度学习的成功。

深度神经网络的突破来自三大因素的驱动:海量的训练数据、性能强劲的计算架构,以及学术研究上的相关进展。

正是因为这三大因素,深度学习系统在图像分类、面部识别等任务上,不仅表现开始优于各类经典方法,而且超过人类的水平。这一切,为那些用深度学习来解决实际问题的颠覆性新业务创造了无限可能。

位于柏林的Merantix,致力于研究这样的新型商业案例,目前这些案例是来自汽车、医疗、金融业和广告等行业。 
图片描述

学术世界往往不同于现实

如今,神经网络的训练正变得前所未有地容易。但这并不是说,把指导教程的代码拿出来就能直接服务于应用。值得注意的是,许多最为重要的使用诀窍极少在学术文献中被讨论,但它们对产品的成功至关重要。

图片描述

把深度学习用到实际问题中时会遇到很多麻烦(via:pinsdaddy.com)

因此,我认为领会这方面的技巧和诀窍,对于那些打算在实际业务中应用深度学习以的人会有所帮助。

在本文中,我想分享的是三个比较关键的心得,它们在我们Merantix用深度学习解决实际问题的过程中起到了很大的作用:

  • 心得 I:预训练的重要价值
  • 心得 II:实际标注分配的注意事项
  • 心得 III:理解黑箱模型

一点声明:

  • 本文中的方法并不代表全部,还有很多其他的重要诀窍。
  • 一般来说,这里的心得不仅适用于深度学习,而且适用于其他的机器学习算法。
  • 所有这些心得都不特别针对对某一行业。
  • 本文所涉及的问题大多都适用于监督式学习。

本文基于我5月10日在柏林人工智能大会Berlin.AI上的演讲修改而成。

演讲PPT- https://www.slideshare.net/RasmusRothe/3-learnings-from-applying-deep-learning-to-real-world-problems

心得 I:预训练的重要价值

在机器学习学术领域,人们并不关注数据集的获取。恰恰相反,为了比较深度学习与其他方法,并确保其中之一能够优于别的方法,标准做法是在某一标准数据集上,用相同的评价程序来衡量不同算法的性能。

然而,在真实情境中,重要的不在于证明新算法在性能上超过老算法1%,而在于构建出能准确解决目标任务的高性能系统。对所有机器学习系统来说,这一点就需要算法能够从中进行有效学习的标记训练。

不幸的是,就许多实际问题而言,获取到标注完备的训练数据成本十分高昂。为详尽说明这里的问题,我们来看两个案例:

案例一、医学影像检测:

如果要打造一个能在CT图像中检测人体淋巴结的系统,我们就需要有那些已经标注淋巴结的CT图像来进行训练。

而这是一项相当耗时的任务,因为CT图像是3D的,而需要从中标记出来的淋巴结结构又非常之小。

假定一位放射科医生的时薪是100美元,他每小时能认真标注好4张图,这就意味着标注一张图的成本是25美元,或说标注10000张图的成本是25万美元。

考虑到接近百分之百的更高诊断准确度,是需要有更多的医生来标注相同的图像才能确保的,针对该特定医学任务的训练数据获取成本,很容易就能超过25万美元。

案例二、信用评分:

如果要打造一个能对信用行为进行评分的系统,我们就需要知道哪些客户更有可能违约,这样我们才能对机器学习系统进行训练,以提前识别出这样的客户。问题在于,只有当违约发生时我们才能确定客户是不是真的违约。一个朴素的策略是给每个人发放贷款,比如说1万美元。但这意味着,每有一个人违约,我们都将损失1万美元。这就使得每个标注数据点的获取成本都非常昂贵。

显然,我们可以用一些窍门来降低这里的成本,但是总体来看,针对现实问题的注记数据获取成本都很昂贵。

我们该如何来解决这一问题呢?

预训练

图片描述

预训练帮助(via:massivejoes.com)

预训练的基本原理,是先用某相关领域的廉价大数据集或相同领域的噪声数据(noisy data)训练神经网络(或其他机器学习算法)。尽管这种方法不能直接解决原始问题,但它能使神经网络对于要预测的问题形成一个模糊的印象。第二步,针对要解决的问题获取一个更小、更昂贵的数据集,并利用它来进一步优化神经网络的参数。

其流程如下图所示:

图片描述

当数据集很难获取时:先在某相关领域的廉价大数据集上对神经网络进行预训练;而后,在标注准确的高价值数据集上对神经网络进行优化调整。同小数据集训练相比,该方法能使算法的性能得到很大的提升。

在优化调整时,类别数可能会发生改变:人们通常在类别数为1000的数据集(如ImageNet)上预训练神经网络,然后根据所要解决的特定问题来对神经网络进行优化调整,这些问题的类别数可能不同。

这就意味着必须重新初始化最后一层网络。最后一层网络的学习速率通常会设置得高一点,因为它需要从零开始学习,而前面几层的学习速率设置则较低。对于像ImageNet这样的数据集来说,(最后全连接层的)特征学习非常通用,可直接用来处理其他计算机视觉问题。

如何来获取预训练所需的数据?

预训练数据源

1、预训练模型:网上有很多经过训练的模型。首先要推荐的就是Model Zoos。

Model Zoos网站上发布有一系列不同的已训练模型,它们都已经过专家学者、公司机构与深度学习爱好者的训练。

可查看 
https://github.com/BVLC/caffe/wiki/Model-Zoo 
https://github.com/fchollet/deep-learning-models 
http://mxnet.io/model_zoo/

2、公共数据集:网上还有很多数据集。所以在自己动手采集数据前,要先检查网上是否已存在能够解决你手上问题的那些数据集。

可查看: 
http://www.cvpapers.com/datasets.html 
https://github.com/caesar0301/awesome-public-datasets 
https://archive.ics.uci.edu/ml/datasets.html

3、数据抓取:如果找不到公开的预训练模型或数据集,你可以用一种懒办法来生成数据集,无需你手动标记:做一个能自动从特定网站抓取标注数据的爬虫。这样你就能自动生成一个新的数据集。

图片描述
预训练数据源

弱标注数据(Weakly labeled data)

我们是在标注准确的数据上优化调整神经网络,因而在所谓的弱标注数据上进行预训练是可行的。

弱标记数据是指标注不完全准确的数据(比如,90%的标注是正确的,剩下的10%是错误的)。这种数据的优势是可以自动获取,无需人类手动进行标注。这与那些由人类手动标注每张图像的数据相比,在成本上较为低廉。

举例来说:读博期间,我从维基百科和IMDB抓取了500张面部图像。结合个人档案的出生日期与照片标题所暗示的拍摄日期,我们就能为每张图像估算一个大致的年龄。注意,某些情况下,图像标题中的年份可能是错误的;或是照片显示有多人,但面部检测器所选择的人脸却是另一个人的。这样一来,我们就不能确保年龄标注在所有情况下都正确。但结果说明,相比只在准确标注的小型数据集上训练,在弱标注的大型数据集上进行预训练更有助于提升算法的性能。

同样的逻辑可以用在医学影像检测的问题上,该问题要求,多位医生必须独立标注相同的图像,以确保百分之百的准确率。这样的数据集可用作优化调整。此外,采用仅由一人来做的弱标注,我们就能采集到一个更大的数据集。由此,我们不仅降低了标注的总成本,同时还仍能确保神经网络训练图像的多样性。

总之,提升性能并不总是意味着你要进行非常昂贵的手工标注,你还是能以免费或极低的成本来获取到一个标注数据集。

心得 II:实际标注分配的注意事项

图片描述
实际分配(via:r4risk.com.au)

获得预训练和优化调整所需的数据后,我们就能进行下一步了——开始训练神经网络。这一环节上,学术研究与现实世界之间又大不相同。

在学术研究中,数据集通常是平衡的。这就意味着,对于监督分类问题,每个类别的样本数大抵相同。

下面是两个实例:

MNIST 是一个非常有名的手写数字数据集,其中每个数字的样本数大致相等。

Food 101是学术数据集的另一典型,其中每种食物类别(共101个)都准确包含1000张图像。 
图片描述
图片描述
MNIST和Food101都是平衡的数据集

不平衡的标注分配

我再一次用这两个现实案例来说明问题:

医学影像检测:医学影像训练的数据非常不平衡。大部分人都是健康的,只有一小部分的人患有某种疾病。

信用评分:事实上,大部分客户都会偿还贷款,只有1–2%的客户会违约。

图片描述
图片描述
不平衡的实际标注分配

如上图所示,这两个实例中的标注分配很不平衡。这在绝大部分现实应用中都很典型。事实上,每个类别都是相同数量的样本才很罕见。

误分类的不均衡成本

不幸的是,这种情况会变得更糟:在学术数据集中,各类别的误分类成本通常相同。但在现实应用中,情况却大为不同:

医学影像检测:把健康的人误诊为病人还不是最糟的情况,只要医生能对诊断结果进行复查,并把健康的这个人找出来就可以了。但反过来,未能诊断出真正的病人而不提供给他任何治疗,则就非常危险了。

信用评分:拒绝向有能力偿还的客户发放贷款,意味着你只是损失一点利息。但如果向违约的客户发放贷款,你就要对全部的贷款损失负责了。

我们用下面的图表来说明问题: 
图片描述

现实应用中误分类的不均衡成本

如何解决这一问题?

意识到通常情况的类别与误分类成本的不均衡后,我们就必须想办法来解决问题。研究过这一课题的学术文献相当有限,但某些博客与Stack Overflow的社区问答往往能给我们一些启发。

注意,类别与误分类成本的不均衡是两个高度相关的问题,这就意味着,一部分样本几乎没有训练数据,从而使出错的几率更高、成本更昂贵。

我把有助于改进我们模型的稀有样本分类能力的方法分为四类:

1.更多数据:针对稀有类别,显而易见的办法是收集更多数据。

对于医学影像检测案例,这就意味着要着重于收集患有某种目标疾病的病人的图像。

如果这种方法因成本过高而无法实现,我们还可以借助其他办法来获取训练数据,如前所述。注意,调整训练标注的分配必须要小心,因为这将影响模型预测推断结果的方式:如果增加训练数据集的病人数量,模型预测患病的频率也会更高。

收集稀有类别的更多数据。当训练期间的标注分配与推断结果不匹配时要当心。

2.更改标注

如果无法获得稀有类别的更多数据,另一种方法是重新考虑分类方法。在实际应用中,可能并不需要区分疾病A与疾病B,只要能识别出是这两者一就够了。这样的话,你就可以合并这两个类别。这在训练期间能够简化程序,即便搞混疾病A和疾病B,也不会惩罚推断结果。 
图片描述
在训练获评价期间合并两个或更多类别能够简化问题

3.采样

如果既无法获得更多数据也不能更改标注,那你就必须从原始数据下手了。如何能使该模型特别善于处理稀有类别?你只需要改变算法在训练过程中观察样本的方式。通常,样本的采样十分均匀。这就意味着训练过程中算法对每个样本的观察频率是相同的。

以下是几种不同的采样方法,可有助于改进模型对某些稀有类别的标注能力。

  • 忽略

忽略常见类别的部分样本可能是最简单的方法。当每个类别的样本数大体相近时,可使用这种方法。 
图片描述

  • 过度采样或欠采样

过度采样是指算法学习稀有类别样本的频率较高,而欠采样则是相反的情况。从算法角度看,这两种方法产生的都是相同的结果。相比前一种方法,这种方法的优势是不忽略任何样本。

图片描述

  • 消极采样

第三种采样方法有些复杂,但也最为有效。既不过度采样也非欠采样,我们有目的地选择样本。虽说常见类别的样本数更多,但我们最关心的还是最困难的那些样本,比如最有可能被错误分类的样本。这样,我们就可以在训练期间定期评价模型并研究样本,以识别出那些最有可能被错误分类的样本。这让我们可以明智地选出算法更常学习的样本。

图片描述

4.给损失加权

通过应用这部分所阐述的1–3类方法,我们从数据角度考虑了能够改善类别分配的所有可能。因而,我们现在就可以把注意力转移到算法本身。幸运的是,通过一些方法,我们可以在训练期间让算法的注意力更多关注那些稀有的类别。一个非常直接的办法,是增加稀有类别样本的损失权重。

图片描述
稀有类别的损失权重更大

心得 III:理解黑箱模型

图片描述
黑箱模型(来源:《辛普森一家》)

正如前文对预训练的描述,学术研究最重要的目的是达到或超越当前最先进的性能,无论采用哪种模型。但处理现实问题时,仅仅去设计性能最好的模型往往是不够的。

相反,更重要的是,能做到以下几点:

  • 能够理解模型为什么以及如何会作出错误的预测;
  • 能直观解释为什么当前模型的性能会比先前的更好;
  • 确保模型不被欺骗。

在深度神经网络出现前,大多数模型解释起来都较为容易。举例来说:

  • 线性模型:线性模型或回归模型可以给出各特征和预测之间的直接关系,这使该模型的决策机制解释起来较为直白。
  • 决策树:决策树的魅力在于,只要顺着逻辑树就能理解决策的形成过程。通常,根节点代表最为重要的特征。虽说随机决策树解释起来更为困难,但树形结构总体还是相对易懂的。

不幸的是,深度神经网络的决策机制就很难理解了。它们是高度非线性的,参数的数量轻轻松松就能上亿。让人很难用简单的方式能解释清深度神经网络的决策细节。

图片描述
对比图:经典机器学习 vs. 深度学习

随着深度学习迅速进入我们生活的方方面面——自动驾驶、医学诊断、制定金融决策等,如何解释这个黑箱就成为实际应用中一个很重要的挑战。大部分应用的直接成果能显著影响我们生命、财产与敏感信息。因此,算法的错误决策往往会伤财害命。 
AI100

AI100
特斯拉汽车交通事故与一篇关于AI种族歧视的文章

不幸的是,这些失败可能并不仅仅是因为意外事故,还能由袭击者引发。为证实其中的相关性,研究者发现,只需在普通图像中添加简单的随机噪点,就能改变深度神经网络的分类结果,但人眼却并未看出图像的变化。同样,使用完全由人工生成的图像,深度神经网络仍能给出非常自信的预测结果。

图片描述

在图像中加入少许随机噪点(左)或使用完全由人工生成的图像(右)都可以轻松骗过神经网络。

通常在现实中,你就想去弄清楚,为什么系统会无法作出它本应该作出的行为。

在Merantix,我们在非常严肃地对待这些问题,并相信它们在未来会变得更加重要,因为越来越多的深度神经网络肯定会被用在至关重要的实际应用上。

最近,我们开源了一个名为Picasso深度学习可视化工具。由于经常要跟各种神经网络架构打交道,我们开发Picasso的目的,就是为了让人能够更容易看到我们所有模型的视觉效果,因为这些模型早已被整合进我们的汽车产品——当遇到道路分叉或目标检测失败时能够解释具体的原因,广告产品——可以解释为什么某些创意能获得更高的点击率,医学成像产品——用以分析CT或X光照片的哪些区域出现异常。

https://medium.com/merantix/picasso-a-free-open-source-visualizer-for-cnns-d8ed3a35cfc5 
https://github.com/merantix/picasso

下图是开源可视化工具Picasso的一个预览 
图片描述

Picasso 可视化工具预览

总结

我在本文中分享了Merantix应用深度学习解决实际问题过程中的三项很重要的心得。我希望这些想法能为那些打算在实际业务中使用深度学习的人带来帮助。

正如本文开篇所描述的,用深度学习处理现实问题时,除了相关的技术和数据,你还需要很多其他的技巧、诀窍与心得(级联模型、智能增强、合理的评价标准、建立可重用的训练管道、有效推断与减小模型大小,等等)。

原文链接 
https://medium.com/merantix/applying-deep-learning-to-real-world-problems-ba2d86ac5837


2019-03-24 12:54:14 orange_littlegirl 阅读数 3076

简单的回顾的话,2006年Geoffrey Hinton的论文点燃了“这把火”,现在已经有不少人开始泼“冷水”了,主要是AI泡沫太大,而且深度学习不是包治百病的药方。

 

计算机视觉不是深度学习最早看到突破的领域,真正让大家大吃一惊的颠覆传统方法的应用领域是语音识别,做出来的公司是微软,而不是当时如日中天的谷歌。计算机视觉应用深度学习堪称突破的成功点是2012年ImageNet比赛,采用的模型是CNN,而不是Hinton搞的RBM和DBN之类,就是Hinton学生做出来以他命名的AlexNet。

 

(注:顺便提一下,2010年的ImageNet冠军是余凯/林元庆领导的NEC和UIUC Tom Huang组的合作团队,当时采用的方法是基于sparse coding+SVM。)

 

当然,真正一直在研究CNN的专家是Yann LeCun,小扎后来拉他去FB做AI research的头。第一个CNN模型就是他搞出来的,即LeNet,原来就是做图像数字识别。不得不说,CNN非常适合2-D信号的处理任务,RNN呢,是时域上的拓展。

 

现在CNN在计算机视觉应用的非常成功,传统机器学习方法基本被弃之不用。其中最大的一个原因就是,图像数据的特征设计,即特征描述,一直是计算机视觉头痛的问题,在深度学习突破之前10多年,最成功的图像特征设计 (hand crafted feature)是SIFT,还有著名的Bag of visual words,一种VQ方法。后来大家把CNN模型和SIFT比较,发现结构还蛮像的:),之后不是也有文章说RNN和CRF很像吗。

 

CNN从AlexNet之后,新模型如雨后春笋,每半年就有新发现。这里随便列出来就是,ZFNet (也叫MatNet),VGGNet, NIN, GoogleNet (Inception), Highway Network, ResNet, DenseNet,SE-Net(Squeeze and Excitation Net),。。。基本上都是在ImageNet先出名的:)。

 

简单回顾一下:

  • AlexNet应该算第一个深度CNN;
  • ZFNet采用DeconvNet和visualization技术可以监控学习过程;
  • VGGNet采用小滤波器3X3去取代大滤波器5X5和7X7而降低计算复杂度;
  • GoogleNet推广NIN的思路定义Inception基本模块(采用多尺度变换和不同大小滤波器组合,即1X1,3X3,5X5)构建模型;
  • Highway Networks借鉴了RNN里面LSTM的gaiting单元;
  • ResNet是革命性的工作,借鉴了Highway Networks的skip connection想法,可以训练大深度的模型提升性能,计算复杂度变小;
  • Inception-V3/4用1X7和1X5取代大滤波器5X5和7X7,1X1滤波器做之前的特征瓶颈,这样卷积操作变成像跨通道(cross channel)的相关操作;
  • DenseNet主要通过跨层链接解决vanishing gradient问题;
  • SE-Net是针对特征选择的设计,gating机制还是被采用;
  • 前段时间流行的Attention机制也是借鉴于LSTM,实现object-aware的context模型。

 

在具体应用领域也出现了不少成功的模型,比如

  • detection问题的R-CNN,fast RCNN,faster RCNN,SSD,YOLO,RetinaNet,CornerNet等,
  • 解决segmentation问题的FCN,DeepLab,Parsenet,Segnet,Mask R-CNN,RefineNet,PSPNet,U-Net等,
  • 处理激光雷达点云数据的VoxelNet,PointNet,BirdNet,LMNet,RT3D,PIXOR,YOLO3D等,
  • 实现激光雷达和图像融合的PointFusion,RoarNet,PointRCNN,AVOD等,
  • 做图像处理的DeHazeNet,SRCNN (super-resolution),DeepContour,DeepEdge等,
  • 2.5 D视觉的MatchNet,DeepFlow,FlowNet等,
  • 3-D重建的PoseNet,VINet,Perspective Transformer Net,SfMNet,CNN-SLAM,SurfaceNet,3D-R2N2,MVSNet等,
  • 以及解决模型压缩精简的MobileNet,ShuffleNet,EffNet,SqueezeNet,
  • 。。。

 

下面我们针对具体应用再仔细聊。

 

图像/视频处理

 

(计算机视觉的底层,不低级)。

 

图像处理,还有视频处理,曾经是很多工业产品的基础,现在电视,手机还有相机/摄像头等等都离不开,是技术慢慢成熟了(传统方法),经验变得比较重要,而且芯片集成度越来越高,基本上再去研究的人就少了。经典的ISP,A3,都是现成的,当然做不好的也很难和别人竞争,成本都降不下来。

 

这是一个典型成像处理的流程图:

 

 

经典的ISP流程图如下:

 

 

图像处理,根本上讲是基于一定假设条件下的信号重建。这个重建不是我们说的3-D重建,是指恢复信号的原始信息,比如去噪声,内插。这本身是一个逆问题,所以没有约束或者假设条件是无解的,比如去噪最常见的假设就是高斯噪声,内插实际是恢复高频信号,可以假设边缘连续性和灰度相关性,著名的TV(total variation)等等。

 

以前最成功的方法基本是信号处理,机器学习也有过,信号处理的约束条件变成了贝叶斯规则的先验知识,比如sparse coding/dictionary learning,MRF/CRF之类,现在从传统机器学习方法过渡到深度学习也正常吧。

 

1 去噪/去雾/去模糊/去鬼影

 

先给出一个encoder-decoder network的AR-CNN模型(AR=Artifact Reduction):

 

这是一个图像处理通用型的模型框架:

 

 

2 增强/超分辨率(SR)

 

Bilateral filter是很有名的图像滤波器,这里先给出一个受此启发的CNN模型做图像增强的例子:

 

 

前面说过内插的目的是恢复失去的高频信息,这里一个做SR的模型就是在学习图像的高频分量:

 

 

3 修补/恢复/着色

 

用于修补的基于GAN思想的Encoder-Decoder Network模型:

 

 

用于灰度图像着色(8比特的灰度空间扩展到24比特的RGB空间)的模型框架:

 

 

 

计算机视觉的预处理(2-D)。

 

计算机视觉需要图像预处理,比如特征提取,包括特征点,边缘和轮廓之类。以前做跟踪和三维重建,首先就得提取特征。特征点以前成功的就是SIFT/SURF/FAST之类,现在完全可以通过CNN形成的特征图来定义。

 

边缘和轮廓的提取是一个非常tricky的工作,细节也许就会被过强的图像线条掩盖,纹理(texture)本身就是一种很弱的边缘分布模式,分级(hierarchical)表示是常用的方法,俗称尺度空间(scale space)。以前做移动端的视觉平台,有时候不得不把一些图像处理功能关掉,原因是造成了特征畸变。现在CNN这种天然的特征描述机制,给图像预处理提供了不错的工具,它能将图像处理和视觉预处理合二为一。

 

1 特征提取

 

LIFT(Learned Invariant Feature Transform)模型,就是在模仿SIFT:

 

 

2 边缘/轮廓提取

 

一个轮廓检测的encoder-decoder network模型:

 

 

3 特征匹配

 

这里给出一个做匹配的模型MatchNet:

 

 

2.5-D计算机视觉部分(不是全3-D)

 

涉及到视差或者2-D运动的部分一般称为2.5-D空间。这个部分和前面的2-D问题是一样的,作为重建任务它也是逆问题,需要约束条件求解优化解,比如TV,GraphCut。一段时间(特别是Marr时代)计算机视觉的工作,就是解决约束条件下的优化问题。

 

后来,随机概率和贝叶斯估计大行其事,约束条件变成了先验知识(prior),计算机视觉圈里写文章要是没有 P (Probability) 和 B (Bayes),都不好意思发。像SVM, Boosting,Graphical Model,Random Forest,BP(Belief Propagation),CRF(Conditional Random Field),Mixture of Gaussians,MCMC,Sparse Coding都曾经是计算机视觉的宠儿,现在轮到CNN出彩:)。

 

可以说深度学习是相当“暴力”的,以前分析的什么约束呀,先验知识呀在这里统统扔一边,只要有图像数据就可以和传统机器学习方法拼一把。

 

1 运动/光流估计

 

传统的方法包括局部法和全局法,这里CNN取代的就是全局法。

 

这里是一个光流估计的模型:

 

2 视差/深度图估计

 

深度图估计和运动估计是类似问题,唯一不同的是单目可以估计深度图,而运动不行。

 

这里是一个双目估计深度图的模型:

 

 

而这个是单目估计深度图的模型:巧妙的是这里利用双目数据做深度图估计的非监督学习

 

 

另外一个单目深度估计的模型:也是利用双目的几何约束做非监督的学习

 

 

3 视频去隔行/内插帧

 

Deinterlacing和Framerate upconversion视频处理的经典问题,当年Sony和Samsung这些电视生产商这方面下了很大功夫,著名的NXP(从Philips公司spin-off)当年有个牛逼的算法在这个模块挣了不少钱。

 

基本传统方法都是采用运动估计和补偿的方法,俗称MEMC,所以我把它归类为2.5-D。前面运动估计已经用深度学习求解了,现在这两个问题自然也是。

 

首先看一个做MEMC的模型:

 

 

这是做Deinterlacing的一个模型:

 

这是Nvidia的Framerate Upconversion方面模型:

 

 

因为它采用optic flow方法做插帧,另外附上它的flow estimation模型:就是一个沙漏(hourglass)模式

 

 

新视角图像生成

 

刚才介绍单目估计深度图的时候,其实已经看到采用inverse warping方法做新视角生成的例子,在IBR领域这里有一个分支叫Depth Image-based Rendering (DIBR)。

 

和上个问题类似,采用深度图学习做合成图像,也属于2.5-D空间。在电视领域,曾经在3-D电视界采用这种方法自动从单镜头视频生成立体镜头节目。以前也用过机器学习,YouTube当年采用image search方法做深度图预测提供2D-3D的内容服务,但性能不好。现在感觉,大家好像不太热衷这个了。

 

这是一个产生新视角的模型:

 

 

而这个是从单镜头视频生成立体视频的模型:

 

 

有做编码/解码的,也是采用运动或者相似变换为基础,但性能不如传统方法,这里忽略。

 

3-D,基于多视角(MVS)/运动(SFM)的重建,后者也叫SLAM

 

这部分就是经典的计算机视觉问题:3-D重建。

 

基本上可以分成两种路径:一是多视角重建,二是运动重建。前一个有一个经典的方法MVS(multiple view stereo),就是多帧匹配,是双目匹配的推广,这样采用CNN来解决也合理。当年CMU在Superbowl展示的三维重建和视角转化,轰动一时,就是基于此路径,但最终没有被产品化(技术已经转让了)。

 

后一个在机器人领域成为SLAM,有滤波法和关键帧法两种,后者精度高,在稀疏特征点的基础上可以采用BA(Bundle Adjustment),著名的方法如PTAM,ORB-SLAM1/2,LSD-SLAM,KinectFusion(RGB-D),LOAM和Velodyne SLAM(LiDAR)等。如今SLAM已经成为AR产业的瓶颈,看看MagicLeap和HoloLens,大家不能总是在平面检测基础上安一个虚拟物体吧,真正的虚实结合是在一个普通的真实环境里才行。

 

想想像特征点匹配,帧间运动估计,Loop Closure检测这些模块都可以采用CNN模型解决,那么SLAM/SFM/VO就进入CNN的探索区域。

 

1 标定

 

Calibration是计算机视觉的经典问题,摄像头作为传感器的视觉系统首要任务就是要确定自己观测数据和3-D世界坐标系的关系,即标定。摄像头标定要确定两部分参数,一是内参数,二是外参数。对于有多个传感器的视觉系统,比如深度测距仪,以前有Kinect RGB-D,现在有Velodyne激光雷达,它们相互之间的坐标系关系是标定的任务。

 

外参数标定的完成帮助是校准数据,比如激光雷达的点云,RGB-D的深度图,还有摄像头的图像像素集,它们一定存在一个最佳匹配标准,这就可以通过数据训练NN模型来完成。而标定参数就是NN模型回归输出的结果。

 

这里是一个激光雷达和摄像头标定的系统框图:

 

 

它的模型CalibNet结构视图:

 

 

2 Visual Odometry(VO)

 

VO属于SLAM的一部分,只是估计自身运动和姿态变化吧。VO是特斯拉的前Autopilot2.0负责人David Nister创立的,他之前以两帧图像计算Essential Matrix的“5点算法”而出名,现在是Nvidia的自动驾驶负责人,公司VP。

 

这里是一个和惯导数据结合的VIO(Visual-Inertial Odometry)NN模型:

 

 

这是著名的AR创业公司MagicLeap提出的VO模型:两部分组成,即特征提取和匹配(Homography)。

 

 

顺便加一个,激光雷达数据做Odometry的CNN模型:

 

 

3 SLAM (Mono, Stereo, RGB-D, LiDAR)/SFM

 

运动恢复结构是基于背景不动的前提,计算机视觉的同行喜欢SFM这个术语,而机器人的peers称之为SLAM。SLAM比较看重工程化的解决方案,SFM理论上贡献大。

 

先看一个单摄像头的SFM系统框图:

 

 

它的NN模型SFM-Net,包括Motion和Structure两部分:

 

 

再附上一个SLAM的模型CNN-SLAM:主要是加上一个单目深度图估计的CNN模块。

 

 

这是一个用CNN的基于Lidar的localization方法:不仅需要点云数据,还输入反射值灰度图。

 

 

图像像素运动是optic flow,而3-D场景的运动称之为scene flow,如果有激光雷达的点云数据,后者的估计可以通过ICP实现,这里给出一个CNN模型的实现方法FlowNet3D,是PointNet的扩展:

 

 

4 MVS

 

MVS的传统方法可以分成两种:region growing和depth-fusion,前者有著名的PMVS,后者有KinectFusion,CNN模型求解MVS的方法就是基于此。

 

先看看一个做MVS任务的基于RNN中LSTM的3D-R2N2模型:

 

 

它的系统框图如下:

 

 

UIUC/Facebook合作的DeepMVS模型:

 

 

这是他们的系统框图:

 

 

现在看到的是Berkeley分校Malik组提出的LSM(Learnt Stereo Machine )模型:

 

 

下面是最近香港权龙教授组提出的MVSNet模型:

 

 

计算机视觉的高层:环境理解

 

这部分是深度学习在计算机视觉最先触及,并展示强大实力的部分。出色的工作太多,是大家关注和追捧的,而且有不少分析和总结文章,所以这里不会重复过多,只简单回顾一下。

 

1 语义分割/实例分割(Semantic/Instance Segmentation)

 

语义分割最早成功应用CNN的模型应该是FCN(Fully Convolution Network),由Berkeley分校的研究人员提出。它是一种pixel2pixel的学习方法,之后各种演变模型,现在都可以把它们归类于Encoder-Decoder Network。

 

这里是去年CVPR的一片论文在总结自动驾驶的实时语义分割算法时给出的框图:

 

 

其中Encoder部分特别采用了MobileNet和ShuffleNet。

 

实例分割是特殊的语义分割,结合了目标检测,可以说是带有明确轮廓的目标检测,其代表作就是Mask R-CNN,应该是何凯明去FB之后的第一个杰作。

 

这是一个借鉴目标检测算法SSD的实例分割模型:

 

 

而下面这个是从目标检测算法Faster-RCNN演变的实例分割模型MaskLab,论文发表在去年CVPR‘18:

 

 

这是它修正Mask的方法示意图:

 

 

这是一个基于3-D点云的语义分割NN模型:

 

 

2 检测/识别(特别例子:人脸)

 

目标检测的开拓性工作应该是Berkeley分校Malik组出来的,即两步法的R-CNN(Region-based CNN),借用了传统方法中的Region Proposal。之后不断改进的有fast RCNN和faster RCNN,每次都有新点子,真是“群星闪耀”的感觉。

 

一步法的工作,有名的就是SSD(Single Shot Detection)和YOLO(You Only Look Once),期间何凯明针对one-stage和two-stage方法的各自优缺点引进一个Focal Loss,构建的新方法叫RetinaNet,而后来YOLO3基本也解决了精度低的弱点。

 

这里我在纸上,手画了一个算法发展草图(其实还有一些方法没有包括在里面,比如densebox,deepbox,R-FCN,FPN等等)。

 

 

ImageNet本身就是一个1000多种物体识别比赛,一般公布的是top 5的结果(可见最早精度有多低(:)。CNN在ImageNet的发展史,就是它在图像识别的一段近5年的历史了:)。

 

激光雷达点云数据的处理,无论识别还是分割,有PointNet以及改进的CNN模型:

 

 

基于点云做目标识别的例子有Apple公司研究人员发表的VoxelNet模型:

 

 

将点云和RGB图像结合的目标检测CNN模型例子如下:

 

 

这里顺便提一下人脸识别,因为是对人脸的个体属性判别,所以这个课题应该算fine grained recognition。就好像对狗或者马这种动物继续判别它的品种,都是细分的。

 

请注意,人脸识别分人脸验证(face verification)和人脸确认(face identification);前者是指两个人是不是同一个人,1-to-1 mapping,而后者是确定一个人是一群人中的某个,1-to-many ampping。以前经常有报道机器的人脸识别比人强了,都是指前者,假如后者的话,那谁能像机器一样识别上万人的人脸数据库呢?何况中国公安部的数据高达亿的数量级。

 

一个完整的人脸识别系统,需要完成人脸检测和人脸校准(face alignment),而后者是需要人脸关键点(facial landmarks)的检测,也是可以基于CNN模型来做。这里以FB的DeepFace模型为例吧,给出一个人脸识别的系统框图:

 

 

这是不久前刚刚提出的人脸检测模型: Selective Refinement Network

 

 

而这里给出一个基于facial landmarks做校准的模型:

 

 

顺便提一下旷世科技的Pyramid CNN模型和商汤科技的DeepID2模型(一共发布过4个DeepID版本)依次如图:

 

 

3 跟踪(特别例子:人体姿态/骨架)

 

目标跟踪是一个递推估计问题,根据以前的图像帧目标的信息推算当前目标的位置甚至大小/姿态。有一阵子,跟踪和检测变得浑为一体,即所谓tracking by detection,跟踪也可以看出一个目标分割(前后景而言)/识别问题。

 

跟踪是短时(short term)邻域的检测,而一般的检测是长时(long term)大范围的检测。跟踪的困难在于目标的遮挡(分部分还是全部),背景复杂(相似目标存在),快速(fast)以及突变(agile)运动等等。比如,跟踪人脸,当转90度成侧脸时就会有以上这些问题。

 

跟踪方法有一个需要区分的点,多目标(MOT)还是单目标(SOT)跟踪器。单目标不会考虑目标之间的干扰和耦合,而多目标跟踪会考虑目标的出现,消失以及相互交互和制约,保证跟踪各个目标的唯一性是算法设计的前提。

 

跟踪目标是多样的,一般是考虑刚体还是柔体,是考虑单刚体还是铰接式(articulated),比如人体或者手指运动,需要确定skeleton模型。跟踪可以是基于图像的,或者激光雷达点云的,前者还要考虑目标在图像中大小的变化,姿态的变化,难度更大。

 

基于以上特点,跟踪可以用CNN或者RNN模型求解,跟踪目标的描述本身就是NN模型的优势,检测也罢,分割或者识别也罢,都不是问题。运动特性的描述也可以借鉴RNN模型,不过目前看到的结果这部分不比传统方法好多少。

 

先看一个单目标跟踪的CNN模型:

 

 

这个展示的模型是一个基于R-CNN检测模型扩展的单目标跟踪方法:

 

 

多目标跟踪模型有这么一个例子:

 

 

下面是一个基于RNN的多目标跟踪模型:

 

 

补充一个基于RGB图像和3-D点云的目标跟踪NN模型:

 

 

顺便谈一下人体姿态和骨架跟踪问题。以前传统方法在人体姿态估计花了很大力气但效果不好,提出了part-based目标模型,比如constellation model, pictorial structure, implicit shape model, deformable model等等。

 

最近CMU提出一个方法,基于Part Affinity Fields(PAF)来估计人体姿态和骨架,速度非常快。PAF是一个非参数描述模型,用来将图像像素和人体各肢体相关起来,看它的架构如图,采用的是two branch CNN结构,联合学习各肢体的相关性和位置。

 

下面这个是其中双部图形匹配(Bipartie matching)算法的示意图。

 

这种多目标快速姿态跟踪的实现对人体行为的理解是非常重要的工具。

 

计算机视觉的推广领域

 

这里我选了4个计算机视觉的应用谈谈深度学习对这些领域的推动,在CNN或者RNN“火”之前,这些应用已经存在,但在识别分类任务上性能有限罢了。自动驾驶的应用在另外文章已经提过了,在此忽略。

 

1 内容检索

 

CBIR(Content-based Image Retrieval)有两波人搞,一波是计算机科学的,把这个问题当数据库看待;另一波人是电子过程的,认为是图像匹配问题。刚开始大家也是对这个问题的semantic gap比较头疼,用了一些feature,比如颜色,纹理,轮廓,甚至layout,效果真不咋样。

 

后来有了SIFT,用了Information Retrieval的概念Bag of Words,加上inverted Indexing,TF-IDF(term frequency–inverse document frequency),hashing之类的技术变得好多了,每年ACM MM会议上一堆的paper。深度学习进来,主要就是扮演特征描述的角色。

 

这是一个CBIR采用CNN的框架:

 

 

这个展示的是image matching用于CBIR的CNN模型:

 

 

2 增强现实

 

AR一开始就不好做,不说VR那部分的问题,主要是实时性要求高,无论识别还是运动/姿态估计,精度都不好。现在计算机硬件发展了,计算速度提高了,加上深度学习让识别变得落地容易了,最近越来越热,无论是姿态估计还是特征匹配(定位),都变得容易些了。希望这次能真正对社会带来冲击,把那些AR的梦想都实现。

 

这个框架是Google Glass的AR应用平台,其中几个模块都可以基于CNN实现:

 

 

下面给出的是camera motion 的encoder-decoder network框架:三个模型串联,其中一个有迭代。

 

 

下面的模型展示了特征提取和描述的作用,AR中直接可以用做re-localization。

 

 

3 内容加注/描述

 

Captioning是计算机视觉和NLP的结合。你可以把它当成一个“检索”任务,也可以说是一个“翻译”工作。深度学习,就是来帮助建立一个语言模型并取样产生描述。

 

 

4 内容问答(Q&A)

 

Q&A 也是计算机视觉和NLP的结合,其实质是在图像描述和语言描述之间建立一个桥梁。有人说,Q&A是一个Turing Test的好问题,这里深度学习就是在帮助理解图像的描述,问题的组成,以及它们模式之间的交互。

 

 

 

 

有些CNN的应用还是需要进一步改进模型,性能并没有达到满意。不过,大家高兴地看到深度学习已经进来了,以后随着研究的深入性能会越来越好。

 

End

附上原文地址 | https://zhuanlan.zhihu.com/p/55747295

2016-01-26 22:43:50 happytofly 阅读数 2454

Tim Hunter在databricks博客发布博文,演示如何使用TensorFlow和Spark一起训练和应用深度学习模型。

两个use cases:

  1. 超参数调整:用Spark找到神经网络训练的最佳超参数,减少10倍的训练时间,降低34%的误差率。
  2. 大规模部署模型:利用Spark在大量数据上应用一个训练的神经网络模型。

训练的超参数,如每层的神经元、学习率,太多或者太少都不行。TensorFlow(开源版)本身并不是分布式的,超参数调优处理是“尴尬的并行”,可以通过Spark实现分布式,使用Spark广播常见元素如数据和模型描述,并通过支持容错的集群安排单个的重复计算。采用默认超参数设置,精度为99.2%,最好的结果为99.47%,误差率降低34%。

图片描述

线性扩展能力,13节点的集群可以并行训练13个模型,相对于用一台机器每次训练一个模型提速7倍。

图片描述

神经网络典型权衡曲线:

  • 学习率非常关键,太低学不到东西(高测试误差),太高则训练过程可能随机振荡甚至在某些配置下发散。
  • 神经元的数目对性能没那么重要,大量神经元的网络对学习率更敏感。

图片描述

安装TensorFlow及重现本文测试参考:

部署部分,详见原文(含代码):

Deep Learning with Spark and TensorFlow by Tim Hunter

2017-10-03 11:26:25 haima1998 阅读数 8090

转自:https://zhuanlan.zhihu.com/p/22334661

深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动。请关注我们的知乎专栏!




摘要

近年来,深度学习方法在物体跟踪领域有不少成功应用,并逐渐在性能上超越传统方法。本文对现有基于深度学习的目标跟踪算法进行了分类梳理,希望能给读者带来启发。

开始本文之前,我们首先看上方给出的3张图片,它们分别是同一个视频的第1,40,80帧。在第1帧给出一个跑步者的边框(bounding-box)之后,后续的第40帧,80帧,bounding-box依然准确圈出了同一个跑步者。以上展示的其实就是目标跟踪(visual object tracking)的过程。目标跟踪(特指单目标跟踪)是指:给出目标在跟踪视频第一帧中的初始状态(如位置,尺寸),自动估计目标物体在后续帧中的状态。

人眼可以比较轻松的在一段时间内跟住某个特定目标。但是对机器而言,这一任务并不简单,尤其是跟踪过程中会出现目标发生剧烈形变、被其他目标遮挡或出现相似物体干扰等等各种复杂的情况。过去几十年以来,目标跟踪的研究取得了长足的发展,尤其是各种机器学习算法被引入以来,目标跟踪算法呈现百花齐放的态势。2013年以来,深度学习方法开始在目标跟踪领域展露头脚,并逐渐在性能上超越传统方法,取得巨大的突破。本文首先简要介绍主流的传统目标跟踪方法,之后对基于深度学习的目标跟踪算法进行介绍,最后对深度学习在目标跟踪领域的应用进行总结和展望。

经典目标跟踪方法

目前跟踪算法可以被分为产生式(generative model)和判别式(discriminative model)两大类别。

产生式方法运用生成模型描述目标的表观特征,之后通过搜索候选目标来最小化重构误差。比较有代表性的算法有稀疏编码(sparse coding),在线密度估计(online density estimation)和主成分分析(PCA)等。产生式方法着眼于对目标本身的刻画,忽略背景信息,在目标自身变化剧烈或者被遮挡时容易产生漂移。

与之相对的,判别式方法通过训练分类器来区分目标和背景。这种方法也常被称为tracking-by-detection。近年来,各种机器学习算法被应用在判别式方法上,其中比较有代表性的有多示例学习方法(multiple instance learning), boosting和结构SVM(structured SVM)等。判别式方法因为显著区分背景和前景的信息,表现更为鲁棒,逐渐在目标跟踪领域占据主流地位。值得一提的是,目前大部分深度学习目标跟踪方法也归属于判别式框架。

近年来,基于相关滤波(correlation filter)的跟踪方法因为速度快,效果好吸引了众多研究者的目光。相关滤波器通过将输入特征回归为目标高斯分布来训练 filters。并在后续跟踪中寻找预测分布中的响应峰值来定位目标的位置。相关滤波器在运算中巧妙应用快速傅立叶变换获得了大幅度速度提升。目前基于相关滤波的拓展方法也有很多,包括核化相关滤波器(kernelized correlation filter, KCF), 加尺度估计的相关滤波器(DSST)等。

基于深度学习的目标跟踪方法

不同于检测、识别等视觉领域深度学习一统天下的趋势,深度学习在目标跟踪领域的应用并非一帆风顺。其主要问题在于训练数据的缺失:深度模型的魔力之一来自于对大量标注训练数据的有效学习,而目标跟踪仅仅提供第一帧的bounding-box作为训练数据。这种情况下,在跟踪开始针对当前目标从头训练一个深度模型困难重重。目前基于深度学习的目标跟踪算法采用了几种思路来解决这个问题,下面将依据思路的不同展开介绍,并在最后介绍目前跟踪领域出现的运用递归神经网络(recurrent neural network)解决目标跟踪问题的新思路。

利用辅助图片数据预训练深度模型,在线跟踪时微调

在目标跟踪的训练数据非常有限的情况下,使用辅助的非跟踪训练数据进行预训练,获取对物体特征的通用表示(general representation ),在实际跟踪时,通过利用当前跟踪目标的有限样本信息对预训练模型微调(fine-tune), 使模型对当前跟踪目标有更强的分类性能,这种迁移学习的思路极大的减少了对跟踪目标训练样本的需求,也提高了跟踪算法的性能。

这个方面代表性的作品有DLT和SO-DLT,都出自香港科技大学王乃岩博士。

DLT(NIPS2013)

Learning a Deep Compact Image Representation for Visual Tracking

DLT是第一个把深度模型运用在单目标跟踪任务上的跟踪算法。它的主体思路如上图所示:

(1) 先使用栈式降噪自编码器(stacked denoising autoencoder,SDAE)在Tiny Images dataset这样的大规模自然图像数据集上进行无监督的离线预训练来获得通用的物体表征能力。预训练的网络结构如上图(b)所示,一共堆叠了4个降噪自编码器, 降噪自编码器对输入加入噪声,通过重构出无噪声的原图来获得更鲁棒的特征表达能力。SDAE1024-2560-1024-512-256这样的瓶颈式结构设计也使获得的特征更加compact。

(2) 之后的在线跟踪部分结构如上图(c)所示,取离线SDAE的encoding部分叠加sigmoid分类层组成了分类网络。此时的网络并没有获取对当前被跟踪物体的特定表达能力。此时利用第一帧获取正负样本,对分类网络进行fine-tune获得对当前跟踪目标和背景更有针对性的分类网络。在跟踪过程中,对当前帧采用粒子滤波(particle filter)的方式提取一批候选的patch(相当于detection中的proposal),这些patch输入分类网络中,置信度最高的成为最终的预测目标。

(3) 在目标跟踪非常重要的模型更新策略上,该论文采取限定阈值的方式,即当所有粒子中最高的confidence低于阈值时,认为目标已经发生了比较大的表观变化,当前的分类网络已经无法适应,需要进行更新。

小结:DLT作为第一个将深度网络运用于单目标跟踪的跟踪算法,首先提出了“离线预训练+在线微调”的思路,很大程度的解决了跟踪中训练样本不足的问题,在CVPR2013提出的OTB50数据集上的29个跟踪器中排名第5。

但是DLT本身也存在一些不足:

(1) 离线预训练采用的数据集Tiny Images dataset只包含32*32大小的图片,分辨率明显低于主要的跟踪序列,因此SDAE很难学到足够强的特征表示。

(2) 离线阶段的训练目标为图片重构,这与在线跟踪需要区分目标和背景的目标相差甚大。

(3) SDAE全连接的网络结构使其对目标的特征刻画能力不够优秀,虽然使用了4层的深度模型,但效果仍低于一些使用人工特征的传统跟踪方法如Struck等。

SO-DLT(arXiv2015)

Transferring Rich Feature Hierarchies for Robust Visual Tracking

SO-DLT延续了DLT利用非跟踪数据预训练加在线微调的策略,来解决跟踪过程中训练数据不足的问题,同时也对DLT存在的问题做了很大的改进。

(1) 使用CNN作为获取特征和分类的网络模型。如上图所示,SO-DLT使用了的类似AlexNet的网络结构,但是有几大特点:一、针对跟踪候选区域的大小将输入缩小为100*100,而不是一般分类或检测任务中的224*224。 二、网络的输出为50*50大小,值在0-1之间的概率图(probability map),每个输出像素对应原图2*2的区域,输出值越高则该点在目标bounding-box中的概率也越高。这样的做法利用了图片本身的结构化信息,方便直接从概率图确定最终的bounding-box,避免向网络输入数以百计的proposal,这也是SO-DLT structured output得名的由来。三、在卷积层和全连接层中间采用SPP-NET中的空间金字塔采样(spatial pyramid pooling)来提高最终的定位准确度。

(2) 在离线训练中使用ImageNet 2014的detection数据集使CNN获得区分object和非object(背景)的能力。

SO-DLT在线跟踪的pipeline如上图所示:

(1) 处理第t帧时,首先以第t-1帧的的预测位置为中心,从小到大以不同尺度crop区域放入CNN当中,当CNN输出的probability map的总和高于一定阈值时,停止crop, 以当前尺度作为最佳的搜索区域大小。

(2) 选定第t帧的最佳搜索区域后,在该区域输出的probability map上采取一系列策略确定最终的bounding-box中心位置和大小。

(3) 在模型更新方面,为了解决使用不准确结果fine-tune导致的drift问题,使用了long-term 和short-term两个CNN,即CNNs和CNNl。CNNs更新频繁,使其对目标的表观变化及时响应。CNNl更新较少,使其对错误结果更加鲁棒。二者结合,取最confident的结果作为输出。从而在adaptation和drift之间达到一个均衡。

小结:SO-DLT作为large-scale CNN网络在目标跟踪领域的一次成功应用,取得了非常优异的表现:在CVPR2013提出的OTB50数据集上OPE准确度绘图(precision plot)达到了0.819, OPE成功率绘图(success plot)达到了0.602。远超当时其它的state of the art。

SO-DLT有几点值得借鉴:

(1) 针对tracking问题设计了有针对性的网络结构。

(2) 应用CNNS和CNNL用ensemble的思路解决update 的敏感性,特定参数取多值做平滑,解决参数取值的敏感性。这些措施目前已成为跟踪算法提高评分的杀手锏。

但是SO-DLT离线预训练依然使用的是大量无关联图片,作者认为使用更贴合跟踪实质的时序关联数据是一个更好的选择。

利用现有大规模分类数据集预训练的CNN分类网络提取特征

2015年以来,在目标跟踪领域应用深度学习兴起了一股新的潮流。即直接使用ImageNet这样的大规模分类数据库上训练出的CNN网络如VGG-Net获得目标的特征表示,之后再用观测模型(observation model)进行分类获得跟踪结果。这种做法既避开了跟踪时直接训练large-scale CNN样本不足的困境,也充分利用了深度特征强大的表征能力。这样的工作在ICML15,ICCV15,CVPR16均有出现。下面介绍两篇发表于ICCV15的工作。

FCNT(ICCV15)

Visual Tracking with Fully Convolutional Networks

作为应用CNN特征于物体跟踪的代表作品,FCNT的亮点之一在于对ImageNet上预训练得到的CNN特征在目标跟踪任务上的性能做了深入的分析,并根据分析结果设计了后续的网络结构。

FCNT主要对VGG-16的Conv4-3和Conv5-3层输出的特征图谱(feature map)做了分析,并得出以下结论:

(1) CNN 的feature map可以用来做跟踪目标的定位。

(2) CNN 的许多feature map存在噪声或者和物体跟踪区分目标和背景的任务关联较小。

(3) CNN不同层的特征特点不一。高层(Conv5-3)特征擅长区分不同类别的物体,对目标的形变和遮挡非常鲁棒,但是对类内物体的区分能力非常差。低层(Conv4-3)特征更关注目标的局部细节,可以用来区分背景中相似的distractor,但是对目标的剧烈形变非常不鲁棒。

依据以上分析,FCNT最终形成了如上图所示的框架结构:

(1) 对于Conv4-3和Conv5-3特征分别构建特征选择网络sel-CNN(1层dropout加1层卷积),选出和当前跟踪目标最相关的feature map channel。

(2) 对筛选出的Conv5-3和Conv4-3特征分别构建捕捉类别信息的GNet和区分distractor(背景相似物体)的SNet(都是两层卷积结构)。

(3) 在第一帧中使用给出的bounding-box生成热度图(heat map)回归训练sel-CNN, GNet和SNet。

(4) 对于每一帧,以上一帧预测结果为中心crop出一块区域,之后分别输入GNet和SNet,得到两个预测的heatmap,并根据是否有distractor决定使用哪个heatmap 生成最终的跟踪结果。

小结:FCNT根据对CNN不同层特征的分析,构建特征筛选网络和两个互补的heat-map预测网络。达到有效抑制distractor防止跟踪器漂移,同时对目标本身的形变更加鲁棒的效果,也是ensemble思路的又一成功实现。在CVPR2013提出的OTB50数据集上OPE准确度绘图(precision plot)达到了0.856,OPE成功率绘图(success plot)达到了0.599,准确度绘图有较大提高。实际测试中FCNT的对遮挡的表现不是很鲁棒,现有的更新策略还有提高空间。

Hierarchical Convolutional Features for Visual Tracking(ICCV15)

这篇是作者在2015年度看到的最简洁有效的利用深度特征做跟踪的论文。其主要思路是提取深度特征,之后利用相关滤波器确定最终的bounding-box。

这篇论文简要分析了VGG-19特征( Conv3_4, Conv4_4, Conv5_4 )在目标跟踪上的特性,得出的结论和FCNT有异曲同工之处,即:

(1) 高层特征主要反映目标的语义特性,对目标的表观变化比较鲁棒。

(2) 低层特征保存了更多细粒度的空间特性,对跟踪目标的精确定位更有效。

基于以上结论,作者给出了一个粗粒度到细粒度(coarse-to-fine)的跟踪算法即:

(1) 第一帧时,利用Conv3_4,Conv4_4,Conv5_4特征的插值分别训练得到3个相关滤波器。

(2) 之后的每帧,以上一帧的预测结果为中心crop出一块区域,获取三个卷积层的特征,做插值,并通过每层的相关滤波器预测二维的confidence score。

(3) 从Conv5_4开始算出confidence score上最大的响应点,作为预测的bounding-box的中心位置,之后以这个位置约束下一层的搜索范围,逐层向下做更细粒度的位置预测,以最低层的预测结果作为最后输出。具体公式如下:

(4) 利用当前跟踪结果对每一层的相关滤波器做更新。

小结:这篇文章针对VGG-19各层特征的特点,由粗粒度到细粒度最终准确定位目标的中心点。在CVPR2013提出的OTB50数据集上OPE准确度绘图达到了0.891,OPE成功率绘图达到了0.605,相较于FCNT和SO-DLT都有提高,实际测试时性能也相当稳定,显示出深度特征结合相关滤波器的巨大优势。但是这篇文章中的相关滤波器并没有对尺度进行处理,在整个跟踪序列中都假定目标尺度不变。在一些尺度变化非常剧烈的测试序列上如CarScale上最终预测出的bounding-box尺寸大小和目标本身大小相差较大。

以上两篇文章均是应用预训练的CNN网络提取特征提高跟踪性能的成功案例,说明利用这种思路解决训练数据缺失和提高性能具有很高的可行性。但是分类任务预训练的CNN网络本身更关注区分类间物体,忽略类内差别。目标跟踪时只关注一个物体,重点区分该物体和背景信息,明显抑制背景中的同类物体,但是还需要对目标本身的变化鲁棒。分类任务以相似的一众物体为一类,跟踪任务以同一个物体的不同表观为一类,使得这两个任务存在很大差别,这也是两篇文章融合多层特征来做跟踪以达到较理想效果的动机所在。

利用跟踪序列预训练,在线跟踪时微调

1和2中介绍的解决训练数据不足的策略和目标跟踪的任务本身存在一定偏离。有没有更好的办法呢?VOT2015冠军MDNet给出了一个示范。该方法在OTB50上也取得了OPE准确度绘图0.942,OPE成功率绘图0.702的惊人得分。

MDNet(CVPR2016)

Learning Multi-Domain Convolutional Neural Networks for Visual Tracking

意识到图像分类任务和跟踪之间存在巨大差别,MDNet提出直接用跟踪视频预训练CNN获得general的目标表示能力的方法。但是序列训练也存在问题,即不同跟踪序列跟踪目标完全不一样,某类物体在一个序列中是跟踪目标,在另外一个序列中可能只是背景。不同序列中目标本身的表观和运动模式、环境中光照、遮挡等情形相差甚大。这种情况下,想要用同一个CNN完成所有训练序列中前景和背景区分的任务,困难重重。

最终MDNet提出Multi-Domain的训练思路和如上图所示的Multi-Domain Network。该网络分为共享层和domain-specific层两部分。即:将每个训练序列当成一个单独的domain,每个domain都有一个针对它的二分类层(fc6),用于区分当前序列的前景和背景,而网络之前的所有层都是序列共享的。这样共享层达到了学习跟踪序列中目标general的特征表达的目的,而domain-specific层又解决了不同训练序列分类目标不一致的问题。

具体训练时,MDNet的每个mini-batch只由一个特定序列的训练数据构成,只更新共享层和针对当前序列的特定fc6层。这样共享层中获得了对序列共有特征的表达能力,如对光照、形变等的鲁棒性。MDNet的训练数据也非常有意思,即测试OTB100数据集时,利用VOT2013-2015的不重合的58个序列来做预训练。测试VOT2014数据集时,利用OTB100上不重合的89个序列做预训练。这种交替利用的思路也是第一次在跟踪论文中出现。

在线跟踪阶段针对每个跟踪序列,MDNet主要有以下几步:

(1) 随机初始化一个新的fc6层。

(2) 使用第一帧的数据来训练该序列的bounding box回归模型。

(3) 用第一帧提取正样本和负样本,更新fc4, fc5和fc6层的权重。

(4) 之后产生256个候选样本,并从中选择置信度最高的,之后做bounding-box regression得到最终结果。

(5) 当前帧最终结果置信度较高时,采样更新样本库,否则根据情况对模型做短期或者长期更新。

MDNet有两点值得借鉴之处:

(1) MDNet应用了更为贴合跟踪实质的视频数据来做训练,并提出了创新的Multi-domain训练方法和训练数据交叉运用的思路。

(2) 此外MDNet从检测任务中借鉴了不少行之有效的策略,如难例挖掘(hard negative mining),bounding box回归等。尤其是难例回归通过重点关注背景中的难点样本(如相似物体等)显著减轻了跟踪器漂移的问题。这些策略也帮助MDNet在TPAMI2015 OTB100数据集上OPE准确度绘图从一开始的0.825提升到0.908, OPE成功率绘图从一开始的0.589提升到0.673。

但是也可以发现MDNet的总体思路和RCNN比较类似,需要前向传递上百个proposal,虽然网络结构较小,速度仍较慢。且boundingbox回归也需要单独训练,因此MDNet还有进一步提升的空间。

运用递归神经网络进行目标跟踪的新思路

近年来RNN尤其是带有门结构的LSTM,GRU等在时序任务上显示出了突出的性能。不少研究者开始探索如何应用RNN来做解决现有跟踪任务中存在的问题,以下简要介绍两篇在这方面比较有代表性的探索文章。

RTT(CVPR16)

Recurrently Target-Attending Tracking

这篇文章的出发点比较有意思,即利用多方向递归神经网络(multi-directional recurrent neural network)来建模和挖掘对整体跟踪有用的可靠目标部分(reliable part),实际上是二维平面上的RNN建模,最终解决预测误差累积和传播导致的跟踪漂移问题。其本身也是对part-based跟踪方法和相关滤波(correlation filter)方法的改进和探索。

RTT的整体框架如上图所示:

(1) 首先对每一帧的候选区域进行网状分块,对每个分块提取HOG特征,最终相连获得基于块的特征

(2) 得到分块特征以后,RTT利用前5帧训练多方向RNN来学习分块之间大范围的空间关联。

通过在4个方向上的前向推进,RNN计算出每个分块的置信度,最终每个块的预测值组成了整个候选区域的置信图(confidence map)。受益于RNN的recurrent结构,每个分块的输出值都受到其他关联分块的影响,相比于仅仅考虑当前块的准确度更高,避免单个方向上遮挡等的影响,增加可靠目标部分在整体置信图中的影响。

(3) 由RNN得出置信图之后,RTT执行了另外一条pipeline。即训练相关滤波器来获得最终的跟踪结果。值得注意的是,在训练过程中RNN的置信图对不同块的filter做了加权,达到抑制背景中的相似物体,增强可靠部分的效果。

(4) RTT提出了一个判断当前跟踪物体是否被遮挡的策略,用其判断是否更新。即计算目标区域的置信度和,并与历史置信度和的移动平均数(moving average)做一个对比,低于一定比例,则认为受到遮挡,停止模型更新,防止引入噪声。

小结:RTT是第一个利用RNN来建模part-based跟踪任务中复杂的大范围关联关系的跟踪算法。在CVPR2013提出的OTB50数据集上OPE准确度绘图为0.827,OPE成功率绘图达到了0.588。相比于其他基于传统特征的相关滤波器算法有较大的提升,说明RNN对关联关系的挖掘和对滤波器的约束确实有效。RTT受制于参数数目的影响,只选用了参数较少的普通RNN结构(采用HOG特征其实也是降低参数的另外一种折中策略)。结合之前介绍的解决训练数据缺失的措施,RTT可以运用更好的特征和RNN结构,效果还有提升空间。

DeepTracking: Seeing Beyond Seeing Using Recurrent Neural Networks(AAAI16)

这篇文章的应用场景是机器人视觉,目标是将传感器获得的有遮挡的环境信息还原为真实的无遮挡的环境信息。严格来说这篇文章仅输出还原后的图片,没有明确预测目标的位置和尺寸等状态信息,和之前介绍的所有文章的做法都不一样,不妨称为一种新的跟踪任务。

在模型方面,不同于RTT用RNN建模二维平面关联,DeepTracking利用RNN来做序列关联的建模,并最终实现了端到端的跟踪算法。

传统的贝叶斯跟踪方法一般采用高斯分布(卡尔曼滤波Kalman filter)或者离散的采样点权重(粒子滤波particle filter)来近似需要求解的后验概率 P(yt|x1:t) (yt 为需要预测的机器人周围的真实场景, xt 为传感器直接获得的场景信息),其表达能力有限。DeepTracking拓展了传统的贝叶斯跟踪框架,并利用RNN强大的表征能力来建模后验概率。

具体而言DeepTracking引入了一个具有马尔可夫性质的隐变量 ht ,认为其反映了真实环境的全部信息。最终需要预测的 yt 包含了 ht,包含了 ht 的部分信息,可由 ht 得到。假设 Bt 为关于 ht 的信念(belief),对应于后验概率:Bel(ht) = P(yt|ht) 。之后经典贝叶斯跟踪框架中由 P(yt-1|x1:t-1) 到 P(yt|x1:t) 到的时序更新在这里转化为:Bt F(Bt-1,xt)和 P(ty|x1:t) = P(yt|Bt)。

给出形式表达之后的关键是,如何将其对应到RNN的框架中去。DeepTracking的核心思路是用利用两个权重 WF 和 WP 来分别建模 F(Bt-1, xt)和P(yt|Bt ),将Bt 定义为RNN时序之间传递的memory 信息。此时,如上图所示RNN的各个状态和推进流程就和跟踪任务完美的对接上了。

实验部分,DeepTracking采用模拟的2维传感器数据和如上图所示的3层RNN的网络结构,Bt 对应于第三层的网络输出。通过无监督的预测 xt+n 的任务来使网络获得预测 yt 的潜在能力。

小结:

DeepTracking作为用RNN建模跟踪时序任务的作品,其亮点主要在对RNN和贝叶斯框架融合的理论建模上。实验展示了该方法在模拟场景下的不错效果,但是模拟数据和真实场景差距很大,能否在实际应用中有比较好的表现还有待商榷。

总结

本文介绍了深度学习在目标跟踪领域应用的几种不同思路。三种解决训练数据缺失的思路各有千秋,作者认为使用序列预训练的方法更贴合跟踪任务的本质因此值得关注(近期也有应用Siamese Network和视频数据训练的跟踪算法涌现,具体参见王乃岩博士在VLASE公众号上的介绍文章《Object Tracking新思路》)。总的来说,基于RNN的目标跟踪算法还有很大提升空间。此外,目前已有的深度学习目标跟踪方法还很难满足实时性的要求,如何设计网络和跟踪流程达到速度和效果的提升,还有很大的研究空间。

致谢:本文作者特此感谢匿名审稿人和图森科技首席科学家王乃岩博士对本文所提出的建设性意见。



该文章属于“深度学习大讲堂”原创,如需要转载,请联系@果果是枚开心果. 

作者简介:

徐霞清,中国科学院计算技术研究所VIPL组硕士生,导师常虹副研究员。研究方向为深度学习与计算机视觉(目标跟踪等),个人邮箱:xiaqing.xu@vipl.ict.ac.cn


原文链接:深度学习在目标跟踪中的应用

欢迎大家关注我们的微信公众号,搜索微信名称:深度学习大讲堂