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

爱站网长尾关键词挖掘调整网站模板大小

爱站网长尾关键词挖掘,调整网站模板大小,wordpress 四亩,wordpress 文章中图片title alt一、技术背景 在目标检测任务中#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.zqtcl.cn/news/44813/

相关文章:

  • 专门做选择题的网站seo教程技术优化搜索引擎
  • 网站开发怎么人员组织较好的网站模板
  • 做视频的网站有哪些网站建设方案说
  • 购物网站开发的背景介绍wordpress投稿送积分
  • o2o网站线上广州网站优化电话
  • 云浮营销建站公司惠州的企业网站建设
  • 外贸专用网站网站设计评价
  • 网站开发与设计试题浙江网站备案加急
  • 番禺网站建设哪里好河北石家庄有什么好玩的地方
  • 个人的网站如何做网站数据分析
  • 做logo设计网站建设通网站是筑龙网的吗
  • 公司建网站多少钱一年网站推广的主题
  • 比较好的建立站点贵阳网站优化排名
  • 怎么做网站门户电子商务网站建设与原理
  • 中国做外贸的网站有哪些WordPress小说漫画主题国外
  • 客户提出网站建设申请益阳网站建设益阳
  • wordpress插件视频去广告 ck-video0.65.zipwordpress 中文seo
  • 广州网站制作方法百度互联网公司邯郸分公司
  • 网站后台管理密码破解深圳找工作58同城最新招聘
  • 阿里网站建设教程网站做友链盈利
  • 防钓鱼网站宣传世界各国足球联赛排名
  • 怎么建立本地网站visual studio怎么创建网页
  • php帝国建站系统短视频宣传片制作
  • 网站建设的内容要怎么写泉州网站关键词推广
  • 蛋糕网站建设规划书临汾哪做网站
  • 网站seo方案建议明年做那些网站致富
  • 做任务的正规网站重庆专业seo
  • 网站备案号找回密码网站后台登陆口
  • 网站建设打造营销型网站网站建设营销攻略
  • 百度搜索网站的图片黄江二手车东莞网站建设