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

别再只用原始IoU了!手把手教你用GIOU、DIOU、CIOU优化YOLOv5/v8的检测框回归

目标检测进阶用GIOU、DIOU、CIOU优化YOLO检测框的实战指南在目标检测任务中边界框回归的精度直接影响模型性能。许多工程师发现即使使用YOLOv5/v8这样的先进框架在自定义数据集上仍会遇到检测框定位不准、收敛速度慢的问题。本文将带您深入三种改进版IoU算法的实现细节通过PyTorch代码实战演示如何显著提升检测效果。1. 为什么需要改进原始IoU原始IoU交并比作为目标检测中最基础的评估指标计算简单直观预测框与真实框的交集面积除以并集面积。但它在实际训练中存在几个致命缺陷梯度消失问题当预测框与真实框无重叠时IoU恒为0无法提供梯度方向尺度不敏感无法区分不同对齐方式下相同IoU值的差异收敛速度慢仅考虑重叠区域忽略中心点距离和长宽比信息# 原始IoU计算示例 def iou(box1, box2): # box格式[x1,y1,x2,y2] inter_x1 max(box1[0], box2[0]) inter_y1 max(box1[1], box2[1]) inter_x2 min(box1[2], box2[2]) inter_y2 min(box1[3], box2[3]) inter_area max(0, inter_x2-inter_x1) * max(0, inter_y2-inter_y1) union_area (box1[2]-box1[0])*(box1[3]-box1[1]) \ (box2[2]-box2[0])*(box2[3]-box2[1]) - inter_area return inter_area / union_area提示在YOLOv5的默认配置中使用的CIOU_Loss在模型配置文件如yolov5s.yaml的loss部分可以找到相关参数设置2. GIOU解决无重叠情况的梯度回传GIOUGeneralized IoU通过引入最小闭包区域最小外接矩形解决了原始IoU的梯度消失问题。其核心思想是计算预测框A和真实框B的最小外接矩形C用(C中不属于A∪B的面积)/C的面积作为惩罚项最终得分为IoU - 惩罚项GIOU的优势特性特性说明值域范围[-1, 1]对称性与IoU相同尺度不变不受目标大小影响梯度方向无重叠时仍有效def giou(box1, box2): # 计算IoU部分同上 iou_value iou(box1, box2) # 计算最小闭包区域 c_x1 min(box1[0], box2[0]) c_y1 min(box1[1], box2[1]) c_x2 max(box1[2], box2[2]) c_y2 max(box1[3], box2[3]) c_area (c_x2-c_x1)*(c_y2-c_y1) # 计算GIOU union_area (box1[2]-box1[0])*(box1[3]-box1[1]) \ (box2[2]-box2[0])*(box2[3]-box2[1]) - inter_area u_part (c_area - union_area)/c_area return iou_value - u_part在实际YOLO训练中GIOU Loss通常能比原始IoU提升1-3%的mAP特别是在处理小目标和密集场景时效果显著。3. DIOU引入中心点距离加速收敛DIOUDistance IoU在GIOU基础上进一步优化通过考虑两个框中心点的归一化距离解决了GIOU收敛慢的问题。其计算公式为DIOU IoU - (d²/c²)其中d是中心点欧式距离c是最小闭包矩形的对角线长度。DIOU的三大改进直接最小化中心点距离收敛速度更快解决了GIOU在水平/垂直排列时的退化问题可作为NMS的评判标准替代传统IoUdef diou(box1, box2): iou_value iou(box1, box2) # 计算中心点距离 center1 [(box1[0]box1[2])/2, (box1[1]box1[3])/2] center2 [(box2[0]box2[2])/2, (box2[1]box2[3])/2] d ((center1[0]-center2[0])**2 (center1[1]-center2[1])**2)**0.5 # 计算最小闭包对角线 c_x1 min(box1[0], box2[0]) c_y1 min(box1[1], box2[1]) c_x2 max(box1[2], box2[2]) c_y2 max(box1[3], box2[3]) c ((c_x2-c_x1)**2 (c_y2-c_y1)**2)**0.5 return iou_value - (d**2)/(c**2 1e-7)在YOLOv8中的实际应用表明DIOU Loss能使训练收敛速度提升30%以上特别适合需要快速迭代的项目场景。4. CIOU完整考虑长宽比的最优解CIOUComplete IoU是当前最完善的IoU改进算法在DIOU基础上增加了长宽比一致性惩罚项。其完整公式为CIOU DIOU - αv v (4/π²)(arctan(w1/h1)-arctan(w2/h2))² α v/((1-IoU)v)CIOU的三重考量重叠面积IoU部分中心点距离DIOU部分长宽比一致性新增v项def ciou(box1, box2): diou_value diou(box1, box2) # 计算长宽比惩罚项 w1, h1 box1[2]-box1[0], box1[3]-box1[1] w2, h2 box2[2]-box2[0], box2[3]-box2[1] arctan torch.atan(w1/h1) - torch.atan(w2/h2) v (4/(math.pi**2)) * torch.pow(arctan, 2) with torch.no_grad(): alpha v / (1 - iou_value v 1e-7) return diou_value - alpha*v在YOLOv5的默认配置中CIOU Loss通过以下关键参数控制# yolov5s.yaml 片段 loss: ciou: 0.05 # CIOU loss gain iou_t: 0.20 # IoU training threshold5. 实战在YOLO中替换IoU损失函数以YOLOv5为例修改损失函数需要调整以下核心文件metrics.py- 实现CIOU计算loss.py- 修改ComputeLoss类train.py- 调整超参数关键修改步骤在metrics.py中添加CIOU计算函数替换bbox_iou函数调用为ciou计算调整损失权重参数# 修改后的bbox_iou函数示例 def bbox_iou(box1, box2, x1y1x2y2True, GIoUFalse, DIoUFalse, CIoUFalse, eps1e-7): # 坐标转换 if x1y1x2y2: b1_x1, b1_y1, b1_x2, b1_y2 box1.chunk(4, -1) b2_x1, b2_y1, b2_x2, b2_y2 box2.chunk(4, -1) else: b1_x1, b1_y1 (box1[..., 0:2] - box1[..., 2:4]/2).chunk(2, -1) b1_x2, b1_y2 (box1[..., 0:2] box1[..., 2:4]/2).chunk(2, -1) b2_x1, b2_y1 (box2[..., 0:2] - box2[..., 2:4]/2).chunk(2, -1) b2_x2, b2_y2 (box2[..., 0:2] box2[..., 2:4]/2).chunk(2, -1) # 交集区域 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) # 并集区域 w1, h1 b1_x2 - b1_x1, b1_y2 - b1_y1 w2, h2 b2_x2 - b2_x1, b2_y2 - b2_y1 union w1 * h1 w2 * h2 - inter eps # IoU计算 iou inter / union # 选择计算模式 if CIoU or DIoU or GIoU: cw torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1) # 最小闭包宽度 ch torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1) # 最小闭包高度 if CIoU or DIoU: # 中心点距离 c2 cw ** 2 ch ** 2 eps rho2 ((b2_x1 b2_x2 - b1_x1 - b1_x2) ** 2 (b2_y1 b2_y2 - b1_y1 - b1_y2) ** 2) / 4 if DIoU: return iou - rho2 / c2 # DIoU elif CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch 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 else: # GIoU https://arxiv.org/pdf/1902.09630.pdf c_area cw * ch eps return iou - (c_area - union) / c_area # GIoU else: return iou # IoU训练调参建议初始学习率降低20%-30%CIOU收敛更快增加box_loss权重通常设为0.05-0.1使用warmup策略避免初期不稳定6. 效果对比与选择策略我们在COCO数据集子集上进行了对比实验结果如下指标IoUGIOUDIOUCIOUmAP0.556.258.759.360.1收敛epoch15013010090小目标AP32.135.436.237.8选择策略建议基础场景直接使用CIOUYOLOv5/v8默认快速原型DIOU收敛最快极端重叠GIOU表现更稳定自定义数据建议从CIOU开始根据验证集结果调整在最近的一个工业检测项目中将YOLOv5的损失函数从原始IoU切换到CIOU后检测mAP提升了4.2%特别是对于不规则形状的缺陷检测效果改善明显。一个常见的误区是认为这些改进算法会增加计算负担实际上它们增加的运算量不到模型总计算量的0.1%却能带来显著的精度提升。

