reduced-3dgs 1.10.0__cp311-cp311-win_amd64.whl → 1.10.2__cp311-cp311-win_amd64.whl
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.
Potentially problematic release.
This version of reduced-3dgs might be problematic. Click here for more details.
- reduced_3dgs/diff_gaussian_rasterization/_C.cp311-win_amd64.pyd +0 -0
- reduced_3dgs/importance/diff_gaussian_rasterization/_C.cp311-win_amd64.pyd +0 -0
- reduced_3dgs/prepare.py +105 -0
- reduced_3dgs/simple_knn/_C.cp311-win_amd64.pyd +0 -0
- reduced_3dgs/train.py +13 -115
- {reduced_3dgs-1.10.0.dist-info → reduced_3dgs-1.10.2.dist-info}/METADATA +1 -1
- {reduced_3dgs-1.10.0.dist-info → reduced_3dgs-1.10.2.dist-info}/RECORD +10 -9
- {reduced_3dgs-1.10.0.dist-info → reduced_3dgs-1.10.2.dist-info}/WHEEL +0 -0
- {reduced_3dgs-1.10.0.dist-info → reduced_3dgs-1.10.2.dist-info}/licenses/LICENSE.md +0 -0
- {reduced_3dgs-1.10.0.dist-info → reduced_3dgs-1.10.2.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
Binary file
|
reduced_3dgs/prepare.py
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
from gaussian_splatting import GaussianModel
|
|
2
|
+
from gaussian_splatting.dataset import CameraDataset
|
|
3
|
+
from gaussian_splatting.dataset.colmap import colmap_init
|
|
4
|
+
from gaussian_splatting.trainer import AbstractTrainer
|
|
5
|
+
from gaussian_splatting.trainer.extensions import ScaleRegularizeTrainerWrapper
|
|
6
|
+
from reduced_3dgs.quantization import VectorQuantizeTrainerWrapper
|
|
7
|
+
from reduced_3dgs.shculling import VariableSHGaussianModel, SHCullingTrainer
|
|
8
|
+
from reduced_3dgs.pruning import PruningTrainer
|
|
9
|
+
from reduced_3dgs.combinations import PrunerInDensifyTrainer, SHCullingDensificationTrainer, SHCullingPruningTrainer, SHCullingPrunerInDensifyTrainer
|
|
10
|
+
from reduced_3dgs.combinations import CameraTrainableVariableSHGaussianModel, CameraSHCullingTrainer, CameraPruningTrainer
|
|
11
|
+
from reduced_3dgs.combinations import CameraPrunerInDensifyTrainer, CameraSHCullingDensifyTrainer, CameraSHCullingPruningTrainer, CameraSHCullingPruningDensifyTrainer
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def prepare_gaussians(sh_degree: int, source: str, device: str, trainable_camera: bool = False, load_ply: str = None) -> GaussianModel:
|
|
15
|
+
if trainable_camera:
|
|
16
|
+
gaussians = CameraTrainableVariableSHGaussianModel(sh_degree).to(device)
|
|
17
|
+
gaussians.load_ply(load_ply) if load_ply else colmap_init(gaussians, source)
|
|
18
|
+
else:
|
|
19
|
+
gaussians = VariableSHGaussianModel(sh_degree).to(device)
|
|
20
|
+
gaussians.load_ply(load_ply) if load_ply else colmap_init(gaussians, source)
|
|
21
|
+
return gaussians
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
modes = {
|
|
25
|
+
"shculling": SHCullingTrainer,
|
|
26
|
+
"pruning": PruningTrainer,
|
|
27
|
+
"densify-pruning": PrunerInDensifyTrainer,
|
|
28
|
+
"densify-shculling": SHCullingDensificationTrainer,
|
|
29
|
+
"prune-shculling": SHCullingPruningTrainer,
|
|
30
|
+
"densify-prune-shculling": SHCullingPrunerInDensifyTrainer,
|
|
31
|
+
"camera-shculling": CameraSHCullingTrainer,
|
|
32
|
+
"camera-pruning": CameraPruningTrainer,
|
|
33
|
+
"camera-densify-pruning": CameraPrunerInDensifyTrainer,
|
|
34
|
+
"camera-densify-shculling": CameraSHCullingDensifyTrainer,
|
|
35
|
+
"camera-prune-shculling": CameraSHCullingPruningTrainer,
|
|
36
|
+
"camera-densify-prune-shculling": CameraSHCullingPruningDensifyTrainer,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def prepare_quantizer(
|
|
41
|
+
gaussians: GaussianModel,
|
|
42
|
+
scene_extent: float,
|
|
43
|
+
dataset: CameraDataset,
|
|
44
|
+
base_constructor,
|
|
45
|
+
load_quantized: str = None,
|
|
46
|
+
|
|
47
|
+
num_clusters=256,
|
|
48
|
+
num_clusters_rotation_re=None,
|
|
49
|
+
num_clusters_rotation_im=None,
|
|
50
|
+
num_clusters_opacity=None,
|
|
51
|
+
num_clusters_scaling=None,
|
|
52
|
+
num_clusters_features_dc=None,
|
|
53
|
+
num_clusters_features_rest=[],
|
|
54
|
+
|
|
55
|
+
quantize_from_iter=5000,
|
|
56
|
+
quantize_until_iter=30000,
|
|
57
|
+
quantize_interval=1000,
|
|
58
|
+
**configs):
|
|
59
|
+
trainer = VectorQuantizeTrainerWrapper(
|
|
60
|
+
base_constructor(
|
|
61
|
+
gaussians,
|
|
62
|
+
scene_extent=scene_extent,
|
|
63
|
+
dataset=dataset,
|
|
64
|
+
**configs
|
|
65
|
+
),
|
|
66
|
+
|
|
67
|
+
num_clusters=num_clusters,
|
|
68
|
+
num_clusters_rotation_re=num_clusters_rotation_re,
|
|
69
|
+
num_clusters_rotation_im=num_clusters_rotation_im,
|
|
70
|
+
num_clusters_opacity=num_clusters_opacity,
|
|
71
|
+
num_clusters_scaling=num_clusters_scaling,
|
|
72
|
+
num_clusters_features_dc=num_clusters_features_dc,
|
|
73
|
+
num_clusters_features_rest=num_clusters_features_rest,
|
|
74
|
+
|
|
75
|
+
quantize_from_iter=quantize_from_iter,
|
|
76
|
+
quantize_until_iter=quantize_until_iter,
|
|
77
|
+
quantize_interval=quantize_interval,
|
|
78
|
+
)
|
|
79
|
+
if load_quantized:
|
|
80
|
+
trainer.quantizer.load_quantized(load_quantized)
|
|
81
|
+
return trainer, trainer.quantizer
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def prepare_trainer(gaussians: GaussianModel, dataset: CameraDataset, mode: str, with_scale_reg=False, quantize: bool = False, load_quantized: str = None, configs={}) -> AbstractTrainer:
|
|
85
|
+
constructor = modes[mode]
|
|
86
|
+
if with_scale_reg:
|
|
87
|
+
constructor = lambda *args, **kwargs: ScaleRegularizeTrainerWrapper(modes[mode], *args, **kwargs)
|
|
88
|
+
if quantize:
|
|
89
|
+
trainer, quantizer = prepare_quantizer(
|
|
90
|
+
gaussians,
|
|
91
|
+
scene_extent=dataset.scene_extent(),
|
|
92
|
+
dataset=dataset,
|
|
93
|
+
base_constructor=modes[mode],
|
|
94
|
+
load_quantized=load_quantized,
|
|
95
|
+
**configs
|
|
96
|
+
)
|
|
97
|
+
else:
|
|
98
|
+
trainer = constructor(
|
|
99
|
+
gaussians,
|
|
100
|
+
scene_extent=dataset.scene_extent(),
|
|
101
|
+
dataset=dataset,
|
|
102
|
+
**configs
|
|
103
|
+
)
|
|
104
|
+
quantizer = None
|
|
105
|
+
return trainer, quantizer
|
|
Binary file
|
reduced_3dgs/train.py
CHANGED
|
@@ -1,128 +1,26 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import random
|
|
3
3
|
import shutil
|
|
4
|
-
from typing import List
|
|
4
|
+
from typing import List
|
|
5
5
|
import torch
|
|
6
6
|
from tqdm import tqdm
|
|
7
|
-
from argparse import Namespace
|
|
8
7
|
from gaussian_splatting import GaussianModel
|
|
9
|
-
from gaussian_splatting.dataset import CameraDataset
|
|
8
|
+
from gaussian_splatting.dataset import CameraDataset
|
|
10
9
|
from gaussian_splatting.utils import psnr
|
|
11
|
-
from gaussian_splatting.dataset.colmap import ColmapCameraDataset, ColmapTrainableCameraDataset, colmap_init
|
|
12
10
|
from gaussian_splatting.trainer import AbstractTrainer
|
|
13
|
-
from gaussian_splatting.
|
|
14
|
-
from
|
|
15
|
-
from reduced_3dgs.
|
|
16
|
-
from reduced_3dgs.
|
|
17
|
-
from reduced_3dgs.combinations import PrunerInDensifyTrainer, SHCullingDensificationTrainer, SHCullingPruningTrainer, SHCullingPrunerInDensifyTrainer
|
|
18
|
-
from reduced_3dgs.combinations import CameraTrainableVariableSHGaussianModel, CameraSHCullingTrainer, CameraPruningTrainer
|
|
19
|
-
from reduced_3dgs.combinations import CameraPrunerInDensifyTrainer, CameraSHCullingDensifyTrainer, CameraSHCullingPruningTrainer, CameraSHCullingPruningDensifyTrainer
|
|
11
|
+
from gaussian_splatting.prepare import prepare_dataset
|
|
12
|
+
from gaussian_splatting.train import save_cfg_args
|
|
13
|
+
from reduced_3dgs.quantization import AbstractQuantizer
|
|
14
|
+
from reduced_3dgs.prepare import modes, prepare_gaussians, prepare_trainer
|
|
20
15
|
|
|
21
16
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"densify-shculling": SHCullingDensificationTrainer,
|
|
27
|
-
"prune-shculling": SHCullingPruningTrainer,
|
|
28
|
-
"densify-prune-shculling": SHCullingPrunerInDensifyTrainer,
|
|
29
|
-
}
|
|
30
|
-
cameramodes = {
|
|
31
|
-
"camera-shculling": CameraSHCullingTrainer,
|
|
32
|
-
"camera-pruning": CameraPruningTrainer,
|
|
33
|
-
"camera-densify-pruning": CameraPrunerInDensifyTrainer,
|
|
34
|
-
"camera-densify-shculling": CameraSHCullingDensifyTrainer,
|
|
35
|
-
"camera-prune-shculling": CameraSHCullingPruningTrainer,
|
|
36
|
-
"camera-densify-prune-shculling": CameraSHCullingPruningDensifyTrainer,
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def prepare_quantizer(
|
|
41
|
-
gaussians: GaussianModel,
|
|
42
|
-
scene_extent: float,
|
|
43
|
-
dataset: CameraDataset,
|
|
44
|
-
base_constructor,
|
|
45
|
-
load_quantized: str = None,
|
|
46
|
-
|
|
47
|
-
num_clusters=256,
|
|
48
|
-
num_clusters_rotation_re=None,
|
|
49
|
-
num_clusters_rotation_im=None,
|
|
50
|
-
num_clusters_opacity=None,
|
|
51
|
-
num_clusters_scaling=None,
|
|
52
|
-
num_clusters_features_dc=None,
|
|
53
|
-
num_clusters_features_rest=[],
|
|
54
|
-
|
|
55
|
-
quantize_from_iter=5000,
|
|
56
|
-
quantize_until_iter=30000,
|
|
57
|
-
quantize_interval=1000,
|
|
58
|
-
**configs):
|
|
59
|
-
trainer = VectorQuantizeTrainerWrapper(
|
|
60
|
-
base_constructor(
|
|
61
|
-
gaussians,
|
|
62
|
-
scene_extent=scene_extent,
|
|
63
|
-
dataset=dataset,
|
|
64
|
-
**configs
|
|
65
|
-
),
|
|
66
|
-
|
|
67
|
-
num_clusters=num_clusters,
|
|
68
|
-
num_clusters_rotation_re=num_clusters_rotation_re,
|
|
69
|
-
num_clusters_rotation_im=num_clusters_rotation_im,
|
|
70
|
-
num_clusters_opacity=num_clusters_opacity,
|
|
71
|
-
num_clusters_scaling=num_clusters_scaling,
|
|
72
|
-
num_clusters_features_dc=num_clusters_features_dc,
|
|
73
|
-
num_clusters_features_rest=num_clusters_features_rest,
|
|
74
|
-
|
|
75
|
-
quantize_from_iter=quantize_from_iter,
|
|
76
|
-
quantize_until_iter=quantize_until_iter,
|
|
77
|
-
quantize_interval=quantize_interval,
|
|
78
|
-
)
|
|
79
|
-
if load_quantized:
|
|
80
|
-
trainer.quantizer.load_quantized(load_quantized)
|
|
81
|
-
return trainer, trainer.quantizer
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def prepare_training(sh_degree: int, source: str, device: str, mode: str, load_ply: str = None, load_camera: str = None, load_depth=False, with_scale_reg=False, quantize: bool = False, load_quantized: str = None, configs={}) -> Tuple[CameraDataset, GaussianModel, AbstractTrainer]:
|
|
85
|
-
quantizer = None
|
|
86
|
-
if mode in basemodes:
|
|
87
|
-
gaussians = VariableSHGaussianModel(sh_degree).to(device)
|
|
88
|
-
gaussians.load_ply(load_ply) if load_ply else colmap_init(gaussians, source)
|
|
89
|
-
dataset = (JSONCameraDataset(load_camera, load_depth=load_depth) if load_camera else ColmapCameraDataset(source, load_depth=load_depth)).to(device)
|
|
90
|
-
modes = basemodes
|
|
91
|
-
elif mode in cameramodes:
|
|
92
|
-
gaussians = CameraTrainableVariableSHGaussianModel(sh_degree).to(device)
|
|
93
|
-
gaussians.load_ply(load_ply) if load_ply else colmap_init(gaussians, source)
|
|
94
|
-
dataset = (TrainableCameraDataset.from_json(load_camera, load_depth=load_depth) if load_camera else ColmapTrainableCameraDataset(source, load_depth=load_depth)).to(device)
|
|
95
|
-
modes = cameramodes
|
|
96
|
-
else:
|
|
97
|
-
raise ValueError(f"Unknown mode: {mode}")
|
|
98
|
-
constructor = modes[mode]
|
|
99
|
-
if with_scale_reg:
|
|
100
|
-
constructor = lambda *args, **kwargs: ScaleRegularizeTrainerWrapper(modes[mode], *args, **kwargs)
|
|
101
|
-
if quantize:
|
|
102
|
-
trainer, quantizer = prepare_quantizer(
|
|
103
|
-
gaussians,
|
|
104
|
-
scene_extent=dataset.scene_extent(),
|
|
105
|
-
dataset=dataset,
|
|
106
|
-
base_constructor=modes[mode],
|
|
107
|
-
load_quantized=load_quantized,
|
|
108
|
-
**configs
|
|
109
|
-
)
|
|
110
|
-
else:
|
|
111
|
-
trainer = constructor(
|
|
112
|
-
gaussians,
|
|
113
|
-
scene_extent=dataset.scene_extent(),
|
|
114
|
-
dataset=dataset,
|
|
115
|
-
**configs
|
|
116
|
-
)
|
|
17
|
+
def prepare_training(sh_degree: int, source: str, device: str, mode: str, trainable_camera: bool = False, load_ply: str = None, load_camera: str = None, load_depth=False, with_scale_reg=False, quantize: bool = False, load_quantized: str = None, configs={}):
|
|
18
|
+
dataset = prepare_dataset(source=source, device=device, trainable_camera=trainable_camera, load_camera=load_camera, load_depth=load_depth)
|
|
19
|
+
gaussians = prepare_gaussians(sh_degree=sh_degree, source=source, device=device, trainable_camera=trainable_camera, load_ply=load_ply)
|
|
20
|
+
trainer, quantizer = prepare_trainer(gaussians=gaussians, dataset=dataset, mode=mode, with_scale_reg=with_scale_reg, quantize=quantize, load_quantized=load_quantized, configs=configs)
|
|
117
21
|
return dataset, gaussians, trainer, quantizer
|
|
118
22
|
|
|
119
23
|
|
|
120
|
-
def save_cfg_args(destination: str, sh_degree: int, source: str):
|
|
121
|
-
os.makedirs(destination, exist_ok=True)
|
|
122
|
-
with open(os.path.join(destination, "cfg_args"), 'w') as cfg_log_f:
|
|
123
|
-
cfg_log_f.write(str(Namespace(sh_degree=sh_degree, source_path=source)))
|
|
124
|
-
|
|
125
|
-
|
|
126
24
|
def training(dataset: CameraDataset, gaussians: GaussianModel, trainer: AbstractTrainer, quantizer: AbstractQuantizer, destination: str, iteration: int, save_iterations: List[int], device: str, empty_cache_every_step=False):
|
|
127
25
|
shutil.rmtree(os.path.join(destination, "point_cloud"), ignore_errors=True) # remove the previous point cloud
|
|
128
26
|
pbar = tqdm(range(1, iteration+1))
|
|
@@ -161,7 +59,7 @@ def training(dataset: CameraDataset, gaussians: GaussianModel, trainer: Abstract
|
|
|
161
59
|
|
|
162
60
|
|
|
163
61
|
if __name__ == "__main__":
|
|
164
|
-
from argparse import ArgumentParser
|
|
62
|
+
from argparse import ArgumentParser
|
|
165
63
|
parser = ArgumentParser()
|
|
166
64
|
parser.add_argument("--sh_degree", default=3, type=int)
|
|
167
65
|
parser.add_argument("-s", "--source", required=True, type=str)
|
|
@@ -173,7 +71,7 @@ if __name__ == "__main__":
|
|
|
173
71
|
parser.add_argument("--no_depth_data", action='store_true')
|
|
174
72
|
parser.add_argument("--with_scale_reg", action="store_true")
|
|
175
73
|
parser.add_argument("--load_quantized", default=None, type=str)
|
|
176
|
-
parser.add_argument("--mode", choices=list(
|
|
74
|
+
parser.add_argument("--mode", choices=list(modes), default="densify-prune-shculling")
|
|
177
75
|
parser.add_argument("--save_iterations", nargs="+", type=int, default=[7000, 30000])
|
|
178
76
|
parser.add_argument("--device", default="cuda", type=str)
|
|
179
77
|
parser.add_argument("--empty_cache_every_step", action='store_true')
|
|
@@ -184,7 +82,7 @@ if __name__ == "__main__":
|
|
|
184
82
|
|
|
185
83
|
configs = {o.split("=", 1)[0]: eval(o.split("=", 1)[1]) for o in args.option}
|
|
186
84
|
dataset, gaussians, trainer, quantizer = prepare_training(
|
|
187
|
-
sh_degree=args.sh_degree, source=args.source, device=args.device, mode=args.mode,
|
|
85
|
+
sh_degree=args.sh_degree, source=args.source, device=args.device, mode=args.mode, trainable_camera="camera" in args.mode,
|
|
188
86
|
load_ply=args.load_ply, load_camera=args.load_camera, load_depth=not args.no_depth_data, with_scale_reg=args.with_scale_reg,
|
|
189
87
|
quantize=args.quantize, load_quantized=args.load_quantized, configs=configs)
|
|
190
88
|
dataset.save_cameras(os.path.join(args.destination, "cameras.json"))
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
reduced_3dgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
reduced_3dgs/combinations.py,sha256=k4ErxpAscCqJMtVXZ29KGQjw2VoZMV0W3V4u3nj0e-Y,9401
|
|
3
|
+
reduced_3dgs/prepare.py,sha256=MFUUckRHKfgcva4ZOBxfPFyE95N-OlCQLplpmEPuzOk,4440
|
|
3
4
|
reduced_3dgs/quantize.py,sha256=Y44qHyFdOIqke7NoeqXmyKloS43j-al74ZiNsuZZHbM,2527
|
|
4
|
-
reduced_3dgs/train.py,sha256=
|
|
5
|
-
reduced_3dgs/diff_gaussian_rasterization/_C.cp311-win_amd64.pyd,sha256=
|
|
5
|
+
reduced_3dgs/train.py,sha256=yRQPQv-hTOBQN-tqGHYs2aIZ0AbWq158CXpthYN2cfw,5666
|
|
6
|
+
reduced_3dgs/diff_gaussian_rasterization/_C.cp311-win_amd64.pyd,sha256=KOkmyzU2nmWLI0_ItQ8T2KWEHYTCReinaEObKKW_ZrI,1632256
|
|
6
7
|
reduced_3dgs/diff_gaussian_rasterization/__init__.py,sha256=oV6JjTc-50MscX4XHeIWSgLr3l8Y25knBIs-0gRbJr4,7932
|
|
7
8
|
reduced_3dgs/importance/__init__.py,sha256=neJsbY5cLikEGBQGdR4MjwCQ5VWVikT1357DwL0EtWU,289
|
|
8
9
|
reduced_3dgs/importance/combinations.py,sha256=eAdykeTdvRGCHxskjILQnZVaqQVvwC-0wMxdgYMeeDs,2922
|
|
9
10
|
reduced_3dgs/importance/trainer.py,sha256=Sj4ORvoYtFT7z3hifzFZDfhFyqumHraXyk3vMVtk0AU,12661
|
|
10
|
-
reduced_3dgs/importance/diff_gaussian_rasterization/_C.cp311-win_amd64.pyd,sha256=
|
|
11
|
+
reduced_3dgs/importance/diff_gaussian_rasterization/_C.cp311-win_amd64.pyd,sha256=Q57dw0lD8Y7rQamkbnDWIxjGVmJ50X6i9l1kv6ow928,1315840
|
|
11
12
|
reduced_3dgs/importance/diff_gaussian_rasterization/__init__.py,sha256=Tix8auyXBb_QFQtXrV3sLE9kdnl5zgHH0BbqcFzDp84,12850
|
|
12
13
|
reduced_3dgs/pruning/__init__.py,sha256=E_YxJ9cDV_B6EJbYUBEcuRYMIht_C72rI1VJUXFCLpM,201
|
|
13
14
|
reduced_3dgs/pruning/combinations.py,sha256=QhXt2C7pTXhwzp9hPL9dVdiQzz0cUQpm5qljqytPEsM,2345
|
|
@@ -20,9 +21,9 @@ reduced_3dgs/quantization/wrapper.py,sha256=cyXqfJgo9b3fS7DYXxOk5LmQudvrEhweOebF
|
|
|
20
21
|
reduced_3dgs/shculling/__init__.py,sha256=nP2BejDCUdCmJNRbg0hfhHREO6jyZXwIcRiw6ttVgqo,149
|
|
21
22
|
reduced_3dgs/shculling/gaussian_model.py,sha256=f8QWaL09vaV9Tcf6Dngjg_Fmk1wTQPAjWhuhI_N02Y8,2877
|
|
22
23
|
reduced_3dgs/shculling/trainer.py,sha256=9hwR77djhZpyf-URhwKHjnLbe0ZAOS-DIw58RzkcHXQ,6369
|
|
23
|
-
reduced_3dgs/simple_knn/_C.cp311-win_amd64.pyd,sha256=
|
|
24
|
-
reduced_3dgs-1.10.
|
|
25
|
-
reduced_3dgs-1.10.
|
|
26
|
-
reduced_3dgs-1.10.
|
|
27
|
-
reduced_3dgs-1.10.
|
|
28
|
-
reduced_3dgs-1.10.
|
|
24
|
+
reduced_3dgs/simple_knn/_C.cp311-win_amd64.pyd,sha256=goRrAjghw7crBObLb6cuMONH3--q9uZjBoj3gRTQkeY,1263616
|
|
25
|
+
reduced_3dgs-1.10.2.dist-info/licenses/LICENSE.md,sha256=LQ4_LAqlncGkg_mQy5ykMAFtQDSPB0eKmIEtBut0yjw,4916
|
|
26
|
+
reduced_3dgs-1.10.2.dist-info/METADATA,sha256=5YuWENChjx4yhAaCJ5pokMNsyE0c_o2vIcgiE0SBXuY,13015
|
|
27
|
+
reduced_3dgs-1.10.2.dist-info/WHEEL,sha256=JLOMsP7F5qtkAkINx5UnzbFguf8CqZeraV8o04b0I8I,101
|
|
28
|
+
reduced_3dgs-1.10.2.dist-info/top_level.txt,sha256=PpU5aT3-baSCdqCtTaZknoB32H93UeKCkYDkRCCZMEI,13
|
|
29
|
+
reduced_3dgs-1.10.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|