检测到的 Windows MATLAB 上的非极大值抑制
Posted
技术标签:
【中文标题】检测到的 Windows MATLAB 上的非极大值抑制【英文标题】:Non-Maximum Suppression on Detected Windows MATLAB 【发布时间】:2014-12-28 18:10:01 【问题描述】:我目前正在检测闭路电视图像中的头像。我正在使用 HOG 检测器 + SVM,并且我正在使用滑动窗口技术来检测磁头。当然,当我缩放图像时,我有同一个头部的多个检测/边界框。我知道我必须使用非极大值抑制来选择其中最好的一个,并且我尝试按照以下链接进行操作: http://quantombone.blogspot.com/2011/08/blazing-fast-nmsm-from-exemplar-svm.html
但是,我不明白如何获得每个滑动窗口的分数。有人可以向我解释一下吗? 换句话说,我有边界框 pts 并且我知道我必须设置 0.5 的重叠,但我没有每个边界框的分数。
【问题讨论】:
我想这是分类器给出的预测分数。对于 SVM,如果您使用 LibSVM,则该分数可能是它输出的概率估计。分数是对象(例如汽车)包含在该框中的概率。 谁在检测 Windows MATLAB,为什么会被抑制,这与 Linux MATLAB 或 Mac MATLAB 有何不同? (看起来“MATLAB”这个词在你的标题中很不合适) @ParagS.Chandakkar 是的,在做了一些很好的研究之后我同意你的观点,事实上我使用参数'b 1'来输出概率。但是,当在控制台上输出概率时,我注意到对于每个预测,给出了 2 个概率而不是 1。我可以和你一起解决这个问题吗?非常感谢 有两种可能性。一个用于 0 级,另一个用于 1 级。两者的总和为 1。你可以检查一下。 太棒了,我有 2 个类 +1 和 -1 分别代表一个头和一个非头。那么关于NMS的分数,我应该选择哪个概率?感谢您的帮助@ParagS.Chandakkar 【参考方案1】:实际上,对于非最大抑制,您不需要与每个边界框关联的分数。您可以使用著名的 Viola 和 Jones 的 NMS 方法(Boosted cascade of simple features):
聚类所有相互重叠大于 0.5 的边界框 为每个集群计算平均边界框并将其输出(即计算所有右上角和所有右下角之间的平均点)而且你有非最大抑制。
如果您仍想使用其他需要输出分数的例程,则只需为每个边界框分配相同的分数。
【讨论】:
我会尝试你告诉我的方式,并让你知道结果@dynamic 我尝试使用此链接中显示的 nms:quantombone.blogspot.com/2011/08/…,通过为每个边界框赋予相同的 1 分,但与小边界框相比,生成的框变得非常大,因此没有捕获头部,每个盒子都在捕捉头部+许多其他东西……有什么反馈吗? @dynamic 你能定义重叠的含义以及聚类是如何进行的吗?【参考方案2】:您应该能够从 SVM 中获得分数。例如,如果您使用 Statistics Toolbox 中的 ClassificationECOC 类训练 SVM,则其 predict
方法可以返回分数。
然后你可以使用计算机视觉系统工具箱中的selectStrongestBbox函数来做非极大值抑制。
【讨论】:
很棒的@Dima,但是我试图使用以下链接中的 nms:quantombone.blogspot.com/2011/08/… 我还在 MATLAB 上将 HOG 功能与 libSVM 一起使用。我正在尝试通过使用上面评论链接中显示的 nms 来抑制不需要的 bbox @user2541516 这个函数似乎做你想做的事。那你是不是只想自己实现NMS,如果是,那就继续吧。否则,我认为selectStrongestBox
会做你想做的事。
非常感谢。就像在训练模型时出于好奇一样,负面图像有时会包含一半的正面图像。例如,在我的情况下,一些负面图像是否应该包含一半的头部和一半的背景?以上是关于检测到的 Windows MATLAB 上的非极大值抑制的主要内容,如果未能解决你的问题,请参考以下文章
如何从 non_GUI 类和我们可以在主 GUI 类中检测到的非 GUI 线程发出信号