当前位置: 首页 > news >正文

好123主页官网seo顾问服务

好123主页官网,seo顾问服务,前端培训多少钱,如何建设学校的微网站一、技术背景 在目标检测任务中#xff0c;模型通常会对同一目标生成多个重叠的候选框#xff08;如锚框或预测框#xff09;。非极大值抑制#xff08;Non-Maximum Suppression, NMS#xff09; 是一种关键的后处理技术#xff0c;用于去除冗余的检测结果#xff0c;保…一、技术背景 在目标检测任务中模型通常会对同一目标生成多个重叠的候选框如锚框或预测框。非极大值抑制Non-Maximum Suppression, NMS 是一种关键的后处理技术用于去除冗余的检测结果保留置信度最高且位置最优的边界框。本文将通过一段Python代码解析NMS的核心实现逻辑并演示其在OpenCV环境中的实际效果。 二、算法核心思想 NMS的核心是通过以下步骤筛选边界框 按置信度排序优先处理置信度最高的预测框。计算交并比IoU与当前框重叠度高的候选框将被抑制。迭代筛选重复上述过程直至处理完所有候选框。 三、代码实现解析 1. 输入数据结构 输入为字典类型 predicts_dict键为类别名称值为该类别对应的边界框列表。每个边界框格式为 [x1, y1, x2, y2, score]表示左上角和右下角坐标及置信度。 predicts_dict {black1: [[83,54,165,163,0.8], [67,48,118,132,0.5], ...]}2. 核心函数 non_max_suppress def non_max_suppress(predicts_dict, threshold):for object_name, bbox in predicts_dict.items():bbox_array np.array(bbox, dtypefloat)# 提取坐标和置信度x1, y1, x2, y2, score bbox_array[:,0], bbox_array[:,1], bbox_array[:,2], bbox_array[:,3], bbox_array[:,4]# 按置信度降序排序order score.argsort()[::-1]area (x2 - x1 1) * (y2 - y1 1)keep [] # 保留的索引列表while order.size 0:i order[0] # 当前最高分框keep.append(i)# 计算IoUxx1 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:]])inter np.maximum(0.0, xx2 - xx1 1) * np.maximum(0.0, yy2 - yy1 1)iou inter / (area[i] area[order[1:]] - inter)# 保留IoU低于阈值的框inds np.where(iou threshold)[0]order order[inds 1]# 更新筛选后的结果predicts_dict[object_name] bbox_array[keep].tolist()return predicts_dict关键步骤说明 坐标提取与排序将边界框转换为NumPy数组后按置信度降序排列。IoU计算通过最大-最小值法计算交集区域公式为 IoU Intersection Union − Intersection \text{IoU} \frac{\text{Intersection}}{\text{Union} - \text{Intersection}} IoUUnion−IntersectionIntersection​动态索引更新通过 order order[inds 1] 跳过被抑制的框逐步缩小处理范围。 3. 可视化测试代码 绘制原始预测框在全黑图像上绘制未经过NMS处理的边界框及置信度。NMS处理与对比调用 non_max_suppress 后在另一窗口展示抑制后的结果。 # 绘制原始框 for box in bbox:cv2.rectangle(img, (x1, y1), (x2, y2), (255,255,255), 2) # 处理并绘制NMS后的框 predicts_dict_nms non_max_suppress(predicts_dict, 0.1) for box in bbox_nms:cv2.rectangle(img_cp, (x1, y1), (x2, y2), (255,255,255), 2)四、优化与注意事项 阈值选择阈值过小可能导致漏检过大则冗余框增多通常目标检测任务中阈值设为0.5。多类别处理代码支持同时对多个类别独立进行NMS如输入 black1 和 black2 两个类别的预测结果。坐标修正代码中 1 的操作是为了避免零宽度/高度确保面积计算正确。 import cv2 import random import numpy as npdef non_max_suppress(predicts_dict, threshold):for object_name, bbox in predicts_dict.items(): # 对每一个类别分别进行NMS一次读取一对键值即某个类别的所有框bbox_array np.array(bbox, dtypenp.float)print(bbox_array)# 下面分别获取框的左上角坐标x1y1右下角坐标x2y2及此框的置信度这里需要注意的是图像左上角可以看做坐标点0,0右下角可以看做坐标点1,1也就是说从左往右x值增大从上往下y值增大x1 bbox_array[:, 0]y1 bbox_array[:, 1]x2 bbox_array[:, 2]y2 bbox_array[:, 3]scores bbox_array[:, 4] # class confidence ndarrayprint(scores, type(scores)) order scores.argsort()[::-1] # argsort函数返回的是数组值从小到大的索引值,[::-1]表示取反。即这里返回的是数组值从大到小的索引值areas (x2 - x1 1) * (y2 - y1 1) # 当前类所有框的面积(python会自动使用广播机制相当于MATLAB中的.*即两矩阵对应元素相乘)x13,x25,习惯上计算x方向长度就是x3、4、5这三个像素即5-313而不是5-32所以需要加1print(areas, type(areas)) keep []# 按confidence从高到低遍历bbx移除所有与该矩形框的IoU值大于threshold的矩形框while order.size 0:i order[0]keep.append(i) # 保留当前最大confidence对应的bbx索引# 获取所有与当前bbx的交集对应的左上角和右下角坐标并计算IoU注意这里是同时计算一个bbx与其他所有bbx的IoUxx1 np.maximum(x1[i], x1[order[1:]]) # 最大置信度的左上角坐标分别与剩余所有的框的左上角坐标进行比较分别保存较大值因此这里的xx1的维数应该是当前类的框的个数减1print(xx1:, xx1)yy1 np.maximum(y1[i], y1[order[1:]])xx2 np.minimum(x2[i], x2[order[1:]])yy2 np.minimum(y2[i], y2[order[1:]])inter np.maximum(0.0, xx2-xx11) * np.maximum(0.0, yy2-yy11)iou inter / (areas[i] areas[order[1:]] - inter) # 注意这里都是采用广播机制同时计算了置信度最高的框与其余框的IoUprint(iou, type(iou))print(np.where(iou threshold))inds np.where(iou threshold)[0] # 保留iou小于等于阙值的框的索引值print(inds:, inds)order order[inds 1] # 将order中的第inds1处的值重新赋值给order即更新保留下来的索引加1是因为因为没有计算与自身的IOU所以索引相差需要加上bbox bbox_array[keep]predicts_dict[object_name] bbox.tolist()return predicts_dict# 下面在一张全黑图片上测试非极大值抑制的效果 img np.zeros((600,600), np.uint8) predicts_dict {black1: [[83, 54, 165, 163, 0.8], [67, 48, 118, 132, 0.5], [91, 38, 192, 171, 0.6]]} # predicts_dict {black1: [[83, 54, 165, 163, 0.8], [67, 48, 118, 132, 0.5], [91, 38, 192, 171, 0.6]], black2: [[59, 120, 137, 368, 0.12], [54, 154, 148, 382, 0.13]] }# 在全黑的图像上画出设定的几个框 for object_name, bbox in predicts_dict.items():for box in bbox:x1, y1, x2, y2, score box[0], box[1], box[2], box[3], box[-1]y_text int(random.uniform(y1, y2)) # uniform()是不能直接访问的需要导入 random 模块然后通过 random 静态对象调用该方法。uniform() 方法将随机生成下一个实数它在 [x, y) 范围内cv2.rectangle(img, (x1, y1), (x2, y2), (255, 255, 255), 2)cv2.putText(img, str(score), (x2 - 30, y_text), 2, 1, (255, 255, 0))cv2.namedWindow(black1_roi) # 创建一个显示图像的窗口cv2.imshow(black1_roi, img) # 在窗口中显示图像;注意这里的窗口名字如果不是刚刚创建的窗口的名字则会自动创建一个新的窗口并将图像显示在这个窗口cv2.waitKey(0) # 如果不添这一句在IDLE中执行窗口直接无响应。在命令行中执行的话则是一闪而过。 cv2.destroyAllWindows() # 最后释放窗口是个好习惯# 在全黑图片上画出经过非极大值抑制后的框 img_cp np.zeros((600,600), np.uint8) predicts_dict_nms non_max_suppress(predicts_dict, 0.1) for object_name, bbox in predicts_dict_nms.items():for box in bbox:x1, y1, x2, y2, score int(box[0]), int(box[1]), int(box[2]), int(box[3]), box[-1]y_text int(random.uniform(y1, y2)) # uniform()是不能直接访问的需要导入 random 模块然后通过 random 静态对象调用该方法。uniform() 方法将随机生成下一个实数它在 [x, y) 范围内cv2.rectangle(img_cp, (x1, y1), (x2, y2), (255, 255, 255), 2)cv2.putText(img_cp, str(score), (x2 - 30, y_text), 2, 1, (255, 255, 0))cv2.namedWindow(black1_nms) # 创建一个显示图像的窗口cv2.imshow(black1_nms, img_cp) # 在窗口中显示图像;注意这里的窗口名字如果不是刚刚创建的窗口的名字则会自动创建一个新的窗口并将图像显示在这个窗口cv2.waitKey(0) # 如果不添这一句在IDLE中执行窗口直接无响应。在命令行中执行的话则是一闪而过。 cv2.destroyAllWindows() # 最后释放窗口是个好习惯
http://www.pierceye.com/news/608314/

