def __init__(self, im, init_rect, config=TrackerConfig(), gpu=True): self.gpu = gpu self.config = config self.net = DCFNet(config) self.net.load_param(config.feature_path) self.net.eval() if gpu: self.net.cuda() # confine results target_pos, target_sz = rect1_2_cxy_wh(init_rect) self.min_sz = np.maximum(config.min_scale_factor * target_sz, 4) self.max_sz = np.minimum(im.shape[:2], config.max_scale_factor * target_sz) # crop template window_sz = target_sz * (1 + config.padding) bbox = cxy_wh_2_bbox(target_pos, window_sz) patch = crop_chw(im, bbox, self.config.crop_sz) target = patch - config.net_average_image self.net.update(torch.Tensor(np.expand_dims(target, axis=0)).cuda()) self.target_pos, self.target_sz = target_pos, target_sz self.patch_crop = np.zeros( (config.num_scale, patch.shape[0], patch.shape[1], patch.shape[2]), np.float32) # buff
net.eval().cuda() speed = [] # loop videos for video_id, video in enumerate(videos): # run without resetting video_path_name = annos[video]['name'] init_rect = np.array(annos[video]['init_rect']).astype(np.float) image_files = [ join(base_path, video_path_name, 'img', im_f) for im_f in annos[video]['image_files'] ] n_images = len(image_files) tic = time.time() # time start target_pos, target_sz = rect1_2_cxy_wh( init_rect) # OTB label is 1-indexed im = cv2.imread(image_files[0]) # HxWxC # confine results min_sz = np.maximum(config.min_scale_factor * target_sz, 4) max_sz = np.minimum(im.shape[:2], config.max_scale_factor * target_sz) # crop template window_sz = target_sz * (1 + config.padding) bbox = cxy_wh_2_bbox(target_pos, window_sz) patch = crop_chw(im, bbox, config.crop_sz) target = patch - config.net_average_image net.update(torch.Tensor(np.expand_dims(target, axis=0)).cuda())