Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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
Example #6
0
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)
Example #7
0
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
Example #8
0
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
Example #9
0
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
Example #10
0
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)