def save_im_name_mapping(raw_dir, ori_to_new_im_name_file): im_names = [] for dir_name in ['bounding_box_train', 'bounding_box_test', 'query', 'gt_bbox']: im_names_ = get_im_names(osp.join(raw_dir, dir_name), return_path=False, return_np=False) im_names_.sort() # Filter out id -1 if dir_name == 'bounding_box_test': im_names_ = [n for n in im_names_ if not n.startswith('-1')] # Images in different original directories may have same names, # so here we use relative paths as original image names. im_names_ = [osp.join(dir_name, n) for n in im_names_] im_names += im_names_ new_im_names = map_im_names(im_names, parse_original_im_name, new_im_name_tmpl) ori_to_new_im_name = dict(zip(im_names, new_im_names)) save_pickle(ori_to_new_im_name, ori_to_new_im_name_file) print('File saved to {}'.format(ori_to_new_im_name_file)) ################## # Just Some Info # ################## print('len(im_names)', len(im_names)) print('len(set(im_names))', len(set(im_names))) print('len(set(new_im_names))', len(set(new_im_names))) print('len(ori_to_new_im_name)', len(ori_to_new_im_name)) bounding_box_train_im_names = get_im_names(osp.join(raw_dir, 'bounding_box_train'), return_path=False, return_np=False) bounding_box_test_im_names = get_im_names(osp.join(raw_dir, 'bounding_box_test'), return_path=False, return_np=False) query_im_names = get_im_names(osp.join(raw_dir, 'query'), return_path=False, return_np=False) gt_bbox_im_names = get_im_names(osp.join(raw_dir, 'gt_bbox'), return_path=False, return_np=False) print('set(bounding_box_train_im_names).isdisjoint(set(bounding_box_test_im_names))', set(bounding_box_train_im_names).isdisjoint(set(bounding_box_test_im_names))) print('set(bounding_box_train_im_names).isdisjoint(set(query_im_names))', set(bounding_box_train_im_names).isdisjoint(set(query_im_names))) print('set(bounding_box_train_im_names).isdisjoint(set(gt_bbox_im_names))', set(bounding_box_train_im_names).isdisjoint(set(gt_bbox_im_names))) print('set(bounding_box_test_im_names).isdisjoint(set(query_im_names))', set(bounding_box_test_im_names).isdisjoint(set(query_im_names))) print('set(bounding_box_test_im_names).isdisjoint(set(gt_bbox_im_names))', set(bounding_box_test_im_names).isdisjoint(set(gt_bbox_im_names))) print('set(query_im_names).isdisjoint(set(gt_bbox_im_names))', set(query_im_names).isdisjoint(set(gt_bbox_im_names))) print('len(query_im_names)', len(query_im_names)) print('len(gt_bbox_im_names)', len(gt_bbox_im_names)) print('len(set(query_im_names) & set(gt_bbox_im_names))', len(set(query_im_names) & set(gt_bbox_im_names))) print('len(set(query_im_names) | set(gt_bbox_im_names))', len(set(query_im_names) | set(gt_bbox_im_names)))
def main(): cfg = Config() TVT, TMO = set_devices(cfg.sys_device_ids) ######### # Model # ######### model = Model(net=cfg.net, pretrained=False) ##################### # Load Model Weight # ##################### used_file = cfg.model_weight_file or cfg.ckpt_file loaded = torch.load(used_file, map_location=(lambda storage, loc: storage)) if cfg.model_weight_file == '': loaded = loaded['state_dicts'][0] load_state_dict(model, loaded) print('Loaded model weights from {}'.format(used_file)) model = model.base # Set eval mode. Force all BN layers to use global mean and variance, also disable dropout. model.eval() # Transfer Model to Specified Device. TMO([model]) ################### # Extract Feature # ################### im_dir = osp.expanduser(cfg.image_dir) im_paths = get_im_names(im_dir, pattern='*.jpg', return_path=True, return_np=False) all_feat = [] import scipy.io as sci for i, im_path in enumerate(im_paths): im = np.asarray(Image.open(im_path).convert('RGB')) im = pre_process_im(im, cfg) im = Variable(TVT(torch.from_numpy(im).float()), volatile=True) feat = model(im) feat = feat.data.cpu().numpy() all_feat.append(feat) if (i + 1) % 100 == 0: print('{}/{} images done'.format(i, len(im_paths))) all_feat = np.concatenate(all_feat) print('all_feat.shape:', all_feat.shape) # all_feat = normalize(all_feat, axis=1) # You can save your im_paths and features, or do anything else ... sci.savemat(cfg.saved_feature_mat_file, {'features': all_feat})
def save_images(zip_file, save_dir=None, train_test_split_file=None): """Rename and move all used images to a directory.""" print("Extracting zip file") root = osp.dirname(osp.abspath(zip_file)) if save_dir is None: save_dir = root may_make_dir(save_dir) # with ZipFile(zip_file) as z: # z.extractall(path=save_dir) # print("Extracting zip file done") new_im_dir = osp.join(save_dir, 'images') may_make_dir(new_im_dir) # raw_dir = osp.join(save_dir, osp.basename(zip_file[:-7])) raw_dir = save_dir im_paths = [] nums = [] for dir_name in ['bounding_box_train', 'bounding_box_test', 'query']: # import pdb # pdb.set_trace() im_paths_ = get_im_names(osp.join(raw_dir, dir_name), pattern='*.jpg', return_path=True, return_np=False) im_paths_.sort() im_paths += list(im_paths_) nums.append(len(im_paths_)) # import pdb # pdb.set_trace() im_names = move_ims(im_paths, new_im_dir, parse_original_im_name, new_im_name_tmpl) split = dict() keys = ['trainval_im_names', 'gallery_im_names', 'q_im_names'] inds = [0] + nums inds = np.cumsum(inds) for i, k in enumerate(keys): split[k] = im_names[inds[i]:inds[i + 1]] save_pickle(split, train_test_split_file) print('Saving images done.') return split
def main(): cfg = Config() TVT, TMO = set_devices(cfg.sys_device_ids) ######### # Model # ######### model = Model(last_conv_stride=cfg.last_conv_stride) # Set eval mode. Force all BN layers to use global mean and variance, also disable dropout. model.eval() # Transfer Model to Specified Device. TMO([model]) ##################### # Load Model Weight # ##################### used_file = cfg.model_weight_file or cfg.ckpt_file loaded = torch.load(used_file, map_location=(lambda storage, loc: storage)) if cfg.model_weight_file == '': loaded = loaded['state_dicts'][0] load_state_dict(model, loaded) print('Loaded model weights from {}'.format(used_file)) ################### # Extract Feature # ################### im_dir = osp.expanduser('~/Dataset/market1501/Market-1501-v15.09.15/query') im_paths = get_im_names(im_dir, pattern='*.jpg', return_path=True, return_np=False) all_feat = [] for i, im_path in enumerate(im_paths): im = np.asarray(Image.open(im_path).convert('RGB')) im = pre_process_im(im, cfg) im = Variable(TVT(torch.from_numpy(im).float()), volatile=True) feat = model(im) feat = feat.data.cpu().numpy() all_feat.append(feat) if (i + 1) % 100 == 0: print('{}/{} images done'.format(i, len(im_paths))) all_feat = np.concatenate(all_feat) print('all_feat.shape:', all_feat.shape) all_feat = normalize(all_feat, axis=1)
def main(): cfg = Config() TVT, TMO = set_devices(cfg.sys_device_ids) ######### # Model # ######### model = Model(last_conv_stride=cfg.last_conv_stride) # Set eval mode. Force all BN layers to use global mean and variance, also disable dropout. model.eval() # Transfer Model to Specified Device. TMO([model]) ##################### # Load Model Weight # ##################### used_file = cfg.model_weight_file or cfg.ckpt_file loaded = torch.load(used_file, map_location=(lambda storage, loc: storage)) if cfg.model_weight_file == '': loaded = loaded['state_dicts'][0] load_state_dict(model, loaded) print('Loaded model weights from {}'.format(used_file)) ################### # Extract Feature # ################### im_dir = osp.expanduser('../../5Labeled Data/labeledNew') im_paths = get_im_names(im_dir, pattern='*.png', return_path=True, return_np=False) currentData = {} imagesKnown = set() with open('../../7Data Features/dataFeatures.json') as json_file: currentData = json.load(json_file) for image in currentData["images"]: imagesKnown.add(image["imageName"]) all_feat = [] for i, im_path in enumerate(im_paths): im = np.asarray(Image.open(im_path).convert('RGB')) im = pre_process_im(im, cfg) im = Variable(TVT(torch.from_numpy(im).float()), volatile=True) feat = model(im) feat = feat.data.cpu().numpy() all_feat.append(feat) if (i + 1) % 100 == 0: print('{}/{} images done'.format(i, len(im_paths))) all_feat = np.concatenate(all_feat) print('all_feat.shape:', all_feat.shape) all_feat = normalize(all_feat, axis=1) # You can save your im_paths and features, or do anything else ... for i, im_path in enumerate(im_paths): if (im_path in imagesKnown): print("image", im_path, "already exists") pass else: currentData['images'].append({ 'imageName': im_path, 'features': all_feat[i].tolist() }) if (i + 1) % 100 == 0: print('{}/{} images saved'.format(i, len(im_paths))) with open('../../7Data Features/dataFeatures.json', 'w') as outfile: json.dump(currentData, outfile)
def save_images(zip_file, save_dir=None, train_test_split_file=None): """Rename and move all used images to a directory.""" print("Extracting zip file") root = osp.dirname(osp.abspath(zip_file)) if save_dir is None: save_dir = root may_make_dir(osp.abspath(save_dir)) # with ZipFile(zip_file) as z: # z.extractall(path=save_dir) # print("Extracting zip file done") new_im_dir = osp.join(save_dir, 'images') may_make_dir(osp.abspath(new_im_dir)) # raw_dir = osp.join(save_dir, osp.basename(zip_file)[:-4]) raw_dir = save_dir im_paths = [] nums = [] im_paths_ = get_im_names(osp.join(raw_dir, 'bounding_box_train'), return_path=True, return_np=False) im_paths_.sort() im_paths += list(im_paths_) nums.append(len(im_paths_)) im_paths_ = get_im_names(osp.join(raw_dir, 'bounding_box_test'), return_path=True, return_np=False) im_paths_.sort() im_paths_ = [p for p in im_paths_ if not osp.basename(p).startswith('-1')] im_paths += list(im_paths_) nums.append(len(im_paths_)) im_paths_ = get_im_names(osp.join(raw_dir, 'query'), return_path=True, return_np=False) im_paths_.sort() im_paths += list(im_paths_) nums.append(len(im_paths_)) q_ids_cams = set([(parse_original_im_name(osp.basename(p), 'id'), parse_original_im_name(osp.basename(p), 'cam')) for p in im_paths_]) im_paths_ = get_im_names(osp.join(raw_dir, 'gt_bbox'), return_path=True, return_np=False) im_paths_.sort() # Only gather images for those ids and cams used in testing. im_paths_ = [ p for p in im_paths_ if (parse_original_im_name(osp.basename(p), 'id'), parse_original_im_name(osp.basename(p), 'cam')) in q_ids_cams ] im_paths += list(im_paths_) nums.append(len(im_paths_)) im_names = move_ims(im_paths, new_im_dir, parse_original_im_name, new_im_name_tmpl) split = dict() keys = [ 'trainval_im_names', 'gallery_im_names', 'q_im_names', 'mq_im_names' ] inds = [0] + nums inds = np.cumsum(np.array(inds)) for i, k in enumerate(keys): split[k] = im_names[inds[i]:inds[i + 1]] save_pickle(split, train_test_split_file) print('Saving images done.') return split