tensorflow学习——NMS的python实现
来源:互联网 发布:淘宝房产司法拍卖网 编辑:程序博客网 时间:2024/06/14 01:31
1、NMS(Non-Maximum Suppression)
根据框的概率和IOU进行抑制
import numpy as np def py_cpu_nms(dets, thresh): """Pure Python NMS baseline.""" x1 = dets[:, 0] y1 = dets[:, 1] x2 = dets[:, 2] y2 = dets[:, 3] scores = dets[:, 4] areas = (x2 - x1 + 1) * (y2 - y1 + 1) #从大到小排列,取index order = scores.argsort()[::-1] #keep为最后保留的边框 keep = [] while order.size > 0: #order[0]是当前分数最大的窗口,之前没有被过滤掉,肯定是要保留的 i = order[0] keep.append(i) #计算窗口i与其他所以窗口的交叠部分的面积,矩阵计算 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.0, xx2 - xx1 + 1) h = np.maximum(0.0, yy2 - yy1 + 1) inter = w * h #交/并得到iou值 ovr = inter / (areas[i] + areas[order[1:]] - inter) #ind为所有与窗口i的iou值小于threshold值的窗口的index,其他窗口此次都被窗口i吸收 inds = np.where(ovr <= thresh)[0] #下一次计算前要把窗口i去除,所有i对应的在order里的位置是0,所以剩下的加1 order = order[inds + 1] return keepdef main(): x = np.array([[3,6,9,11,0.9],[6,3,8,7,0.6],[3,7,10,12,0.7],[1,4,13,7,0.2]]) y = py_cpu_nms(x, 0.3)if __name__ == '__main__': main()
2、转自网上教程
首先比较二者的参数部分:
np.max:(a, axis=None, out=None, keepdims=False) 求序列的最值 最少接收一个参数 axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;np.maximum:(X, Y, out=None) X 与 Y 逐位比较取其大者; 最少接收两个参数
>> np.max([-2, -1, 0, 1, 2])2>> np.maximum([-2, -1, 0, 1, 2], 0)array([0, 0, 0, 1, 2]) # 当然 np.maximum 接受的两个参数,也可以大小一致 # 或者更为准确地说,第二个参数只是一个单独的值时,其实是用到了维度的 broadcast 机制;
3、计算IOU
def calcIOU(x1, y1, w1, h1, x2, y2, w2, h2): if((abs(x1 - x2) < ((w1 + w2)/ 2.0)) and (abs(y1-y2) < ((h1 + h2)/2.0))): left = max((x1 - (w1 / 2.0)), (x2 - (w2 / 2.0))) upper = max((y1 - (h1 / 2.0)), (y2 - (h2 / 2.0))) right = min((x1 + (w1 / 2.0)), (x2 + (w2 / 2.0))) bottom = min((y1 + (h1 / 2.0)), (y2 + (h2 / 2.0))) inter_w = abs(left - right) inter_h = abs(upper - bottom) inter_square = inter_w * inter_h union_square = (w1 * h1)+(w2 * h2)-inter_square calcIOU = inter_square/union_square * 1.0 print("calcIOU:", calcIOU) else: print("No intersection!") return calcIOUdef main(): calcIOU(1, 2, 2, 2, 2, 1, 2, 2)if __name__ == '__main__': main()
阅读全文
1 0
- tensorflow学习——NMS的python实现
- nms的cpp实现
- NMS——卷积网络改进实现
- 使用Tensorflow实现MTCNN遇到了nms作用不理想的问题
- 深度学习——NMS(非极大抑制)
- TensorFlow 学习(十五)—— tensorflow.python.platform
- TensorFlow学习——CIFAR-10(python实现数据可视化)
- tensorflow学习——简单RNN实现
- tensorflow API学习——LSTM实现
- 迁移学习的TensorFlow实现
- 深度学习的TensorFlow实现
- 深度学习笔记——TensorFlow学习笔记(三)使用TensorFlow实现的神经网络进行MNIST手写体数字识别
- NMS——非极大值抑制
- NMS——非极大值抑制
- NMS——非极大值抑制
- NMS——非极大值抑制
- NMS——非极大值抑制
- 非极大值抑制——NMS实例
- mybatis的xml中集合用法
- git回退某一个文件到指定的版本
- VMware Tools (ubuntu系统)安装详细过程与使用
- Binary String Matching
- Ghost Shooter小改动
- tensorflow学习——NMS的python实现
- js问题
- linux时间同步
- Leetcode-23:Merge k Sorted Lists
- java中string和int互相转化
- 带你搞懂朴素贝叶斯分类算法
- 国内为什么没有好的 Stack Overflow 的模仿者?,因为素质太低?没有分享精神?
- springboot项目,请求可以进入controller,但返回结果报404
- CF #439 E The Untended Antiquity