以下函数是计算两两锚框之间的IOU,但是有两行代码看了好久,记录一下,怕下次又不理解了。。(哭泣)

def box_iou(boxes1, boxes2):
#计算两个锚框或边界框列表中成对的交并⽐#boxes形状:(boxes数量,4)4表示每个锚框的左上(x,y)、右下坐标(x, y)。#areas形状:(box数量,)box_area = lambda boxes: ((boxes[:, 2] - boxes[:, 0])) * ((boxes[:, 3] - boxes[:, 1]))areas1 = box_area(boxes1)areas2 = box_area(boxes2)print(boxes1[:, None, :2])print(boxes2[:, :2])inter_upperlefts = torch.max(boxes1[:, None, :2], boxes2[:, :2])print(f'inter_upperlefts:{inter_upperlefts}')# `inter_upperlefts`, `inter_lowerrights`, `inters`的形状:# (boxes1的数量, boxes2的数量, 2)inter_lowerrights = torch.min(boxes1[:, None, 2:], boxes2[:, 2:])inters = (inter_lowerrights - inter_upperlefts).clamp(min=0)inter_areas = inters[:, :, 0] * inters[:, :, 1]union_areas = areas1[:, None] + areas2 - inter_areasreturn inter_areas / union_areas
box1 = torch.tensor([[67.50,  67.50, 433.50, 433.50],[128.50, 128.50, 372.50, 372.50]])box2 = torch.tensor([[ -8.30, 121.10, 509.30, 379.90],[189.50, 189.50, 311.50, 311.50]])
c = box_iou(box1, box2)

输出结果:

tensor([[[ 67.50,  67.50]],[[128.50, 128.50]]])tensor([[ -8.30, 121.10],[189.50, 189.50]])inter_upperlefts:tensor([[[ 67.50, 121.10],[189.50, 189.50]],[[128.50, 128.50],[189.50, 189.50]]])

boxes1[:, None, :2]是一个2*1*2的形状,也就是None给Tensor增加了一个维度,boxes2[:, :2]是一个2*2的形状,当torch.max()对两者作用时,会触发广播机制,将两者进行扩充,最终输出的inter_upperlefts形状为2*2*2。

具体点,就是将boxes1中的每个左上坐标,跟boxes2中所有锚框的左上坐标进行比较,取得最大值。
以代码为例,传入的是2*2也就是每个boxes中含有两个锚框,因此在执行上述代码时,会对boxes1和boxes2进行广播,均变成2*2*2。图中的标号代表广播时,将boxes1中的前左上坐标“一个一个”复制n份(n为锚框个数),而boxes2中的左上坐标是“一份一份”的进行复制,这样对应起来就是boxes1中的每一个在跟boxes2中的每一个进行比较后取最大值。在这个过程中要比较(boxes1中锚框个数*boxes2中锚框个数)次,最终inter_leftrights中存储的就是两两比较后的较大左上坐标,inter_lowerrights中存储的两两比较后的较小右下坐标。两者相减再相乘就是两两锚框之间的相交面积。
(emm,描述起来好多字hhh)

锚框之间的IOU理解相关推荐

  1. 0927锚框(Anchor box)

    锚框(Anchor box) 目标检测算法中,通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含所感兴趣的目标,并调整区域边界从而更加准确地预测目标的真实边界框(ground-truth b ...

  2. YOLOv3学习——锚框和候选区域

    YOLOv3学习之锚框和候选区域 单阶段目标检测模型YOLOv3 R-CNN系列算法需要先产生候选区域,再对候选区域做分类和位置坐标的预测,这类算法被称为两阶段目标检测算法.近几年,很多研究人员相继提 ...

  3. 《动手学深度学习》(七) -- 边界框和锚框

    1 边界框 在目标检测中,我们通常使用边界框(bounding box)来描述对象的空间位置.边界框是矩形的,由矩形左上角的以及右下角的xxx和yyy坐标决定.另一种常用的边界框表示方法是边界框中心的 ...

  4. 结合具体代码理解yolov5-7.0锚框(anchor)生成机制

    最近对yolov5-7.0的学习有所深入,感觉官方代码也比较易读,所以对网络结构的理解更进一步,其中对锚框生成这块没太看明白细节,也想弄明白这块,于是前前后后好好看了代码.现在把我的学习收获做一下记录 ...

  5. 《动手学深度学习》13.4锚框

    13.4.1生成多个锚框 参考: 13.4.1生成多个锚框. 代码实现 导入功能包 import torch import matplotlib.pyplot as plt # 精简打印精度,保留两位 ...

  6. Pytorch 锚框

    Pytorch 锚框 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小技巧:当遇到函数看不懂的时候可以按 Shift+T ...

  7. 动手学深度学习之锚框

    锚框 锚框就是一个框,边缘框就是一个物体的真实的位置的一个框,锚框是对这个边缘框位置的一个猜测.算法先给我们画出一个框,然后看这个框里面有没有物体.如果有的话,算法就基于这个物体进行预测,它到我们真实 ...

  8. 李沐动手学深度学习v2-目标检测中的锚框和代码实现

    一.目标检测中的锚框 前提: 本节锚框代码实现,使用了很多Pytorch内置函数,如果有对应函数看不懂的地方,可以查看前面博客对相应函数的具体解释,如下链接所示: Pytorch中torch.mesh ...

  9. 6--目标检测和边界框和锚框

    很多时候图像里有多个目标,不仅想知道它们的类别,还想得到它们在图像中的具体位置. 在计算机视觉里,这类任务称为目标检测(object detection). 6.1 边界框  边界框(bounding ...

最新文章

  1. RHEL6.3配置文件共享(3) Samba服务之一
  2. HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面...
  3. mysql删除盘点表,用友U8数据库表名参照表修改号参考.doc
  4. C++中栈内存和堆内存
  5. matlab打开矩阵表,如何将Excel数据导入MATLAB中?:EXCLE中通过矩阵表输出选项
  6. 视频播放器+android,Android视频播放器
  7. bootstrap - 弹出层
  8. eclipse jee 和 myeclipse web项目的转换
  9. matlab中princ,基于MATLAB_SIMLINK的Turbo交织器的仿真实现
  10. Google Play的崩溃与ANR
  11. 超级表格终于上线「文件转让」功能!文件调动容易解决!
  12. Java单元测试实践-15.Stub、Replace、Suppress Spring的方法
  13. word 编辑过程中变为只读_word文档保存后,如何恢复之前的资料?
  14. 2022LOL微博杯模糊问题,1080p高清看微博杯the shy比赛直播
  15. pve万兆网卡驱动_教你:高性价比万兆群晖方案——万兆SFP网卡配置使用教程
  16. threejs 特效 更多特效相见
  17. 浅谈SystemInit时钟系统
  18. SAS内部连接器(上):SAS 4i 整合并塑身
  19. 【赠书】《ATT&CK框架实践指南》
  20. 6、☞基于STM32的电子秤设计√★

热门文章

  1. 使用WinSCP下载和文件传输教程
  2. python有vlookup的功能么_Python 3中的条件vlookup
  3. NOIP题库区间合并
  4. 调岗调薪带来的法律风险
  5. 罗技 连点 脚本_走心分享!当评测罗技MASTER 3遇上ANYWHERE 3_鼠标
  6. 骗你不是人 硬盘传输速度提升100倍的方法
  7. 实例61小写字母转大写
  8. word文档无法保存问题
  9. 查询人数最多的部门名字
  10. 【新书速递】信息安全标委会委员推荐的金融科技安全工具书