# @package models
defaults:
  - segmentation/default
# PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space (https://arxiv.org/abs/1706.02413)
pointnet2:
    class: pointnet2.PointNet2_MP
    conv_type: "MESSAGE_PASSING"
    down_conv:
        module_name: SAModule
        ratios: [0.2, 0.25]
        radius: [0.2, 0.4]
        down_conv_nn: [[FEAT + 3, 64, 64, 128], [128 + 3, 128, 128, 256]]
        radius_num_points: [64, 64]
    up_conv:
        module_name: FPModule
        up_conv_nn:
            [
                [1024 + 256, 256, 256],
                [256 + 128, 256, 128],
                [128 + FEAT, 128, 128, 128],
            ]
        up_k: [1, 3, 3]
        skip: True
    innermost:
        module_name: GlobalBaseModule
        aggr: max
        nn: [256 + 3, 256, 512, 1024]
    mlp_cls:
        nn: [128, 128, 128, 128, 128]
        dropout: 0.5

pointnet2ms:
    class: pointnet2.PointNet2_MP
    conv_type: "MESSAGE_PASSING"
    down_conv:
        module_name: SAModule
        ratios: [0.25, 0.25]
        radius: [[0.1, 0.2, 0.4], [0.4, 0.8]]
        radius_num_points: [[32, 64, 128], [64, 128]]
        down_conv_nn: [[FEAT+3, 64, 96, 128], [128 * 3 + 3, 128, 196, 256]]
    up_conv:
        module_name: FPModule
        up_conv_nn:
            [
                [1024 + 256 * 2, 256, 256],
                [256 + 128 * 3, 128, 128],
                [128 + FEAT, 128, 128],
            ]
        up_k: [1, 3, 3]
        skip: True
    innermost:
        module_name: GlobalBaseModule
        aggr: max
        nn: [256* 2 + 3, 256, 512, 1024]
    mlp_cls:
        nn: [128, 128, 128, 128, 128]
        dropout: 0.5

pointnet2_largemsg:
    class: pointnet2.PointNet2_D
    conv_type: "DENSE"
    use_category: ${data.use_category}
    down_conv:
        module_name: PointNetMSGDown
        npoint: [1024, 256, 64, 16]
        radii: [[0.05, 0.1], [0.1, 0.2], [0.2, 0.4], [0.4, 0.8]]
        nsamples: [[16, 32], [16, 32], [16, 32], [16, 32]]
        down_conv_nn:
            [
                [[FEAT+3, 16, 16, 32], [FEAT+3, 32, 32, 64]],
                [[32 + 64+3, 64, 64, 128], [32 + 64+3, 64, 96, 128]],
                [
                    [128 + 128+3, 128, 196, 256],
                    [128 + 128+3, 128, 196, 256],
                ],
                [
                    [256 + 256+3, 256, 256, 512],
                    [256 + 256+3, 256, 384, 512],
                ],
            ]
    up_conv:
        module_name: DenseFPModule
        up_conv_nn:
            [
                [512 + 512 + 256 + 256, 512, 512],
                [512 + 128 + 128, 512, 512],
                [512 + 64 + 32, 256, 256],
                [256 + FEAT, 128, 128],
            ]
        skip: True
    mlp_cls:
        nn: [128, 128]
        dropout: 0.5

pointnet2_charlesmsg:
    class: pointnet2.PointNet2_D
    conv_type: "DENSE"
    use_category: ${data.use_category}
    down_conv:
        module_name: PointNetMSGDown
        npoint: [512, 128]
        radii: [[0.1, 0.2, 0.4], [0.4, 0.8]]
        nsamples: [[32, 64, 128], [64, 128]]
        down_conv_nn:
            [
                [
                    [FEAT+3, 32, 32, 64],
                    [FEAT+3, 64, 64, 128],
                    [FEAT+3, 64, 96, 128],
                ],
                [
                    [64 + 128 + 128+3, 128, 128, 256],
                    [64 + 128 + 128+3, 128, 196, 256],
                ],
            ]
    innermost:
        module_name: GlobalDenseBaseModule
        nn: [256 * 2 + 3, 256, 512, 1024]
    up_conv:
        module_name: DenseFPModule
        up_conv_nn:
            [
                [1024 + 256*2, 256, 256],
                [256 + 128 * 2 + 64, 256, 128],
                [128 + FEAT, 128, 128],
            ]
        skip: True
    mlp_cls:
        nn: [128, 128]
        dropout: 0.5

pointnet2_charlesssg:
    class: pointnet2.PointNet2_D
    conv_type: "DENSE"
    use_category: ${data.use_category}
    down_conv:
        module_name: PointNetMSGDown
        npoint: [512, 128]
        radii: [[0.2], [0.4]]
        nsamples: [[64], [64]]
        down_conv_nn: [[[FEAT + 3, 64, 64, 128]], [[128+3, 128, 128, 256]]]
    innermost:
        module_name: GlobalDenseBaseModule
        nn: [256 + 3, 256, 512, 1024]
    up_conv:
        module_name: DenseFPModule
        up_conv_nn:
            [
                [1024 + 256, 256, 256],
                [256 + 128, 256, 128],
                [128 + FEAT, 128, 128, 128],
            ]
        skip: True
    mlp_cls:
        nn: [128, 128]
        dropout: 0.5

pointnet2_indoor:
    class: pointnet2.PointNet2_D
    conv_type: "DENSE"
    down_conv:
        module_name: PointNetMSGDown
        npoint: [2048, 1024, 512, 256]
        radii: [[0.1, 0.2], [0.2, 0.4], [0.4, 0.8], [0.8, 1.6]]
        nsamples: [[32, 64], [16, 32], [16, 32], [16, 32]]
        down_conv_nn:
            [
                [[FEAT+3, 16, 16, 32], [FEAT+3, 32, 32, 64]],
                [[32 + 64+3, 64, 64, 128], [32 + 64+3, 64, 96, 128]],
                [
                    [128 + 128+3, 128, 196, 256],
                    [128 + 128+3, 128, 196, 256],
                ],
                [
                    [256 + 256+3, 256, 256, 512],
                    [256 + 256+3, 256, 384, 512],
                ],
            ]
    up_conv:
        module_name: DenseFPModule
        up_conv_nn:
            [
                [512 + 512 + 256 + 256, 512, 512],
                [512 + 128 + 128, 512, 512],
                [512 + 64 + 32, 256, 256],
                [256 + FEAT, 128, 128],
            ]
        skip: True
    mlp_cls:
        nn: [128, 128]
        dropout: 0.5