相关文章:

别再只用原始IoU了!手把手教你用GIOU、DIOU、CIOU优化YOLOv5/v8的检测框回归

目标检测进阶:用GIOU、DIOU、CIOU优化YOLO检测框的实战指南 在目标检测任务中,边界框回归的精度直接影响模型性能。许多工程师发现,即使使用YOLOv5/v8这样的先进框架,在自定义数据集上仍会遇到检测框定位不准、收敛速度慢的问题。…...

告别find命令卡顿!为ARM路由器打造超轻量fd静态链接版本

告别find命令卡顿!为ARM路由器打造超轻量fd静态链接版本 【免费下载链接】fd A simple, fast and user-friendly alternative to find 项目地址: https://gitcode.com/GitHub_Trending/fd/fd 在嵌入式设备如ARM架构路由器上使用传统find命令时,你…...

WarcraftHelper终极技术解决方案:如何让传统游戏在现代系统上完美运行

WarcraftHelper终极技术解决方案:如何让传统游戏在现代系统上完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一…...

人IgE His标签蛋白如何助力肿瘤免疫疗法创新?

一、过敏反应与肿瘤免疫有何内在关联?过敏反应是机体免疫系统对花粉、海鲜、尘螨等环境抗原产生的过度防卫现象,临床表现为打喷嚏、皮疹甚至呼吸困难等症状。这一现象的免疫学基础在于肥大细胞的快速应答机制。作为免疫系统中的“哨兵”,肥大…...

