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

目标检测损失计算部分(YOLO)

ComputeLoss

标准化坐标的增益张量

标准化坐标的增益张量(gain tensor)用于将归一化的目标转换为特定特征层的网格尺度,以便进行匹配和计算。

在目标检测模型中,输入图像被划分为多个网格,每个网格负责预测多个锚框。锚框的尺寸在不同特征层上有所不同,以便检测不同尺度的目标。

1、增益张量将归一化的目标坐标转换为特征图的网格尺度

gain = torch.ones(7, device=tragets.device).long() #创建增益张量

增强张量的初始值是一个全1的张量,长度为 7,目标信息包括图像索引、类别、x、y,w,h和锚框索引

2、更新增益张量以匹配当前特征图的尺度

gain[2:6] = torch.tensor(p[i].shape)[[3,2,3,2]]

3、将归一化的目标乘以增益张量,以转换为特征图的尺度

t = targets * gain

偏移量

偏移量通过在不同的网格位置上尝试匹配,可以更好地捕捉目标,尤其是当目标位于网格边界时

g = 0.5
off = torch.tensor([[0, 0],[1, 0], [0, 1], [-1, 0], [0, -1],  # j,k,l,m], device=targets.device).float() * g  # 偏移量

具体的偏移量解释如下:

  1. [[0, 0]]:不偏移,即使用当前网格的中心位置。
  2. [[1, 0]]:向右偏移一个网格单位。
  3. [[0, 1]]:向下偏移一个网格单位。
  4. [[-1, 0]]:向左偏移一个网格单位。
  5. [[0, -1]]:向上偏移一个网格单位。

通过将偏移量乘以 g,得到的偏移量为网格单位的 0.5 倍,这样每个偏移的距离为半个网格单位。

使用偏移量的好处

  1. 增加匹配灵活性:当目标位于网格边界时,可以通过偏移量在多个位置尝试匹配,从而增加匹配成功的可能性。
  2. 提高检测精度:通过在不同位置进行匹配,可以更准确地定位目标,尤其是对于小目标和边界目标。

为什么要计算目标和锚框的宽高比

在目标检测模型(如 YOLO)中,计算目标和锚框的宽高比是为了确定哪些锚框与目标最匹配。宽高比的匹配是判断锚框与目标是否合适的重要指标,因为目标的大小和形状在不同锚框上的匹配程度会直接影响检测的准确性。

主要原因

  1. 匹配适当的锚框: 锚框是预定义的一组矩形框,其形状和大小用于捕捉图像中的对象。目标和锚框的宽高比计算有助于确定哪个锚框最适合特定目标。通过选择宽高比接近的锚框,可以更准确地定位和分类目标。
  2. 减少计算复杂度: 通过提前计算宽高比并进行筛选,可以减少后续计算的复杂度。例如,只对那些宽高比接近的锚框进行详细的IoU(交并比)计算,从而提高计算效率。
  3. 提高检测精度: 如果锚框的宽高比与目标的宽高比相差较大,即使IoU较高,最终的检测效果也可能不理想。通过宽高比匹配可以确保选出的锚框在形状上更接近目标,从而提高检测精度。
r = t[:, :, 4:6] / anchors[:, None]  # wh ratio
j = torch.max(r, 1. / r).max(2)[0] < self.hyp['anchor_t']  # compare
t  = t[j]

在pytorch中,tensor[true],意味着选择tensor中所有为true的元素

import torch# 创建一个示例张量
tensor = torch.tensor([1, 2, 3, 4, 5])# 创建一个布尔张量,指示哪些元素应被选择
mask = torch.tensor([True, False, True, False, True])# 使用布尔索引
selected_elements = tensor[mask]print(selected_elements)
http://www.lryc.cn/news/410681.html

相关文章:

  • Swift 方法
  • 哪些牌子充电宝性价比比较高?目前公认比较好用充电宝都在这儿!
  • 计算机网络必会面经
  • 深入理解 Go 数组、切片、字符串
  • STM32下的HAL库U盘数据读写
  • JavaScript(20)——事件委托
  • Linux系统安装opencv
  • nginx反向代理+nginx黑白名单+nginx负载均衡+平滑升级+配置jdk环境-7.30
  • C# Unity 面向对象补全计划 之 访问修饰符
  • JAVA多线程设计模式 (多线程程序的衡量标准)
  • 消息队列使用
  • Windows 10+Visual Studio2019 Opencv-C++安装配置
  • 百易云资产管理运营系统 comfileup.php 文件上传致RCE漏洞复现(XVE-2024-18154)
  • 【学习笔记】Redis学习笔记——第17章 集群
  • Vue - CSS基础学习
  • python setup.py install
  • 论文解读:DiAD之SG网络
  • Prometheus+Grafana 监控平台实践-搭建常用服务监控告警
  • leaflet加载天地图:卫星底图(影响地图) 和 路网底图(矢量地图)【webgis】
  • 微软蓝屏事件:全球网络安全与系统稳定性的警示
  • 【51单片机仿真】基于51单片机设计的整数/小数计算器系统仿真源码文档——文末资料下载
  • ubuntu安装dockergitlab
  • 自定义视图提示:提升Laravel用户体验的秘诀
  • 关于黑马Ajax项目的笔记
  • Java面试八股之JDK 动态代理和 CGLIB 动态代理的区别
  • 验证码邮件接口测试指南?接口的优化策略?
  • 基于Java的智能停车场管理系统
  • 前后端分离开发遵循接口规范-YAPI
  • 把本地的项目代码初始化到git仓库
  • 白杨SEO:公众号如何找选题?如何利用ai工具写公众号?公众号变现方式有哪些?22个公众号营销常见问题解答大全!