def get_label_function(self, sample_pos, sample_scale): # Generate label function train_y = TensorList() target_center_norm = (self.pos - sample_pos) / (self.img_support_sz * sample_scale) for sig, sz, ksz in zip(self.sigma, self.feature_sz, self.kernel_size): center = sz * target_center_norm + 0.5 * np.array( [(ksz[0] + 1) % 2, (ksz[1] + 1) % 2], 'float32') train_y.append(dcf.label_function_spatial(sz, sig, center)) return train_y
def init_iou_net(self): # Setup IoU net self.iou_predictor = self.params.features.get_unique_attribute( 'iou_predictor') # Get target boxes for the different augmentations self.iou_target_box = self.get_iounet_box(self.pos, self.target_sz, self.pos.round(), self.target_scale) target_boxes = TensorList() if self.params.iounet_augmentation: for T in self.transforms: if not isinstance( T, (augmentation.Identity, augmentation.Translation, augmentation.FlipHorizontal, augmentation.FlipVertical, augmentation.Blur)): break target_boxes.append(self.iou_target_box + np.array([T.shift[1], T.shift[0], 0, 0])) else: target_boxes.append(self.iou_target_box.copy()) target_boxes = np.concatenate(target_boxes.view(1, 4), 0) # Get iou features iou_backbone_features = self.get_iou_backbone_features() # Remove other augmentations such as rotation iou_backbone_features = TensorList( [x[:target_boxes.shape[0], ...] for x in iou_backbone_features]) # Extract target feat with fluid.dygraph.guard(): iou_backbone_features = iou_backbone_features.apply(n2p) target_boxes = n2p(target_boxes) target_feat = self.iou_predictor.get_filter( iou_backbone_features, target_boxes) self.target_feat = TensorList( [layers.reduce_mean(x, 0).numpy() for x in target_feat]) if getattr(self.params, 'iounet_not_use_reference', False): self.target_feat = TensorList([ np.full_like(tf, tf.norm() / tf.numel()) for tf in self.target_feat ])