ANSYS Mesh网格质量深度解读:除了Skewness,这些指标(Orthogonal Quality, Aspect Ratio)到底怎么看?

ANSYS Mesh网格质量深度解析:从指标解读到实战优化 在CFD仿真中,网格质量往往决定了计算结果的可靠性和收敛效率。许多工程师虽然能够生成看似完整的网格,却对质量报告中的各项指标感到困惑——Orthogonal Quality达到多少才算合格&#xff1…...

终极指南:从Go 1.24到1.25,etcd分布式存储的性能飞跃与实践技巧

终极指南:从Go 1.24到1.25,etcd分布式存储的性能飞跃与实践技巧 【免费下载链接】etcd Distributed reliable key-value store for the most critical data of a distributed system 项目地址: https://gitcode.com/GitHub_Trending/et/etcd etcd…...

Unity里也能直接放PPT?用Aspose.Slides插件实现PPT加载与分页展示(附打包报错解决方案)

Unity3D中高效集成PPT展示功能的工程实践 在教育培训、产品演示和虚拟现实项目中,经常需要将现有的PPT内容无缝嵌入到Unity应用中。传统方案往往要求开发者重新制作所有幻灯片内容为Unity支持的格式,耗时耗力且难以维护更新。本文将介绍一种基于Aspose.S…...

如何在5分钟内制作专业级AI换脸视频:roop-unleashed终极指南

如何在5分钟内制作专业级AI换脸视频:roop-unleashed终极指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 你是否想过,只需点击几…...

解决Linux蓝牙音频连接疑难杂症:BlueZ 5.50与PulseAudio 12.2常见报错分析与修复指南

Linux蓝牙音频深度排障指南:从协议栈原理到实战修复 当你满心欢喜地戴上蓝牙耳机,准备在Linux系统上享受音乐时,却发现设备明明显示已连接却死活不出声——这种挫败感我太熟悉了。作为经历过数十种蓝牙音频故障的老兵,我将在本文分…...

H5考试场景下腾讯云人脸核身全流程实战

1. 为什么在线考试需要人脸核身? 在线考试作弊一直是教育行业头疼的问题。去年我参与过一个公务员考试系统的开发,监考老师反馈说抓到过有人替考——考生A注册账号,实际考试时却让成绩更好的考生B来操作电脑。这种作弊手段在传统考场很容易识…...

如何永久保存微信聊天记录?这款开源工具让你真正掌握自己的数字记忆

如何永久保存微信聊天记录?这款开源工具让你真正掌握自己的数字记忆 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tren…...

怎样在Windows电脑上高效安装APK应用:轻量级安卓应用安装器完全指南

怎样在Windows电脑上高效安装APK应用:轻量级安卓应用安装器完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行安卓应用却不…...

2026年04月23日最热门的开源项目(Github)

