前向传播不是把排序好的x传入进去了吗? def forward(ctx, x, geometry, ranks): """The features `x` and `geometry` are ranked by voxel positions.""" # Cumulative sum of all features. x = x.cumsum(0) # Indicates the change of voxel. mask = torch.ones(x.shape[0], device=x.device, dtype=torch.bool) mask[:-1] = ranks[1:] != ranks[:-1] x, geometry = x[mask], geometry[mask] # Calculate sum of features within a voxel. x = torch.cat((x[:1], x[1:] - x[:-1])) ctx.save_for_backward(mask) ctx.mark_non_differentiable(geometry) return x, geometry
时间: 2024-03-31 14:32:41 浏览: 118
openssl-windows_x64_x86.zip
您说的是对的,`VoxelsSumming` 函数的前向传播将输入的点云数据 `x` 和位置信息 `geometry` 按照体素位置进行排序,并在排序后的数据上进行计算。具体来说,`x` 和 `geometry` 都是按照体素位置进行排序的,即在排序后的数据中,相邻的数据对应于相邻的体素。在排序后,`x` 会进行累加操作,得到每个体素内所有点的特征之和,而 `geometry` 则会与 `x` 一起被传递到下一步计算中。
在排序后,还需要根据相邻体素的位置信息 `ranks` 来确定哪些数据对应于同一体素。具体来说,可以通过比较相邻的体素的位置信息,将相邻的体素分为同一组,然后将同一组体素内的数据进行求和,得到每个体素的特征。这个过程中,`mask` 变量被用来标记哪些数据对应于同一体素,从而方便后续的计算。
阅读全文