def render_parsed_house_walls(parsed_dir, show_pcl=SHOW_PCL, show_by_class=0): print(f'parsed_dir:{parsed_dir}') house_name = os.path.basename(parsed_dir) bboxes = [] labels = [] for obj in CLASSES: bbox_fn_ = f'{parsed_dir}/object_bbox/{obj}.txt' bboxes_ = np.loadtxt(bbox_fn_).reshape([-1, 7]) bboxes.append(bboxes_) label = DSET_METAS0.class_2_label[obj] labels += [label] * bboxes_.shape[0] bboxes = np.concatenate(bboxes, 0) labels = np.array(labels).astype(np.int8) if bboxes.shape[0] > 0: scene_size = Bbox3D.boxes_size(bboxes) print(f'scene wall size:{scene_size}') #Bbox3D.draw_bboxes(bboxes, up_axis='Z', is_yx_zb=False, labels=labels) #if not show_pcl: #Bbox3D.draw_bboxes_mesh(bboxes, up_axis='Z', is_yx_zb=False) #Bbox3D.draw_bboxes_mesh(bboxes, up_axis='Z', is_yx_zb=False, labels=labels) #show_walls_offsetz(bboxes) pass if show_by_class: for c in range(1, max(labels) + 1): cs = DSET_METAS0.label_2_class[c] print(cs) if cs not in ['wall', 'window', 'door']: #if cs not in ['wall']: continue mask = labels == c bboxes_c = bboxes[mask] show_walls_offsetz(bboxes_c) if show_pcl: pcl_fn = f'{parsed_dir}/pcl_camref.ply' if not os.path.exists(pcl_fn): return pcd = open3d.io.read_point_cloud(pcl_fn) points = np.asarray(pcd.points) points = cam2world_pcl(points) colors = np.asarray(pcd.colors) pcl = np.concatenate([points, colors], 1) scene_size = pcl_size(pcl) print(f'scene pcl size:{scene_size}') print(f'point num: {pcl.shape[0]}') #pcl = cut_points_roof(pcl) Bbox3D.draw_points(pcl, points_keep_rate=POINTS_KEEP_RATE, points_sample_rate=0.05) #Bbox3D.draw_points(pcl, points_keep_rate=POINTS_KEEP_RATE, animation_fn='points.mp4', ani_size=AniSizes[house_name]) import pdb pdb.set_trace() # XXX BREAKPOINT bboxes[:, 2] += 0.1
def render_pth_file(pth_fn, show_by_class=0): pcl, bboxes0 = torch.load(pth_fn) #points = pcl[:,0:3] #colors = pcl[:,3:6] #normals = pcl[:,6:9] bboxes = {} for c in CLASSES: bboxes[c] = bboxes0[c] scene_size = pcl_size(pcl) print(f'scene pcl size:{scene_size}') print(f'point num: {pcl.shape[0]}') #pcl = cut_points_roof(pcl) classes = [k for k in bboxes.keys()] num_classes = {k: bboxes[k].shape[0] for k in bboxes.keys()} print(f'\nclasses: {num_classes}\n\n') all_bboxes = np.concatenate([boxes for boxes in bboxes.values()], 0) nums = [boxes.shape[0] for boxes in bboxes.values()] labels = [] for i, n in enumerate(nums): labels += [i] * n labels = np.array(labels) Bbox3D.draw_points(pcl, points_keep_rate=POINTS_KEEP_RATE) #show_walls_offsetz(all_bboxes) #Bbox3D.draw_bboxes_mesh(all_bboxes, up_axis='Z', is_yx_zb=False, labels=labels) #Bbox3D.draw_bboxes_mesh(all_bboxes, up_axis='Z', is_yx_zb=False) #Bbox3D.draw_points_bboxes_mesh(pcl, all_bboxes, up_axis='Z', is_yx_zb=False, labels=labels, points_keep_rate=POINTS_KEEP_RATE) #Bbox3D.draw_points_bboxes_mesh(pcl, all_bboxes, up_axis='Z', is_yx_zb=False, points_keep_rate=POINTS_KEEP_RATE) #Bbox3D.draw_points_bboxes(pcl, all_bboxes, up_axis='Z', is_yx_zb=False,points_keep_rate=POINTS_KEEP_RATE) #Bbox3D.draw_points_bboxes(pcl, all_bboxes, up_axis='Z', is_yx_zb=False, labels=labels, points_keep_rate=POINTS_KEEP_RATE) #Bbox3D.draw_points_bboxes(pcl, all_bboxes, up_axis='Z', is_yx_zb=False, labels=labels, points_keep_rate=POINTS_KEEP_RATE, animation_fn='anima.mp4', ani_size=[280,700,550,1350]) if show_by_class: for clas in bboxes.keys(): if clas not in ['ceiling', 'floor']: #if clas not in ['wall', 'window', 'door','ceiling', 'floor']: continue print(clas) #if clas not in CLASSES: # continue boxes = bboxes[clas] #Bbox3D.draw_points_bboxes(points, boxes, up_axis='Z', is_yx_zb=False) Bbox3D.draw_points_bboxes_mesh(pcl, boxes, up_axis='Z', is_yx_zb=False, points_keep_rate=POINTS_KEEP_RATE) show_walls_offsetz(boxes) import pdb pdb.set_trace() # XXX BREAKPOINT pass
def show_pred(gt_boxlists_, pred_boxlists_, files): SHOW_SMALL_IOU = False print('SHOW_PRED') for i in range(len(pred_boxlists_)): print(f'\n{files[i]}\n') #pcl_i = dataset[image_ids[i]]['x'][1][:,0:6] pcl_i = torch.load(files[i])[0][:, 0:6] preds = pred_boxlists_[i].remove_low('scores', 0.1) #preds = pred_boxlists_[i] # already post processed in: select_ids = 0 if select_ids: ids = [1, 2, 3] #ids = [4] preds = preds.select_by_labels(ids, 'labels_org') gt_boxlists_[i] = gt_boxlists_[i].select_by_labels( ids, 'labels_org') if MERGE_BY_CORNERS: preds = merge_by_corners(preds) # ~/Research/Detection_3D/maskrcnn_benchmark/modeling/roi_heads/box_head_3d/inference.py # cfg.MODEL.ROI_HEADS.SCORE_THRESH xyz_max = pcl_i[:, 0:3].max(0) xyz_min = pcl_i[:, 0:3].min(0) xyz_size = xyz_max - xyz_min pcl_i[:, 0:3] -= xyz_min.reshape([1, 3]) print(f'xyz_size:{xyz_size}') #preds.show__together(gt_boxlists_[i], points=None, offset_x=xyz_size[0]+0.3, twolabels=False) #preds.show__together(gt_boxlists_[i], points=pcl_i, offset_x=xyz_size[0]+2.2, twolabels=False, mesh=0, points_keep_rate=0.9, points_sample_rate=1.0, random_color=False) compare_instances_with_offset = True if compare_instances_with_offset: gt_ids = preds.get_field('gt_ids').cpu().data.numpy().astype( np.int) + 1 if gt_ids.size > 0 and select_ids: base = np.min(gt_ids[gt_ids > 0]) - 1 gt_ids[gt_ids > 0] -= base pred_colors = COLOR_LIST[gt_ids].copy() gt_colors = COLOR_LIST[1:len(gt_boxlists_[i]) + 1].copy() err_gt_ids = torch.nonzero(gt_boxlists_[i].get_field('labels') == 0)[:, 0].data.numpy().reshape([-1]) #gt_colors[err_gt_ids] = COLOR_LIST[0].copy() #preds.show(points=pcl_i, points_keep_rate=0.9, points_sample_rate=1.0, colors=pred_colors) #gt_boxlists_[i].show(points=pcl_i, points_keep_rate=0.9, points_sample_rate=1.0, colors=gt_colors) preds.show__together(gt_boxlists_[i], points=pcl_i, offset_x=xyz_size[0] + 7, twolabels=False, mesh=1, points_keep_rate=0.9, points_sample_rate=0.0, colors=[pred_colors, gt_colors]) #preds.show__together(gt_boxlists_[i],offset_x=xyz_size[0]+7, twolabels=False, mesh=0, points_keep_rate=0.9, points_sample_rate=1.0, colors=[pred_colors, gt_colors]) preds.show__together(gt_boxlists_[i], points=pcl_i, offset_x=xyz_size[0] + 7, twolabels=False, mesh=0, points_keep_rate=0.9, points_sample_rate=0.0, colors=[pred_colors, gt_colors]) #preds.show_pcl_corners(pcl_i) Bbox3D.draw_points(pcl_i, points_keep_rate=0.9, points_sample_rate=0.6) import pdb pdb.set_trace() # XXX BREAKPOINT pass #preds.show__together(gt_boxlists_[i], points=pcl_i, offset_x=0, twolabels=True, mesh=0, points_keep_rate=0.9, points_sample_rate=1.0) #p_labels_org = preds.get_field('labels_org') #g_labels_org = gt_boxlists_[i].get_field('labels_org') #if g_labels_org.max() == 5: # wwd_mask_p = torch.nonzero( p_labels_org <= 3).squeeze() # wwd_mask_g = torch.nonzero( g_labels_org <= 3).squeeze() # cf_mask_p = torch.nonzero( p_labels_org > 3).squeeze() # cf_mask_g = torch.nonzero( g_labels_org > 3).squeeze() # preds[wwd_mask_p].show__together(gt_boxlists_[i][wwd_mask_g], points=pcl_i, offset_x=xyz_size[0]+2.2, twolabels=False, mesh=False, points_keep_rate=0.9, points_sample_rate=1.0) # preds[cf_mask_p].show__together(gt_boxlists_[i][cf_mask_g], points=pcl_i, offset_x=xyz_size[0]+2.2, twolabels=False, mesh=False, points_keep_rate=0.9, points_sample_rate=1.0) #gt_boxlists_[i].show_by_labels([1]) if SHOW_SMALL_IOU: small_iou_pred_ids = [p['pred_idx'] for p in small_iou_preds[i]] small_ious = [p['iou'] for p in small_iou_preds[i]] print(f'small iou preds: {small_iou_preds[i]}') if len(small_iou_pred_ids) > 0: preds.show_highlight(small_iou_pred_ids, points=pcl_i)