如何将双线性采样特征反向映射到体素网格提取BEV特征?
实现双线性采样反向映射提取BEV特征
我正在开发一个专注于双线性采样的类,目标是将双线性采样得到的特征映射到预先创建的体素网格对应位置。
参数定义
B = batch(批大小) C = Channel(通道数) S = number of views(视图数量) D = depth(深度维度) H = height(高度) W = width(宽度) 3 = x,y,z(三维坐标) 2 = x,y(二维坐标)
现有实现流程
- 创建了形状为
[B,D,H,W,3]的体素,以及维度为[B,S,C,H,W]的360°图像视图样本 - 通过外参和内参将体素点(点云)投影到每张图像,过滤掉图像外的点后得到
valid_points = [B,S,H,W,2](注:此处W为有效点数量,H=1) - 对
valid_points做归一化处理,创建尺寸为[B,S,H,W,2]的网格,随后执行双线性采样代码:
valid_points = cur_coords[:, on_img[1]] ######### Normalize Valid Points Between [-1, 1] ######## normalized_points = torch.zeros_like(valid_points) normalized_points[:,:, 0] = 2.0 * (valid_points[:, :, 0] / (H_img - 1)) - 1.0 # Normalize y-coordinates normalized_points[:,:, 1] = 2.0 * (valid_points[:, :, 1] / (W_img - 1)) - 1.0 # [N, M',2] grid = normalized_points.unsqueeze(1).cuda() # Shape [S, H_out, W_out, 2] sampled_features_with_location_list = [] for i in range(0,N): img_s = camera_view_tensor[i].unsqueeze(0).permute(0, 3, 1, 2) #[B, C, H_in, W_in] grid_s = grid[i].unsqueeze(0) sampled_points = F.grid_sample(img_s, grid_s, mode='bilinear', align_corners=None) # (B,N,C,H_out,W_out) sampled_features_list.append(sampled_points) sampled_points = torch.stack(sampled_features_list, dim=1) #[B = 1,S = 6,C= 3,H= 1,W =22965]
现在需要执行反向映射来提取BEV特征,请问该如何实现?
内容的提问来源于stack exchange,提问作者Zac Boussaid
相关产品推荐
相关产品推荐

