分类任务与分割任务有什么联系吗?
答案是肯定的。
分割其实就是对每一个像素进行分类。在代码上,分割与分类的区别就更小了,都是用全连接层输出一定的数目,这个数目就是你要分类/分割的个数。
以PointNet为例,先看看网络架构:
可以看到网络在得到global feature之前,分类和分割是公用一套网络的。它们的代码自然也一样。这部分代码位于pointnet_cls.py和pointnet_seg.py中,完全相同。
def get_model(point_cloud, is_training, bn_decay=None):
""" Classification PointNet, input is BxNx3, output Bx40 """
batch_size = point_cloud.get_shape()[0].value
num_point = point_cloud.get_shape()[1].value
end_points = {} with tf.variable_scope('transform_net1') as sc:
transform = input_transform_net(point_cloud, is_training, bn_decay, K=3)
point_cloud_transformed = tf.matmul(point_cloud, transform)
input_image = tf.expand_dims(point_cloud_transformed, -1)
net = tf_util.conv2d(input_image, 64, [1