高效NMS
我們先載入圖片:
import numpy as np
from copy import deepcopy
from matplotlib import pyplot as plt
np.set_printoptions(2) # 修改了 NumPy 的列印精度
# 指定預設字型, 為在 Matplotlib 中顯示中文,設定特殊字型
plt.rcParams[`font.sans-serif`] = [`SimHei`]
plt.rcParams[`axes.unicode_minus`] = False # 解決儲存影像是負號 `-` 顯示為方塊的問題
%matplotlib inline
img_name = `../images/catdog.jpg`
img = plt.imread(img_name)
1D NMS
程式碼如下
class NMS:
```
參考論文:Neubeck A, Van Gool L. Efficient Non-Maximum Suppression
非極大值抑制
```
def __init__(self, I):
```
引數
===========
I::1D 或者 2D 陣列
```
self.I = I
self.__pmax = deepcopy(self.I)
def __CompPartialMax(self, from_, to):
```
Compute Partial Maximum
返回
=========
max{self.I[from_:to+1]}
```
best = to
# 從右往左搜尋
while to > from_:
to -= 1
if self.I[to] <= self.I[best]:
self.__pmax[to] = self.I[best]
else:
self.__pmax[to] = self.I[to]
best = to
return best
def BlockWise(self, r):
```
r 近鄰,即 (2r+1)-Neighborhood
```
w = len(self.I)
assert 3 * r < w, "鄰域半徑超出範圍"
i = r
self.__CompPartialMax(0, i - 1)
chkpt = -1
maximuns = []
while i + 2 * r < w:
j = self.__CompPartialMax(i, i + r)
k = self.__CompPartialMax(i + r + 1, j + r)
if i == j or self.I[j] > self.I[k]: # self.I[j] 是極大值
if (chkpt < j - r or self.I[j] >= self.__pmax[chkpt]) and (
j - r == i or self.I[j] >= self.__pmax[j - r]):
maximuns.append(j)
if i < j:
chkpt = i + r + 1
i = j + r + 1
else:
i = k
chkpt = j + r + 1
while i < w - r:
j = self.__CompPartialMax(chkpt, i + r)
if self.I[i] > self.I[j]: # # self.I[i] 是極大值
maximuns.append(i)
i = i + r - 1
break
else:
chkpt = i + r - 1
i = j
return maximuns
相關文章
- NMS技術總結(NMS原理、多類別NMS、NMS的缺陷、NMS的改進思路、各種NMS方法)
- RuntimeError: No such operator torchvision::nmsError
- mmdetection原始碼剖析(1)--NMS原始碼
- 非極大值抑制NMS
- Object Detection: Non-Maximum Suppression (NMS)Object
- nms 演算法演示(附程式碼)演算法
- 簡單介紹NMS的實現方法
- 不帶Anchors和NMS的目標檢測
- c++版的NMS(非極大抑制)實現C++
- pytorch實現yolov3(4) 非極大值抑制nmsPyTorchYOLO
- Objects as Points:預測目標中心,無需NMS等後處理操作 | CVPR 2019Object
- 如何高效引流
- 高效輸入
- 如何高效分頁
- EF Core 高效更新
- 高效大腦休息
- 高效能KafkaKafka
- 如何高效使用Vim
- 高效程式設計程式設計
- 高效使用 Org 模式模式
- 如何高效學習
- 如何高效學Python?Python
- 精讀《高效 javascript》JavaScript
- 高效能索引索引
- 如何寫高效的CSS?CSS
- VS 常用高效 快捷鍵
- 熬夜傷身,但也高效
- 《谷歌高效工作法》谷歌
- EF Core高效查詢
- 如何高效地寫 FormORM
- 如何高效的使用 GitGit
- dotnet高效能buffer
- 如何高效計算DAU
- 高效利用搜尋引擎
- 如何高效入門Github?Github
- 正確高效使用 GoogleGo
- 碎片化時間高效利用
- [轉] 高效使用 django 的 querysetDjango