python如何实现非极大值抑制算法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
NMS算法在目标检测,目标定位领域有较广泛的应用。
<强>算法原理强>
非极大值抑制算法(Non-maximum抑制,NMS)的本质是搜索局部极大值,抑制非极大值元素。
<强>算法的作用强>
当算法对一个目标产生了多个候选框的时候,选择得分<代码> 代码>最高的框,并抑制其他对于改目标的候选框
<>强适用场景强>
一幅图中有多个目标(如果只有一个目标,那么直接取分数<代码> 代码>最高的候选框即可)。
<强>算法的输入强>
算法对一幅图产生的所有的候选框,以及每个框对应的得分<代码> 代码>(可以用一个5维数组<代码>依据代码>表示,前4维表示四个角的坐标,第5维表示分数),阈值<代码>打> 代码。
<强>算法的输出强>
正确的候选框组(<代码>侦破> 代码的一个子集)。
<强>细节
强>
- <李>起始,设所有的框都没有被抑制,所有框按照得分<代码> 代码>从大到小排序。李> <李>从第0个框(分数最高)开始遍历:对于每一个框,如果该框没有被抑制,就将所有与它<代码>借据代码>大于<代码>打> 代码的框设为抑制。李> <李>返回没被抑制的框。李>
<强>参考代码强>
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #快R-CNN # 2015微软版权(c) #在MIT许可下的(有关详细信息,请参阅许可证) #罗斯Girshick写的 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 进口numpy np cimport numpy为np cdef内联np。float32_t马克斯(np。float32_t, np。float32_t b): 返回一个如果一个在其他=b b cdef内联np。float32_t min (np。float32_t, np。float32_t b): 返回一个如果一个& lt;其他=b b def cpu_nms (np.ndarray [np。float32_t ndim=2]相同,np。浮动打): cdef np.ndarray (np。float32_t ndim=1] x1=检波器(:0) cdef np.ndarray (np。float32_t ndim=1]日元=检波器(:1) cdef np.ndarray (np。float32_t ndim=1] x2=检波器(:2) cdef np.ndarray (np。float32_t ndim=1] y2=检波器(:3) cdef np.ndarray (np。float32_t ndim=1]分数=检波器(:4) cdef np.ndarray (np。float32_t ndim==1]区域(x2 - x1 + 1) * (y2 - y1 + 1) cdef np.ndarray (=scores.argsort np.int_t ndim=1]命令()(::1) cdef int ndets=dets.shape [0] cdef np.ndarray [np.int_t ndim=1]抑制=\ np.zeros ((ndets), dtype=np.int) #名义指数 cdef int _i _j #分类指数 cdef int i, j #临时变量盒子我# 39;s(目前正在考虑的盒子) cdef np。float32_t ix1、iy1 ix2、iy2 iarea #变量计算重叠与盒子j(低得分框) cdef np。float32_t民、yy1 xx2 yy2 cdef np。float32_t w h cdef np。float32_t国米,表达 保持=[] _i的范围(ndets): 我=[_i] 如果抑制[我]==1: 继续 keep.append(我) ix1=x1[我] iy1=y?[我] ix2 x2=[我] iy2 y2=[我] iarea=地区[我] _j的范围(_i + 1, ndets): j=订单(_j) 如果抑制[j]==1: 继续 民=max (ix1 x1 [j]) yy1=max (iy1, y1 [j]) xx2=min (ix2 x2 [j]) yy2=min (iy2, y2 [j]) w=max (0.0, xx2 -民+ 1) h=max (0.0, yy2 - yy1 + 1) 国米=w * h 表达=国米/(iarea +地区[j] -国际米兰) 如果表达祝辞=打: 抑制[j]=1 返回保持
看完上述内容,你们掌握python如何实现非极大值抑制算法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!