坐标矩阵的建立

最复杂的相对坐标矩阵

该矩阵由相对x最小坐标、相对x最大坐标、相对y最小坐标、相对y最大坐标,相对x中心坐标、相对y中心坐标,以及高度和宽度的映射(用于表示高度和宽度的比列)。

其中相对坐标设置这么多不同类型的原因在于,相对最小值: 表示每个像素块的左上角位置。相对最大值: 表示每个像素块的右下角位置,而相对中心值则表示每个像素块的中心位置,相对最小值和相对最大值不仅提供了每个像素的具体位置,还允许网络更丰富地编码空间信息,包括大小和位置信息。这种丰富的编码能够帮助网络在处理与位置相关的任务时更具表现力。

对应代码

def _make_coord(batch, height, width):
    # 生成网格坐标 (meshgrid),这里 xv 和 yv 是两个二维张量,表示图像中每个像素的 x 和 y 坐标。
    #xv 的每一行都相同,包含从 0 到 height-1 的值,而 yv 的每一列都相同,包含从 0 到 width-1 的值。
    xv, yv = torch.meshgrid([torch.arange(0, height), torch.arange(0, width)])
	#计算相对位置编码,xv_min 和 yv_min 是 x 和 y 的相对最小值,范围从 [-1 , 1)
    xv_min = (xv.float() * 2 - width) / width
    yv_min = (yv.float() * 2 - height) / height
    #xv_max 和 yv_max 是 x 和 y 的相对最大值,范围从 (-1. 1]
    xv_max = ((xv + 1).float() * 2 - width) / width
    yv_max = ((yv + 1).float() * 2 - height) / height
    # xv_ctr 和 yv_ctr 是 x 和 y 的中心值,范围从 (-1,1)
    xv_ctr = (xv_min + xv_max) / 2
    yv_ctr = (yv_min + yv_max) / 2
    ## hmap 和 wmap 是两个二维张量,每个元素分别是 1.0 / height 和 1.0 / width,用于表示高度和宽度的相对比例
    hmap = torch.ones(height, width) * (1.0 / height)
    wmap = torch.ones(height, width) * (1.0 / width)
    # 将以上所有内容拼接
    coord = torch.autograd.Variable(
        torch.cat(
            [
                xv_min.unsqueeze(0),
                yv_min.unsqueeze(0),
                xv_max.unsqueeze(0),
                yv_max.unsqueeze(0),
                xv_ctr.unsqueeze(0),
                yv_ctr.unsqueeze(0),
                hmap.unsqueeze(0),
                wmap.unsqueeze(0),
            ],
            dim=0,
        )
    )
    #在batch内重复
    coord = coord.unsqueeze(0).repeat(batch, 1, 1, 1)
    return coord

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值