tf.layers.conv2d()的用法
conv2d = tf.layers.conv2d(input, output, kernel_size=kernel_size, strides=(1, 1), padding='VALID',
activation=tf.nn.relu, reuse=reuse, name=name, use_bias=not with_bn)
input = (32, 512, 4, 64) # B, P, Nibr, channel
output = 128
kernel_size = [1, 4]
output= (32, 512, 1, 128)
input是 4-D的Tensor
实际意义中,512是present points, 4是 neighbor points
但是为了 利用tensorflow封装好的网络,将点云拓展成了BHWC格式的图像可以把batch中的每个点云看成 512 x 4 的一张图片。
为了保证present points数量不变,所有kernel size必须是 (1, x) 的形式,x是neighbor points的数目,保证每次卷积运算的对象都是一组完整的(present point, neighbor points)。
对点云操作的时候,stride = (1, 1),因为要保证对每个present point和每个 neighbor point都操作到。表示每次都只能处理 1 pair 的点
TensorFlow定义的二维卷积有三种,分别是tf.nn.conv2d、tf.layers.conv2d、tf.contrib.layers.conv2d,个人认为tf.layers.conv2d使用起来更为方便简单,所以就记录下tf.layers.conv2d的使用方法。
tf.layers.conv2d(inputs, filters, kernel_size, strides, padding)
常用的大概就这几个参数,为什么说tf.layers.conv2d使用方便,是因为不需要初始化权重(kernel参数+bias),只需要填写卷积核的数量和大小即可, bias选择也很方便。