def verify_gt_annots(gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks,write_res_flag=False): print '===========================m1.verify gt annots============================' ## switch 1: for gt # ## 5> postprocessing masks gt_boxes=gt_boxes.astype(int) gt_list_masks=masks_align_boxes(gt_masks,gt_boxes) ## tailor masks gt_masks=np.asarray(gt_list_masks) # ## 6> verify the gt_annots and measurement algorithm prec,rec,tp_cnt,fp_cnt,miss_gt_cnt=get_precision_recall(gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks,gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks) ave_mask_iou_arr,ave_inst_iou=get_average_maskiou(gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks,gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks) if debug_flag: print 'tp_cnt:', tp_cnt print 'fp_cnt:', fp_cnt print 'miss_gt_cnt:', miss_gt_cnt print 'prec:', prec print 'rec:', rec print 'ave_mask_iou_arr:', ave_mask_iou_arr print 'ave_inst_iou:', ave_inst_iou ## write metrics in local disk if write_res_flag: metric_dir=get_metric_dir() gt_metric_dir=os.path.join(metric_dir,'gt.txt') res_content='-------------------------gt----------------------------' res_content+='\n'+'obj_ids:'+str(np.sort(np.unique(gt_obj_ids))) res_content+='\n'+'tp_cnt:'+str(tp_cnt) res_content+='\n'+'fp_cnt:'+str(fp_cnt) res_content+='\n'+'miss_gt_cnt:'+str(miss_gt_cnt) res_content+='\n'+'prec:'+str(prec) res_content+='\n'+'rec:'+str(rec) res_content+='\n'+'ave_mask_iou_arr:'+str(ave_mask_iou_arr) res_content+='\n'+'ave_inst_iou:'+str(ave_inst_iou) save_verify_res(gt_metric_dir,res_content)
def verify_ref_annots(gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks,ref_boxes,ref_masks,write_res_flag): print '===========================m3.verify refine annots============================' ## switch3: for refine one # preprocessing gt annots gt_boxes=gt_boxes.astype(int) gt_list_masks=masks_align_boxes(gt_masks,gt_boxes) ## tailor masks gt_masks=np.asarray(gt_list_masks) # preprocessing corrup annots ref_boxes=ref_boxes.astype(int) tailor_masks=masks_align_boxes(ref_masks,ref_boxes) tailor_masks=np.asarray(tailor_masks) # verify the corrup_annots and measurement algorithm prec,rec,tp_cnt,fp_cnt,miss_gt_cnt=get_precision_recall(gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks,gt_frm_ids,gt_obj_ids,ref_boxes,tailor_masks) ave_mask_iou_arr,ave_inst_iou=get_average_maskiou(gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks,gt_frm_ids,gt_obj_ids,ref_boxes,tailor_masks) if debug_flag: print 'prec:', prec print 'rec:', rec print 'ave_mask_iou_arr:', ave_mask_iou_arr print 'ave_inst_iou:', ave_inst_iou ## write metrics in local disk if write_res_flag: metric_dir=get_metric_dir() gt_metric_dir=os.path.join(metric_dir,'refine.txt') res_content='-------------------------refine----------------------------' res_content+='\n'+'obj_ids:'+str(np.sort(np.unique(gt_obj_ids))) res_content+='\n'+'tp_cnt:'+str(tp_cnt) res_content+='\n'+'fp_cnt:'+str(fp_cnt) res_content+='\n'+'miss_gt_cnt:'+str(miss_gt_cnt) res_content+='\n'+'prec:'+str(prec) res_content+='\n'+'rec:'+str(rec) res_content+='\n'+'ave_mask_iou_arr:'+str(ave_mask_iou_arr) res_content+='\n'+'ave_inst_iou:'+str(ave_inst_iou) save_verify_res(gt_metric_dir,res_content)
def get_enlarge_masks(track_mask_dir, cont_dets): ## mini_masks for ref-masks mini_masks = get_ref_masks(track_mask_dir, cont_dets) # transfer small masks(same size with boxes) to large masks(same size with color image) mask_num = len(mini_masks) masks = np.zeros((mask_num, im_height, im_width), dtype=int) ## mini_boxes dets = get_ref_dets(track_mask_dir, cont_dets) coords = dets[:, 2:6] boxes = coords_to_boxes(coords) boxes = boxes.astype(int) ## max_boxes max_boxes = np.zeros((mask_num, 4)) max_boxes[:, 2] = im_width - 1 max_boxes[:, 3] = im_height - 1 max_boxes = max_boxes.astype(int) ## max_masks max_masks = masks_align_boxes(mini_masks, boxes, max_boxes) arr_masks = np.asarray(max_masks) return arr_masks
def cal_per_label(rgb_ims,im_names,forward_flows,backward_flows,filt_obj_ids,gt_dets,gt_masks,corrup_boxes,corrup_masks): print '===============calculate per label=================' ## parameters start_frm_id=1 for f_obj_id in filt_obj_ids: print '---------------------------------------------',f_obj_id gt_masks_dir,corrup_masks_dir,pick_masks_dir=create_masks_dirs(f_obj_id) o_gt_dets,row_indexes=dets_filter_ids(gt_dets,[f_obj_id]) o_gt_frm_ids,o_gt_obj_ids,o_gt_boxes=parse_dets1(o_gt_dets) o_gt_masks=gt_masks[row_indexes] o_corrup_boxes=corrup_boxes[row_indexes] o_corrup_masks=corrup_masks[row_indexes] ## filter color images filt_indexes=o_gt_frm_ids-start_frm_id im_arr=np.asarray(rgb_ims) cur_ims=im_arr[filt_indexes] cur_im_names=im_names[filt_indexes] fw_flows=forward_flows[filt_indexes[:-1]] bw_flows=backward_flows[filt_indexes[:-1]] save_vis_masks(cur_ims,cur_im_names,gt_masks_dir,o_gt_masks,corrup_masks_dir,o_corrup_masks) #v1 if debug_flag: print 'o_gt_dets:', o_gt_dets print 'gt_masks_dir:',gt_masks_dir print 'corrup_masks_dir:', corrup_masks_dir print 'pick_masks_dir:', pick_masks_dir print 'o_gt_frm_ids:', o_gt_frm_ids #---------------------------------------------------------------------------------------- ## prepare dataset for 'refine-masks' algorithm # preprocessing corrup_masks and corrup_boxes(corrup_dets): make masks has the same size with boxes o_corrup_boxes=o_corrup_boxes.astype(int) tailor_masks=masks_align_boxes(o_corrup_masks,o_corrup_boxes) tailor_masks=np.asarray(tailor_masks) ## prepare (corrup) dets corrup_coords=boxes_to_coords(o_corrup_boxes) corrup_dets=o_gt_dets corrup_dets[:,2:6]=corrup_coords # 6> refine masks ##input: prop_arr,masks,obj_ids, forward_flows, backward_flows refine_masks(pick_masks_dir,rgb_ims,forward_flows,backward_flows,tailor_masks,corrup_dets) ref_dets=get_ref_dets(pick_masks_dir,corrup_dets) ## verified # ref_masks=get_ref_masks(pick_masks_dir,corrup_dets) ref_masks=get_enlarge_masks(pick_masks_dir,corrup_dets) ref_coords=ref_dets[:,2:6] ref_boxes=coords_to_boxes(ref_coords) verify_ref_annots(gt_frm_ids,gt_obj_ids,gt_boxes,gt_masks,ref_boxes,ref_masks,write_res_flag)
# g_obj_masks=gt_masks[n_id] # d_obj_ids=dt_obj_ids[n_id] ## org # d_obj_boxes=dt_boxes[n_id] # d_obj_masks=dt_masks[n_id] if __name__ == '__main__': print '=================tud_crossing_eval===============================' ## input1: gt_dets, gt_masks ##im_names=get_im_names() gt_dets = load_dets_new() gt_masks = load_masks_new() gt_frm_ids, gt_obj_ids, gt_boxes = parse_dets1(gt_dets) gt_boxes = gt_boxes.astype(int) gt_list_masks = masks_align_boxes(gt_masks, gt_boxes) ## tailor masks gt_masks = np.asarray(gt_list_masks) ## input2: dt_dets, dt_masks dt_dets = load_dets_ref() dt_masks = load_masks_ref() dt_frm_ids, dt_obj_ids, dt_boxes = parse_dets1(dt_dets) dt_boxes = dt_boxes.astype(int) dt_list_masks = masks_align_boxes(dt_masks, dt_boxes) ## tailor masks dt_masks = np.asarray(dt_list_masks) # if debug_flag: # print 'gt_dets.shape:',gt_dets.shape # print 'gt_masks.shape:', gt_masks[0].shape # print 'gt_boxes:',gt_boxes.shape