Ejemplo n.º 1
0
    def __init__(self, input_channels=0, use_xyz=True, mode="TRAIN"):
        super().__init__()
        
        # 特征提取
        # self.backbone_net = pointnet2_msg.get_model()
        c_in = input_channels
        self.SA_module1 = PointnetSAModuleMSG(npoint=8192, radii=[0.1, 0.5], nsamples=[16, 32], mlps=[[c_in, 16, 16, 32], [c_in, 32, 32, 64]], use_xyz=use_xyz, bn=True)
        c_out_1 = 32 + 64

        c_in = c_out_1
        self.SA_module2 = PointnetSAModuleMSG(npoint=2048, radii=[0.5, 1.], nsamples=[16, 32], mlps=[[c_in, 64, 64, 128], [c_in, 64, 96, 128]], use_xyz=use_xyz, bn=True)
        c_out_2 = 128 + 128
        
        c_in = c_out_2
        self.SA_module3 = PointnetSAModuleMSG(npoint=512, radii=[1.0, 2.0], nsamples=[16, 32], mlps=[[c_in, 128, 196, 256], [c_in, 128, 196, 256]], use_xyz=use_xyz, bn=True)
        c_out_3 = 256 + 256

        c_in = c_out_3
        self.SA_module4 = PointnetSAModuleMSG(npoint=128, radii=[2.0, 4.0], nsamples=[16, 32], mlps=[[c_in, 256, 256, 512], [c_in, 256, 384, 512]], use_xyz=use_xyz, bn=True)
        c_out_4 = 512 + 512
    
        self.FP_module1 = PointnetFPModule(mlp=[c_out_4+c_out_3, 512, 512], bn=True)
        self.FP_module2 = PointnetFPModule(mlp=[512+c_out_2, 512, 512], bn=True)
        self.FP_module3 = PointnetFPModule(mlp=[512+c_out_1, 256, 256], bn=True)
        self.FP_module4 = PointnetFPModule(mlp=[256+input_channels, 128, 128], bn=True)

        self.ins_fc1 = pt_utils.Conv1d(128, 64, kernel_size=1, bn=True)
        # self.ins_dp = nn.Dropout(0.1)
        self.ins_fc2 = pt_utils.Conv1d(64, 5, kernel_size=1, bn=False, activation=None)
Ejemplo n.º 2
0
    def __init__(self, input_channels=6, use_xyz=True):
        super().__init__()

        self.SA_modules = nn.ModuleList()
        channel_in = input_channels

        skip_channel_list = [input_channels]
        for k in range(cfg.RPN.SA_CONFIG.NPOINTS.__len__()):
            mlps = cfg.RPN.SA_CONFIG.MLPS[k].copy()
            channel_out = 0
            for idx in range(mlps.__len__()):
                mlps[idx] = [channel_in] + mlps[idx]
                channel_out += mlps[idx][-1]

            self.SA_modules.append(
                PointnetSAModuleMSG(npoint=cfg.RPN.SA_CONFIG.NPOINTS[k],
                                    radii=cfg.RPN.SA_CONFIG.RADIUS[k],
                                    nsamples=cfg.RPN.SA_CONFIG.NSAMPLE[k],
                                    mlps=mlps,
                                    use_xyz=use_xyz,
                                    bn=cfg.RPN.USE_BN))
            skip_channel_list.append(channel_out)
            channel_in = channel_out

        self.FP_modules = nn.ModuleList()

        for k in range(cfg.RPN.FP_MLPS.__len__()):
            pre_channel = cfg.RPN.FP_MLPS[k + 1][-1] if k + 1 < len(
                cfg.RPN.FP_MLPS) else channel_out
            self.FP_modules.append(
                PointnetFPModule(mlp=[pre_channel + skip_channel_list[k]] +
                                 cfg.RPN.FP_MLPS[k]))
