位置: IT常识 - 正文

YOLOv5|YOLOv7|YOLOv8改各种IoU损失函数:YOLOv8涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数

编辑:rootadmin
YOLOv5|YOLOv7|YOLOv8改各种IoU损失函数:YOLOv8涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数

推荐整理分享YOLOv5|YOLOv7|YOLOv8改各种IoU损失函数:YOLOv8涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数,希望有所帮助,仅作参考,欢迎阅读内容。

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

💡该教程为改进入门指南,属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀

💡本篇文章 基于 YOLOv5、YOLOv7芒果改进YOLO系列:YOLOv7改进IoU损失函数:YOLOv7涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数、打造全新YOLOv7检测器。

重点:🔥🔥🔥有不少同学已经反应有效涨点!!! 🌟其他改进内容:CSDN原创YOLO进阶目录 | 《芒果改进YOLO进阶指南》推荐!

最全《芒果书📚》改进目录:YOLOv5改进、YOLOv7改进(芒果书系列)目录一览|原创YOLO改进模型全系列目录 | 人工智能专家老师联袂推荐

文章目录解析|YOLOv7网络模型源代码训练推理教程解析总结|YOLO系列期刊创新点总结核心代码改进改进核心代码改进α-IoU核心代码SIoU改进EIoU改进GIoU改进α-IoU改进代码直接运行解析|YOLOv7网络模型源代码训练推理教程解析手把手调参最新 YOLOv7 模型 推理部分(一)🌟手把手调参最新 YOLOv7 模型 训练部分(二)🌟总结|YOLO系列期刊创新点总结

💡🎈☁️:国庆假期浏览了几十篇YOLO改进英文期刊,总结改进创新的一些相同点(期刊创新点持续更新)

💡🎈☁️:国庆假期看了一系列图像分割Unet、DeepLabv3+改进期刊论文,总结了一些改进创新的技巧

核心代码改进YOLOv5|YOLOv7|YOLOv8改各种IoU损失函数:YOLOv8涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数

以下SIoU、EIoU、GIoU、α-IoU改进,代码均在博主开源的YOLOAir中有写

改进核心代码

在YOLOv5中,使用以下函数替换原有的utils/metrics.py文件中的bbox_iou函数

如果在YOLOv7中,使用以下函数替换原有的utils/general.py文件中的bbox_iou函数

def bbox_iou(box1, box2, x1y1x2y2=True, GIoU=False, DIoU=False, CIoU=False, EIoU=False, SIoU=False, eps=1e-7): # 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 CIoU or DIoU or GIoU or EIoU or SIoU: 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 or EIoU or SIoU: # 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: #DIoU return iou - rho2 / c2 # DIoU elif CIoU: #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 / (v - iou + (1 + eps)) return iou - (rho2 / c2 + v * alpha) # CIoU elif SIoU:# SIoU s_cw = (b2_x1 + b2_x2 - b1_x1 - b1_x2) * 0.5 s_ch = (b2_y1 + b2_y2 - b1_y1 - b1_y2) * 0.5 sigma = torch.pow(s_cw ** 2 + s_ch ** 2, 0.5) sin_alpha_1 = torch.abs(s_cw) / sigma sin_alpha_2 = torch.abs(s_ch) / sigma threshold = pow(2, 0.5) / 2 sin_alpha = torch.where(sin_alpha_1 > threshold, sin_alpha_2, sin_alpha_1) angle_cost = torch.cos(torch.arcsin(sin_alpha) * 2 - math.pi / 2) rho_x = (s_cw / cw) ** 2 rho_y = (s_ch / ch) ** 2 gamma = angle_cost - 2 distance_cost = 2 - torch.exp(gamma * rho_x) - torch.exp(gamma * rho_y) omiga_w = torch.abs(w1 - w2) / torch.max(w1, w2) omiga_h = torch.abs(h1 - h2) / torch.max(h1, h2) shape_cost = torch.pow(1 - torch.exp(-1 * omiga_w), 4) + torch.pow(1 - torch.exp(-1 * omiga_h), 4) return iou - 0.5 * (distance_cost + shape_cost) else:# EIoU w_dis=torch.pow(b1_x2-b1_x1-b2_x2+b2_x1, 2) h_dis=torch.pow(b1_y2-b1_y1-b2_y2+b2_y1, 2) cw2=torch.pow(cw , 2)+eps ch2=torch.pow(ch , 2)+eps return iou-(rho2/c2+w_dis/cw2+h_dis/ch2) else: c_area = cw * ch + eps # convex area return iou - (c_area - union) / c_area # GIoU https://arxiv.org/pdf/1902.09630.pdf return iou # IoU改进α-IoU核心代码def bbox_alpha_iou(box1, box2, x1y1x2y2=False, GIoU=False, DIoU=False, CIoU=False, alpha=2, eps=1e-9): # Returns tsqrt_he 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 # change iou into pow(iou+eps) # iou = inter / union iou = torch.pow(inter/union + eps, alpha) # beta = 2 * alpha 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) ** alpha + eps # convex diagonal rho_x = torch.abs(b2_x1 + b2_x2 - b1_x1 - b1_x2) rho_y = torch.abs(b2_y1 + b2_y2 - b1_y1 - b1_y2) rho2 = ((rho_x ** 2 + rho_y ** 2) / 4) ** alpha # center distance 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_ciou = v / ((1 + eps) - inter / union + v) # return iou - (rho2 / c2 + v * alpha_ciou) # CIoU return iou - (rho2 / c2 + torch.pow(v * alpha_ciou + eps, 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 c_area = torch.max(cw * ch + eps, union) # convex area return iou - torch.pow((c_area - union) / c_area + eps, alpha) # GIoU else: return iou # torch.log(iou+eps) or iouSIoU改进

