def get_org_gt_dets(): dets_annots_path = get_dets_annots_path(data_dir) dets_arr = load_dets_annots(dets_annots_path) frm_ids = dets_arr[:, 0].astype(int) obj_ids = dets_arr[:, -1].astype(int) coords = dets_arr[:, 1:5] boxes = coords_to_boxes(coords) return frm_ids, obj_ids, boxes
def amend_dets(masks, in_dets): out_dets = in_dets in_coords = in_dets[:, 2:6] in_boxes = coords_to_boxes(in_coords) out_boxes = boxes_align_masks(masks, in_boxes) out_coords = boxes_to_coords(out_boxes) out_dets[:, 2:6] = out_coords return out_dets
def parse_gt_annots(): gt_masks_tensor = load_masks_new() gt_dets = load_dets_new() ## parse dets gt_frm_ids = gt_dets[:, 0].astype(int) gt_obj_ids = gt_dets[:, 1].astype(int) gt_coords = gt_dets[:, 2:6] gt_boxes = coords_to_boxes(gt_coords) ## tight_gt_boxes return gt_frm_ids, gt_obj_ids, gt_boxes, gt_masks_tensor
def get_gt_dets(): dets_annots_path = get_dets_annots_path(data_dir) dets_arr = load_dets_annots(dets_annots_path) if debug_flag: print 'dets_annots_path:', dets_annots_path print 'dets_arr.shape:', dets_arr.shape frm_ids = dets_arr[:, 0].astype(int) obj_ids = dets_arr[:, -1].astype(int) coords = dets_arr[:, 1:5] boxes = coords_to_boxes(coords) return frm_ids, obj_ids, boxes
def interploate_dets(disc_dets_path, cont_dets_path): print '==================interploate det proposals==========================' print '--------------------------discrete_det_arr--------------------------------------------' disc_det_arr = load_txt_to_fltarr(disc_dets_path) #print 'disc_det_arr:\n', disc_det_arr tmp_det_arr = disc_det_arr # frm-no, obj_id, x1,y1,w,h tmp_coords = tmp_det_arr[:, 2:6] ## x1,y1,w,h tmp_boxes = coords_to_boxes(tmp_coords) ## x1,y1,x2, y2 tmp_det_arr[:, 2:6] = tmp_boxes print '--------------------------------------------------------------------' #frm_no,obj_id,x1,y1,x2,y2 col = 1 ## obj_id (col) sort_det_arr = tmp_det_arr[np.argsort( tmp_det_arr[:, col])] ## sort according to obj_id obj_ids = np.unique(sort_det_arr[:, 1]).astype(int) print '----------------------------cont_det_arr-------------------------------------------' cont_det_arr = [] tmp_cont_det_arr = np.zeros((0, sort_det_arr.shape[1])) ## interploate box based on each obj_id for obj_id in obj_ids: #print '--------------------------obj_id=', obj_id, '------------------------------------------------' row_indexes = np.where(sort_det_arr[:, 1] == obj_id) disc_label_det_arr = sort_det_arr[row_indexes] cont_label_det_arr = interploate_label_dets(obj_id, disc_label_det_arr) # print 'disc_label_det_arr.shape:', disc_label_det_arr.shape # print 'cont_label_det_arr.shape:', cont_label_det_arr.shape if disc_label_det_arr.shape == cont_label_det_arr.shape: print 'obj_id that equal:', obj_id cont_label_boxes = cont_label_det_arr[:, 2: 6] ## convert back from boxes to coords cont_label_coords = boxes_to_coords(cont_label_boxes) cont_label_det_arr[:, 2:6] = cont_label_coords tmp_cont_det_arr = np.vstack((tmp_cont_det_arr, cont_label_det_arr)) cont_det_arr = np.asarray(tmp_cont_det_arr) #convert list to array write_detarr_as_mot(cont_dets_path, cont_det_arr) ## save in local disk as .txt if debug_flag: print 'cont_det_arr.shape:', cont_det_arr.shape
def test_vis_gt_boxes(): imgset_path, jpg_dir, im_ext = io.get_ims_info() im_names = ld.get_im_names(imgset_path) ims = ld.load_color_images(jpg_dir, im_names, im_ext) data_dir = os.path.join(mcfg.DATA.DATA_DIR, set_name) tud_dets_gt_path = get_dets_annots_path(data_dir) if debug_flag: print 'imgset_path:', imgset_path print 'jpg_dir:', jpg_dir print 'im_ext:', im_ext print 'data_dir:', data_dir print 'tud_dets_gt_path:', tud_dets_gt_path tud_dets_arr = load_dets_annots(tud_dets_gt_path) frm_ids = tud_dets_arr[:, 0].astype(int) obj_ids = tud_dets_arr[:, -1].astype(int) # uniq_obj_ids=np.sort(np.unique(obj_ids)) # for u_id in uniq_obj_ids: # label_row_indexes=np.where(obj_ids==u_id)[0] # label_frm_ids=frm_ids[label_row_indexes] # print 'u_id:',u_id # print 'label_frm_ids:', label_frm_ids # if debug_flag: # print 'tud_dets_arr.shape:', tud_dets_arr.shape # print 'frm_ids:', frm_ids # print 'obj_ids:', obj_ids # print 'uniq_obj_ids:', uniq_obj_ids coords = tud_dets_arr[:, 1:5] ##vis_arr=tud_dets_arr[:,5]/100.0 ##make vis range in [0, 1.0] boxes = coords_to_boxes(coords) ## unnormal det_dir = mcfg.PROPOSAL.RES_DIR.replace('Continious', 'Discrete') gt_det_dir = os.path.join(det_dir, 'vis_gt_boxes') for n_id in xrange(len(im_names)): im = ims[n_id] im_name = im_names[n_id] frm_id = int(im_name.split('_')[1]) row_indexes = np.where(frm_ids == frm_id)[0] frm_boxes = boxes[row_indexes] frm_obj_ids = obj_ids[row_indexes] vis_gt_bboxes(gt_det_dir, im, im_name, frm_boxes, frm_obj_ids)
def get_init_dets(cont_flag=False): det_boxes = [] det_masks = [] det_obj_ids = [] det_frm_ids = [] bin_mask_dir = mcfg.MASK.BIN_LAB_DIR init_mask_dir = os.path.join(bin_mask_dir, set_name) prop_file_path, prop_file_ext = io.get_dets_info(set_name) if not cont_flag: init_mask_dir = init_mask_dir.replace('Continious', 'Discrete') prop_file_path = prop_file_path.replace('Continious', 'Discrete') prop_arr = ld.load_det_proposals(prop_file_path) frm_ids = np.sort(np.unique(prop_arr[:, 0]).astype(int)) frm_num = len(frm_ids) img_box = [0, 0, im_width - 1, im_height - 1] ## not used ## calculate based on per-frame ##for n_id in xrange(1): for n_id in xrange(frm_num): frm_id = frm_ids[n_id] row_indexs = np.where(prop_arr[:, 0] == frm_id)[0] ##frame indexes frm_prop_arr = prop_arr[row_indexs] frm_labels = frm_prop_arr[:, 1].astype(int) im_name = set_name + '_' + str(frm_ids[n_id] + shift_num).zfill(6) frm_coords = frm_prop_arr[:, 2:6] flt_frm_boxes = coords_to_boxes(frm_coords) frm_masks = load_frame_masks(init_mask_dir, frm_labels, '', im_name) int_frm_boxes = boxes_float_to_int(flt_frm_boxes, frm_masks) ##max_masks=get_max_masks(masks,boxes,img_box) ## not used det_frm_ids.append(frm_id) det_obj_ids.append(frm_labels) det_boxes.append(int_frm_boxes) det_masks.append(frm_masks) # if debug_flag: # print 'cont_flag:', cont_flag # print 'init_mask_dir:', init_mask_dir # print 'prop_file_path:', prop_file_path # print 'prop_arr.shape:', prop_arr.shape # print 'frm_num:', frm_num return det_frm_ids, det_obj_ids, det_boxes, det_masks
def dets_tud_to_mot(tud_dets_path, mot_dets_path): tud_dets_arr = load_dets_annots(tud_dets_path) frm_ids = tud_dets_arr[:, 0].astype(int) obj_ids = tud_dets_arr[:, -1].astype(int) coords = tud_dets_arr[:, 1:5] ##vis_arr=tud_dets_arr[:,5]/100.0 ##make vis range in [0, 1.0] boxes = coords_to_boxes(coords) ## unnormal row_num = len(frm_ids) mot_dets_arr = np.ones((row_num, 10)) * -1 mot_dets_arr[:, 0] = frm_ids mot_dets_arr[:, 1] = obj_ids mot_dets_arr[:, 2:6] = coords mot_dets_arr[:, 6] = 1 ##write_detarr_as_mot(mot_dets_path,mot_dets_arr) ## org if debug_flag: # print frm_ids.shape # print obj_ids.shape # print obj_ids print mot_dets_arr
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)