Unverified Commit c47a94bc authored by Jiajun Deng's avatar Jiajun Deng Committed by GitHub
Browse files

Masking points inside dyanmic_pillar_vfe.py (#759)

* add dynamic pillar vfe

* make the upperbound unaccessible

* add place holder for voxel generation

* add DynPillarVFE

* add PFNLayerV2

* add try except for torch_scatter package

* add dynamic pillar in readme

* add the cfg file of centerpoint with dynamic pillar

* recover original mask_points_by_range

* masking points with points_coords out of grid_size
parent 0f4d3f1f
...@@ -77,26 +77,24 @@ class DynamicPillarVFE(VFETemplate): ...@@ -77,26 +77,24 @@ class DynamicPillarVFE(VFETemplate):
self.y_offset = self.voxel_y / 2 + point_cloud_range[1] self.y_offset = self.voxel_y / 2 + point_cloud_range[1]
self.z_offset = self.voxel_z / 2 + point_cloud_range[2] self.z_offset = self.voxel_z / 2 + point_cloud_range[2]
self.point_cloud_range = point_cloud_range
self.scale_xy = grid_size[0] * grid_size[1] self.scale_xy = grid_size[0] * grid_size[1]
self.scale_y = grid_size[1] self.scale_y = grid_size[1]
self.grid_size = torch.tensor(grid_size).cuda()
self.voxel_size = torch.tensor(voxel_size).cuda()
self.point_cloud_range = torch.tensor(point_cloud_range).cuda()
def get_output_feature_dim(self): def get_output_feature_dim(self):
return self.num_filters[-1] return self.num_filters[-1]
def forward(self, batch_dict, **kwargs): def forward(self, batch_dict, **kwargs):
batch_size = batch_dict['batch_size']
points = batch_dict['points'] # (batch_idx, x, y, z, i, e) points = batch_dict['points'] # (batch_idx, x, y, z, i, e)
points_xyz = points[:, [1,2,3]].contiguous() points_coords = torch.floor((points[:, [1,2]] - self.point_cloud_range[[0,1]]) / self.voxel_size[[0,1]]).int()
# points_coords = (points_xyz[:, [0,1]] - self.point_cloud_range[[0,1]]) / self.voxel_size[[0,1]] mask = ((points_coords >= 0) & (points_coords < self.grid_size[[0,1]])).all(dim=1)
points_coords_x = (points_xyz[:, 0] - self.point_cloud_range[0]) / self.voxel_x points = points[mask]
points_coords_y = (points_xyz[:, 1] - self.point_cloud_range[1]) / self.voxel_y points_coords = points_coords[mask]
points_xyz = points[:, [1, 2, 3]].contiguous()
points_coords_x = points_coords_x.floor()
points_coords_y = points_coords_y.floor()
points_coords = torch.stack([points_coords_x, points_coords_y], dim=-1)
merge_coords = points[:, 0].int() * self.scale_xy + \ merge_coords = points[:, 0].int() * self.scale_xy + \
points_coords[:, 0] * self.scale_y + \ points_coords[:, 0] * self.scale_y + \
......
...@@ -58,10 +58,8 @@ def rotate_points_along_z(points, angle): ...@@ -58,10 +58,8 @@ def rotate_points_along_z(points, angle):
def mask_points_by_range(points, limit_range): def mask_points_by_range(points, limit_range):
# mask = (points[:, 0] >= limit_range[0]) & (points[:, 0] <= limit_range[3]) \ mask = (points[:, 0] >= limit_range[0]) & (points[:, 0] <= limit_range[3]) \
# & (points[:, 1] >= limit_range[1]) & (points[:, 1] <= limit_range[4]) & (points[:, 1] >= limit_range[1]) & (points[:, 1] <= limit_range[4])
mask = (points[:, 0] >= limit_range[0]) & (points[:, 0] < limit_range[3]) \
& (points[:, 1] >= limit_range[1]) & (points[:, 1] < limit_range[4])
return mask return mask
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment