reduced-3dgs 1.8.19__tar.gz → 1.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/PKG-INFO +1 -1
  2. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/importance/trainer.py +52 -2
  3. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs.egg-info/PKG-INFO +1 -1
  4. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/setup.py +1 -1
  5. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/gaussian-importance/cuda_rasterizer/forward.cu +3 -3
  6. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/LICENSE.md +0 -0
  7. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/README.md +0 -0
  8. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/__init__.py +0 -0
  9. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/combinations.py +0 -0
  10. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/importance/__init__.py +0 -0
  11. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/importance/combinations.py +0 -0
  12. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/pruning/__init__.py +0 -0
  13. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/pruning/combinations.py +0 -0
  14. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/pruning/trainer.py +0 -0
  15. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/quantization/__init__.py +0 -0
  16. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/quantization/abc.py +0 -0
  17. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/quantization/exclude_zeros.py +0 -0
  18. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/quantization/quantizer.py +0 -0
  19. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/quantization/wrapper.py +0 -0
  20. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/quantize.py +0 -0
  21. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/shculling/__init__.py +0 -0
  22. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/shculling/gaussian_model.py +0 -0
  23. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/shculling/trainer.py +0 -0
  24. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs/train.py +0 -0
  25. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs.egg-info/SOURCES.txt +0 -0
  26. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs.egg-info/dependency_links.txt +0 -0
  27. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs.egg-info/requires.txt +0 -0
  28. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/reduced_3dgs.egg-info/top_level.txt +0 -0
  29. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/setup.cfg +0 -0
  30. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/cuda_rasterizer/backward.cu +0 -0
  31. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/cuda_rasterizer/forward.cu +0 -0
  32. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/cuda_rasterizer/rasterizer_impl.cu +0 -0
  33. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/diff_gaussian_rasterization/__init__.py +0 -0
  34. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/ext.cpp +0 -0
  35. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/rasterize_points.cu +0 -0
  36. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/reduced_3dgs/kmeans.cu +0 -0
  37. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/reduced_3dgs/redundancy_score.cu +0 -0
  38. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/reduced_3dgs/sh_culling.cu +0 -0
  39. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/diff-gaussian-rasterization/reduced_3dgs.cu +0 -0
  40. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/gaussian-importance/cuda_rasterizer/backward.cu +0 -0
  41. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/gaussian-importance/cuda_rasterizer/rasterizer_impl.cu +0 -0
  42. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/gaussian-importance/diff_gaussian_rasterization/__init__.py +0 -0
  43. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/gaussian-importance/ext.cpp +0 -0
  44. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/gaussian-importance/rasterize_points.cu +0 -0
  45. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/simple-knn/ext.cpp +0 -0
  46. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/simple-knn/simple_knn.cu +0 -0
  47. {reduced_3dgs-1.8.19 → reduced_3dgs-1.9.0}/submodules/simple-knn/spatial.cu +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reduced_3dgs
3
- Version: 1.8.19
3
+ Version: 1.9.0
4
4
  Summary: Refactored code for the paper "Reducing the Memory Footprint of 3D Gaussian Splatting"
5
5
  Home-page: https://github.com/yindaheng98/reduced-3dgs
6
6
  Author: yindaheng98
@@ -75,7 +75,7 @@ def count_render(self: GaussianModel, viewpoint_camera: Camera):
75
75
  }
76
76
 
77
77
 
78
- def prune_gaussians(model: GaussianModel, dataset: CameraDataset):
78
+ def prune_list(model: GaussianModel, dataset: CameraDataset):
79
79
  gaussian_count = torch.zeros(model.get_xyz.shape[0], device=model.get_xyz.device, dtype=torch.int)
80
80
  opacity_important_score = torch.zeros(model.get_xyz.shape[0], device=model.get_xyz.device, dtype=torch.float)
81
81
  T_alpha_important_score = torch.zeros(model.get_xyz.shape[0], device=model.get_xyz.device, dtype=torch.float)
@@ -84,7 +84,57 @@ def prune_gaussians(model: GaussianModel, dataset: CameraDataset):
84
84
  gaussian_count += out["gaussians_count"]
85
85
  opacity_important_score += out["opacity_important_score"]
86
86
  T_alpha_important_score += out["T_alpha_important_score"]
