室内设计软件大全网站,首页网站怎么做的,小程序开发用什么工具,4399网页游戏入口复习一下什么是NMS#xff08;非极大值抑制#xff09;#xff1f;
什么是NMS#xff1f;
NMS#xff08;Non-Maximum Suppression#xff09;即非极大值抑制#xff0c;是一种在计算机视觉领域#xff0c;尤其是目标检测任务中广泛应用的后处理算法。其核心思想是抑…
复习一下什么是NMS非极大值抑制
什么是NMS
NMSNon-Maximum Suppression即非极大值抑制是一种在计算机视觉领域尤其是目标检测任务中广泛应用的后处理算法。其核心思想是抑制重叠的、冗余的候选框只保留最有可能包含目标的框。这一步骤对于提高目标检测的准确性和效率至关重要。
为什么需要NMS
在目标检测任务中检测算法通常会生成大量的候选框Bounding Boxes每个框都有一个表示其包含目标置信度的分数。这些候选框之间往往存在大量的重叠特别是在目标密集或检测算法对目标边界敏感时。NMS的作用就是从中挑选出最佳的候选框使得每个目标只被一个框准确表示。
NMS的工作原理
NMS的工作流程可以概括为以下几个步骤 排序首先根据所有候选框的置信度分数进行排序从高到低。这是为了确保首先处理的是最可能包含目标的框。 选择最大值选取当前置信度最高的候选框作为当前最大值即最佳候选框。 IoU计算计算当前最大值与其他所有候选框的交并比Intersection over UnionIoU。IoU是一个衡量两个框重叠程度的指标其值介于0到1之间值越大表示重叠程度越高。 传送门链接: 目标检测中的IOUIntersection over Union算法是什么 抑制重叠框设定一个IoU阈值。如果某个候选框与当前最大值的IoU大于该阈值则认为该候选框与当前最大值重叠度过高应被抑制即从候选框列表中删除或将其置信度分数置为0。 迭代重复步骤2到4直到处理完所有的候选框。最终保留下的候选框即为NMS的输出结果。
NMS的代码实现Python使用Numpy
下面是一个使用Numpy库实现的NMS算法示例
import numpy as npdef nms(boxes, scores, overlap_thresh):Apply non-maximum suppression at test time.Args:boxes: (numpy array) ndarray of shape (N, 4).Each row represents a bounding box (x1, y1, x2, y2).scores: (numpy array) ndarray of shape (N,).Confidence scores for each box.overlap_thresh: (float) Overlap threshold (IoU).Return:keep: (numpy array) Indices of the selected boxes.# if there are no boxes, return an empty listif len(boxes) 0:return []# grab the coordinates of the bounding boxesx1 boxes[:, 0]y1 boxes[:, 1]x2 boxes[:, 2]y2 boxes[:, 3]# compute the area of the bounding boxes and sort the bounding boxes# by the confidence scorearea (x2 - x1 1) * (y2 - y1 1)idxs np.argsort(scores)[::-1]# keep track of the picked indexespick []# keep looping while some indexes still remain in the indexes listwhile len(idxs) 0:# grab the last index in the indexes list and add the# index value to the list of picked indexesi idxs[0]pick.append(i)# calculate IoU for the remaining boxesxx1 np.maximum(x1[i], x1[idxs[1:]])yy1 np.maximum(y1[i], y1[idxs[1:]])xx2 np.minimum(x2[i], x2[idxs[1:]])yy2 np.minimum(y2[i], y2[idxs[1:]])# compute the width and height of the intersectionw np.maximum(0, xx2 - xx1 1)h np.maximum(0, yy2 - yy1 1)# compute the ratio of overlap (IoU)overlap (w * h) / (area[i] area[idxs[1:]] - w * h)# delete all indexes from the index list that have# overlap greater than the threshold. The np.concatenate is used to add the 0 index to the result of np.whereidxs np.delete(idxs, np.concatenate(([0], np.where(overlap overlap_thresh)[0] 1)))return np.array(pick)NMS的改进与优化
尽管NMS在目标检测中取得了显著的效果但仍然存在一些局限性如对于密集目标或重叠目标的处理不够理想。因此研究者们提出了多种NMS的改进和优化方法 Soft-NMS传统的NMS采用硬抑制策略即一旦IoU超过阈值就将候选框的置信度分数置为0。而Soft-NMS则采用软抑制策略对IoU较大的候选框进行惩罚如降低其置信度分数而不是直接抑制。这种方法有助于更好地处理密集目标。 基于分类信息的NMS在目标检测任务中除了位置信息外候选框的分类信息也是非常重要的。因此可以结合候选框的分类信息来进行NMS。例如对于同一类别的候选框可以采用更严格的IoU阈值进行抑制而对于不同类别的候选框则可以放宽抑制条件。 基于位置信息的NMS考虑到候选框的位置信息可以对NMS进行进一步的优化。例如可以根据候选框的坐标信息来动态调整IoU阈值或者结合目标的大小、形状等特征来改进NMS算法。 自适应NMS自适应NMS方法可以根据候选框的分布情况动态调整IoU阈值。例如在目标密集区域可以适当降低IoU阈值以减少抑制而在目标稀疏区域则可以提高IoU阈值以保留更多的候选框。 基于学习的NMS近年来随着深度学习技术的发展研究者们开始尝试将NMS算法与深度学习模型相结合。例如可以设计一个神经网络来预测每个候选框的抑制概率或者将NMS算法嵌入到深度学习模型中实现端到端的目标检测。
总结
NMS作为目标检测算法中的重要后处理步骤对于提高检测准确性和效率具有重要意义。通过深入理解NMS的工作原理和代码实现我们可以更好地掌握目标检测算法的整个流程。同时了解NMS的改进和优化方法也有助于我们进一步提升目标检测模型的性能。在未来的研究中我们可以继续探索NMS的新方法和新技术以推动目标检测领域的发展。