【Datawhale组队学习202506】YOLO-Master task03 IOU总结

系列文章目录

task01 导学课程
task02 YOLO系列发展线


文章目录

  • 系列文章目录
  • 前言
  • 1 功能分块
    • 1.1 骨干网络 Backbone
    • 1.2 颈部网络 Neck
    • 1.3 头部网络 Head
      • 1.3.1 边界框回归头
      • 1.3.2 分类头
  • 2 关键概念
  • 3 典型算法
    • 3.1 NMS
    • 3.2 IoU
  • 总结


前言

  • Datawhale是一个专注于AI与数据科学的开源组织,汇集了众多领域院校和知名企业的优秀学习者,聚合了一群有开源精神和探索精神的团队成员
  • YOLO-Master
  • 本章学习资料

1 功能分块

1.1 骨干网络 Backbone

  • 它的任务是把一张图片的关键信息浓缩出来,比如形状、纹理、颜色等特征,就像把水果榨成汁一样,保留精华,去掉多余水分(无关背景)。

1.2 颈部网络 Neck

1.3 头部网络 Head

1.3.1 边界框回归头

1.3.2 分类头


2 关键概念


3 典型算法

3.1 NMS

3.2 IoU

IoU(Intersection over Union):衡量两个边界框(Bounding Box)之间重叠程度和匹配度,常用于目标检测任务中评估预测框 Predicted Box真实框 Ground Truth Box的匹配度。相比于 Jaccard Index

  • 其值范围在 [ 0 , 1 ] [0,1] [0,1]1 表示完全重叠,0 表示无重叠。

  • 数学定义

I o U = 交集面积 并集面积 \mathrm{IoU} = \frac{交集面积}{并集面积} IoU=并集面积交集面积

  • 即:

IoU = A inter A union = A inter A box1 + A box2 − A inter \text{IoU} = \frac{A_{\text{inter}}}{A_{\text{union}}} = \frac{A_{\text{inter}}}{A_{\text{box1}} + A_{\text{box2}} - A_{\text{inter}}} IoU=AunionAinter=Abox1+Abox2AinterAinter

  • 计算步骤:
  1. 交集坐标
    • 左上角:取两框左上坐标的较大值
    • 右下角:取两框右下坐标的较小值
    • 若右下坐标 < 左上坐标,则交集面积为 0

x LeftTop = max ⁡ ( x 1 a , x 1 b ) , y LeftTop = min ⁡ ( y 1 a , y 1 b ) x_{\text{LeftTop}} = \max(x_1^a, x_1^b), \quad y_{\text{LeftTop}} = \min(y_1^a, y_1^b) xLeftTop=max(x1a,x1b),yLeftTop=min(y1a,y1b)
x RightBottom = min ⁡ ( x 2 a , x 2 b ) , y RightBottom = max ⁡ ( y 2 a , y 2 b ) x_{\text{RightBottom}} = \min(x_2^a, x_2^b), \quad y_{\text{RightBottom}} = \max(y_2^a, y_2^b) xRightBottom=min(x2a,x2b),yRightBottom=max(y2a,y2b)

  1. 面积计算

    • 交集面积 = max ⁡ ( 0 , x RightBottom − x LeftTop ) × max ⁡ ( 0 , y RightBottom − y LeftTop ) \max(0, x_{\text{RightBottom}} - x_{\text{LeftTop}}) \times \max(0, y_{\text{RightBottom}} - y_{\text{LeftTop}}) max(0,xRightBottomxLeftTop)×max(0,yRightBottomyLeftTop)
    • 并集面积 = 框1面积 + 框2面积 - 交集面积
  • 代码实践
