def get_3d_box_estimation_v1_net(object_point_cloud, one_hot_vec, is_training, bn_decay, end_points):
    ' 3D Box Estimation PointNet v1 network.\n    Input:\n        object_point_cloud: TF tensor in shape (B,M,C)\n            point clouds in object coordinate\n        one_hot_vec: TF tensor in shape (B,3)\n            length-3 vectors indicating predicted object type\n    Output:\n        output: TF tensor in shape (B,3+NUM_HEADING_BIN*2+NUM_SIZE_CLUSTER*4)\n            including box centers, heading bin class scores and residuals,\n            and size cluster scores and residuals\n    '
    num_point = object_point_cloud.get_shape()[1].value
    net = tf.expand_dims(object_point_cloud, 2)
    net = tf_util.conv2d(net, 128, [1, 1], padding='VALID', stride=[1, 1], bn=True, is_training=is_training, scope='conv-reg1', bn_decay=bn_decay)
    net = tf_util.conv2d(net, 128, [1, 1], padding='VALID', stride=[1, 1], bn=True, is_training=is_training, scope='conv-reg2', bn_decay=bn_decay)
    net = tf_util.conv2d(net, 256, [1, 1], padding='VALID', stride=[1, 1], bn=True, is_training=is_training, scope='conv-reg3', bn_decay=bn_decay)
    net = tf_util.conv2d(net, 512, [1, 1], padding='VALID', stride=[1, 1], bn=True, is_training=is_training, scope='conv-reg4', bn_decay=bn_decay)
    net = tf_util.max_pool2d(net, [num_point, 1], padding='VALID', scope='maxpool2')
    net = tf.squeeze(net, axis=[1, 2])
    net = tf.concat([net, one_hot_vec], axis=1)
    net = tf_util.fully_connected(net, 512, scope='fc1', bn=True, is_training=is_training, bn_decay=bn_decay)
    net = tf_util.fully_connected(net, 256, scope='fc2', bn=True, is_training=is_training, bn_decay=bn_decay)
    output = tf_util.fully_connected(net, ((3 + (NUM_HEADING_BIN * 2)) + (NUM_SIZE_CLUSTER * 4)), activation_fn=None, scope='fc3')
    return (output, end_points)
3D Box Estimation PointNet v1 network.
Input:
    object_point_cloud: TF tensor in shape (B,M,C)
        point clouds in object coordinate
    one_hot_vec: TF tensor in shape (B,3)
        length-3 vectors indicating predicted object type
Output:
    output: TF tensor in shape (B,3+NUM_HEADING_BIN*2+NUM_SIZE_CLUSTER*4)
        including box centers, heading bin class scores and residuals,
        and size cluster scores and residuals
def get_3d_box_estimation_v1_net(object_point_cloud, one_hot_vec, is_training, bn_decay, end_points):
    ' 3D Box Estimation PointNet v1 network.\n    Input:\n        object_point_cloud: TF tensor in shape (B,M,C)\n            point clouds in object coordinate\n        one_hot_vec: TF tensor in shape (B,3)\n            length-3 vectors indicating predicted object type\n    Output:\n        output: TF tensor in shape (B,3+NUM_HEADING_BIN*2+NUM_SIZE_CLUSTER*4)\n            including box centers, heading bin class scores and residuals,\n            and size cluster scores and residuals\n    '
    num_point = object_point_cloud.get_shape()[1].value
    net = tf.expand_dims(object_point_cloud, 2)
    net = tf_util.conv2d(net, 128, [1, 1], padding='VALID', stride=[1, 1], bn=True, is_training=is_training, scope='conv-reg1', bn_decay=bn_decay)
    net = tf_util.conv2d(net, 128, [1, 1], padding='VALID', stride=[1, 1], bn=True, is_training=is_training, scope='conv-reg2', bn_decay=bn_decay)
    net = tf_util.conv2d(net, 256, [1, 1], padding='VALID', stride=[1, 1], bn=True, is_training=is_training, scope='conv-reg3', bn_decay=bn_decay)
    net = tf_util.conv2d(net, 512, [1, 1], padding='VALID', stride=[1, 1], bn=True, is_training=is_training, scope='conv-reg4', bn_decay=bn_decay)
    net = tf_util.max_pool2d(net, [num_point, 1], padding='VALID', scope='maxpool2')
    net = tf.squeeze(net, axis=[1, 2])
    net = tf.concat([net, one_hot_vec], axis=1)
    net = tf_util.fully_connected(net, 512, scope='fc1', bn=True, is_training=is_training, bn_decay=bn_decay)
    net = tf_util.fully_connected(net, 256, scope='fc2', bn=True, is_training=is_training, bn_decay=bn_decay)
    output = tf_util.fully_connected(net, ((3 + (NUM_HEADING_BIN * 2)) + (NUM_SIZE_CLUSTER * 4)), activation_fn=None, scope='fc3')
    return (output, end_points)