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

六安市网站建设哈尔滨门户网站建设

六安市网站建设,哈尔滨门户网站建设,建筑八大员,有数据库的网站NMS(非极大值抑制)是目标检测中不可或缺的后处理步骤,用于消除重复检测框,提升检测精度。本文将深入解析NMS代码,重点剖析数据维度变换的关键细节。 先看完整代码 def nms(pred, conf_thres, iou_thres): "&qu…

NMS(非极大值抑制)是目标检测中不可或缺的后处理步骤,用于消除重复检测框,提升检测精度。本文将深入解析NMS代码,重点剖析数据维度变换的关键细节。

先看完整代码

def nms(pred, conf_thres, iou_thres):  """  非极大值抑制nms  Args:  pred: 模型输出特征图  conf_thres: 置信度阈值  iou_thres: iou阈值  Returns: 输出后的结果  """  # 筛选出置信度大于阈值的框  box = pred[pred[..., 4] > conf_thres]  # 置信度筛选  cls_conf = box[..., 5:]  # 提取每个框的类别置信度  cls = []  # 存储每个框的类别索引  # 为每个框确定类别  for i in range(len(cls_conf)):  cls.append(int(np.argmax(cls_conf[i])))  # 找到最大类别置信度的索引  # 记录图像内共出现的不同物体类别  total_cls = list(set(cls))  output_box = []  # 存储最终输出的框  # 针对每个预测类别进行处理  for i in range(len(total_cls)):  clss = total_cls[i]  # 当前处理的类别  cls_box = []  # 存储当前类别的框  temp = box[:, :6]  # 提取框的前六个元素[x, y, w, h, conf, class1_conf]  # 筛选出当前类别的框  for j in range(len(cls)):  # 记录[x, y, w, h, conf, class1_conf]值  if cls[j] == clss:  temp[j][5] = clss  # 将类别索引赋值给框  cls_box.append(temp[j][:6])  # 添加到当前类别的框列表中  # cls_box 里面是[x, y, w, h, conf, class_id]  cls_box = np.array(cls_box)  # 转换为NumPy数组  # 将cls_box按置信度从大到小排序  sort_cls_box = sorted(cls_box, key=lambda x: -x[4])  # 得到置信度最大的预测框  max_conf_box = sort_cls_box[0]  output_box.append(max_conf_box)  # 添加到输出框列表中  sort_cls_box = np.delete(sort_cls_box, 0, 0)  # 删除已处理的框  # 对除max_conf_box外其他的框进行非极大值抑制  while len(sort_cls_box) > 0:  # 得到当前最大的框  max_conf_box = output_box[-1]  del_index = []  # 用于存储需要删除的框的索引  # 遍历剩余的框  for j in range(len(sort_cls_box)):  current_box = sort_cls_box[j]  # 当前框  # 计算当前框与最大框的IoU  iou = get_iou(max_conf_box, current_box)  if iou > iou_thres:  # 筛选出与当前最大框IoU大于阈值的框的索引  del_index.append(j)  # 删除这些索引  sort_cls_box = np.delete(sort_cls_box, del_index, 0)  # 如果还有剩余的框,继续处理  if len(sort_cls_box) > 0:  output_box.append(sort_cls_box[0])  # 添加下一个置信度最高的框  sort_cls_box = np.delete(sort_cls_box, 0, 0)  # 删除已处理的框  return output_box  # 返回最终输出的框列表

开始解析

1. 输入

def nms(pred, conf_thres, iou_thres):
  • pred: 模型的输出特征图,通常是一个二维数组。每个元素包含预测框的坐标、置信度和类别信息。具体格式为 [x, y, w, h, conf, class1_conf, class2_conf, ...],其中:

    • (x, y) 是框的中心坐标。
    • (w, h) 是框的宽度和高度。
    • conf 是该框的置信度(通常是“此框内有目标”的概率)。
    • class_conf 是每个类别的置信度。
  • conf_thres: 置信度阈值,用于筛选出较低置信度的预测框。

  • iou_thres: IoU(交并比)阈值,用于判断两个框是否重叠。

2. 置信度筛选

box = pred[pred[..., 4] > conf_thres]

