class_docstr: Scatters points into voxels, used in the voxel encoder with dynamic
  voxelization.
  
  Note:
      The CPU and GPU implementation get the same output, but have numerical
      difference after summation and division (e.g., 5e-7).
  
  Args:
      voxel_size (list): list [x, y, z] size of three dimension.
      point_cloud_range (list): The coordinate range of points, [x_min,
          y_min, z_min, x_max, y_max, z_max].
      average_points (bool): whether to use avg pooling to scatter points
          into voxel.
class_docstr_tok: ["Scatters","points","into","voxels",",","used","in","the","voxel","encoder","with","dynamic","voxelization",".","Note",":","The","CPU","and","GPU","implementation","get","the","same","output",",","but","have","numerical","difference","after","summation","and","division","(","e.g.",",","5e-7",")",".","Args",":","voxel_size","(","list",")",":","list","[","x",",","y",",","z","]","size","of","three","dimension",".","point_cloud_range","(","list",")",":","The","coordinate","range","of","points",",","[","x_min",",","y_min",",","z_min",",","x_max",",","y_max",",","z_max","]",".","average_points","(","bool",")",":","whether","to","use","avg","pooling","to","scatter","points","into","voxel","."]
code: def __init__(
      self, voxel_size, point_cloud_range, average_points: bool
  ):
      super().__init__()
  
      self.voxel_size = voxel_size
      self.point_cloud_range = point_cloud_range
      self.average_points = average_points
  
file_path: lavis/lavis/common/annotator/uniformer/mmcv/ops/scatter_points.py
imports: import torch
  from torch import nn
  from torch.autograd import Function
  from ..utils import ext_loader
label_desc: Use image node_id 1 to create a new DynamicScatter object from inherited base classes: nn with example: obj = DynamicScatter(voxel_size, point_cloud_range, average_points)