密码算法中iv值是什么_?标检测中的?极?值抑制算法(nms):python代码解析
生活随笔
收集整理的這篇文章主要介紹了
密码算法中iv值是什么_?标检测中的?极?值抑制算法(nms):python代码解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?極?值抑制(Non-Maximum Suppression)原理
?極?值抑制,顧名思義,找出極?值,抑制?極?值。這種思路和算法在各個領域中應??泛,?如邊緣檢測算法canny算?中就使?了該?法。本?主要討論nms在?標檢測中的應?。?標檢測過程中,模型在同??標的位置上經常會產??量的候選框,如下圖是赫本的?臉檢測結果。可以看出這些候選框之間的重疊度?常?,此時就需要利?nms找到最佳?標,消除冗余的邊界框。
奧黛麗赫本-?臉檢測示意圖
nms的原理很簡單,主要分為如下?步:
這里的IoU指的是Intersection over Union,代表候選區域之間的交并比,計算如下圖所示。
IOU計算示意圖
python代碼解析
nms的開源代碼很多,初學者往往被各種復雜代碼?花式的寫法迷惑,但其實nms的代碼很好寫,完全不需要很復雜的數據結構及算法,這?筆者用numpy盡量寫了?個最精簡、最易讀的版本,?共30?,供?家參考。
def nms_rect(box, iou): keep_ = [] if len(box) > 1: x1 = box[:, 0] y1 = box[:, 1] x2 = box[:, 2] y2 = box[:, 3] score = box[:, 4] area = (y2 - y1 + 1) * (x2 - x1 + 1) while len(score) > 1: order = score.argsort()[::-1] i = order[0] xx1 = np.maximum(x1[i], x1[order[1:]]) yy1 = np.maximum(y1[i], y1[order[1:]]) xx2 = np.minimum(x2[i], x2[order[1:]]) yy2 = np.minimum(y2[i], y2[order[1:]]) w = np.maximum(0., xx2 - xx1) h = np.maximum(0., yy2 - yy1) inter = w * h ovr = inter / (area[i] + area[order[1:]] - inter) inds = np.where(ovr > iou) + np.array([1]) inds = np.append(inds, 0) keep_.append([x1[i], y1[i], x2[i], y2[i], score[i]]) x1 = np.delete(x1, order[inds]) y1 = np.delete(y1, order[inds]) x2 = np.delete(x2, order[inds]) y2 = np.delete(y2, order[inds]) area = np.delete(area, order[inds]) score = np.delete(score, order[inds]) return keep_結果展示
從左到右依次是原圖、nms處理前、nms處理后,可以看出效果很明顯。
nms效果圖
寫在最后
nms是算法研究?員?分常?的算法,筆者在?作?試中也經常會出這道題,因此還是很有必要掌握的,接下來的?章也會持續分享?作期間總結的論?、筆記和代碼。歡迎關注與轉發。
總結
以上是生活随笔為你收集整理的密码算法中iv值是什么_?标检测中的?极?值抑制算法(nms):python代码解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 多项式拟合最多的项数_机器学习
- 下一篇: bat修改文件内容_在win10系统中一