参考上面的核心代码

将iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True)替换为iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, SIoU=True)EIoU改进

参考上面的核心代码

将iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True)替换为iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, EIoU=True)GIoU改进

参考上面的核心代码

将iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True)替换为iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, GIoU=True)α-IoU改进

参考上面的核心代码

bbox_alpha_iou将iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True)替换为iou = bbox_alpha_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True)

以上是yolov5的改进

yolov7 将 tbox[i] 改为 selected_tbox

比如 iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True) 改为iou = bbox_iou(pbox.T, selected_tbox, x1y1x2y2=False, CIoU=True)

代码直接运行python train.py cfg yolov7.yaml即可
本文链接地址:https://www.jiuchutong.com/zhishi/300622.html 转载请保留说明!

上一篇:【一起学Rust | 框架篇 | Viz框架】轻量级 Web 框架——Viz(rust 入门教程)

下一篇:Python实现朴素贝叶斯分类器(用python编写素数)

  • i5 9400f带的动2070吗(i5 9400f带的动2070super吗)

    i5 9400f带的动2070吗(i5 9400f带的动2070super吗)

  • 华为nova5后置摄像头怎么打开(华为nova5后置摄像头玻璃碎了)

    华为nova5后置摄像头怎么打开(华为nova5后置摄像头玻璃碎了)

  • airpods2丢了怎么查找(airpods2丢了怎么锁)

    airpods2丢了怎么查找(airpods2丢了怎么锁)

  • 抖音视频收藏了在哪里可以看到(抖音视频收藏了但不显示收藏)

    抖音视频收藏了在哪里可以看到(抖音视频收藏了但不显示收藏)

  • 手机淘宝聊天窗口打开失败怎么回事(手机淘宝聊天窗口打开失败怎么解决)

    手机淘宝聊天窗口打开失败怎么回事(手机淘宝聊天窗口打开失败怎么解决)

  • 苹果手机压tp什么意思(苹果压tp要多久)

    苹果手机压tp什么意思(苹果压tp要多久)

  • 为什么删除支付记录还需要验证(为什么删除支付宝好友唯独不删微信)

    为什么删除支付记录还需要验证(为什么删除支付宝好友唯独不删微信)

  • 微信你把对方删了再加他对方有显示吗(微信你把对方删了怎么知道对方删没删你)

    微信你把对方删了再加他对方有显示吗(微信你把对方删了怎么知道对方删没删你)

  • 抖音怎么把关注人置顶(抖音怎么把关注和粉丝设为私密)

    抖音怎么把关注人置顶(抖音怎么把关注和粉丝设为私密)

  • x文档叫什么(x文档怎么操作流程)

    x文档叫什么(x文档怎么操作流程)

  • 华硕主板cpu风扇报错(华硕主板cpu风扇报错要按f1)

    华硕主板cpu风扇报错(华硕主板cpu风扇报错要按f1)

  • iphone5像素多少万(苹果5c像素)

    iphone5像素多少万(苹果5c像素)

  • 淘宝旺旺名称在哪里看(淘宝旺旺名在哪)

    淘宝旺旺名称在哪里看(淘宝旺旺名在哪)

  • 哔哩哔哩下载视频怎么导出(哔哩哔哩缓存的视频可以导出来吗)

    哔哩哔哩下载视频怎么导出(哔哩哔哩缓存的视频可以导出来吗)

  • 安卓手机怎么下铃声(安卓手机怎么下载ins)

    安卓手机怎么下铃声(安卓手机怎么下载ins)

  • 怎样关闭微信自动启动(怎样关闭微信自动扣款功能设置)

    怎样关闭微信自动启动(怎样关闭微信自动扣款功能设置)

  • 投屏如何把b站弹幕投上去(投屏如何把b站全屏)

    投屏如何把b站弹幕投上去(投屏如何把b站全屏)

  • 朋友圈一天最多删多少(朋友圈一天最多发几条会被限制)

    朋友圈一天最多删多少(朋友圈一天最多发几条会被限制)

  • 快手实名认证能改吗(快手实名认证能不能换绑)

    快手实名认证能改吗(快手实名认证能不能换绑)

  • 微信乘车码可以欠费嘛(微信乘车码可以坐重庆地铁吗)

    微信乘车码可以欠费嘛(微信乘车码可以坐重庆地铁吗)

  • 拼多多和微信是一家的吗(拼多多和微信是一个吗)

    拼多多和微信是一家的吗(拼多多和微信是一个吗)

  • wps打印页面边距怎么设置(wps打印页边距标准)

    wps打印页面边距怎么设置(wps打印页边距标准)

  • 换手机qq登不上去咋办(换手机qq登不上怎么办以前的号都不用了)

    换手机qq登不上去咋办(换手机qq登不上怎么办以前的号都不用了)

  • hd7850为什么叫神卡(hd7750为什么叫神卡)

    hd7850为什么叫神卡(hd7750为什么叫神卡)

  • Linux 下 Make 命令实例详解(linux常用命令make)

    Linux 下 Make 命令实例详解(linux常用命令make)

  • WIN10电脑C盘满了如何清理空间(win10电脑c盘满了怎么转移到d盘)

    WIN10电脑C盘满了如何清理空间(win10电脑c盘满了怎么转移到d盘)

  • Origin曲线拟合教程(origin2017曲线拟合)

    Origin曲线拟合教程(origin2017曲线拟合)

  • vue普通加密以及国密SM2、SM3、sm4的使用(vue前端加密)

    vue普通加密以及国密SM2、SM3、sm4的使用(vue前端加密)

  • 积分换物品是真的吗
  • 预收账款可以开票吗
  • 经审计的财务报告包括的内容
  • 个人发票需要身份证信息吗?
  • 短期借款现金流
  • 税控服务费抵扣的文件
  • 行政事业单位国有资产处置管理办法
  • 汇总缴纳增值税的三级公司怎么汇总备案
  • 材料成本会计的主要内容
  • 建筑公司外包工程收入怎么记账
  • 固定资产并账
  • 医保卡划入账户金额
  • 取得转账支票后该如何处理
  • 材料检测费怎么计算
  • 境外所得抵免税额是什么意思
  • 建筑企业小规模纳税标准
  • 小规模代扣代缴个税会计分录
  • 上个月开的增值税发票这个月可以作废吗
  • 货到票未到的会计账务处理
  • 管理费用属于什么现金流量项目
  • 工商年报报表
  • 流动资产包括哪些形式
  • 固定资产减值准备可以税前扣除吗
  • 进项税和销项税怎么理解
  • 企业收到贷款贴息会计分录
  • php 签名算法
  • 返点收入怎么会计分录
  • 微信小程序下单可以退款吗
  • 现金折扣税务处理shi
  • 圣胡安岛战争
  • 生产型企业出口退税退的是哪部分的税
  • 注销公司财务报表范本
  • php表单内容写入txt
  • 操作系统启动流程
  • 管理费用未分配利润
  • 消防工程材料费用占比
  • 可供出售金融资产新准则叫什么
  • 家居办公装修
  • 帝国cms插件编写教程
  • nosql sql
  • 织梦系统
  • 非房地产企业转让建筑物,计提土地增值税时应借记
  • 咨询公司需要交税吗
  • 免税农产品发票怎么做账
  • 环保税计税依据怎么算
  • macos mysql安装
  • pos机收款不开票怎么做账
  • 专票金额高于实收金额
  • 小规模企业增值税税收优惠政策2023
  • 所得税费用是指
  • 以货换货如何做账
  • 抵扣联明细没认证如何申报
  • 商业承兑汇票托收什么意思
  • 无形资产未取得发票
  • 建筑材料资源税
  • 支付宝已经支付快递费怎么还支付
  • 废品损失是什么要素
  • 现金日记账与现金流量表的区别
  • sql不重复数据个数
  • 品牌笔记本电脑排行
  • win10自动
  • win8系统出现自动修复
  • win8系统计算机在哪里
  • linux 测试工具
  • win7开始菜单中的程序图标修改了
  • window八
  • windows7怎么解除密码
  • linux网络聚合
  • 前端获取http状态码400的返回值实例
  • 骨头动漫头像
  • 自定义控件英文
  • Unity3D之Vector3.Dot和Vector3.Cross的使用
  • 微信jssdk vue
  • Android mediaplayer 网络超时
  • bash shell脚本编程经典实例(第2版)
  • 用javascript
  • 增值税开票系统升级
  • 美国有汽车吗
  • 2021年福建省灵活就业人员养老保险缴费标准
  • 河南电子税务局电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设