在线安装失败。
先下载离线压缩包。
使用压缩包 torchsparse-1.4.0.tar.gz
网址:Releases · mit-han-lab/torchsparse · GitHub 有几个版本。
这里给出我使用的版本,提取:链接: https://pan.baidu.com/s/15UsPAEPhYCxmhnlkSaZ0OQ 提取码: igna 复制这段内容后打开百度网盘手机App,操作更方便哦
通过网盘分享的文件:torchsparse-1.2.0.tar.gz等5个文件
链接: https://pan.baidu.com/s/1l9r-ELwLjJu5NJ5WEHlqbQ 提取码: rrhr
在该压缩包所在文件夹下打开终端,并切换到使用的环境。
解压:
tar zxvf torchsparse-1.4.0.tar.gz
然后安装,执行命令:
pip install ./torchsparse-1.4.0
from typing import Any, List
import numpy as np
import torch
from torchsparse import SparseTensor
__all__ = ['sparse_collate', 'sparse_collate_fn']
def sparse_collate(inputs: List[SparseTensor]) -> SparseTensor:
coords, feats = [], []
stride = inputs[0].stride
for k, x in enumerate(inputs):
if isinstance(x.coords, np.ndarray):
x.coords = torch.tensor(x.coords)
if isinstance(x.feats, np.ndarray):
x.feats = torch.tensor(x.feats)
assert isinstance(x.coords, torch.Tensor), type(x.coords)
assert isinstance(x.feats, torch.Tensor), type(x.feats)
assert x.stride == stride, (x.stride, stride)
input_size = x.coords.shape[0]
batch = torch.full((input_size, 1),
k,
device=x.coords.device,
dtype=torch.int)
coords.append(torch.cat((x.coords, batch), dim=1))
feats.append(x.feats)
coords = torch.cat(coords, dim=0)
feats = torch.cat(feats, dim=0)
output = SparseTensor(coords=coords, feats=feats, stride=stride)
return output
def sparse_collate_fn(inputs: List[Any]) -> Any:
if isinstance(inputs[0], dict):
output = {}
for name in inputs[0].keys():
if isinstance(inputs[0][name], dict):
output[name] = sparse_collate_fn(
[input[name] for input in inputs])
elif isinstance(inputs[0][name], np.ndarray):
output[name] = torch.stack(
[torch.tensor(input[name]) for input in inputs], dim=0)
elif isinstance(inputs[0][name], torch.Tensor):
output[name] = torch.stack([input[name] for input in inputs],
dim=0)
elif isinstance(inputs[0][name], SparseTensor):
output[name] = sparse_collate([input[name] for input in inputs])
else:
output[name] = [input[name] for input in inputs]
return output
else:
return inputs
from itertools import repeat
from typing import List, Tuple, Union
import numpy as np
__all__ = ['sparse_quantize']
def ravel_hash(x: np.ndarray) -> np.ndarray:
assert x.ndim == 2, x.shape
x = x - np.min(x, axis=0)
x = x.astype(np.uint64, copy=False)
xmax = np.max(x, axis=0).astype(np.uint64) + 1
h = np.zeros(x.shape[0], dtype=np.uint64)
for k in range(x.shape[1] - 1):
h += x[:, k]
h *= xmax[k + 1]
h += x[:, -1]
return h
def sparse_quantize(coords,
voxel_size: Union[float, Tuple[float, ...]] = 1,
*,
return_index: bool = False,
return_inverse: bool = False) -> List[np.ndarray]:
if isinstance(voxel_size, (float, int)):
voxel_size = tuple(repeat(voxel_size, 3))
assert isinstance(voxel_size, tuple) and len(voxel_size) == 3
voxel_size = np.array(voxel_size)
coords = np.floor(coords / voxel_size).astype(np.int32)
_, indices, inverse_indices = np.unique(ravel_hash(coords),
return_index=True,
return_inverse=True)
coords = coords[indices]
outputs = [coords]
if return_index:
outputs += [indices]
if return_inverse:
outputs += [inverse_indices]
return outputs[0] if len(outputs) == 1 else outputs
863

被折叠的 条评论
为什么被折叠?



