语义分割

要运行此示例,请使用 pip install open3d-python 安装 Open3D

cd /path/to/MinkowskiEngine
python -m examples.indoor

酒店房间的分割

运行示例时,您将看到一个酒店房间以及房间的语义分割。运行示例时,您可以交互式地旋转可视化。首先,我们加载数据。

def load_file(file_name):
    pcd = o3d.read_point_cloud(file_name)
    coords = np.array(pcd.points)
    colors = np.array(pcd.colors)
    return coords, colors, pcd

您可以提供量化的坐标,以确保每个体素只有一个点,或者您可以使用新的 MinkowskiEngine.TensorField,它不需要量化的坐标来处理点云。但是,由于它在主要训练过程中进行量化,而不是将量化委托给数据加载过程,因此可能会降低训练速度。接下来,您应该通过调用 MinkowskiEngine.utils.batched_coordinates 来创建批处理的坐标。

# Create a batch, this process is done in a data loader during training in parallel.
in_field = ME.TensorField(
    features=torch.from_numpy(colors).float(),
    coordinates=ME.utils.batched_coordinates([coords / voxel_size], dtype=torch.float32),
    quantization_mode=ME.SparseTensorQuantizationMode.UNWEIGHTED_AVERAGE,
    minkowski_algorithm=ME.MinkowskiAlgorithm.SPEED_OPTIMIZED,
    device=device,
)

最后,我们将稀疏张量前馈到网络中并获得预测。

# Convert to a sparse tensor
sinput = in_field.sparse()
# Output sparse tensor
soutput = model(sinput)
# get the prediction on the input tensor field
out_field = soutput.slice(in_field)

在进行一些后处理之后。 我们可以为标签着色,并并排可视化输入和预测。

../_images/segmentation.png

权重会在您运行示例时自动下载,并且这些权重目前是 Scannet 3D 分割基准上的排名最高的算法。

有关更多详细信息,请参阅完整的室内分割示例