87
- return None
87
+ return gaussian_count, opacity_important_score, T_alpha_important_score
88
+
89
+
90
+ # return importance score with adaptive volume measure described in paper
91
+ def calculate_v_imp_score(gaussians: GaussianModel, imp_list, v_pow):
92
+ """
93
+ :param gaussians: A data structure containing Gaussian components with a get_scaling method.
94
+ :param imp_list: The importance scores for each Gaussian component.
95
+ :param v_pow: The power to which the volume ratios are raised.
96
+ :return: A list of adjusted values (v_list) used for pruning.
97
+ """
98
+ # Calculate the volume of each Gaussian component
99
+ volume = torch.prod(gaussians.get_scaling, dim=1)
100
+ # Determine the kth_percent_largest value
101
+ index = int(len(volume) * 0.9)
102
+ sorted_volume, _ = torch.sort(volume, descending=True)
103
+ kth_percent_largest = sorted_volume[index]
104
+ # Calculate v_list
105
+ v_list = torch.pow(volume / kth_percent_largest, v_pow)
106
+ v_list = v_list * imp_list
107
+ return v_list
108
+
109
+
110
+ def score2mask(percent, import_score: list, threshold=None):
111
+ sorted_tensor, _ = torch.sort(import_score, dim=0)
112
+ index_nth_percentile = int(percent * (sorted_tensor.shape[0] - 1))
113
+ value_nth_percentile = sorted_tensor[index_nth_percentile]
114
+ thr = min(threshold, value_nth_percentile) if threshold is not None else value_nth_percentile
115
+ prune_mask = (import_score <= thr)
116
+ return prune_mask
117
+
118
+
119
+ def prune_gaussians(gaussians: GaussianModel, dataset: CameraDataset, prune_type="important_score", prune_percent=0.1, prune_thr=None, v_pow=0.1):
120
+ gaussian_list, opacity_imp_list, T_alpha_imp_list = prune_list(gaussians, dataset)
121
+ match prune_type:
122
+ case "important_score":
123
+ mask = score2mask(prune_percent, opacity_imp_list, prune_thr)
124
+ case "v_important_score":
125
+ v_list = calculate_v_imp_score(gaussians, opacity_imp_list, v_pow)
126
+ mask = score2mask(prune_percent, v_list, prune_thr)
127
+ case "max_v_important_score":
128
+ v_list = opacity_imp_list * torch.max(gaussians.get_scaling, dim=1)[0]
129
+ mask = score2mask(prune_percent, v_list, prune_thr)
130
+ case "count":
131
+ mask = score2mask(prune_percent, gaussian_list, prune_thr)
132
+ case "T_alpha":
133
+ # new importance score defined by doji
134
+ mask = score2mask(prune_percent, T_alpha_imp_list, prune_thr)
135
+ case _:
136
+ raise Exception("Unsupportive prunning method")
137
+ return mask
88
138
 
89
139
 
90
140
  class ImportancePruner(DensifierWrapper):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reduced_3dgs
3
- Version: 1.8.19
3
+ Version: 1.9.0
4
4
  Summary: Refactored code for the paper "Reducing the Memory Footprint of 3D Gaussian Splatting"
5
5
  Home-page: https://github.com/yindaheng98/reduced-3dgs
6
6
  Author: yindaheng98
@@ -60,7 +60,7 @@ if os.name == 'nt':
60
60
 
61
61
  setup(
62
62
  name="reduced_3dgs",
63
- version='1.8.19',
63
+ version='1.9.0',
64
64
  author='yindaheng98',
65
65
  author_email='yindaheng98@gmail.com',
66
66
  url='https://github.com/yindaheng98/reduced-3dgs',
@@ -471,9 +471,9 @@ renderCUDA_count(
471
471
  }
472
472
 
473
473
  //add count
474
- gaussian_count[collected_id[j]]++;
475
- opacity_important_score[collected_id[j]] += con_o.w; //opacity
476
- T_alpha_important_score[collected_id[j]] += alpha * T;
474
+ atomicAdd(&gaussian_count[collected_id[j]], 1);
475
+ atomicAdd(&opacity_important_score[collected_id[j]], con_o.w); //opacity
476
+ atomicAdd(&T_alpha_important_score[collected_id[j]], alpha * T);
477
477
 
478
478
  // Eq. (3) from 3D Gaussian splatting paper.
479
479
  for (int ch = 0; ch < CHANNELS; ch++)
File without changes
File without changes
File without changes