- BING: Binarized Normed Gradients for Objectness Estimation at 300fps. Ming-Ming Cheng, Ziming Zhang, Wen-Yan Lin, Philip Torr, IEEE CVPR, 2014. [Project page][pdf][bib]
亮点巨多:
- 在PASCAL VOC数据集上取得了State of the art的Detection Rate
- 比PAMI2012, PAMI 2013, IJCV 2013 的方法快了1000倍,测试速度达300个图像每秒!
- 计算一个window的objectness score仅需2个float乘法,一个float加法,十来个bitwise operation。
- 没有各种复杂的计算,算法代码100行以内。
- 在整个PASCAL VOC 2007数据集上,Training不需要几周,不需要几天,仅需20秒钟!
- 有望for free的加速几乎所有object detection方法。去年CVPR best paper,以及在VOC上跑出最好成绩的ICCV 2013 Oral paper, 在共同抱怨的generic object proposal的速度瓶颈完全解决了。应该最多再过一年,各种realtime,high performance的multi-object detection将迅速涌现。
- 我来牛津一年多了,第一次在组内reading group (http://www.robots.ox.ac.uk/~vgg/rg/)上听Prof. Andrew Zisserman (全世界唯一拿过3次Marr奖的教授,论文citaiton 6万多)在组内讨论中对一个paper给这么正面的评价,并在我作组内reading group报告当天安排自己的学生开始做后续工作。
- 由于这次只用了最最简单的feature (梯度绝对值),最简单的学习方法 (Linear SVM)。应该非常容易进行扩展和改进。
- 我2011年发布Saliency region detection代码的时候,当时觉得会有比较多的后续工作(后来证明光我自己的论文就有400多次引用),但也没有这次这个topic这么让人激动!相信未来一段时间将有非常多的领域会产生深刻的变化。为了推动这一变化,算法已经与一个小时前共享了出来:C++代码 http://mmcheng.net/bing/
人去识别一个照片,没见过谁用sliding window的方式一个个仔细的判断。因此Objectness 和 Saliency机制很相关,我感觉用objectness应该是detection的正确机制。
关于Salient object detection,如果一个图像只生成一个saliency map的话,用单张图像搞Saliency map,发展空间已经不是特别大了,我11年投PAMI那篇在MSRA1000上做到了93%左右的FMeasure,之后没看过别的比我CVPR11论文中segmentation结果(F = 90%)更高的正确率。用多张图像,特别是从internet上随机download的图像,从中提取有用的Salient object,并自动剔除单张图像分析产生的错误,应该还有很多事情可做。具体可参考:http://mmcheng.net/gsal/
关于Objectness,CVPR14这个充其量只算开了个头。因为只用了最最弱的feature(梯度:相邻像素颜色相减的绝对值)和学习方法(LinearSVM)来刻画我对这个问题的observation。进一步对初步结果做分析,将1000个proposal降低到几百个,甚至几十个,并同时保持较高的recall,将会有很多工作可做。从1千降到几十,将是一个漫长的过程,估计需要上百篇paper的不懈努力才有可能实现。
要是在未来几年,能将proposal数目降低到个位数,将会深刻影响图像编辑领域,我们也可能可以直接通过语音命令在没有分类器存在的情况下发出控制命令,例如“把这个object给我变大…”。关于语音控制的semantic parsing和图像编辑,有兴趣的话可以参考:http://mmcheng.net/imagespirit/ 。这个paper接收后也会公布代码。
小广告:2014年9月份我将回国去南开大学工作(副教授)并开始招收研究生(硕士生很肯定可以招,8月初知道是否可以招博士生),欢迎和我一起工作(相关的研究方向可以参考:http://mmcheng.net/category/research/)。
如果有人在其他平台下编译成功,或者写了Matlab,Python等语言的wrapper,并且愿意共享给大家,请联系我(http://mmcheng.net/),我在项目主页上加一个链接。另外如果有志愿者可以帮忙翻译成中文并共享给大家,我也非常感谢并提供latex源码。
下面的评论非常重要,特别引用到正文中:
bigbear :
经过一天的各种尝试,终于找到原因,__popcnt64作为位统计指令,是SSE4.2新加的,而我的是老4核cpu q9300, 只支持SSE4.1, 对于SSE4.2 不支持,所以运行到__popcnt64就会弹出Illegal Instruction异常。各位尝试运行代码的同学,要先看看cpu是不是支持sse4.2, 一般新一点的I3以上cpu,都是支持的。
LiuYu :
非常好的想法,自己的几点收获及建议:
1. 个人感觉NG有效果的原因就在于将其resize到8*8,这样不同object就行成了共性,想法简单,但不是那么容易想到的,需要些灵感。
2. 32位系统/机子的童鞋可以用__popcnt() 来计算__popcnt64,如下:
inline unsigned __int64 __popcount64(unsigned __int64 x)
{
return
__popcnt((unsigned int)(x )) +
__popcnt((unsigned int)(x >> 32));
}
用上述__popcount64代替__popcnt64即可;
3. 在我的机子上速度达不到那么快(我的机子的原因吧,i5, 4cores,而且是32位的。。。),但针对不同的场景,有的不需要那么多quantized window size,可以调节_base、 _maxT, _minT (最终影响_numT及template间的ratio);对速度影响较大的一个因素是szActive 的多少,因此可以调节产生szActive的阈值(源代码是If only 50- positive samples at this size, ignore it,对不同的训练数据,可以调节为100, 200等等。。)。还有一个思路就是针对实际应用场景,事先固定好szActive。用BING和ChnFtrs行人检测做了一个很简单不过的结合,ChnFtrs速度就有明显的提高,性能几乎没怎么降。总之很赞。@程明明
程明明 :
cxz :
您好,请问如何开启sse?我将项目属性–C/C++–代码生成–启用增强指令集设为”/arch:SSE2″ 对吗?我这样设置后,stage I 要21s,处理一张图片要0.011s。openmp已经开了。我机器是i7 4核。谢谢:)
程明明 :
你确认你是用Release模式跑的(打开Visual Studio工程后,确认是release模式,然后按Ctrl+F5,而不是直接按F5)?默认的VS2012设置不至于这么慢。
cxz :
@程明明
原来我直接按了F5……按Ctrl+F5好了,stage 1: 3.4s,stage 2: 11s,处理一张0.0037s,cool! thx!!!
已解决,在vs2010+32位机上运行,具体可参考http://blog.youkuaiyun.com/feixuedudiao/article/details/22268093
最后说下自己的感触,有的研究真的没必要堆那么多的算法, 有的简单的,不起眼的算法就能解决相当困难的问题,会得到意想不到的效果。总之,每种方法要对症下药,才能事半功倍。做科研就像填空题一样,语言文字简短精炼,比起那些冗余复杂的文字来的效果更好。
最后祝大家科研马到成功,也祝自己越来越好。过段时间我会将cmm这篇文章的vs2010版奉上,方便vs2010的童鞋(cmm的是vs2012).
NEW!!!!!!!!!!!!!
程序(vs2010 win8 32bit, 建议将win32改成x64就可以了)下载地址:http://download.youkuaiyun.com/detail/xiaojidan2011/7445645