91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python 如何實現非極大值抑制算法

發布時間:2020-10-27 21:08:26 來源:億速云 閱讀:268 作者:Leah 欄目:開發技術

python 如何實現非極大值抑制算法?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

NMS 算法在目標檢測,目標定位領域有較廣泛的應用。

算法原理

非極大值抑制算法(Non-maximum suppression, NMS)的本質是搜索局部極大值,抑制非極大值元素。

算法的作用

當算法對一個目標產生了多個候選框的時候,選擇 score 最高的框,并抑制其他對于改目標的候選框

python 如何實現非極大值抑制算法

適用場景

一幅圖中有多個目標(如果只有一個目標,那么直接取 score 最高的候選框即可)。

算法的輸入

算法對一幅圖產生的所有的候選框,以及每個框對應的 score (可以用一個 5 維數組 dets 表示,前 4 維表示四個角的坐標,第 5 維表示分數),閾值 thresh

算法的輸出

正確的候選框組(dets 的一個子集)。

細節

  • 起始,設所有的框都沒有被抑制,所有框按照 score 從大到小排序。
  • 從第 0 個框(分數最高)開始遍歷:對于每一個框,如果該框沒有被抑制,就將所有與它 IoU 大于 thresh 的框設為抑制。
  • 返回沒被抑制的框。

參考代碼

# --------------------------------------------------------
# Fast R-CNN
# Copyright (c) 2015 Microsoft
# Licensed under The MIT License [see LICENSE for details]
# Written by Ross Girshick
# --------------------------------------------------------

import numpy as np
cimport numpy as np

cdef inline np.float32_t max(np.float32_t a, np.float32_t b):
  return a if a >= b else b

cdef inline np.float32_t min(np.float32_t a, np.float32_t b):
  return a if a <= b else b

def cpu_nms(np.ndarray[np.float32_t, ndim=2] dets, np.float thresh):
  cdef np.ndarray[np.float32_t, ndim=1] x1 = dets[:, 0]
  cdef np.ndarray[np.float32_t, ndim=1] y1 = dets[:, 1]
  cdef np.ndarray[np.float32_t, ndim=1] x2 = dets[:, 2]
  cdef np.ndarray[np.float32_t, ndim=1] y2 = dets[:, 3]
  cdef np.ndarray[np.float32_t, ndim=1] scores = dets[:, 4]

  cdef np.ndarray[np.float32_t, ndim=1] areas = (x2 - x1 + 1) * (y2 - y1 + 1)
  cdef np.ndarray[np.int_t, ndim=1] order = scores.argsort()[::-1]

  cdef int ndets = dets.shape[0]
  cdef np.ndarray[np.int_t, ndim=1] suppressed = \
      np.zeros((ndets), dtype=np.int)

  # nominal indices
  cdef int _i, _j
  # sorted indices
  cdef int i, j
  # temp variables for box i's (the box currently under consideration)
  cdef np.float32_t ix1, iy1, ix2, iy2, iarea
  # variables for computing overlap with box j (lower scoring box)
  cdef np.float32_t xx1, yy1, xx2, yy2
  cdef np.float32_t w, h
  cdef np.float32_t inter, ovr

  keep = []
  for _i in range(ndets):
    i = order[_i]
    if suppressed[i] == 1:
      continue
    keep.append(i)
    ix1 = x1[i]
    iy1 = y1[i]
    ix2 = x2[i]
    iy2 = y2[i]
    iarea = areas[i]
    for _j in range(_i + 1, ndets):
      j = order[_j]
      if suppressed[j] == 1:
        continue
      xx1 = max(ix1, x1[j])
      yy1 = max(iy1, y1[j])
      xx2 = min(ix2, x2[j])
      yy2 = min(iy2, y2[j])
      w = max(0.0, xx2 - xx1 + 1)
      h = max(0.0, yy2 - yy1 + 1)
      inter = w * h
      ovr = inter / (iarea + areas[j] - inter)
      if ovr >= thresh:
        suppressed[j] = 1

  return keep

看完上述內容,你們掌握python 如何實現非極大值抑制算法的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

观塘区| 安陆市| 略阳县| 南和县| 满洲里市| 余姚市| 开封市| 永丰县| 原平市| 桃园县| 宁阳县| 大同市| 合川市| 龙江县| 黔江区| 房产| 崇明县| 韶关市| 抚宁县| 安远县| 象州县| 叙永县| 姚安县| 宜兰县| 嘉义市| 陕西省| 正宁县| 措美县| 桃源县| 乳山市| 木兰县| 大安市| 九江市| 阜平县| 麻江县| 崇阳县| 房山区| 南部县| 五常市| 崇州市| 延庆县|