基准测试

我们报告了 v0.4.3 的卷积层和小型 U 型网络的前向和后向传递时间。 请注意,内核映射可以重复用于具有相同张量步长、步长和内核偏移的其他层,因此本页中报告的时间可以在大型神经网络中使用的所有层之间分摊。

我们使用 Titan X 进行实验。

实验设置

对于单卷积层实验,我们使用以下设置。

import MinkowskiEngine as ME

conv = ME.MinkowskiConvolution(
    in_channels=3,
    out_channels=32,
    kernel_size=7,
    stride=1,
    dilation=1,
    has_bias=False,
    dimension=3)

我们在实验中使用了体素大小为 5 厘米的 ScanNet 测试集。 由于 SparseConvNet 和 MinkowskiEngine 使用不同的体素化算法,因此每个引擎处理的点数也不同。 平均而言,SparseConvNet 生成了 25757.01 个点,而 MinkowskiEngine 在 100 个 ScanNet 测试室中生成了 26097.58 个点。

单卷积层

我们还测试了具有各种内核大小的相同单卷积层。 我们报告了每个算法处理平均 25757.011 个点(对于 SparseConvNet)和 26097.58 个点(对于 MinkowskiEngine)所花费的平均时间(以秒为单位)。

内核大小 SparseConvNet 前向 MinkowskiEngine 前向
3 0.174 秒 0.093 秒
5 0.301 秒 0.121 秒
7 0.583 秒 0.165 秒
内核大小 SparseConvNet 后向 MinkowskiEngine 后向
3 0.0118 秒 0.0056 秒
5 0.0287 秒 0.0149 秒
7 0.0537 秒 0.0312 秒

简单 UNet

net = nn.Sequential(
    ME.MinkowskiConvolution(
        in_channels=3,
        out_channels=32,
        kernel_size=5,
        stride=1,
        dilation=1,
        has_bias=False,
        dimension=3),
    ME.MinkowskiConvolution(
        in_channels=32,
        out_channels=32,
        kernel_size=2,
        stride=2,
        dilation=1,
        has_bias=False,
        dimension=3),
    ME.MinkowskiConvolutionTranspose
        in_channels=32,
        out_channels=32,
        kernel_size=2,
        stride=2,
        dilation=1,
        has_bias=False,
        dimension=3))

对于此实验,我们仅更改第一个卷积层的内核大小。

内核大小 SparseConvNet 前向 MinkowskiEngine 前向
3 0.1806 秒 0.1238 秒
5 0.3104 秒 0.1440 秒
内核大小 SparseConvNet 后向 MinkowskiEngine 后向
3 0.0130 秒 0.0074 秒
5 0.0295 秒 0.0170 秒