import matplotlib.pyplot as plt
import matplotlib.patches as pts# 现在定义一个函数,接收两个参数,都是两个点坐标,以数组的形式
def calculate_iou(box1, box2):"""计算两个边界框之间的 IoU (Intersection over Union)参数:box1: 第一个边界框,格式为 [x1, y1, x2, y2]box2: 第二个边界框,格式为 [x1, y1, x2, y2]返回:iou: 两个边界框之间的 IoU 值"""# 解析边界框坐标x1_box1, y1_box1, x2_box1, y2_box1 = box1x1_box2, y1_box2, x2_box2, y2_box2 = box2# 确保坐标的有效性assert x1_box1 < x2_box1, f"无效的 box1 x坐标: {x1_box1} >= {x2_box1}"assert y1_box1 < y2_box1, f"无效的 box1 y坐标: {y1_box1} >= {y2_box1}"assert x1_box2 < x2_box2, f"无效的 box2 x坐标: {x1_box2} >= {x2_box2}"assert y1_box2 < y2_box2, f"无效的 box2 y坐标: {y1_box2} >= {y2_box2}"# 计算交集区域的坐标x_left = max(x1_box1, x1_box2)y_top = max(y1_box1, y1_box2)x_right = min(x2_box1, x2_box2)y_bottom = min(y2_box1, y2_box2)# 检查是否有交集if x_right < x_left or y_bottom < y_top:return 0.0# 计算交集区域面积intersection_area = (x_right - x_left) * (y_bottom - y_top)# 计算两个边界框各自的面积area_box1 = (x2_box1 - x1_box1) * (y2_box1 - y1_box1)area_box2 = (x2_box2 - x1_box2) * (y2_box2 - y1_box2)# 计算并集区域面积union_area = area_box1 + area_box2 - intersection_area# 计算IOU,并避免除零错误if union_area == 0:iou = 0else:iou = intersection_area / union_areareturn iou# 定义一个函数,根据坐标画出两个框
def plot_boxes(box1, box2):fig, ax = plt.subplots()# 绘制第一个框rect1 = pts.Rectangle((box1[0], box1[1]), box1[2]-box1[0], box1[3]-box1[1], linewidth=1, edgecolor='r', facecolor='none')ax.add_patch(rect1)# 绘制第二个框rect2 = pts.Rectangle((box2[0], box2[1]), box2[2]-box2[0], box2[3]-box2[1], linewidth=1, edgecolor='b', facecolor='none')ax.add_patch(rect2)# 设置坐标轴范围ax.set_xlim(0, 100)ax.set_ylim(0, 100)# 显示图像plt.show()# 测试用例
if __name__ == "__main__":# # 测试1: 完全重叠box_a = [10, 10, 50, 50]# box_b = [10, 10, 50, 50]# iou = calculate_iou(box_a, box_b)# print(f"测试1 (完全重叠): IoU = {iou:.2f} (预期: 1.00)")# 测试2: 部分重叠box_c = [20, 20, 60, 60]iou = calculate_iou(box_a, box_c)print(f"测试2 (部分重叠): IoU = {iou:.2f} (预期: 0.47)")# 绘制框plot_boxes(box_a, box_c)
  • 效果图
    请添加图片描述

总结

  • 分段介绍YOLO的框架和基本原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910343.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring IOC容器核心揭秘:BeanFactory创建、配置加载解析并注册为BeanDefinition

文章目录 一、为何这个阶段如此重要&#xff1f;二、整体流程全景图三、源码级深度解析1. BeanFactory的诞生源码入口&#xff1a;refresh()方法核心方法&#xff1a;obtainFreshBeanFactory()核心实现&#xff1a;refreshBeanFactory()BeanFactory实例化 2. ★ 核心&#xff1…

解锁n8n:开启工作流自动化的无限可能(5/6)

文章摘要&#xff1a;n8n 是一款开源低代码工作流自动化平台&#xff0c;通过可视化拖放节点创建复杂工作流&#xff0c;无需大量代码。具有强大集成能力、数据转换、错误处理等功能&#xff0c;适用于数据同步、客户关系管理、IT 自动化等场景。相比 Zapier、IFTTT 等工具&…

数据赋能(308)——合作共享——数据交流

概述 重要性如下&#xff1a; 信息准确性&#xff1a;数据交流原则确保在数据传递过程中信息的准确性&#xff0c;这是决策和业务活动的基础。决策支持&#xff1a;准确的数据交流为决策提供有力支持&#xff0c;帮助组织做出更明智的决策。业务效率&#xff1a;有效的数据交…

TCP流量控制与拥塞控制:核心机制与区别

一、TCP流量控制&#xff08;Flow Control&#xff09; 定义&#xff1a;通过调节发送方的发送速率&#xff0c;确保接收方能够及时处理数据&#xff0c;避免缓冲区溢出。 本质&#xff1a;解决发送方与接收方之间的"端到端"速率匹配问题。 1. 实现机制&#xff1a…

iOS多端兼容性调试:一次iOS性能优化分工具协作排查过程

在多技术栈混合开发日益普及的今天&#xff0c;iOS应用中越来越多地集成了WebView、Flutter、React Native甚至小程序模块。而这些模块带来的复杂性&#xff0c;不仅体现在UI适配&#xff0c;还包括数据同步、系统权限管理、线程调度等方面的问题。 本文记录的是我们在处理一个…

秋招Day14 - MySQL - 索引

索引为什么能够提高MySQL的查询效率&#xff1f; 索引可以理解为目录&#xff0c;通过索引可以快速定位数据&#xff0c;避免全表扫描 一般是B树结构&#xff0c;查找效率是O(log n)。 索引还能加速排序、分组、连接等操作。 create index idx_name on students(name); 能简…

第5天:LSTM预测火灾温度

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 复用LSTM模型实现火灾温度预测 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: Pytorch &am…

目标检测之YOLOV11自定义数据使用OBB训练与验证