Ejemplo n.º 3
0
    def __init__(self, input_channels=0, use_xyz=True, mode="TRAIN"):
        super().__init__()

        # 特征提取
        # self.backbone_net = pointnet2_msg.get_model()
        npoints = cfg.NET.SA_NPOINTS
        radiis = cfg.NET.RADIIS
        nsamples = cfg.NET.NSAMPLES
        mlps = cfg.NET.MLPS

        # c_in = input_channels
        # self.SA_module1 = PointnetSAModuleMSG(npoint=npoints[0], radii=radiis[0], nsamples=nsamples[0],
        #                         mlps=[[c_in, *mlps[0][0]], [c_in, *mlps[0][1]], [c_in, *mlps[0][2]]], use_xyz=use_xyz, bn=True)
        # c_out_1 = sum(mlps[0][:][-1])

        # c_in = c_out_1
        # self.SA_module2 = PointnetSAModuleMSG(npoint=npoints[1], radii=radiis[1], nsamples=nsamples[1],
        #                         mlps=[[c_in, *mlps[1][0]], [c_in, *mlps[1][1]], [c_in, *mlps[1][2]]], use_xyz=use_xyz, bn=True)
        # c_out_2 = sum(mlps[1][:][-1])

        # c_in = c_out_2
        # self.SA_module3 = PointnetSAModuleMSG(npoint=npoints[2], radii=radiis[2], nsamples=nsamples[2],
        #                         mlps=[[c_in, *mlps[2][0]], [c_in, *mlps[2][1]], [c_in, *mlps[2][2]]], use_xyz=use_xyz, bn=True)
        # c_out_3 = sum(mlps[2][:][-1])

        # c_in = c_out_3
        # self.SA_module4 = PointnetSAModuleMSG(npoint=npoints[3], radii=radiis[3], nsamples=nsamples[3],
        #                         mlps=[[c_in, *mlps[3][0]], [c_in, *mlps[3][1]], [c_in, *mlps[3][2]]], use_xyz=use_xyz, bn=True)
        # c_out_4 = sum(mlps[3][:][-1])

        c_in = input_channels
        c_out = []
        sa_module = []
        for i in range(len(npoints)):
            c_o = 0
            for m in mlps[i]:
                m[:] = [c_in, *m]
                c_o += m[-1]
            c_out.append(c_o)
            sa_module.append(
                PointnetSAModuleMSG(npoint=npoints[i],
                                    radii=radiis[i],
                                    nsamples=nsamples[i],
                                    mlps=mlps[i],
                                    use_xyz=use_xyz,
                                    bn=True))
            c_in = c_out[-1]

        self.SA_module1 = sa_module[0]
        self.SA_module2 = sa_module[1]
        self.SA_module3 = sa_module[2]
        self.SA_module4 = sa_module[3]
        c_out_1, c_out_2, c_out_3, c_out_4 = c_out

        self.FP_module1 = PointnetFPModule(mlp=[c_out_4 + c_out_3, 512, 512],
                                           bn=True)
        self.FP_module2 = PointnetFPModule(mlp=[512 + c_out_2, 512, 512],
                                           bn=True)
        self.FP_module3 = PointnetFPModule(mlp=[512 + c_out_1, 256, 256],
                                           bn=True)
        self.FP_module4 = PointnetFPModule(
            mlp=[256 + input_channels, 128, 128], bn=True)

        self.ins_fc1 = pt_utils.Conv1d(128, 64, kernel_size=1, bn=True)
        # self.ins_dp = nn.Dropout(0.1)
        self.ins_fc2 = pt_utils.Conv1d(64,
                                       8,
                                       kernel_size=1,
                                       bn=False,
                                       activation=None)
Ejemplo n.º 4
0
    def __init__(self, input_channels=7):
        super.__init__()

        self.SA_module1 = PointnetSAModuleMSG(npoint=1024,radii=[0.1, 0.5], nsamples=[16, 32], mlps=[[16, 16, 32], [32, 32, 64]], use_xyz=use_xyz, bn=True)
        self.SA_module2 = PointnetSAModuleMSG(npoint=256,radii=[0.5, 1.0], nsamples=[16, 32], mlps=[[64, 64, 128], [64, 96, 128]], use_xyz=use_xyz, bn=True)
        self.SA_module3 = PointnetSAModuleMSG(npoint=64,radii=[1.0, 2.0], nsamples=[16, 32], mlps=[[128, 196, 256], [128, 196, 256]], use_xyz=use_xyz, bn=True)
        self.SA_module4 = PointnetSAModuleMSG(npoint=16,radii=[2.0, 4.0], nsamples=[16, 32], mlps=[[256, 256, 512], [256, 384, 512]], use_xyz=use_xyz, bn=True)
    








# class Pointnet2MSG(nn.Module):
#     def __init__(self, input_channels=6, use_xyz=True):
#         super().__init__()

#         self.SA_modules = nn.ModuleList()
#         channel_in = input_channels

#         skip_channel_list = [input_channels]
#         for k in range(cfg.RPN.SA_CONFIG.NPOINTS.__len__()):
#             mlps = cfg.RPN.SA_CONFIG.MLPS[k].copy()
#             channel_out = 0
#             for idx in range(mlps.__len__()):
#                 mlps[idx] = [channel_in] + mlps[idx]
#                 channel_out += mlps[idx][-1]

#             self.SA_modules.append(
#                 PointnetSAModuleMSG(
#                     npoint=cfg.RPN.SA_CONFIG.NPOINTS[k],
#                     radii=cfg.RPN.SA_CONFIG.RADIUS[k],
#                     nsamples=cfg.RPN.SA_CONFIG.NSAMPLE[k],
#                     mlps=mlps,
#                     use_xyz=use_xyz,
#                     bn=cfg.RPN.USE_BN
#                 )
#             )
#             skip_channel_list.append(channel_out)
#             channel_in = channel_out

#         self.FP_modules = nn.ModuleList()

#         for k in range(cfg.RPN.FP_MLPS.__len__()):
#             pre_channel = cfg.RPN.FP_MLPS[k + 1][-1] if k + 1 < len(cfg.RPN.FP_MLPS) else channel_out
#             self.FP_modules.append(
#                 PointnetFPModule(mlp=[pre_channel + skip_channel_list[k]] + cfg.RPN.FP_MLPS[k])
#             )

