编者按:王勃在《滕王阁序》中创作出了千古名句:
“落霞与孤鹜齐飞,秋水共长天一色。”
短短十四个字,极具层次性地提炼出了视觉画面中的色彩之美、动态之美、虚实之美、以及立体之美,因此成为了景物描写的绝唱之笔。
而在计算机视觉领域,这十四个字的创作过程,其实就是从视觉系统中提取关键特征、并以简短紧凑的方式呈现出来的过程。
计算机视觉技术自诞生之日起,即面临着较大的计算压力,这一领域的研究也一直在以空间换时间、或者以时间换空间这两种尝试中交替前行。至今,虽然随着GPU的盛放,算力得到了很大的提升,然而,在真实场景下的人机交互中,仍面临着端侧资源不足的问题。因此, 如果我们的特征提取过程能够做到对整个视觉输入的“提纲挈领”,即提取过程更加快速、特征表示更加紧凑,将有助于计算机视觉在生活中的真实落地。
今天,来自厦门大学的纪荣嵘教授,将从视觉信息的紧凑性、深度网络的紧凑性、以及检测算法的紧凑性三方面,来介绍如何实现紧致化的视觉大数据分析系统。
文末,大讲堂提供文中提到参考文献的下载链接。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/3194129b36cce0f6bf5f286e96d94d1d.jpeg)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/75670f53b0dc84193edeb962e9daa3ac.jpeg)
首先,刷一波福利,厦门大学媒体分析与计算组,在招收硕士生、博士生、博士后、助理教授等。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/dfff34d11a91a3e7785d523cbda91094.jpeg)
在厦门大学那么小的研究组怎样能做一些跟别人不一样的事情呢?我们从思考现有算法的问题入手,思考除了精度之外还有哪些问题。其实如果大家看一下视觉搜索和识别的流程,从特征抽取、描述、到索引,都对系统紧凑性有很重要的要求,虽然目前还没有引起广泛关注,但已有很多工业界的应用需求。因此,从2013年到现在差不多五年的时间,我主要研究怎样把搜索系统和识别系统做小和做快。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/5acbebb4a2a6c6f920afe0a0cf71199e.jpeg)
本次报告包含三个部分:
第一部分是视觉特征紧凑型:如果特征抽出来没有明确目标做视觉特征检索,这时候怎么把特征做得又小又快。
第二部分是神经网络紧凑型:现在有很多做端到端的学习,神经网络怎么做小怎么把速度提起来。
第三部分是检测算法的紧凑性。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/fe57089775803a8cec9df70217c66adc.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/eb8283b066923a7822488c9fc87dcdeb.jpeg)
在视觉特征紧凑型方面,视觉数据是大数据里面的主体,谈到大数据,我们首先想到的数据量最大的还是图像和视频数据。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/8b0b10c9fd0477f4cb5c05953dddb4b3.jpeg)
如果不可以把图像和视频数据找到,它们的价值其实很难得到发现。我们这时候面临的问题是,需要在上百万或者上千万的数据集里面,高速高效的把相关视觉数据找到。这个问题本身并没有那么容易,因为它是非结构的,这个时候不得不用近似搜索方式在有限精度损失情况下,能高速把视觉数据找到。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/813d76d9eb5d29d781fa635009a0f471.jpeg)
为了做这个问题,现在有些特征也能达到视觉搜索的目的,但是没有办法在移动视觉伸缩或者高通量检索里面做。比如现在的视觉包特征,CNN特征,VLAD特征等,他们的维度相对来说还是很高,另外可以用一些倒排索引技术,用空间换时间,当然如果空间开销过大,也会造成在移动式或者嵌入式系统里面无法使用的问题。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/7c141174618ca381cde76b951d95ef5d.jpeg)
在过去4年时间里我研究兴趣转到去做特征的二值化。给定一组图像数据库,我们希望把每张图像映射成二值编码,如果两张图像相似,期望二值编码相似,如果不相似,期望二值编码距离要越远越好。
如果能达到这个目标当然更好了,我们就可以做高速高效的匹配。首先哈希函数的特征投影快,其次他的搜索时间为汉明查表,复杂度O(1)时间也很快。最后百万级的图像可以像搜索系统一样压缩的储存在内存中,使得它的体积相对小很多。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/4f28fd7f6c626b5a1b2e092567d20062.jpeg)
它的特征可以快速紧凑存到内存里,这种速度上的提升背后会带来精度上的损失。所以,从2004年第一次提出这个问题之后,大家关注在怎样把损失减小。从研究方法来分可以分两类,第一类是construction损失减小跟数据没有关系这叫数据独立的哈希,第二类是期望把数据分布考虑到量化误差上,这里面根据有标签和没有标签分成两类,无监督或者有监督,想要有监督效果更好,但是需要人工标注非常贵。这是一些早期的发表的相关文章。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/43e3e7b14045e64acd0d7f091094bdb0.jpeg)
对于特征空间做随机划分,我们可以精确保证,如果两个点在原始空间里面是近的,生成二值空间里面有一定概率仍然是近的,这个概率跟哈希比特码程度是正相关的。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/f74e21515585ca18f1ff16ffc4bec2f0.jpeg)
原始空间并不是那么完美,可以对当前数据集建立一个近邻图,然后去算图的拉普拉斯,希望把图上的相似性得到二值码学习过程中,很直接就相当于加了一个权重矩阵。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/8984853f76e27abea67816dee728d026.jpeg)
但是,如果这么做,就会存在一些问题。主要问题在于对这些数据去做拉普拉斯,去求矩阵的特征向量,我们知道当矩阵很大的时候求矩阵的特征分解是很困难的。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/281e3f22e6d1b07283f447acd14d7b6d.jpeg)
为了解决这个问题,在2011年在ICML上提出了采用锚点图估计graph结构,因此计算基于数据点到数据点的相似性,转变成数据点到锚点的相似性,锚点再到数据点的相似性。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/fa50facd4d6174bff4f6aba4795ed929.jpeg)
如果要算矩阵估计的近似,首先得给个约束,我们可以通过矩阵分解快速求得基于锚点的相似点矩阵,因此可以加快计算。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/fb532a5400d389fc20a93fc94c23421c.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/76e5a4c82107084025359c1d4176ce15.jpeg)
此外,原始空间不完美,因此可以先对空间先做一次PCA投影,计算投影矩阵,然后计算旋转矩阵,通过量化二者之间的交替和叠加的方式去做,这就是无监督的方法。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/f809533d363e00ce79af2fc6c35cf035.jpeg)
此外有监督的方法从2012年开始也有相关涉及,这是我们发在CVPR上的文章,我们除了引入哈希里面的图像点之间之外,我们希望有些图像越相近越好,有些图像越不相近越好。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/5ddcc619a0c95dd765f6c81890a9b415.jpeg)
当时我们做了一个很重要的贡献,我们把汉明距离通过编码的内积进行计算,并通过数学计算来证明。之后发展很快,我们也做了很多工作。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/b3f8397fcd52c76c01c3425a697dc66e.jpeg)
今天主要介绍两个方面,第一个2015年开始是排序敏感的视觉特征的哈希,在哈希学习过程中怎样把排序信息嵌入到二值码的学习。第二个方面是怎样在二值学习空间里面可以做图形处理。第一个动机我们最早发表在2015ICCV上,以前的工作算是Pairwise similarity。我们想如果做哈希特征,它的目的是做检索。那么拿得到的排序信息更多的来自于它的ranking list。所以我们期望在特征空间里面如果有个原始的ranking,希望映射成二值码之后。二者排序列表要越相近越好。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/0013ea5332c42b527323666c6412da56.jpeg)
为了解决这个问题,我们在特征数据集里面随机选取三元组,如果在原始空间里面两个点,比如说I和J的距离小于I和S的距离,假设生成的I和J的距离大于I和S的距离,就会产生损失。我们可以通过在数据集里面大量的生成,来衡量生成二值码里面这个损失到底有多大。再加上其他的方法就可以把损失嵌入到传统哈希学习里面去。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/1507b67c8c67bc2b6d08473b4f72479f.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/da8f8a41e88b0a2721d817c27eb517c1.jpeg)
我们对比三个数据集SUM397,ImageNet,YouTubeface等去验证我们的方法,当时超过了大部分的无监督/有监督哈希方法。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/b1ac3bda7c413ec2b545550a2175bad7.jpeg)
到了16年,我给我的学生讲我们在15年做的工作,需要采大量的ranking list,才能去保证性能有比较好的提升。所以在这个过程中排序信息是比较冗余的,因此我们就思考可不可以有更紧凑的监督。实际上监督的紧凑性是存在的,这个叫做保序性。所谓的保序性,不是给的一个点,而是点对和点对的相似性关系。这个图上每个节点给出的是两个点之间的相似性,点对点之间的相似性即使序列关系。把给定序列相似性嵌到哈希学习方法里面去,这是2016年论文主要工作。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/53ab3ef09b88c4113277943ef733398f.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/ba84ab054691c9708fff03b4aa3d4564.jpeg)
由于原序列图的规模较大,我们通过landmark-based ordinalembedding的方法,把原来与样本大小成四次方的序列数量降低到样本数的二次方。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/e21c2b197e460cab7f8c37db196fb32e.jpeg)
这里面我们做了几个事,第一就是在传统图像数据集上评测。比如说CIFAR10,LebelMe.第二是跟腾讯优图实验室做比较好的合作。我们参加音乐检索竞赛,在音乐检索过程中,有一个很重要步骤,切成很多音乐片断,片段与片段之间要算他们的相似性。这个相似性切得越细效果越好,但是会越慢。我们跟它的合作就是怎样把切片保证切细的情况下把速度提上去。
厦门大学把这项技术转化转移到腾讯QQ音乐里面听歌识曲的功能中去,这是结合做的比较好的典范。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/099971016305db311cc01903cd7da352.jpeg)
下一项工作,从2016年之后我们进一步思考,我们发表的OEH里面存在的一些问题,OEH方法虽然效果不错,时间复杂度相对较高,同时我们要随机的选择训练点。我们可不可以进一步加速这个模型的训练过程,这是我们在2017年的文章,我们探索高阶序列关系,并重点解决两个问题,一是怎样高效表示序列的关系,二是如何缩减序列关系数量。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/831feeab88872fc0c47e4cfc3bd2fe53.jpeg)
针对第一个问题,我们提出张量序列图。我们构建一个S和DS矩阵,这两个矩阵做成张量图,这个方式可以把原来的复杂度进一步降低。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/4ddedb840a8c3b3dc22347bb46ac7864.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/d55b156e4dfd54c8fd43f6209607b208.jpeg)
第二个问题我们做的是序列约束的投影。精确来说,我们把传统四元组之间的序列关系,在投影之后变成两两三元组之间关系的求差,这个方式可以高效缩减它的复杂度,把原来L的四次方降成L的三次方,使数量跟样本点无关,极大加速了算法离线学习过程。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/e7687373edbed1b76c21b7f5597ac74b.jpeg)
这是对应的性能的表格。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/d00bee077c3f07a2a9e9ece30c4efe72.jpeg)
去年另外一个工作,我们做的事情就是,传统的二值空间。大家想做比如近邻图,比如做PCA。我们知道还有更好的方式,希望学的子空间能够流型相似性。主要问题是学出来的是二值码,怎样在汉明空间保留流形结构,保留数据之间的局部近邻结构和线性关系,这是我们解决的问题。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/b9a99445e64d1daf0b9f5192c8807695.jpeg)
我们的工作是离散的LLH,这是受LLH启发后的版本,我们的哈希函数是传统线性的函数,目标函数有几项。第一项B-SB,你生成的二值码和你这个二值码把这个点扔掉,用其他点去重构他,他们是不是一致?如果是一致的话就表明局部保持了这种一致性。第二项有点像ITQ里面去做旋转之后做二值投影。
直接解目标函数也可以,但它们复杂性还是挺高的,这里面有N的平方。之前的工作,我们在这里面引入基于锚点的方式,有些公式很简单。原始的特征点算他们的相似性,我们采用一些anchor,算两个点之间的相似性,我们不直接算,我们算这个点到anchor,anchor再到这个点的相似性。这种方法可以使我们的时间复杂度得到精确的下降,并使我们的内存开销得到很大的减少。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/f0521982bf447233fbaa934fe2a8b39e.jpeg)
如图所示,是随着我们样本数的增加,内存开销相关的量。基于anchor的方式可以有效地减少内存开销。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/e32ca0287baa5bce065ab4d1b4f4ffac.jpeg)
对应起来,我们在CIFA10和YouTube face上对比,我们采用加anchor的方式,有些性能可能降低,但我们的训练速度得到了很大的提升。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/a9ceb595437a3ac4a2f5356460cc9c87.jpeg)
下面分享一下我们最近做的深度网络紧凑性。这里有两块,第一块是怎样把网络压小,第二块是怎样把网络做快。压小不等于做快,做快不等于压小,二者有不同的处理方式。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/6619d7d4dee874b2c6c55fde43254cd0.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/ba8231e665e62d63e6c6e78ed7bfc3de.jpeg)
我们现在有庞大的数据集,有着强大的GPU计算硬件设备。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/9693581c35b2be77443276f6dca33f6e.jpeg)
因此从2012年image的冠军开始,深度学习迅速崛起,涌现了一系列深度神经网络。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/f5e86b4ad6df5dbf06672f41d1b6aed7.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/01bb8ddf6c48736d24f4a5895f993af6.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/976ba557fc2b25649c3277d97d22827e.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/7d4458f3d64cddee2e555ac7ad7d73d3.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/6ac55707bde3857de5741032dcf5f236.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/84bcb59fe24383b052b28cecffce20f1.jpeg)
像VGG从11层到19层,GoogLeNet (Inception V1),Facebook的resnet等等一些模型。有很多的网络,这些网络陆续一直在出来,也有很多相关应用。在这里面大家做新网络过程中,如果简单的相对这个研究而言,生命周期就短了一些。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/77ad57de74e75bc203476361fbbdf9b1.jpeg)
这里面有很多问题值得做,只是我还没有能力做这个事情,比如说小样本的情况下怎么做,如果正样本很少负样本很多的情况下,怎样解决有偏差样本分布。 还有一些无监督的问题,黑盒子的问题。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/175b271b5c0ed43d642d58243826261b.jpeg)
我们现在做的事情更多来自于里面的复杂度。第一点,就是把里面模型参数量减少,对应把模型压小。第二是把模型浮点数运算减小,对应把模型做加速。以下简短回顾一下在这个方向里大家怎么做以及我们做的事情。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/3d8261c513d19b5ac0dbdadd383643d2.jpeg)
从模型压缩角度来说,我认为这里面工作可具体分成三种。第一种是将不同原始参数,构建一定映射共享同一参数,叫做参数共享,代表性的方法包括TTQ,PQ等等。第二套方法是在模型里面把参数裁减掉。第三个方法是把两层之间的参数想象成矩阵,可以运用很多矩阵分解方式去做模型压缩。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/e518d09a874839c2c54e8268e04b99f0.jpeg)
这是最早的ICML的2015的文章,HashedNets,利用hashing技巧来进行权值共享,例如原来是4*4,要保留16个参数,现在做一个量化表,除了这三个单词特征之外,只保留量化表里面的索引,这样就可以把网络压小。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/b52263519bcccfb96c7264d3527d8acc.jpeg)
这是一篇经典的实现参数共享,减少内部参数的冗余性。可以通过简单二值量化,即将原始的浮点型参数量化成二值化的参数,只需要比较参数和阈值0的大小。另外,也提出了利用乘积量化的方法,将原始的权重W分解成m个不同的子矩阵,通过对每个子矩阵进行k-means聚类,得到子字典及其索引值。当字典单词的个数较小时,就可以实现压缩参数的目的。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/f1c4a99126e5a6dd61305646101b6bfa.jpeg)
这是ICLR2017上的文章,利用三值量化的方法,来防止二值网络的量化误差过大问题。具体而言,通过设计一个非对称的量化值,并在网络训练过程中自适应的学习该参数。与此同时,引入另外一个梯度用于学习该三值网络的索引,由此提高了网络的准确率。这是第一套方法。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/6f4200c59ef24718c9778b0dece854bf.jpeg)
第二套方法主要做剪枝,最早的起点是2015BMVC的文章,它的做法是计算所谓的显著性,就是当前把相关叶子跟子集裁掉之后,当前网络误差性能的上升,希望找到这样的节点,使得它的裁剪不会影响整个网络性能。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/deab89708a56216f2ca4c6c06979ef13.jpeg)
对于这个问题大家最早知道的是来自这篇韩松的文章。这篇文章第一块是做网络裁剪,中间用量化方式做网络参数共享,第三块在裁剪和共享之后再做对应的霍夫曼编码进一步做缩减。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/22231e8d05bdcd5f2a615a206719ef0e.jpeg)
第三套方法是用数学方式去做里面的压缩。例如发表在NIPS13上文章,提出从理论与实验方面验证深度神经网络中存在大量的冗余信息,只有少量的参数需要学习,大部分的参数都可以根据已知参数直接得到,不需要通过额外的学习。其中可利用低秩分解技术压缩网络模型,通过将原始较大的网络参数,分解成两个小型的矩阵相乘。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/6df8968fdfb6435c6fef8bffd2394dc9.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/9cc0ff459b3e8f9ca96956e3cc233ceb.jpeg)
这是之前网络压缩方向代表性的工作,我们做了简单的尝试,我们尝试的动机跟之前的方法有些不一样。我们总结前人的方法,他们做剪枝,权值共享,矩阵压缩等。他们做法优化目标是重构里面具体参数,优化单元是一层一层的做。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/d2d4f5b188ceb3e59ada369c1024f76c.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/edb654beeb54438a582f55bb3dc87e78.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/114808ebb2dc4b12ebfe8e33ff1b06a6.jpeg)
我们这样做要要突破两点,第一点,我们更多的考虑了之前的那层output,我们希望输出的向量跟原始模型向量相似就好,中间的参数重构重要但不是那么必要。第二我们不是一层做完之后就不动了,是每层和每层合在一起去做。我们初始的网络压缩完之后,我们会更新里面的参数,最小化非线性响应的全局重建误差。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/f4529b6c1eeb3295ecee4ef7df94d379.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/4fa0502bca522f29be05b4a7001475c4.jpeg)
在固定压缩比情况下,也显示了算法的可靠性。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/481278ac10b9aca1a38edbb8e2dd8704.jpeg)
这是我们2018发在CVPR上的文章。我们还是考虑模型参数的二值化,我们都知道模型二值化优点会极大的减小存储空间。但是它的缺点是会大大降低模型性能。我们的方法叫Modulated Convolutional Networks。MCN训练完成后,只需要存储二值化的参数,在线推理的时候可以重构原来的参数。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/964eb6a32db49a54b5f887ef067f105b.jpeg)
我们主要贡献是用M-Filters来重构网络参数。所谓的M-Filters就是通过学习得到的参数,它优化了三个损失,第一个损失是重构的线性分类误差。第二个损失是重构的网络参数误差,第三个,我们希望加强类内特征紧凑性,减小这种二值化带来的扰动,因此我们叫做中心损失,压缩完之后我们只保留二值参数。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/60b843e92d7fc1d7370f97774ad4a442.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/3c64c61151801cc5762aed2d764d39e5.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/bf294aec305d9f8a061c7c4afb3815cd.jpeg)
我们的实验验证,MCN有可能可以接近全精度的性能。这是一个网络结构用我们的方式去做在线恢复的结果,以及对应网络误差的学习过程。同一类特征要越紧凑越好,以加强类内特征的紧凑性。这是简单实现卷积网络的效果,感兴趣可以看我们的代码和论文。我们文章测了之前有代表性的网络结构,欢迎大家使用。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/21886ebb41c6465c0351a877f67586c8.jpeg)
最后花一点时间讲一下我们在网络的加速这方面相关工作。这里包含三类,二值化网络、结构化剪枝以及张量分解。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/21c34ec6c0a95462785a30ac8390e7c2.jpeg)
二值化网络原理很简单,binary原则上是没有什么做优化。因此为了解决这问题,2015的NIPS 的文章,做BinaryConnect概念的映射,每次训练完这个大网络之后通过这个概念直接映射成对应的二值化网络。理论上可以极大加速算法对应的性能。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/57cf18411b28a2c428aecb6327dbbb77.jpeg)
此外去做结构化的稀疏学习,所谓的结构化稀疏学习公式很多,其实很简单,要卷积的时候,对应参数要么同时为零,要么不为零。所以很自然的用组稀疏的方式放到结构里,利用梯度下降法可自动学习结构化稀疏参数。
最后利用传统的CP张量分解算法,成功应用于深度网络模型加速中,主要思想是将一个张量滤波K分解成4个秩1的向量,然后进行卷积计算,减少了内存开销,同时加速了整个卷积层的计算。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/253f5b06b80f5221ecdf9907b24ae75e.jpeg)
我们第一个论文做的事情,之前大家考虑更多的是把通道域冗余去除。我们做的是进一步考虑空间域的冗余去除。我们的加速原理是只计算空间中重要的点,对于不重要的点可以利用knn或最近邻点近似估计(不重要的点的空间位置信息可以预先存储起来),这样我们可以节省很多空间的计算资源。
那么如何选择空间中重要的点位置信息呢?提出了基于三种的策略:随机的采样,均匀采样,以及impact采样。所有的位置保存形式可以用mask显示出来,对于不重要点的位置设置为0,重要的则为1。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/220fcd5a93c9d81969e2587ff2800987.jpeg)
对于随机和均匀的容易理解,关键是impact。对于impact主要利用了学习策略,首先认为如果空间点位置信息比较重要,删除后(即将位置点的计算值O为0)对于网络输出的损失变化较大。通过利用构建泰勒公式展开,整理并排序损失增量期望值E,通过选择指定数量的重要的点最为mask为1。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/2ea9e4d601dfec4ec48c178853fc57ac.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/90bba64372159a1da89545f4f9fc34d7.jpeg)
这是我们在ImageNet 和Googlenet上面做的实验,结果表明我们的方法相比其他的方法性能还是提高很多。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/13110d527ee6c922b94bc9b17d82a3ec.jpeg)
这是我们今年一篇新的论文,用全局和动态的方式做对应的剪枝,这里面的想法很直接。这之前所有文章都是剪掉就剪掉了,选取什么时候剪是一层一层的选。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cab18670fe8ae8fe7c47086fc97d2091.jpeg)
我们允许这个网络被裁剪之后还可以被挪回来,所以是动态的,这是对应算法的框架。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/830983ac4ef33270e4512808aa6fd676.jpeg)
我们的主要贡献有三点,第一点充分的考虑滤波间的关系,全局滤波移除,第二点是动态更新滤波的显著性,第三点是统一全局与动态方式。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/8b480fa9210601a6c1c7b1a5f680f88d.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/598daf47f5afb89ec1ea243b938873bd.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/b8a245b312b476957c06314b7ee7cc5c.jpeg)
这是我们的实验结果,由于时间的关系我就不一一解释了。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/3cd21124142c3b3379220877747ba8eb.jpeg)
最后讲一下检测算法紧凑性。我们会发现在视觉分析系统里面,神经网络是比较慢,但有些时候它并不是速度的瓶颈,瓶颈还有其他地方。比如说传统的弱监督学习中的目标检测,我给一个图像级别的标签,然后去训练目标检测器。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/80528719e5bc0c9ce98ccbd43c4643cc.jpeg)
这是之前的主流的弱监督目标检测的工作,他们不像全监督(比如yolo,SSD)一样快,他们很慢。在这之前最快只有2帧不到的在线检测速度,肯定不能实时。为什么呢?主要原因有两点,第一点它做了多尺度和翻转的数据扩充,因此时间消耗很大。第二点,检测过程需要提取候选区域,这个需要消耗大量的时间。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/57ae82403d0763da6d594f740de5a7ea.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/2c5f66498f9b433f16d52c02b299011a.jpeg)
我们这个方式用的是现在很流行的生成对抗学习,生成器G是快速的强监督目标检测器。那我们用什么去训练生成器G呢?我们需要对抗,我们不是用简单的判别器。这里有代理器F,F是一个基于候选区域的,慢速的弱监督目标检测器。我们的判别器D不是判别检测性能好坏,是来判定检查结果来自于强监督的检测器还是弱监督的检测器,我们希望生成器G能骗过判别器D,使强监督更稳定一些。这就是利用弱监督的目标检测器和对抗生成学习来达到强监督的效果。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/b40529ad467d25378155a281cf5fc381.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/a4a60b0f0bedd9e76434323474b7be9e.jpeg)
这是对应损失函数的设计,这里面的框架可以是任意的,比如生成器G可以用SSD,yolo等等,代理器F可以用任意的弱监督目标检测器。这里面的目标函数,第一是对抗图像检测结果来源。另外一个就是同一张图像检测结果要尽量一致。对代理器F和生成器F的训练是类似知识蒸馏的过程,我们希望强监督可以去学习弱监督的结果。因为弱监督是准的,强监督是快的,做完以后会得到又快又准的训练效果。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/4768219ad1fac47ed7c6907ace932158.jpeg)
这是主要的实验结果,我们在PASCAL VOC 2007上可以达到最好的结果。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/b5f1f95714cde5554bd9b902d3ad9ebb.jpeg)
这是我们关于检测速度的实验,相对其他方法来说速度比之前最快方法提升了50多倍。准确度也有很大的提升。
这是一些相关的论文。
最后,感谢我们的团队,实验室的老师和同学今天都来开会,给我们这个工作做了很多工作,此外项目得到了很多企业支持,包括腾讯优图实验室等,谢谢大家!
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/3f636870760910d4883acc5cd435aa77.jpeg)
文中提到参考文献下载链接为:
https://pan.baidu.com/s/1PLDmzJUlPLZXi0NLSqnkGw 密码: 27aa
--end--
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/fbba91a916f66b839a53460fb3892ed5.jpeg)
主编:袁基睿 编辑:程一
整理:周文、杨茹茵、高科、高黎明
该文章属于“深度学习大讲堂”原创,如需要转载,请联系 Emily_0167。
作者简介:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/c6f194448d5cb545fef22e2552e631be.jpeg)
纪荣嵘,福建省“闽江学者”特聘教授,厦门大学教授、博士生导师、2014年获国家优青,2016年获国家万人计划青年拔尖。主要研究方向为计算机视觉与多媒体技术。相关工作发表于SCI源期刊论文90余篇,包括ACM汇刊与IEEE汇刊近50篇、CCF A类国际会议长文40余篇。论文的Google Scholar引用次数5000余次,SCI引用1600余次,H-因子为33,12篇论文入选ESI高被引/热点论文;近年来主持国家自然科学基金联合重点项目、军委科技委战略前沿专项,国家重点研发计划课题/子课题等;获2007年微软学者奖、2011年ACM Multimedia最佳论文奖、2012年哈工大优秀博士论文、2015年省自然科学二等奖、2016年教育部技术发明一等奖。担任多个国际期刊的副编辑,VALSE2017大会主席、ACM/IEEE高级会员。
往期精彩回顾
让机器“删繁就简”:深度神经网络加速与压缩|VALSE2018之六
让机器“看山是山”:脑启发的视觉计算|VALSE2018之五
算法及大V们你们够了:如果CV界也有朋友圈...I 春节特刊
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/ab86004a7479ed0b3797d714be04c063.jpeg)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/4bd3c41bdaaee6e3f3c3cd5add8ae275.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/765138da4b5fe689840f7751345555b7.png)
欢迎关注我们!
深度学习大讲堂是由中科视拓运营的高质量原创内容平台,邀请学术界、工业界一线专家撰稿,致力于推送人工智能与深度学习最新技术、产品和活动信息!
中科视拓(SeetaTech)将秉持“开源开放共发展”的合作思路,为企业客户提供人脸识别、计算机视觉与机器学习领域“企业研究院式”的技术、人才和知识服务,帮助企业在人工智能时代获得可自主迭代和自我学习的人工智能研发和创新能力。
中科视拓目前正在招聘: 人脸识别算法研究员,深度学习算法工程师,GPU研发工程师, C++研发工程师,Python研发工程师,嵌入式视觉研发工程师,运营经理。有兴趣可以发邮件至:hr@seetatech.com,想了解更多可以访问,www.seetatech.com
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/c0ec264e2c5fd104b65931aa0c9d8929.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/bfa5c07253d883c390192826530c73d6.jpeg)
中科视拓
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/5fd019ea3abb0754cc83e64d13cb96e4.jpeg)
深度学习大讲堂
点击阅读原文打开中科视拓官方网站