位置: IT常识 - 正文

Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进(pytorch如何学)

编辑:rootadmin
Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进 Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进

目录

Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进

前言

一、NMS非极大值抑制算法

二、Hard-NMS非极大值代码

三、DIOU-NMS

 四、soft-NMS

前言

推荐整理分享Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进(pytorch如何学),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:pytorch如何学,pytorch learning rate,pytorch如何学,pytorch metric learning,pytorch learning rate,pytorch learning rate,pytorch metric learning,pytorch metric learning,内容如对您有帮助,希望把文章链接给更多的朋友!

在目标检测的预测阶段时,会输出许多候选的anchor box,其中有很多是明显重叠的预测边界框都围绕着同一个目标,这时候我就可以使用NMS来合并同一目标的类似边界框,或者说是保留这些边界框中最好的一个。

如果对IOU等知识不了解的可以看我上篇博客Pytorch机器学习(五)——目标检测中的损失函数(l2,IOU,GIOU,DIOU, CIOU)

一、NMS非极大值抑制算法

我们先看一下NMS的直观理解,左图为两个ground truth的bbox,右图为我自己模拟网络输出的预测框。

 而下图则是我使用Pytorch官方提供的NMS实现的非极大值抑制,可以看到经过NMS后预测框保留了效果最好的,去除了冗余的预测框。

 

 下面来讲讲NMS算法的流程,其实也是十分简单的

        一.从所有候选框中选取置信度最高的预测边界框B1作为基准,然后将所有与B1的IOU超过预定阈值的其他边界框移除。

(这时所有边界框中B1为置信度最高的边界框且没有和其太过相似的边界框——非极大值置信度的边界框被抑制了)

        二.从所有候选框中选取置信度第二高的边界框B2作为一个基准,将所有与B2的IOU超过预定阈值的其他边界框移除。

        三.重复上述操作,直到所有预测框都被当做基准——这时候没有一对边界框过于相似

二、Hard-NMS非极大值代码Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进(pytorch如何学)

在YOLOV5的源码当中,作者是直接调用了Pytorch官方的NMS的API

在general.py中的non_max_suppression函数中

"""其中boxes为Nx4的tensor,N为框的数量,4则为x1 y1 x2 y2socres为N维的tensor,表示每个框的置信度iou_thres则为上面算法中的IOU阈值返回值为一个去除了过于相似框后的,根据置信度降序排列的列表,我们就可以根据此列表输出预测框"""i = torchvision.ops.nms(boxes, scores, iou_thres) # NMS

为了便于后续其他NMS的改进,这里我们也自己写一个NMS算法,这里借鉴了沐神的代码b站链接,大家可以直接在YOLOV5中把上面的torchvision.ops.nms更改为下面的NMS函数

def NMS(boxes, scores, iou_thres, GIoU=False, DIoU=False, CIoU=False): """ :param boxes: (Tensor[N, 4])): are expected to be in ``(x1, y1, x2, y2) :param scores: (Tensor[N]): scores for each one of the boxes :param iou_thres: discards all overlapping boxes with IoU > iou_threshold :return:keep (Tensor): int64 tensor with the indices of the elements that have been kept by NMS, sorted in decreasing order of scores """ # 按conf从大到小排序 B = torch.argsort(scores, dim=-1, descending=True) keep = [] while B.numel() > 0: # 取出置信度最高的 index = B[0] keep.append(index) if B.numel() == 1: break # 计算iou,根据需求可选择GIOU,DIOU,CIOU iou = bbox_iou(boxes[index, :], boxes[B[1:], :], GIoU=GIoU, DIoU=DIoU, CIoU=CIoU) # 找到符合阈值的下标 inds = torch.nonzero(iou <= iou_thres).reshape(-1) B = B[inds + 1] return torch.tensor(keep)

这里的计算IOU的函数——bbox_iou则是直接引用了YOLOV5中的代码,其简洁的集成了对与GIOU,DIOU,CIOU的计算。

def bbox_iou(box1, box2, x1y1x2y2=True, GIoU=False, DIoU=False, CIoU=False, eps=1e-9): # Returns the IoU of box1 to box2. box1 is 4, box2 is nx4 box2 = box2.T # Get the coordinates of bounding boxes if x1y1x2y2: # x1, y1, x2, y2 = box1 b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] else: # transform from xywh to xyxy b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2 b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2 b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2 b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2 # Intersection area inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \ (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0) # Union Area w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps union = w1 * h1 + w2 * h2 - inter + eps iou = inter / union if GIoU or DIoU or CIoU: cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1) # convex (smallest enclosing box) width ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1) # convex height if CIoU or DIoU: # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1 c2 = cw ** 2 + ch ** 2 + eps # convex diagonal squared rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + (b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4 # center distance squared if DIoU: return iou - rho2 / c2 # DIoU elif CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47 v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2) with torch.no_grad(): alpha = v / ((1 + eps) - iou + v) return iou - (rho2 / c2 + v * alpha) # CIoU else: # GIoU https://arxiv.org/pdf/1902.09630.pdf c_area = cw * ch + eps # convex area return iou - (c_area - union) / c_area # GIoU else: return iou # IoU三、DIOU-NMS

