从这个inception_densegcn函数的实现来看,输出为四维的主要原因有以下两点:
- 输入x的维度
这个函数的输入x是点云的特征,通常情况下点云特征是二维或三维的,例如[num_points, num_features]或者[batch_size, num_points, num_features]。
这里为了使用卷积,输入x的最后一维被扩展为num_features个通道,所以输入变为[batch_size, num_points, 1, num_features],是一个四维Tensor。
2.卷积层输出
函数中densegcn内部使用了卷积层,这会保持数据为四维。例如tf_util.conv2d的输出依然是四维[batch_size, num_points, 1, growth_rate]。
最后进行concat也保持了四维结构。所以由于输入和内部操作的维度,使得输出数据依然是四维的。
具体来讲,
标准的2D卷积输入需要是一个四维Tensor,通常表示为[batch_size, height, width, channels]。
而点云本身只有三维或二维,不符合直接应用2D卷积的格式。
所以这里人为地对输入进行扩展,把特征的最后一维扩展成“通道”的形式,以方便后续的2D卷积操作。
所以这个新增的单元素维度,是为了让点云更好兼容2D卷积操作而引入的。它提供了一个“假”的维度来表示邻域,让点云可以被视为类似网格的结构输入到2D CNN中。