bevpoolv2

  1. B, N, D, H, W, _ = coor.shape:获取输入坐标的形状。

  2. num_points = B * N * D * H * W:计算总点数。

  3. ranks_depth = torch.arange(0, num_points, dtype=torch.int, device=coor.device):创建一个与总点数相同长度的整数序列,表示每个点在深度空间中的索引。

  4. ranks_feat = torch.arange(0, num_points // D, dtype=torch.int, device=coor.device):创建一个与点数除以D相同长度的整数序列,表示每个点在特征空间中的索引。

  5. ranks_feat = ranks_feat.reshape(B, N, 1, H, W)ranks_feat = ranks_feat.expand(B, N, D, H, W).flatten():将特征空间中的索引调整为与坐标相同的形状。

  6. coor = ((coor - (self.bx - self.dx / 2.0)) / self.dx).long():将坐标转换为体素空间。

  7. coor = coor.view(num_points, 3)batch_idx = torch.arange(0, B).reshape(B, 1).expand(B, num_points // B).reshape(num_points, 1).to(coor)coor = torch.cat((coor, batch_idx), 1):将坐标和批次索引整合在一起。

  8. kept = (coor[:, 0] >= 0) & ...:创建一个布尔数组,用于判断哪些点在体素范围内。

  9. coor, ranks_depth, ranks_feat = coor[kept], ranks_depth[kept], ranks_feat[kept]:只保留在体素范围内的点。

  10. ranks_bev = coor[:, 3] * (self.nx[2] * self.nx[1] * self.nx[0])ranks_bev += coor[:, 1] * self.nx[0] + coor[:, 0]order = ranks_bev.argsort()ranks_bev, ranks_depth, ranks_feat = ranks_bev[order], ranks_depth[order], ranks_feat[order]:计算每个点在鸟瞰图中的索引,并根据这些索引对点进行排序。

  11. kept = torch.ones(ranks_bev.shape[0], device=ranks_bev.device, dtype=torch.bool)kept[1:] = ranks_bev[1:] != ranks_bev[:-1]interval_starts = torch.where(kept)[0].int():找出鸟瞰图中的每个体素的起始点。

  12. interval_lengths = torch.zeros_like(interval_starts)interval_lengths[-1] = ranks_bev.shape[0] - interval_starts[-1]:计算每个体素中的点数。

  13. return ranks_bev.int().contiguous(), ranks_depth.int().contiguous(), ranks_feat.int().contiguous(), interval_starts.int().contiguous(), interval_lengths.int().contiguous():返回所有计算出的索引和长度。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值