首页 > 代码库 > 深度学习(综述,2015,应用)
深度学习(综述,2015,应用)
0. 原文
Deep Learning Algorithms with Applications to Video Analytics for A Smart City: A Survey
1. 目标检测
目标检测的目标是在图像中精确定位目标的位置。已经提出了许多使用深度学习算法的工作。我们回顾如下一些有代表性的工作:
Szegedy[28]修改了深度卷积网络,用回归层代替最后一层,目的是针对目标的box产生一个binary mask,如图3所示。另外,还提出多尺度策略,来提高检测精度。他们做的结果,在VOC2007上对20个类别达到平均0.305的错误率。
不同于Szegedy的工作,Girshick[29]针对目标识别问题,提出一种基于自底向上区域提取的深度模型。图5是算法的pipeline。首先,在输入图像中,提取2000个区域。对每个区域,一个大型的CNN用来提取特征。最后,每一个区域使用线性SVM来分类。据论文里描述,这个方法可以明显地改善检测准确率,从mAP来看,可以提高30%.
【Girshick做的工作和我想的一样,先提取区域,再构造特征空间,最后用分类器分类(三步走策略)。所谓的深度学习用于目标识别,就是把“构造特征空间”这一步,用CNN来实现。所以,CNN其实本身不是分类器,而是一种信息的表达,即构造特征向量。等等,如果信息没法用向量的形式表示怎么办,而硬要用CNN提取向量形式的特征,效果会不会很差?回到CNN是一种信息表达,目前所知的是提取一张图片的特征,就像HoG,Haar特征一样。那如何自动提取一个动作事件的特征?】
类似的,Erhan[30]提出一种基于显著性的深度网络来检测任何目标。然而,他们使用深度神经网络以未知类标签的形式,产生目标的待选区域,这些候选区域称作bounding box。在他们的工作中,目标检测问题转化成对bounding box的坐标的回归问题。在训练部分,使用后向传播算法来更新box坐标、置信因子、以及学习的特征,来解决预测box和真实box之间的对应问题。总的来说,他们针对目标定位问题,定制化了一个深度神经网络。
【他们工作的思路是,把目标识别问题,换一种方式表述,从转换成另外一个问题,然后针对这个提出的问题,定制化深度网络。可以从这篇文章,学习到如何对一个不同的问题,用深度网络的方式来解决问题。扩大了方法(深度网络)对应的问题域范围。】
目标检测技术在智慧城市中有很多应用,如行人检测,车辆检测,无人监测的检测。深度学习算法可以处理一大类不同的目标。所以,智慧城市系统中常常使用深度模型来处理大规模数据。
2. 目标跟踪
目标跟踪的目的是在一组视频序列中,给定第一帧目标的位置,在接下来的图片中定位到目标。我们在下面介绍了一些有代表性的工作(We review some representative works as follows)。
Wang[31]针对视觉跟踪问题,提出使用stacked denoising autoencoder学习深度紧密特征。论文里称,使用学习到的深度特征,可以完败另外7种最新的跟踪器,以10张序列图片为例,平均中心误差仅有7.3个像素,平均成功率有85.5%.另外,使用深度特征的跟踪器的平均帧率达到15帧每秒,达到了实际应用的要求。
【这篇论文很厉害,用深度学习里面的一种网络架构方法(stacked denoising autoencoder),学习深度特征。这个特征,就不仅仅局限于RCNN中的CNN特征,而是自己需要的特征。好吧,CNN-like方法,只能得到CNN特征。和CNN并列的其他DL架构,也可以针对具体问题,做“特征提取”的工作。所以,从这个角度来看,深度学习,就是从提取特征。而具体是什么问题,什么数据,提取什么特征,使用什么深度学习架构,就看你的积累和认识了。】
Li[16]针对跟踪问题,使用CNN学习判别特征(discriminative feature)表达。图7是这个算法的框图。从框图中可以看到,使用了一个多CNN的pool,来应对所有可能的底层cues,以保证不同的kernels,这样做的目的是为了从目标的周围把目标提取出来。从图中还能看到,使用了一个指定类的CNN,可以用来追踪某一类目标(如人脸)。
【这位哥用CNN提取特征,而且这个特征强调是discriminative。具体如何使用,就有很多trick和选择,比如这篇,用了多个CNN,另外还有一个class-specific CNN,意思是不是说,除了指定类的CNN,还有不用指定类别的CNN,也就是非监督CNN。额,用CNN提取CNN特征,不就是不用指定类别的吗,如果是要分类,就需要指定类别,如果仅仅是提取特征,就不用指定类别。不过,这也不叫非监督CNN,因为这个CNN就不是来分类了,而是提取特征。】
Wang[33]提出学习层次化的特征,这样可以抵抗目标的运动变换和外形变化。这个层级架构以及相应的调整在图8中显示了。首先,使用[34]提出的方法学习一般特征,其中,[34]提出的方法是一个含时间约束的两层神经网络,学习是从备用的视频中离线学习到的,这个一般特征可以对抗复杂的运动变化。然后,根据指定目标的序列,以在线的方式预学习一些特征。这样做的好处是,这些特征可以捕捉到目标的外形变化。例如,论文提出的跟踪器,不仅可以处理篮球运动员的非刚体形变,还可以处理特定的外形变化。论文里称,使用特征学习方法,可以明显地提高跟踪效果,尤其是对于包含复杂运动变化的目标。
【这位爷的工作是建立在[34]的工作基础之上的,[34]是DL的早期耕耘者,如Ng,KaiYu,这篇文章做的事情是,提出一种提取图片的不变特征的方法。本文的作者就直接采用这个方法,然后自己设计了另外一种方法,两个相组合,得到本文提出的层次化特征。另一个很好的思路是,用特征自学习的方法,可以解决很多按照传统思路解决不了的问题,比如跟踪的目标发生很大的变化。所以,你要去想,特征学习,这个思路,究竟可以怎么样用在你的问题中。】
目标跟踪可以用在智慧城市的监控系统中。能够自动跟踪嫌疑人或目标汽车,对于安全是很重要的。所以,对于大量的视频数据,深度学习方法可以增强跟踪系统的性能。
3. 人脸识别
人脸识别包含两个主要任务:第一个是人脸验证,第二个是人脸身份确认。前者的目标是给定两张脸,看是不是属于同一个人。后者的目标是判断给定人脸的身份,根据已知的人脸集。最近,许多深度学习的方法对这两个问题都取得了不错的结果。
Huang[35]使用卷积深度置信网络来学习层级特征。这篇文章的主要工作如下:
1. 设计了一个局部卷积的restricted Boltzmann machine来处理一类目标(如人脸)的全局结构。
2. 深度学习的方法用在LBP特征[36]上,而不是原始的像素值上,目的是捕获更复杂的特征。
3. 为了加强多层网络,学习网络架构的参数就变得很重要了。
图9表示了局部卷积的restricted Boltzmann machine。论文中表示,使用学习到的特征可以实现和目前最好的手工设计的特征的方法,一样的效果。实际上,在接下来的工作中,深度特征已经远远甩开手工设计特征了。
【还是学习特征,这次出场的是受限玻尔兹曼机,外加上局部卷积。所以对DL的不能仅限于1989年LeCun的那篇文章,不能仅限于CNN,而是更加本质的东西。另外,这篇文章已经有了苗头,就是DL不是直接用在原始像素上,而是经过了一层处理(LBP特征),再用DL的方法。】
Taigman[15]提出了一个基于3D人脸模型的人脸对准算法,以及使用9层网络来学习人脸的表达。图10为这个9层网络的框图。前三层提取低层特征(比如,边缘,纹理),接下来三层是部分连接的,对人脸图片的每个位置学习一组不同的滤波器,这么做是因为不同的区域有不同的局部统计特性。再往后两层是全连接的,用来提取人脸图片不同位置的特征的相关性。最后一层就是分类标签了,使用K-way softmax.训练的目标是通过对每一个训练样本,最小化互熵损失,来最大化正确类别的概率。论文中表明,使用这个方法,可以在LFW数据集上,达到和人眼差不多的效果。
【从这个9层网络可以看到:1.低层网络提取低级特征,高层网络提取高级特征(really?)。2.深度网络仅仅是提取特征,和分类没啥关系。这里的最后一层是分类(就是一般模式识别书里面讲的神经网络的那些方法)。所以说,其实,分类问题和DL没啥关系(really?)。3.别看它有9层,其实每一层的设计都是有根有据的,不是瞎胡闹的。】
Sun[37]针对人脸验证问题,也用DL提取深度特征,自己给取了个名字,叫DeepID。图11是特征提取步骤。首先,。。。。。。
【】
Lu[38]通过联合特征学习的方法从原始像素中自动学习层级特征表达。图12是算法框图。首先,每张人脸图被分成不重叠的区域,联合学习到特征权重矩阵。然后,每个区域学习到的特征经过pool,表达成局部直方图特征。最后,这些局部特征组合起来,拼接成一个长长的特征向量,用来表达这张脸。另外,联合学习的模型组合成层级形式,这样可以挖掘层级信息。这个方法在5个人脸数据集上都取得比较不错的效果。
【特征学习在整个pipeline占据有限的空间,起于像素,止于中间特征,后面又用到了传统的特征方法,如直方图特征描述子,最后才拼接成特征向量(why?简单的拼接是正确的,合适的,最好的方式吗?既然特征向量这么重要,就这样简单的拼接,会不会太随便了?)另外,这篇文章还提到一个“用深度层级架构来挖掘层级信息”想法,这个在前面的文章中也提到过。所以,什么是层级信息?如何用深度层级架构来挖掘所谓的层级信息?】
人脸识别已经广泛地用于安全系统和人机交互系统。它仍然是一个很具有挑战的问题,因为光照,姿态,表情等等不确定因素。深度学习可以使用大数据训练深度模型,来获得更有效的人脸特征。在以后,智慧城市的人脸识别系统会极大依赖从深度模型中学习到的层级特征。
4. 图像分类
图像分类在过去几十年一直是一个热点研究领域。已经提出了很多很好的方法,如词袋表达,空间金字塔匹配,主题模型,基于“部分”的模型,稀疏编码等。这些方法使用原始的像素值,或者是手工设计的特征,而无法获得数据驱动的表达。最近,深度学习在图片分类问题中,取得的非常好的结果。我们回顾如下的一些工作:
Krizhevsky[11](就是Hinton在2012年做的图像分类的工作,具有历史意义的工作)设计了一个包含6,000,000个参数的深度卷积网络,有650,000个神经元。这个深度模型有5个卷积层,max-pooling层,3个全连接层,最后是一层包含1000个节点的softmax。图13是这个深度模型的框图。这个深度模型在某年的比赛中,把图片分类的错误率降到了8%。测试的数据集包含了1.2million张高分辨率图片,有1000个类别。这个比赛在计算机视觉领域享有盛名,每年都会举办一次。这个比赛不仅吸引学术界,还包括工业界。例如,Google在2014年的比赛中,以6.66%的错误率,获得冠军。就目前而言,高性能计算对于深度学习至关重要。中国一家搜索引擎公司Baidu得到了5.98%的错误率,他们使用的超级计算机叫Minwa,包含36个服务器结点,每一台服务器有4块Nvidia的GPU。(不想写了,作弊了都。)
【Hinton设计的这个网络Alex-Net,具有历史意义,值得深入学习。】
Lu[44]提出了多流形深度度量学习(真拗口)。首先,对每张图片使用流形来建模,然后把流形模型送给深度模型的多层网络,并映射到另一个特征空间。特别的,深度网络是指定类别的,所以不同的类别有不同的参数。然后,使用maximal manifold margin criterion来学习这些流形的参数。在测试阶段,这些指定类别的深度网络会计算测试图片和所有训练类别之间的相似度。距离最近的那个就是分类结果。这个方法在5个广泛使用的数据集中取得了不错的结果。
【深度学习和流形的结合。首先第一点,对一张图片用流形来建模,想想就觉得很神奇。这里提到一个“指定类别的深度模型”,这样的深度模型,就不仅仅是提取特征,而是针对具体的类别来提取特征,感觉有点小复杂。它是不是把具体目标的特征和与目标无关的特征融在一起了?这样做,真的好吗?】
Zuo[14]针对图像分类问题,设计了一种端到端的层级卷积递归神经网络(C-HRNN),用来挖掘上下文关联。图15表示了C-HRNN的结构。首先,使用5层CNN来提取图像区域的中间层表达。然后,对第5层的输出,进行多尺度处理。对每个尺度,通过区域和它邻近区域的关系,挖掘空间依赖关系。对于不同的尺度,用高尺度到低尺度的对应关系来表示尺度依赖关系。最后,最后,不同尺度的HRNN输出送给两个全连接层。C-HRNN不仅仅充分利用CNN的表达能力,而且对不同区域的空间和尺度的依赖关系进行了有效的编码表达。该算法在4个图像分类数据集中取得很好的结果。
【这个哥在CNN的基础上,添加了空间依赖关系和尺度依赖关系,相当于是对CNN的改进吧。也就是说,你把CNN这个东西的本质抓得很准,就可以自由地把CNN用在你自己的问题中,再加上你对其他基本特性的了解,知道如何去表达它们,这样就可以设计出适用于自己问题的深度模型。这就是我想做的事情,可以自己针对自己的问题,设计出解决自己问题的深度模型。】
#
5. 场景标记
场景标记的目标是给场景图像的每一个像素分配一个语义标号。着很有挑战性,因为很多情况下,一些类别无法区分。一般来说,真实世界的“物体”的像素会由于尺寸、光照、姿态等变化而不同。而基于深度学习的方法,对场景标记问题,给出了非常好的结果。我们回顾其中的一些工作。
Shuai[19]提出把CNN当作一个参数模型,来学习判别特征(discriminative features),用在场景标记的分类中。图16是方法的框图。首先,使用全局场景语义来去除局部上下文的模糊性。,通过传递类间依赖以及从相似例子中获得的先验。然后,在像素级别,把全局势能和全局置信因子结合起来。通过结合全局和局部的置信因子,可以得到标记结果。最后,使用基于测度学习的大范围margin方法,来提高全局置信因子的精确性。这个模型在SiftFlow和Stanford的数据集中,都取得了不错的效果。
【在CNN的基础上,提出了全局置信因子和局部置信因子的概念,再搅吧搅吧,做成了一个模型。从这篇文章,也许可以学到,如何改造CNN,设计自己的模型,来解决自己的问题。】
Shuai[45](又是这个人)提出了一个有向无环图结构的RNN(DAG-RNN),来对图像单元中的长距离语义依赖进行建模。图17是提出的网络结构。首先,使用无向有环图(UCG)来对图像单元之间的依赖进行建模,RNN并不能直接处理UCG结构化的图。因此,一个UCG被分解成几个有向无环图(DAG)。每一个DAG,用DAG-RNN进行处理,得到一个隐藏层。用这些隐藏层来获得上下文关联的特征图。这样一来,局部表达就可以嵌入到图像的抽象主旨中,效果大大增强。论文称,DAG-RNNs在SiftFlow,CamVid和Barcelona等数据集上,效果不错。
【综述是中国人写的,所以综述里的文章也大都是中国人写的。是中国人的科研水平已经达到了世界顶尖水平,还是为了宣传自己同胞的工作?不过,既然选择读这篇综述,还是要相信综述作者的专业水准的。这篇文章没有用CNN,好嘛,终于看到不用CNN的深度学习方法用在CV问题上的。用的是RNN,不过可以看到的是,RNN并没有直接处理像素,而是经过了一层处理(UCG)。这些图也许是概率图模型里的东西,这难道就是传说中的概率图模型和深度模型的混合使用?】
Wang[46]针对RGBD的场景标记问题,提出了非监督联合特征学习和编码的框架。首先,用两层堆叠结构的网络进行特征学习和编码,这一步叫做JFLE(联合特征学习和编码)。为了让JFLE更加通用,对输入数据使用非线性堆叠层的深度模型建模,得到的模型叫JDFLE。这个模型的输入数据是从RGBD图片中密集采样得到的patches,模型的输出是对应路径的特征(corresponding path features),这些特征接着产生超像素特征。最后,使用线性SVM来把这些超像素特征对应到各个场景标签。这个方法在NYU深度数据集中效果不错。
【这篇文章,属于使用深度模型的典型用法:数据编码,对数据换一种表达方式,或者说提取一种更加power的表达,然后该干嘛干嘛,该SVM就SVM】
场景标签可以。。。
6. 个人小结
- 文章标题里的Video Analytics for A Smart City纯属标题党。
- 总括就一句话,如何针对自己的问题,设计深度模型来解决问题。而深度模型解决的核心问题,就是数据特征的挖取,表达,就是自动构造特征空间,特征向量的方法。至于具体这个方法在整个pipeline中占据多少空间,就取决于对问题本身的理解,以及对各种方法的理解。
- 深度模型里的元模型,即CNN,DBM之类的,发明这些模型的人,都是这个领域的奠基人。中间踩过多少坑,走过多少弯路,只有他们自己知道。
- 网上看到一句关于评论Hinton在2012年的那篇论文,说,“Hinton自2006年的那篇文章以来,怀疑声不断,终于在2012年的图片分类的比赛中出手了”,描述的挺有趣,大师一出手,果然非同凡响。别人都是%1点几的蜗牛速度挪动,他直接提升10%。霎时间,惊天地,泣鬼神,世界众多门徒,归于其门下,络绎不绝。
深度学习(综述,2015,应用)