阅读论文:Singh, S., Gupta, A., & Efros, A. A. (2012). Unsupervised Discovery of Mid-Level Discriminative Patches. ECCV.
最近试图从中层特征入手研究物体识别,开始阅读相关文章。这篇是SaurabhSingh发表在ECCV 2012 上的工作,可以说比较典型。
1. What are the right primitives for representing visual information?
作者认为,image patch,即mid-level feature 是最合适的primitive
2. 在物体识别问题中,
low-level(如SIFT)特征在物体匹配方面效果很好,但其推广性较差(比如寻找相似物体)。
high-level(如DPM)技术一般挖掘语义部件(attribute detectors/ visual phrase/ “stuff" detectors) 作为特征,其问题在于:1)这类方法通常对每个语义实体需要大量的标注数据来训练;2)很多语义实体鉴别能力不够强。
基于这两种方式提取的特征的局限性,作者提出mid-level discriminative patches。该方法的一大特点是unsupervised。
3. 目的:学习具有“代表性”和“鉴别性”的中层patch。
鉴别性:出现频率高,且和其它视觉物体具有显著区别
代表性:在大量图片中可以以高召回率和准确率检测出来
3. 对于中层patch,使用K-means不能得到很好的聚类,原因在于K-means使用底层的测度(如欧拉距离、L1、互相关),应用于中层patch,通常会将视觉上看起来并不相似的patch 聚成一类。因此,一种解决方法就是采用线性SVM 来产生更合适的相似性度量,即每次聚类后,对每个聚类学习一个判别式分类器,基于学习到的判别式的相似性,对聚类类别重新分配,依此反复迭代。这种方法称为判别式聚类(discriminative clustering)[2]。
4. 判别式聚类[2]的一个问题在于,判别式聚类要求聚类类别数非常多才足以表达整个视觉世界。为了解决这个问题,作者采用“检测”来代替判别式聚类的“分类”环节。检测和分类的区别在于:分类是将各个类别区分开来,而检测是将每个类别和视觉世界的其余类别区分开来。
5. 结合检测器的判别式聚类仍然存在一个问题:SVM 对训练数据的“记忆”特别好,以至于判别式聚类结果很难“跳出”初始的K-means 聚类结果。作者提出了一个简单的解决方法:使用交叉验证来训练。
6. 算法流程:
7. 鉴别性patch 的排序:根据“纯度”和“鉴别性”排序。
在unsupervised 环境下,假设交叉验证已经避免了过拟合,因此作者使用SVM 分类器的检测得分来计算聚类patch 的纯度。
8. 同一聚类下包含不同语义的patch 的解决办法:作者通过“doublets" 来clean up语义纯度不高的聚类。所谓“doublets"即在同一张图片中同时被检测出来的高频率的patch 对。
9. 作者简单挖掘了一下物体不同部件之间的空间关系,还值得进一步研究。
References:
[1] Shrivastava, A., Malisiewicz, T., Gupta, A., Efros, A.A.: Data-driven visual similarity for cross-domain image matching. ACM ToG (SIGGRAPH Asia) (2011)
[2] Ye, J., Zhao, Z., Wu, M.: Discriminative k-means for clustering. In: NIPS. (2007)