根据本期榜单的分析,我们可以得出以下几点结论: 1. 项目类型和语言分布 项目类型:列表中的项目主要集中在人工智能、代码生成和优化、数据处理等领域。其中,以支持Claude Code的项目(如andrej-karpathy-skills和supe…...

3分钟掌握SRWE:免费窗口分辨率自定义终极指南

3分钟掌握SRWE:免费窗口分辨率自定义终极指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE Simple Runtime Window Editor(SRWE)是一款轻量级开源窗口分辨率工具&#xff0…...

虚拟现实的触觉延伸:vJoy如何重新定义数字世界的物理边界

虚拟现实的触觉延伸:vJoy如何重新定义数字世界的物理边界 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 在数字与现实的交汇处,我们常常感受到一种奇妙的断裂——当我们的手指在键盘上飞舞&#xff…...

别再只列清单了!用CoCode开发云+WBS,手把手教你搞定敏捷迭代任务分解

敏捷迭代任务分解实战:用CoCode开发云WBS打造高效开发流程 在敏捷开发团队中,最常听到的抱怨莫过于"任务拆解太模糊"或"进度跟踪全靠猜"。传统Scrum板上的便利贴海洋和永无止境的每日站会,往往掩盖了任务分解不彻底的本质…...

3分钟学会TrollInstallerX:iOS 14-16.6.1设备安装TrollStore的终极指南

3分钟学会TrollInstallerX:iOS 14-16.6.1设备安装TrollStore的终极指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否想在iOS设备上安装TrollStore却…...

终极指南:如何用chrome-extensions-searchReplace将网页文本批量处理效率提升5倍

终极指南:如何用chrome-extensions-searchReplace将网页文本批量处理效率提升5倍 【免费下载链接】chrome-extensions-searchReplace 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-extensions-searchReplace 在网页内容编辑和批量修改工作中&#x…...

Phi-3-mini-4k-instruct-gguf部署教程:基于Docker镜像的vLLM服务启动与健康检查

Phi-3-mini-4k-instruct-gguf部署教程:基于Docker镜像的vLLM服务启动与健康检查 1. 准备工作与环境搭建 1.1 了解Phi-3-mini-4k-instruct模型 Phi-3-Mini-4K-Instruct是一个38亿参数的轻量级开源模型,采用GGUF格式提供。这个模型经过Phi-3数据集训练&…...

告别测试心慌慌!用MFQPPDCS海盗派测试法,搞定新业务模块的完整覆盖

告别测试心慌慌!用MFQ&PPDCS海盗派测试法搞定新业务模块完整覆盖 接手新业务模块时,测试工程师常陷入"测不全"的焦虑——既担心遗漏核心场景,又害怕在边缘用例上浪费资源。这种"测试心慌症"背后,实质是缺…...

Navicat无限试用重置指南:macOS用户必备的3种简单方法

Navicat无限试用重置指南:macOS用户必备的3种简单方法 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navi…...

从‘淘宝店铺数据’到‘用户画像’:我是如何用PCA压缩高维特征并提升模型性能的

从‘淘宝店铺数据’到‘用户画像’:我是如何用PCA压缩高维特征并提升模型性能的 当面对淘宝店铺每天产生的海量用户行为数据时,数据分析师常常陷入两难:保留所有特征会导致"维度灾难",而随意删除特征又可能丢失关键信息…...

Neon MCP Server 服务说明文档

1. 服务概述一句话简介:通过自然语言命令管理Neon数据库的MCP服务器服务名称:Neon MCP Server版本号:最新版本开发者/提供方:NeonDatabase Labs协议类型:MCP (Model Context Protocol)2. 核心功能列出该MCP服务提供的主…...

Mem Reduct:深入解析Windows系统内存优化工具的核心原理与实践指南

Mem Reduct:深入解析Windows系统内存优化工具的核心原理与实践指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memre…...

Office界面定制神器:3步打造你的专属办公功能区

Office界面定制神器:3步打造你的专属办公功能区 【免费下载链接】office-custom-ui-editor Standalone tool to edit custom UI part of Office open document file format 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-ui-editor 还在为每天…...

小白从零开始做多模态新生儿疼痛评估系统|第十二篇:PainC3M模型完落地!实验结果复盘+准确率提升规划

哈喽大家好~前面十一篇内容,我们已经把前端页面、后端API、数据库、前后端联调全部打通,整套系统已经可以正常运行、展示数据、完成基础疼痛评估。这一篇正式进入AI核心模型篇,基于论文《Evaluating neonatal pain via fusing vis…...

避坑指南:解决ptp4l报错‘failed to create a clock’的三种方法(附网卡支持检测)

深度解析ptp4l报错failed to create a clock的完整解决方案 当你在Linux系统上部署ptp4l进行高精度时间同步时,遇到"failed to create a clock"或"interface does not support requested timestamping mode"这类错误信息,往往意味着…...

我用AIGC搞副业:从GPT写小红书文案到Stable Diffusion做头像,月入五位数复盘

我用AIGC搞副业:从GPT写小红书文案到Stable Diffusion做头像,月入五位数复盘 去年夏天,我在朋友圈看到有人晒出用AI生成的头像作品,标价99元/张,一个月接了200多单。当时的第一反应是"这也行?"—…...

DenseNet凭什么拿CVPR最佳论文?深入剖析‘特征重用’与‘密集连接’的设计哲学

DenseNet革命:特征重用的神经网络设计范式突破 从ResNet到DenseNet的进化之路 2017年CVPR最佳论文奖授予了《Densely Connected Convolutional Networks》(DenseNet),这一荣誉绝非偶然。在深度学习领域,网络架构的创新…...

告别调参玄学:用Python的geatpy库5分钟搞定NSGA-II多目标优化(附完整代码)

告别调参玄学:用Python的geatpy库5分钟搞定NSGA-II多目标优化(附完整代码) 在工程优化和机器学习领域,多目标优化问题就像同时要讨好几位性格迥异的上司——每个目标都重要,但优化方向往往相互矛盾。传统单目标优化方法…...