相关文章:

  • 哪个建站软件比较好带论坛无锡网站推广优化公司
  • 英文网站建设方案 ppt模板国内代理ip免费网址
  • 城乡建设网站 资料员深圳定制型网站建设
  • 浦江网站建设微信开发手机html编辑器
  • 做网站的个人总结论坛内网站怎么建设
  • 那里有个人做网站的如何建设网页制作的网站
  • 佛山网站建设玲念建站会议管理系统
  • 网站开发需要什么资质天马行空网站建设
  • 猎聘网网站建设目标怎么做网站上的模拟动画
  • 南通制作企业网站福州做网站设计
  • 上什么网站做会计教育wordpress cookies
  • 山东网站备案号四川省建筑信息网
  • 网站开发可以用哪些语言中国十二冶金建设有限公司网站
  • 中药网站模板襄阳seo优化服务
  • 做爰片免费观看网站会展企业网站建设方案
  • 国内空间没备案可以打开网站吗dw做网站 怎么做背景图片
  • host绑定网站国外网站风格
  • 安顺建设局网站wordpress 分页
  • 重庆做网站个人外网登录不了WordPress
  • 医药平台网站建设网站排名做不上去
  • 网站关键词优化培训怎样使用wordpress
  • wordpress多站做网站空间百度云和阿里云区别
  • 衡水企业网站制作公司3000块钱在朋友圈投放广告
  • 做网站没有公网北京网页制作教程
  • 运城哪家做网站的公司好小商铺装修
  • 如何访问win7下做的网站时间轴网站模板
  • html5网站制作软件做app找哪个网站吗
  • 网站名称怎么备案外贸商城网站模板
  • 网页设计网站网站建设课程设计客户关系管理流程图
  • 网站开发遇到的难题品牌策划公司有哪些