其实DIOU-NMS就是把我上面说的NMS算法中的IOU阈值改为DIOU,将NMS代码中的DIOU设置为True即可。

根据DIOU的论文,如果只是单纯的使用NMS,即是使用IOU作为阈值去筛掉其他预测框时,当两个物体过于接近时,很有可能另外一个物体的预测框就被滤除了。

就像下图中的摩托。使用DIOU-NMS可以一定程度上提升对于靠近的物体的检测。

 四、soft-NMS

网上还有一种soft-NMS的算法,其思想就是传统的NMS,如果只通过IOU值就将其他的框直接去掉,有可能会不妥,于是就引入了soft-NMS。

具体流程就是我们把NMS算法中去除其他边界框改成,修改其他边界框的置信度。

以下引一个博主的图

 其中的f()函数,现在都是使用的高斯函数

si即为置信度,M为当前最大置信度的边界框,bi为其他边界框

网上对此的效果看法也是褒贬不一,我自己也没有试过,但从直觉来说,我个人觉得效果不会有很大的提升,如果感兴趣的可以自己试一试。

本文链接地址:https://www.jiuchutong.com/zhishi/293071.html 转载请保留说明!

上一篇:浏览器:跨域及解决方法(前端解决浏览器跨域问题)

下一篇:网站百度统计被恶意刷广告的处理方法(百度统计网址)

  • 苹果13pro查找我的iphone在哪里(iphone13查找我的iphone)

    苹果13pro查找我的iphone在哪里(iphone13查找我的iphone)

  • 火狐浏览器怎么样(火狐浏览器怎么收藏网页)

    火狐浏览器怎么样(火狐浏览器怎么收藏网页)

  • 微信群如何发指定红包(微信群如何发指定人消息)

    微信群如何发指定红包(微信群如何发指定人消息)

  • 安卓8.1和9.0的区别(安卓8.1.0和安卓9)

    安卓8.1和9.0的区别(安卓8.1.0和安卓9)

  • qq好友达到上限怎么办(QQ好友达到上限怎么办)

    qq好友达到上限怎么办(QQ好友达到上限怎么办)

  • 小米8信号不好(小米8信号不好怎么解决)

    小米8信号不好(小米8信号不好怎么解决)

  • 苹果5可以升级到什么版本(苹果5可以升级到ios11吗)

    苹果5可以升级到什么版本(苹果5可以升级到ios11吗)

  • 大华电子秤不出纸怎么办(大华电子秤不出纸滴滴响)

    大华电子秤不出纸怎么办(大华电子秤不出纸滴滴响)

  • 微信加好友不用通过就加上(微信加好友不用验证直接通过对方可以转账吗)

    微信加好友不用通过就加上(微信加好友不用验证直接通过对方可以转账吗)

  • 笔记本适配器是什么东西(笔记本适配器是什么用途)

    笔记本适配器是什么东西(笔记本适配器是什么用途)

  • 抖音怎么隐身进直播间(抖音怎么隐身进去直播间还能聊天)

    抖音怎么隐身进直播间(抖音怎么隐身进去直播间还能聊天)

  • 微信登录频繁登不上去(微信登录频繁登录不上一般多久能登录上)

    微信登录频繁登不上去(微信登录频繁登录不上一般多久能登录上)

  • oppo手机查找老是离线(opp0查找手机)

    oppo手机查找老是离线(opp0查找手机)

  • tencent文件夹能删吗(tencent文件夹)

    tencent文件夹能删吗(tencent文件夹)

  • beats只能连一个设备吗(为什么beats只能连接一台手机)

    beats只能连一个设备吗(为什么beats只能连接一台手机)

  • vue怎么改字体大小(vue全局设置字体大小)

    vue怎么改字体大小(vue全局设置字体大小)

  • 手机丢了qq怎么解除手机绑定(手机丢了qq怎么办)

    手机丢了qq怎么解除手机绑定(手机丢了qq怎么办)

  • 华为悬乎浮窗怎么取消(华为悬浮窗开启后按钮在哪)

    华为悬乎浮窗怎么取消(华为悬浮窗开启后按钮在哪)

  • 智能收款语音播报器怎么设置(智能收款语音播报器怎么连接手机)

    智能收款语音播报器怎么设置(智能收款语音播报器怎么连接手机)

  • 易语言能做什么(易语言能做什么辅助)

    易语言能做什么(易语言能做什么辅助)

  • vivos1电池容量多大(vivos1电池容量是多少)

    vivos1电池容量多大(vivos1电池容量是多少)

  • 荣耀20后盖是什么材质(荣耀20后盖是玻璃还是塑料)

    荣耀20后盖是什么材质(荣耀20后盖是玻璃还是塑料)

  • 小米6如何开启全面屏手势(小米6如何开启立体音效)

    小米6如何开启全面屏手势(小米6如何开启立体音效)

  • QQ音乐歌词面板怎么打开(qq音乐歌词面板背景怎么自定义设置)

    QQ音乐歌词面板怎么打开(qq音乐歌词面板背景怎么自定义设置)

  • 小度如何打电话(小度如何打电话给爸爸)

    小度如何打电话(小度如何打电话给爸爸)

  • 西瓜视频怎么修改个人资料(西瓜视频怎么修改ip属地)

    西瓜视频怎么修改个人资料(西瓜视频怎么修改ip属地)

  • 液晶电视重影(液晶电视重影解决方法)

    液晶电视重影(液晶电视重影解决方法)

  • 北魁北克的公路,加拿大 (© Posnov/Getty Images)(魁北克位置地图)

    北魁北克的公路,加拿大 (© Posnov/Getty Images)(魁北克位置地图)

  • 免缴车船税
  • 支付境外劳务费需要缴纳哪些税费
  • 税务行政处罚是指
  • 公司端午礼盒
  • 个人名字的发票专用章
  • 展会补贴收入会计处理
  • 公司不营业需要做年报吗
  • 企业不加入工会可以吗
  • 退税发票误勾选确认
  • 增值税专用发票和普通发票的区别
  • 保险金扣税吗
  • 出口退税退的是进口时的税吗
  • 报名费发票开什么项目
  • 考务费属于什么税目
  • 无形资产土地的入账价值包括哪些
  • 银行本票超过付款期限可以向出票人追索吗
  • 变更税号后地税个税申报系统还是显示老税号怎么办?
  • 捐赠允诺是否有法律约束力?
  • 进的货没有入库怎么处理
  • 发票丢了还可以重开吗
  • 收到捐赠的固定资产需要折旧吗
  • 政府补助专款专用如何入账
  • 无经营零申报公司注销要交印花税吗
  • wind10激活密钥
  • win8系统怎么连接无线
  • 如何理解应交税费未交增值税
  • PHP:xml_parser_free()的用法_XML解析器函数
  • 现金日记账漏记去年的利息怎么算
  • 为实习生支付人身意外伤害保险如何进行账务处理?
  • 现金折扣税务处理shi
  • 资产减值损失如何录入
  • 博茨瓦纳热吗
  • web爬虫视频教程
  • 手把手教你安装技嘉b550 master主板
  • raisecom删除命令
  • 存货盘盈盘亏的会计处理
  • 进项税转出的金额能加计吗
  • mysql如何开启
  • 企业设置辅助账户的作用
  • 什么是指企业的市场营销活动发生影响的各种因素的总和
  • 小规模纳税人附加税怎么算
  • 增值税期末留抵退税
  • 哪些项目可以计提汇兑损益
  • 农村土地征用补偿价格
  • 实收资本为零该怎么办
  • 工会经费如何支出
  • 对公支付的款项没有发票怎么报销
  • 借方记录什么的增加
  • 建筑业暂估成本票来了后的账务处理
  • 财政补助结转余额在借方还是贷方
  • 哪些业务可以进入共享服务中心
  • 转账支票怎么填写会计凭证
  • 食品发票可以报销吗怎么报销
  • 盘亏和报废报损的区别
  • 旅行社代订机票便宜吗
  • 高速etc发票如何打印
  • 企业网银的电子对账未签约需要本人去吗
  • 公司增资怎么办理手续
  • 企业如何建账做账
  • mysql详细教程
  • centos7gcc编译器
  • mysql锁表的sql
  • Vista 新命令收集整理完整版
  • centos 安装程序
  • explorer.exe进程文件
  • Centos 6.5 64位双网卡绑定教程
  • os x10.10.3beta5官网下载 yosemite10.10.3beta5下载地址
  • win8 怎么样
  • windows 8.1 (multiple editions)
  • w10系统如何
  • 遍历目录文件
  • android fragmentation
  • vue插件使用
  • javascript高级程序设计pdf百度云
  • Listview的onItemClickListener无法响应的解决方法
  • 12366纳税服务热线
  • 银行缴纳印花税存在问题和建议
  • 海口地税局领导班子
  • 金融机构取得的利息收入应缴纳增值税的
  • 补贴收入有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设