detectron 源码解读-巧妙计算 anchor 和 gt_boxes 相交面积

在faster-rcnn 中涉及了 IOU 的计算,而 IOU 就是要先计算相交面积。
在detectron 的源码中,仅仅用了几行代码就实现了 anchor 集合 和 gt_boxes 集合的相交面积矩阵计算

代码位置如下

#  boxes1 代表的是 gt_boxes 
#  boxes2 代表的是 系统生成的 上万个 anchor 
def pairwise_intersection(boxes1: Boxes, boxes2: Boxes) -> torch.Tensor:
    """
    Given two lists of boxes of size N and M,
    compute the intersection area between __all__ N x M pairs of boxes.
    The box order must be (xmin, ymin, xmax, ymax)

    Args:
        boxes1,boxes2 (Boxes): two `Boxes`. Contains N & M boxes, respectively.

    Returns:
        Tensor: intersection, sized [N,M].
    """
    boxes1, boxes2 = boxes1.tensor, boxes2.tensor
    width_height = torch.min(boxes1[:, None, 2:], boxes2[:, 2:]) - torch.max(
        boxes1[:, None, :2], boxes2[:, :2]
    )  # [N,M,2]

    width_height.clamp_(min=0)  # [N,M,2]
    intersection = width_height.prod(dim=2)  # [N,M]
    return intersection

其中最为关键的代码行:

    width_height = torch.min(boxes1[:, None, 2:], boxes2[:, 2:]) - torch.max(
        boxes1[:, None, :2], boxes2[:, :2]

代码分步解释:
取了boxes1 的右下角坐标,并且扩了一个纬度。 假如有139 个 标注框,那么这里的shape 是:[139,1,2]
取了boxes2的右下角坐标 。 假如有 319200 个 anchor,那么这里的shape 是: [319200,2]
这个时候做 torch.min 运算,须先 broadcasting 整个向量,相当于变成:
boxes1 [139,319200,2]
boxes2 [ 139,319200,2]
这两个向量做 min 运算,详细怎么做broadcasting 可参见: https://numpy.org/devdocs/user/theory.broadcasting.html

 torch.min(boxes1[:, None, 2:], boxes2[:, 2:]) 
 # 这个代码雷同上面的代码,但由于冒号的位置相反了,所以取的是左上角的坐标
torch.max( boxes1[:, None, :2], boxes2[:, :2]

过滤掉 负数向量即面积为0
宽和高相乘得到相交面积

    width_height.clamp_(min=0)  # [N,M,2]
    intersection = width_height.prod(dim=2)  # [N,M]

结果示意图

在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: shanchen_两相流shan-chen模型_c_ _lbmshan-chen_lbm_shanchen模型_源码是一个用于模拟两相流的计算模型,采用了Shan-Chen模型和LBM(Lattice Boltzmann Method)方法实现。 Shan-Chen模型是一种基于格子上的动力学理论,用于模拟复杂流体中的相互作用。它通过引入虚拟粒子的相互作用来模拟流体的宏观行为,因此在处理两相流问题时具有较好的适用性。 LBM是一种求解流体力学问题的数方法,其基本思想是将流体划分为格子点,并通过在格子点上的微观速度分布函数的演化来模拟流体的宏观行为。 shanchen_两相流shan-chen模型_c_ _lbmshan-chen_lbm_shanchen模型_源码结合了Shan-Chen模型和LBM方法,用于模拟两相流动的过程。通过数计算,可以得到流体的速度场、密度场等宏观信息,并可以确定相界面的位置、形态变化等细节信息。 该源码的实现过程主要包括以下几个步骤:初始化流场参数、设置流体的初始状态、演化速度和分布函数、更新流体状态、计算流体的宏观量等。通过不断迭代以上步骤,可以模拟出两相流的动态过程,并得到相应的结果。 总之,shanchen_两相流shan-chen模型_c_ _lbmshan-chen_lbm_shanchen模型_源码是一个基于Shan-Chen模型和LBM方法的计算模型,用于模拟两相流动的过程,并通过数计算得到相应的结果。它在计算复杂流体中的相互作用问题时具有较好的可行性和适用性。 ### 回答2: shan-chen模型是一种常用的用于模拟两相流动行为的数学模型。它可以描述液体和气体两相同时存在于同一空间中的流动情况。 而shan-chen Lattice Boltzmann Method (LBM)是一种基于格子的计算方法,用于模拟流体动力学。它通过将流体分割成一个个小格子,然后在每个格点上计算该点的流体性质,如密度和速度等。LBM以其简洁的数学形式和并行计算的特点,成为了模拟两相流动的重要方法。 shan-chen LBM shan-chen模型源码是指实现shan-chen LBM模型的计算程序。该源码是用编程语言编写的一段代码,通过利用数计算方法和算法,实现了对两相流行为的模拟和计算。 这段源码可能包含了一系列的数学计算和物理模型,用于描述流体在两相流中的行为。其中可能包括计算格子上的流体性质、更新流体的速度和压力、处理两相界面的移动和相互作用等。 通过运行源码,可以获得模拟结果,例如两相流的速度场、压力分布等。这些结果对于理解和研究两相流的行为和特性非常重要,可以用于工程设计和科学研究等领域。 总而言之,shan-chen LBM shan-chen模型源码是一段实现了用于模拟两相流行为的数计算程序,通过数学模型和算法,可以模拟和计算两相流的特性和行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值