(point_cloud, is_training, bn_decay=None)
return net, end_points
Classification PointNet, input is BxNx3, output Bx40
Classification PointNet, input is BxNx3, output Bx40
Classification PointNet input is BxNx3 output Bx40
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 = {}
    input_image = tf.expand_dims(point_cloud, -1)

    # Point functions (MLP implemented as conv2d)
    net = tf_util.conv2d(
        input_image,
        64,
        [1, 3],
        padding="VALID",
        stride=[1, 1],
        bn=True,
        is_training=is_training,
        scope="conv1",
        bn_decay=bn_decay,
    )
    net = tf_util.conv2d(
        net,
        64,
        [1, 1],
        padding="VALID",
        stride=[1, 1],
        bn=True,
        is_training=is_training,
        scope="conv2",
        bn_decay=bn_decay,
    )
    net = tf_util.conv2d(
        net,
        64,
        [1, 1],
        padding="VALID",
        stride=[1, 1],
        bn=True,
        is_training=is_training,
        scope="conv3",
        bn_decay=bn_decay,
    )
    net = tf_util.conv2d(
        net,
        128,
        [1, 1],
        padding="VALID",
        stride=[1, 1],
        bn=True,
        is_training=is_training,
        scope="conv4",
        bn_decay=bn_decay,
    )
    net = tf_util.conv2d(
        net,
        1024,
        [1, 1],
        padding="VALID",
        stride=[1, 1],
        bn=True,
        is_training=is_training,
        scope="conv5",
        bn_decay=bn_decay,
    )

    # Symmetric function: max pooling
    end_points["critical_set_idx"] = tf.arg_max(net, 1)
    net = tf_util.max_pool2d(net, [num_point, 1], padding="VALID", scope="maxpool")
    end_points["GFV"] = net
    # latent_vector = tf.squeeze(net, [1, 2])

    # MLP on global point cloud vector
    net = tf.reshape(net, [batch_size, -1])
    net = tf_util.fully_connected(
        net, 512, bn=True, is_training=is_training, scope="fc1", bn_decay=bn_decay
    )
    net = tf_util.fully_connected(
        net, 256, bn=True, is_training=is_training, scope="fc2", bn_decay=bn_decay
    )
    net = tf_util.dropout(net, keep_prob=0.7, is_training=is_training, scope="dp1")
    net = tf_util.fully_connected(net, 40, activation_fn=None, scope="fc3")

    return net, end_points
def get_model ( point_cloud , is_training , bn_decay = None ) : batch_size = point_cloud . get_shape ( ) [ 0 ] . value num_point = point_cloud . get_shape ( ) [ 1 ] . value end_points = { } input_image = tf . expand_dims ( point_cloud , - 1 ) # Point functions (MLP implemented as conv2d) net = tf_util . conv2d ( input_image , 64 , [ 1 , 3 ] , padding = "VALID" , stride = [ 1 , 1 ] , bn = True , is_training = is_training , scope = "conv1" , bn_decay = bn_decay , ) net = tf_util . conv2d ( net , 64 , [ 1 , 1 ] , padding = "VALID" , stride = [ 1 , 1 ] , bn = True , is_training = is_training , scope = "conv2" , bn_decay = bn_decay , ) net = tf_util . conv2d ( net , 64 , [ 1 , 1 ] , padding = "VALID" , stride = [ 1 , 1 ] , bn = True , is_training = is_training , scope = "conv3" , bn_decay = bn_decay , ) net = tf_util . conv2d ( net , 128 , [ 1 , 1 ] , padding = "VALID" , stride = [ 1 , 1 ] , bn = True , is_training = is_training , scope = "conv4" , bn_decay = bn_decay , ) net = tf_util . conv2d ( net , 1024 , [ 1 , 1 ] , padding = "VALID" , stride = [ 1 , 1 ] , bn = True , is_training = is_training , scope = "conv5" , bn_decay = bn_decay , ) # Symmetric function: max pooling end_points [ "critical_set_idx" ] = tf . arg_max ( net , 1 ) net = tf_util . max_pool2d ( net , [ num_point , 1 ] , padding = "VALID" , scope = "maxpool" ) end_points [ "GFV" ] = net # latent_vector = tf.squeeze(net, [1, 2]) # MLP on global point cloud vector net = tf . reshape ( net , [ batch_size , - 1 ] ) net = tf_util . fully_connected ( net , 512 , bn = True , is_training = is_training , scope = "fc1" , bn_decay = bn_decay ) net = tf_util . fully_connected ( net , 256 , bn = True , is_training = is_training , scope = "fc2" , bn_decay = bn_decay ) net = tf_util . dropout ( net , keep_prob = 0.7 , is_training = is_training , scope = "dp1" ) net = tf_util . fully_connected ( net , 40 , activation_fn = None , scope = "fc3" ) return net , end_points