#     def _break_up_pc(self, pc):
#         xyz = pc[..., 0:3].contiguous()
#         features = (
#             pc[..., 3:].transpose(1, 2).contiguous()
#             if pc.size(-1) > 3 else None
#         )

#         return xyz, features

#     def forward(self, pointcloud: torch.cuda.FloatTensor):
#         xyz, features = self._break_up_pc(pointcloud)

#         l_xyz, l_features = [xyz], [features]
#         for i in range(len(self.SA_modules)):
#             li_xyz, li_features = self.SA_modules[i](l_xyz[i], l_features[i])
#             l_xyz.append(li_xyz)
#             l_features.append(li_features)

#         for i in range(-1, -(len(self.FP_modules) + 1), -1):
#             l_features[i - 1] = self.FP_modules[i](
#                 l_xyz[i - 1], l_xyz[i], l_features[i - 1], l_features[i]
#             )

#         return l_xyz[0], l_features[0]
Ejemplo n.º 5
0
    def __init__(self, input_channels=6, use_xyz=True):
        super().__init__()

        self.SA_modules = nn.ModuleList()
        channel_in = input_channels

        skip_channel_list = [input_channels]
        for k in range(cfg.RPN.SA_CONFIG.NPOINTS.__len__()):
            mlps = cfg.RPN.SA_CONFIG.MLPS[k].copy()
            channel_out = 0
            for idx in range(mlps.__len__()):
                mlps[idx] = [channel_in] + mlps[idx]
                channel_out += mlps[idx][-1]

            self.SA_modules.append(
                PointnetSAModuleMSG(npoint=cfg.RPN.SA_CONFIG.NPOINTS[k],
                                    radii=cfg.RPN.SA_CONFIG.RADIUS[k],
                                    nsamples=cfg.RPN.SA_CONFIG.NSAMPLE[k],
                                    mlps=mlps,
                                    use_xyz=use_xyz,
                                    bn=cfg.RPN.USE_BN))
            skip_channel_list.append(channel_out)
            channel_in = channel_out

        ##################
        if cfg.LI_FUSION.ENABLED:
            self.Img_Block = nn.ModuleList()
            self.Fusion_Conv = nn.ModuleList()
            self.DeConv = nn.ModuleList()
            for i in range(len(cfg.LI_FUSION.IMG_CHANNELS) - 1):
                self.Img_Block.append(
                    BasicBlock(cfg.LI_FUSION.IMG_CHANNELS[i],
                               cfg.LI_FUSION.IMG_CHANNELS[i + 1],
                               stride=1))
                if cfg.LI_FUSION.ADD_Image_Attention:
                    self.Fusion_Conv.append(
                        Atten_Fusion_Conv(cfg.LI_FUSION.IMG_CHANNELS[i + 1],
                                          cfg.LI_FUSION.POINT_CHANNELS[i],
                                          cfg.LI_FUSION.POINT_CHANNELS[i]))
                else:
                    self.Fusion_Conv.append(
                        Fusion_Conv(
                            cfg.LI_FUSION.IMG_CHANNELS[i + 1] +
                            cfg.LI_FUSION.POINT_CHANNELS[i],
                            cfg.LI_FUSION.POINT_CHANNELS[i]))

                self.DeConv.append(
                    nn.ConvTranspose2d(
                        cfg.LI_FUSION.IMG_CHANNELS[i + 1],
                        cfg.LI_FUSION.DeConv_Reduce[i],
                        kernel_size=cfg.LI_FUSION.DeConv_Kernels[i],
                        stride=cfg.LI_FUSION.DeConv_Kernels[i]))

            self.image_fusion_conv = nn.Conv2d(
                sum(cfg.LI_FUSION.DeConv_Reduce),
                cfg.LI_FUSION.IMG_FEATURES_CHANNEL // 4,
                kernel_size=1)
            self.image_fusion_bn = torch.nn.BatchNorm2d(
                cfg.LI_FUSION.IMG_FEATURES_CHANNEL // 4)

            if cfg.LI_FUSION.ADD_Image_Attention:
                self.final_fusion_img_point = Atten_Fusion_Conv(
                    cfg.LI_FUSION.IMG_FEATURES_CHANNEL // 4,
                    cfg.LI_FUSION.IMG_FEATURES_CHANNEL,
                    cfg.LI_FUSION.IMG_FEATURES_CHANNEL)
            else:
                self.final_fusion_img_point = Fusion_Conv(
                    cfg.LI_FUSION.IMG_FEATURES_CHANNEL +
                    cfg.LI_FUSION.IMG_FEATURES_CHANNEL // 4,
                    cfg.LI_FUSION.IMG_FEATURES_CHANNEL)

        self.FP_modules = nn.ModuleList()

        for k in range(cfg.RPN.FP_MLPS.__len__()):
            pre_channel = cfg.RPN.FP_MLPS[k + 1][-1] if k + 1 < len(
                cfg.RPN.FP_MLPS) else channel_out
            self.FP_modules.append(
                PointnetFPModule(mlp=[pre_channel + skip_channel_list[k]] +
                                 cfg.RPN.FP_MLPS[k]))