def forward(self, x, x_baseline=None, class_idx=None, retain_graph=False): if x_baseline is None: x_baseline = torch.zeros_like(x) else: x_baseline = x_baseline.cuda() assert x_baseline.size() == x.size() saliency_map = torch.zeros_like(x) # [1, 3, H, W] x_diff = x - x_baseline stdev = self.stdev_spread / (x_diff.max() - x_diff.min()) for alpha in torch.linspace(0., 1., self.n_steps): x_step = x_baseline + alpha * x_diff noise = torch.normal(mean=torch.zeros_like(x_step), std=stdev) x_step_plus_noise = x_step + noise logit = self.model(x_step_plus_noise) if class_idx is None: score = logit[:, logit.max(1)[-1]].squeeze() else: score = logit[:, class_idx].squeeze() self.model.zero_grad() score.backward(retain_graph=retain_graph) saliency_map += x_step_plus_noise.grad saliency_map = saliency_map / self.n_steps saliency_map = convert_to_gray(saliency_map) # [1, 1, H, W] saliency_map_min, saliency_map_max = saliency_map.min(), saliency_map.max() saliency_map = (saliency_map - saliency_map_min) / (saliency_map_max - saliency_map_min).data return saliency_map
def gray_preprocessing(args): images_paths = os.listdir(args.img_dir) for name in images_paths: image = Image.open(os.path.join(args.img_dir, name)) tf_image = tf.convert_to_tensor(np.array(image).astype(np.float32)) gray_image = utils.convert_to_gray(tf_image[None])[0] blurred = Image.fromarray(np.uint8(tf.Session().run(gray_image))) blurred.save(os.path.join(args.output_dir, name))
def forward(self, x, class_idx=None, retain_graph=False): x.requires_grad_() logit = self.model(x) if class_idx is None: score = logit[:, logit.max(1)[-1]].squeeze() else: score = logit[:, class_idx].squeeze() self.model.zero_grad() score.backward(retain_graph=retain_graph) saliency_map = x.grad # [1, 3, H, W] saliency_map = convert_to_gray(saliency_map.cpu().data) # [1, 1, H, W] saliency_map_min, saliency_map_max = saliency_map.min(), saliency_map.max() saliency_map = (saliency_map - saliency_map_min) / (saliency_map_max - saliency_map_min) return saliency_map
def prepare_frame(): frame = capturer.get_frame() if frame is not None: frame = flip_frame(frame) return convert_to_gray(frame)
def detect_face_in_frame(self, a_frame): a_frame = convert_to_gray(a_frame) a_frame = equalize(a_frame) faces_list = self.face_classifier.detect_multiscale(a_frame) return faces_list[0] if len(faces_list) == 1 else None