这行代码会筛选出置信度大于 conf_thres 的预测框。pred[..., 4] 取出所有框的置信度。

维度变化

  • 原本 pred.shape = (N, 5+K)

  • 过滤后 box.shape = (N', 5+K),其中 N' ≤ N

后面 K 列是每个类别的置信度。

3. 提取类别置信度并确定每个框的“最佳类别”

cls_conf = box[..., 5:]  # 提取每个框的类别置信度  
cls = []  # 存储每个框的类别索引  # 为每个框确定类别  
for i in range(len(cls_conf)):  cls.append(int(np.argmax(cls_conf[i])))  # 找到最大类别置信度的索引  
  • cls_conf 去掉前 5 列,留下 每个框对所有类别的得分

  • 通过 np.argmax 找到每个框的最大类别置信度,并将其对应的类别索引存入 cls 列表中

  • 维度cls 长度 = N',与 box 行数一一对应。

4.分类别做 NMS

4.1统计图像中出现的类别集合并处理这些类别的框

# 记录图像内共出现的不同物体类别  
total_cls = list(set(cls))  
output_box = []  # 存储最终输出的框  # 针对每个预测类别进行处理  
for i in range(len(total_cls)):  clss = total_cls[i]  # 当前处理的类别  cls_box = []  # 存储当前类别的框  temp = box[:, :6]  # 提取框的前六个元素[x, y, w, h, conf, class1_conf]  
  • total_cls使用集合去重,得到无重复的类别 id,例如 [0, 2, 5]
  • 对于每个类别,创建一个空列表 cls_box 来存储该类别的预测框。
  • temp先复制出前 6 列([x, y, w, h, conf, class1_conf]),最后一列之后将被改成类别 id

4.2 抽取该类的所有框并按置信度排序

# 筛选出当前类别的框  
for j in range(len(cls)):  # 记录[x, y, w, h, conf, class1_conf]值  if cls[j] == clss:  temp[j][5] = clss  # 将类别索引赋值给框  cls_box.append(temp[j][:6])  # 添加到当前类别的框列表中  # cls_box 里面是[x, y, w, h, conf, class_id]  
cls_box = np.array(cls_box)  # 转换为NumPy数组  
# 将cls_box按置信度从大到小排序  
sort_cls_box = sorted(cls_box, key=lambda x: -x[4])  
  • 遍历 cls 列表,筛选出当前类别的框,并将其添加到 cls_box 中。把第 6 列改成类别idcls_box 最终变成 (M, 6)[x, y, w, h, conf, class_id]
  • cls_box 转换为 NumPy 数组后,根据置信度降序排序。

4.3 逐步抑制 IOU 大的框

# 从按置信度排序后的框中取出置信度最高的框  
max_conf_box = sort_cls_box[0]  
# 将该框添加到输出列表中  
output_box.append(max_conf_box)  
# 从排序列表中删除该框,以便后续处理  
sort_cls_box = np.delete(sort_cls_box, 0, 0)  # 当排序后的框列表不为空时,继续进行处理  
while len(sort_cls_box) > 0:  # 取出当前输出列表中最后添加的框(即当前的最大置信度框)  max_conf_box = output_box[-1]  # 用于记录需要删除的框的索引  del_index = []  # 遍历剩余的框,计算它们与当前最大框的IoU  for j in range(len(sort_cls_box)):  current_box = sort_cls_box[j]  # 当前框  # 计算当前框与最大框之间的IoU  iou = get_iou(max_conf_box, current_box)  # 如果IoU大于设定的阈值,认为这两个框重叠过多  if iou > iou_thres:  # 将该框的索引添加到待删除列表中  del_index.append(j)  # 从排序框列表中删除重叠过多的框  sort_cls_box = np.delete(sort_cls_box, del_index, 0)  # 如果还有剩余的框,继续处理  if len(sort_cls_box) > 0:  # 取出下一个置信度最高的框并添加到输出列表中  output_box.append(sort_cls_box[0])  # 从排序列表中删除该框,以便后续处理  sort_cls_box = np.delete(sort_cls_box, 0, 0)

核心逻辑:

  1. 取当前剩余列表的 第一项(最高置信度)放到 output_box

  2. 把它与列表中其他框逐一计算 IoU:

    iou > iou_thres ⇒ 认为“与最大框重叠太多”,删除该框索引。
  3. 列表删完这些框后,如果还剩东西,就再取新的首项,重复步骤 2。

  4. 直到该类别框列表清空。

4.4 输出

return output_box
  • 列表形式,每个元素是长度 6 的 numpy.ndarray[x, y, w, h, conf, class_id]

  • 含义:对每个类别做完 NMS 后 剩下的保留框

  • 输出的xywh(框的中心坐标和宽高)通常是相对于模型输入的缩放尺寸(例如640x640)进行预测的实际像素值。若想直接送到绘图、评估代码,还需要进行一些转换处理,相关处理的文章可以看YOLOv8 预测结果添加面积过滤以及检测框坐标如何是从针对缩放转换为针对原图大小-CSDN博客


文章转载自:

http://c0hWy7HU.kbsmr.cn
http://rFrVOIc6.kbsmr.cn
http://iTMwQoWb.kbsmr.cn
http://F44b4PyU.kbsmr.cn
http://JRtv6CYC.kbsmr.cn
http://a6F4QasS.kbsmr.cn
http://3DhXvy0C.kbsmr.cn
http://UMXRzlXt.kbsmr.cn
http://CF6YO2El.kbsmr.cn
http://8wUaL5zR.kbsmr.cn
http://chmZCfXb.kbsmr.cn
http://nuF2Y98G.kbsmr.cn
http://om5KaYdd.kbsmr.cn
http://xSqxrgYc.kbsmr.cn
http://s2IkD0FP.kbsmr.cn
http://jCnvDQlI.kbsmr.cn
http://e3s14em6.kbsmr.cn
http://J3zuTmVb.kbsmr.cn
http://6BAyzfUE.kbsmr.cn
http://riuWP5I2.kbsmr.cn
http://bSJB17No.kbsmr.cn
http://3A3sZm7A.kbsmr.cn
http://AfLcWEet.kbsmr.cn
http://jzAHI8ny.kbsmr.cn
http://z8lhhOXz.kbsmr.cn
http://Sa9FZyOC.kbsmr.cn
http://Wppl3RSV.kbsmr.cn
http://quaRpotB.kbsmr.cn
http://Hq7Jx0dB.kbsmr.cn
http://XQhLUuBr.kbsmr.cn
http://www.dtcms.com/wzjs/610659.html

相关文章:

  • 商务网站建设中存在的问题中国哪家做网站的公司最大
  • 让网站不要保存密码怎么做线上运营推广是做什么的
  • 做水暖的网站猪八戒网可以做网站吗
  • 建网站 主流软件美食html网页代码模板
  • dede网站 异步生成沂水做网站
  • jsp网站开发 心得大连网站建设招聘网
  • 网站建站流程图建站素材网站模板
  • 城市门户网站模板少儿编程加盟费一般多少钱
  • 广州公司网站附近网站电脑培训班
  • 上海龙华医院的网站建设东莞seo 公司
  • 网站制作公司哪家好做网站接专线费用
  • 如何查网站域名备案wordpress 下载 主题
  • 自己在家做网站网站建设维护费摊销
  • 成都市建设局网站搭建网站教学
  • 网站建设加盟模式网站的风格设计
  • 餐饮酒店网站怎么做网站建设学什么书
  • asp做网站的步骤刷推广链接的网站
  • 服务好的专业建站公司深圳网站开发哪家专业
  • 四川省建设主管部门网站Wordpress有用么
  • 中国城乡住房和建设部网站首页网页制作与网站开发感想
  • 自己如何做购物网站深圳网站建设在哪里找
  • 网站建设和管理是教什么科目wordpress网站相册
  • 网站的站点建设分为24小时自助平台业务下单
  • 汽车维修保养网站模板wordpress安装下载
  • 专利减缓在哪个网站上做网站建设初学者教程
  • 网站页面做专题的步骤网络运营师
  • 顺企网南昌网站建设wordpress文章相关推荐
  • 兰州哪家网站做推广效果好网站开发课程心得
  • 企业门户网站是什么意思网站定制开发微信运营
  • 保定建站软件中铁三局招聘文员要求身材好