一、前置条件与环境准备 在开始训练前&#xff0c;确保已完成以下准备《目标检测之YOLOV11自定义数据预处理——从原始标注到YOLO-OBB格式转换与验证》&#xff1a; 数据目录结构&#xff1a; yolov11/ ├── datasets/ │ └── shrimp/ │ ├── images/ │ …

Labview教程进阶一(Labview与OPC UA设备通信)

1.Labview与OPC UA设备通信 OPC UA通信协议优势显著,具体表现如下: 跨平台兼容:支持多种操作系统和硬件平台,实现无缝数据交换。高安全性:内置加密、身份验证和授权机制,确保数据传输安全。高效数据交换:采用二进制编码和优化的传输协议,提高通信效率。复杂数据建模:…

【Comsol教程】如何求解指定范围的积分 或 在积分中去除奇异点/异常值

我们在Comsol中经常需要对物体的边界求积分&#xff0c;比如求物体在流场中所受的总流体牵引力&#xff0c;又或者是物体在电场中受到的总介电泳力。当物体的材料或者边界条件存在突变时&#xff0c;物体表面的粘性应力或者麦克斯韦电应力可能会存在异常值。通常解决方法有细化…

Python 多版本治理理念(Windows 平台 · 零基础友好)

&#x1f9e0; Python 多版本治理理念&#xff08;Windows 平台 零基础友好&#xff09; &#x1f310; 核心原则&#xff1a;三维治理、四级隔离、五项自治 以下是基于人工智能深度学习环境搭建实践&#xff0c;总结出的"零基础入门 Conda工具链 全隔离项目环境"…

Python文件管理利器之Shutil库详解

Shutil是一个Python内置的用来高效处理文件和目录迁移任务的库。Shutil不仅支持基本的文件复制、移动和删除操作&#xff0c;还具备处理大文件、批量迁移目录、以及跨平台兼容性等特性。通过使用Shutil&#xff0c;我们可以更加轻松地实现文件系统的管理和维护&#xff0c;本文…

学习华为 ensp 的学习心得体会

引言​ 在信息技术日新月异的今天&#xff0c;网络技术作为连接世界的桥梁&#xff0c;其重要性不言而喻。作为一名对网络技术充满热情的大一新生&#xff0c;我选择了 eNSP&#xff08;Enterprise Network Simulation Platform&#xff0c;企业网络模拟平台&#xff09;作为我…

jenkins-2.439.1搭建

一、 二、pipeline文件 pipeline { agent any // 可以指定特定的agent, 如 label 或 docker environment { JAVA_HOME "/usr/local/software/jdk1.8.0_451" PATH "${JAVA_HOME}/bin:${env.PATH}" } tools { …

【threejs】一天一个小案例讲解:控制面板(GUI)

# 好吧&#xff0c;每天更新实在有点艰巨&#xff0c;我尽量少量多次 代码仓 所有代码都会上传到这里&#xff0c;可自行clone GitHub - TiffanyHoo/three_practices: Learning three.js together! 运行效果图 ​ 知识要点 一、安装dat.gui npm i dat.gui 二、使用步骤&a…

飞轮储能辅助双馈风机参与电力系统一次调频的仿真模型研究

以下是一篇关于飞轮储能辅助双馈风机参与电力系统一次调频的仿真模型研究的论文 ,涵盖理论分析、数学模型构建、控制策略设计及仿真验证等内容,适用于电气工程、新能源技术等领域的研究参考。 飞轮储能辅助双馈风机参与电力系统一次调频的仿真模型研究 摘要 随着风电在电力…

一次性理解Java垃圾回收--简单直接方便面试时使用

Java的垃圾回收是一个面试必问题&#xff0c;只要按照下面的步骤回答肯定不会有大问题。 1.先告诉面试官垃圾回收分为两大步&#xff1a; a.识别哪些对象是"垃圾"(不再被使用的对象) b.回收这些垃圾对象占用的内存空间 2. 接下来分别介绍标记阶段和回收阶段的细节…

XML映射文件-辅助配置

如果你没有按照同包同名来&#xff0c;就要下面的配置&#xff0c;指定好路径 1.把路径改为类下面的xml文件 #指定xml映射文件的位置 mybatis.mapper-locationsclasspath:mapper/*.xml

120、三角形最小路径和

题目 解答&#xff1a; 直接按照空间复杂度O(n)来做了。这种明显是动态规划&#xff0c;每一层用到上一层的信息。 观察数据形状&#xff0c;如下&#xff1a; (0,0) (1,0)(1,1) (2,0)(2,1)(2,2) (3,0)(3,1)(3,2)(3,3) ... (n-1,0)...(n-1,n-1) 设dp[n],定义为本层第n…

仕么是Transformer以及工作原理和架构

Transformer 是一种革命性的**深度学习架构**&#xff0c;由 Google 团队在 2017 年论文《Attention is All You Need》中提出。它彻底改变了自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并逐渐扩展到计算机视觉、语音识别等多模态任务。其核心创新在于**完全依赖…