def evaluate(args): test_data, test_label = _load(load_train = False) test_dataset = S3DISDataLoader(test_data,test_label) testdataloader = DataLoader(test_dataset, batch_size=args.batch_size,shuffle=True, num_workers=args.workers) log.debug('Building Model', args.model_name) num_classes = 13 if args.model_name == 'pointnet': model = PointNetSeg(num_classes, feature_transform=True, input_dims = 9) else: model = PointNet2SemSeg(num_classes, feature_dims = 6) torch.backends.cudnn.benchmark = True model = torch.nn.DataParallel(model).cuda() log.debug('Using gpu:',args.gpu) if args.pretrain is None: log.err('No pretrain model') return log.debug('Loading pretrain model...') state_dict = torch.load(args.pretrain) model.load_state_dict(state_dict) test_metrics, cat_mean_iou = test_semseg( model.eval(), testdataloader, label_id_to_name, args.model_name, num_classes, ) mean_iou = np.mean(cat_mean_iou) log.info(Test_accuracy=test_metrics['accuracy'], Test_meanIOU=mean_iou)
def vis(args): test_data, test_label = _load(load_train = False) test_dataset = S3DISDataLoader(test_data,test_label) testdataloader = DataLoader(test_dataset, batch_size=args.batch_size,shuffle=False, num_workers=args.workers) log.debug('Building Model', args.model_name) num_classes = 13 if args.model_name == 'pointnet2': model = PointNet2SemSeg(num_classes) else: model = PointNetSeg(num_classes,feature_transform=True,semseg = True) torch.backends.cudnn.benchmark = True model = torch.nn.DataParallel(model) model.cuda() log.debug('Using gpu:',args.gpu) if args.pretrain is None: log.err('No pretrain model') return log.debug('Loading pretrain model...') checkpoint = torch.load(args.pretrain) model.load_state_dict(checkpoint) model.eval() cmap = plt.cm.get_cmap("hsv", 13) cmap = np.array([cmap(i) for i in range(13)])[:, :3] for batch_id, (points, target) in enumerate(testdataloader): log.info('Press space to exit','press Q for next frame') batchsize, num_point, _ = points.size() points, target = Variable(points.float()), Variable(target.long()) points = points.transpose(2, 1) points, target = points.cuda(), target.cuda() if args.model_name == 'pointnet2': pred = model(points) else: pred, _ = model(points) points = points[:, :3, :].transpose(-1, 1) pred_choice = pred.data.max(-1)[1] for idx in range(batchsize): pt, gt, pred = points[idx], target[idx], pred_choice[idx] gt_color = cmap[gt.cpu().numpy() - 1, :] pred_color = cmap[pred.cpu().numpy() - 1, :] point_cloud = open3d.geometry.PointCloud() point_cloud.points = open3d.utility.Vector3dVector(pt.cpu().numpy()) point_cloud.colors = open3d.Vector3dVector(gt_color) vis = open3d.visualization.VisualizerWithKeyCallback() vis.create_window() vis.get_render_option().background_color = np.asarray([0, 0, 0]) vis.add_geometry(point_cloud) vis.register_key_callback(32, lambda vis: exit()) vis.run() vis.destroy_window()
def evaluate(args): test_data, test_label = load_data( 'experiment/data/modelnet40_ply_hdf5_2048/', train=False) testDataset = ModelNetDataLoader(test_data, test_label) testDataLoader = torch.utils.data.DataLoader(testDataset, batch_size=args.batch_size, shuffle=False) log.debug('Building Model', args.model_name) if args.model_name == 'pointnet': num_class = 40 model = PointNetCls(num_class, args.feature_transform) else: model = PointNet2ClsMsg() torch.backends.cudnn.benchmark = True model = torch.nn.DataParallel(model).cuda() log.debug('Using gpu:', args.gpu) if args.pretrain is None: log.err('No pretrain model') return log.debug('Loading pretrain model...') state_dict = torch.load(args.pretrain) model.load_state_dict(state_dict) acc = test_clf(model.eval(), testDataLoader) log.msg(Test_Accuracy='%.5f' % (acc))
def select_avaliable(fn_list): selected = None for fn in fn_list: if os.path.exists(fn): selected = fn break if selected is None: log.err(log.yellow("Could not find dataset from"), fn_list) else: return selected
def vis(args): test_data, test_label = load_data(root, train=False) log.info(test_data=test_data.shape, test_label=test_label.shape) log.debug('Building Model', args.model_name) if args.model_name == 'pointnet': num_class = 40 model = PointNetCls(num_class, args.feature_transform).cuda() else: model = PointNet2ClsMsg().cuda() torch.backends.cudnn.benchmark = True model = torch.nn.DataParallel(model) model.cuda() log.info('Using multi GPU:', args.gpu) if args.pretrain is None: log.err('No pretrain model') return log.debug('Loading pretrain model...') checkpoint = torch.load(args.pretrain) model.load_state_dict(checkpoint) model.eval() log.info('Press space to exit, press Q for next frame') for idx in range(test_data.shape[0]): point_np = test_data[idx:idx + 1] gt = test_label[idx][0] points = torch.from_numpy(point_np) points = points.transpose(2, 1).cuda() pred, trans_feat = model(points) pred_choice = pred.data.max(1)[1] log.info(gt=class_names[gt], pred_choice=class_names[pred_choice.cpu().numpy().item()]) point_cloud = open3d.geometry.PointCloud() point_cloud.points = open3d.utility.Vector3dVector(point_np[0]) vis = open3d.visualization.VisualizerWithKeyCallback() vis.create_window() vis.get_render_option().background_color = np.asarray([0, 0, 0]) vis.add_geometry(point_cloud) vis.register_key_callback(32, lambda vis: exit()) vis.run() vis.destroy_window()
def evaluate(args): cache = _load(root) norm = True if args.model_name == 'pointnet' else False test_ds = PartNormalDataset(root, cache, npoints=2048, split='test') testdataloader = DataLoader(test_ds, batch_size=args.batch_size, shuffle=False, num_workers=int(args.workers)) log.info("The number of test data is:", len(test_ds)) log.info('Building Model', args.model_name) num_classes = 16 num_part = 50 if args.model_name == 'pointnet2': model = PointNet2PartSegMsg_one_hot(num_part) else: model = PointNetDenseCls(cat_num=num_classes, part_num=num_part) torch.backends.cudnn.benchmark = True model = torch.nn.DataParallel(model).cuda() log.debug('Using gpu:', args.gpu) if args.pretrain is None: log.err('No pretrain model') return log.debug('Loading pretrain model...') state_dict = torch.load(args.pretrain) model.load_state_dict(state_dict) log.info('Testing pretrain model...') test_metrics, test_hist_acc, cat_mean_iou = test_partseg( model.eval(), testdataloader, label_id_to_name, args.model_name, num_part, ) log.info('test_hist_acc', len(test_hist_acc)) log.info(cat_mean_iou) log.info('Test Accuracy', '%.5f' % test_metrics['accuracy']) log.info('Class avg mIOU:', '%.5f' % test_metrics['class_avg_iou']) log.info('Inctance avg mIOU:', '%.5f' % test_metrics['inctance_avg_iou'])
def vis(args): cache = _load(root) norm = True if args.model_name == 'pointnet' else False test_ds = PartNormalDataset(root, cache, npoints=2048, split='test') testdataloader = DataLoader(test_ds, batch_size=args.batch_size, shuffle=True, num_workers=int(args.workers)) log.info("The number of test data is:", len(test_ds)) log.info('Building Model', args.model_name) num_classes = 16 num_part = 50 if args.model_name == 'pointnet': model = PointNetDenseCls(cat_num=num_classes, part_num=num_part) else: model = PointNet2PartSegMsg_one_hot(num_part) torch.backends.cudnn.benchmark = True model = torch.nn.DataParallel(model) model.cuda() log.debug('Using multi GPU:', args.gpu) if args.pretrain is None: log.err('No pretrain model') return log.info('Loading pretrain model...') checkpoint = torch.load(args.pretrain) model.load_state_dict(checkpoint) log.info('Press space to exit, press Q for next frame') for batch_id, (points, label, target, norm_plt) in enumerate(testdataloader): batchsize, num_point, _ = points.size() points, label, target, norm_plt = points.float(), label.long( ), target.long(), norm_plt.float() points = points.transpose(2, 1) norm_plt = norm_plt.transpose(2, 1) points, label, target, norm_plt = points.cuda(), label.squeeze().cuda( ), target.cuda(), norm_plt.cuda() if args.model_name == 'pointnet': labels_pred, seg_pred, _ = model(points, to_categorical(label, 16)) else: seg_pred = model(points, norm_plt, to_categorical(label, 16)) pred_choice = seg_pred.max(-1)[1] log.info(seg_pred=seg_pred.shape, pred_choice=pred_choice.shape) log.info(seg_pred=seg_pred.shape, pred_choice=pred_choice.shape) cmap_plt = plt.cm.get_cmap("hsv", num_part) cmap_list = [cmap_plt(i)[:3] for i in range(num_part)] np.random.shuffle(cmap_list) cmap = np.array(cmap_list) #log.info('points',points.shape,'label',label.shape,'target',target.shape,'norm_plt',norm_plt.shape) for idx in range(batchsize): pt, gt, pred = points[idx].transpose( 1, 0), target[idx], pred_choice[idx].transpose(-1, 0) # log.info('pt',pt.size(),'gt',gt.size(),'pred',pred.shape) gt_color = cmap[gt.cpu().numpy() - 1, :] pred_color = cmap[pred.cpu().numpy() - 1, :] point_cloud = open3d.geometry.PointCloud() point_cloud.points = open3d.utility.Vector3dVector( pt.cpu().numpy()) point_cloud.colors = open3d.utility.Vector3dVector(pred_color) vis = open3d.visualization.VisualizerWithKeyCallback() vis.create_window() vis.get_render_option().background_color = np.asarray([0, 0, 0]) vis.add_geometry(point_cloud) vis.register_key_callback(32, lambda vis: exit()) vis.run() vis.destroy_window()