def _draw_back_pane(self, pane): mode = None with self.state.lock: back_enabled = self.state.back_enabled back_mode = self.state.back_mode back_filt_mode = self.state.back_filt_mode state_layer = self.state.layer selected_unit = self.state.selected_unit back_what_to_disp = self.get_back_what_to_disp() if back_what_to_disp == 'disabled': pane.data[:] = to_255(self.settings.window_background) elif back_what_to_disp == 'stale': pane.data[:] = to_255(self.settings.stale_background) else: # One of the backprop modes is enabled and the back computation (gradient or deconv) is up to date grad_blob = self.net.blobs['data'].diff # Manually deprocess (skip mean subtraction and rescaling) #grad_img = self.net.deprocess('data', diff_blob) grad_blob = grad_blob[0] # bc01 -> c01 grad_blob = grad_blob.transpose((1, 2, 0)) # c01 -> 01c grad_img = grad_blob[:, :, self._net_channel_swap_inv] # e.g. BGR -> RGB # Mode-specific processing assert back_mode in ('grad', 'deconv') assert back_filt_mode in ('raw', 'gray', 'norm', 'normblur') if back_filt_mode == 'raw': grad_img = norm01c(grad_img, 0) elif back_filt_mode == 'gray': grad_img = grad_img.mean(axis=2) grad_img = norm01c(grad_img, 0) elif back_filt_mode == 'norm': grad_img = np.linalg.norm(grad_img, axis=2) grad_img = norm01(grad_img) else: grad_img = np.linalg.norm(grad_img, axis=2) cv2.GaussianBlur(grad_img, (0, 0), self.settings.caffevis_grad_norm_blur_radius, grad_img) grad_img = norm01(grad_img) # If necessary, re-promote from grayscale to color if len(grad_img.shape) == 2: grad_img = np.tile(grad_img[:, :, np.newaxis], 3) grad_img_resize = ensure_uint255_and_resize_to_fit( grad_img, pane.data.shape) pane.data[0:grad_img_resize.shape[0], 0:grad_img_resize.shape[1], :] = grad_img_resize
def _draw_back_pane(self, pane): mode = None with self.state.lock: back_enabled = self.state.back_enabled back_mode = self.state.back_mode back_filt_mode = self.state.back_filt_mode state_layer = self.state.layer selected_unit = self.state.selected_unit back_what_to_disp = self.get_back_what_to_disp() if back_what_to_disp == 'disabled': pane.data[:] = to_255(self.settings.window_background) elif back_what_to_disp == 'stale': pane.data[:] = to_255(self.settings.stale_background) else: # One of the backprop modes is enabled and the back computation (gradient or deconv) is up to date grad_blob = self.net.blobs['data'].diff # Manually deprocess (skip mean subtraction and rescaling) #grad_img = self.net.deprocess('data', diff_blob) grad_blob = grad_blob[0] # bc01 -> c01 grad_blob = grad_blob.transpose((1,2,0)) # c01 -> 01c grad_img = grad_blob[:, :, self._net_channel_swap_inv] # e.g. BGR -> RGB # Mode-specific processing assert back_mode in ('grad', 'deconv') assert back_filt_mode in ('raw', 'gray', 'norm', 'normblur') if back_filt_mode == 'raw': grad_img = norm01c(grad_img, 0) elif back_filt_mode == 'gray': grad_img = grad_img.mean(axis=2) grad_img = norm01c(grad_img, 0) elif back_filt_mode == 'norm': grad_img = np.linalg.norm(grad_img, axis=2) grad_img = norm01(grad_img) else: grad_img = np.linalg.norm(grad_img, axis=2) cv2.GaussianBlur(grad_img, (0,0), self.settings.caffevis_grad_norm_blur_radius, grad_img) grad_img = norm01(grad_img) # If necessary, re-promote from grayscale to color if len(grad_img.shape) == 2: grad_img = np.tile(grad_img[:,:,np.newaxis], 3) grad_img_resize = ensure_uint255_and_resize_to_fit(grad_img, pane.data.shape) pane.data[0:grad_img_resize.shape[0], 0:grad_img_resize.shape[1], :] = grad_img_resize
def _draw_back_pane(self, pane): mode = None with self.state.lock: back_enabled = self.state.back_enabled back_mode = self.state.back_mode back_filt_mode = self.state.back_filt_mode state_layer = self.state.layer selected_unit = self.state.selected_unit back_what_to_disp = self.get_back_what_to_disp() if back_what_to_disp == 'disabled': pane.data[:] = to_255(self.settings.window_background) elif back_what_to_disp == 'stale': pane.data[:] = to_255(self.settings.stale_background) else: # One of the backprop modes is enabled and the back computation (gradient or deconv) is up to date grad_img = self.my_net.get_input_gradient_as_image() # Mode-specific processing assert back_mode in ('grad', 'deconv') assert back_filt_mode in ('raw', 'gray', 'norm', 'normblur') if back_filt_mode == 'raw': grad_img = norm01c(grad_img, 0) elif back_filt_mode == 'gray': grad_img = grad_img.mean(axis=2) grad_img = norm01c(grad_img, 0) elif back_filt_mode == 'norm': grad_img = np.linalg.norm(grad_img, axis=2) grad_img = norm01(grad_img) else: grad_img = np.linalg.norm(grad_img, axis=2) cv2.GaussianBlur(grad_img, (0, 0), self.settings.caffevis_grad_norm_blur_radius, grad_img) grad_img = norm01(grad_img) # If necessary, re-promote from grayscale to color if len(grad_img.shape) == 2: grad_img = np.tile(grad_img[:, :, np.newaxis], 3) grad_img_resize = ensure_uint255_and_resize_to_fit( grad_img, pane.data.shape) pane.data[0:grad_img_resize.shape[0], 0:grad_img_resize.shape[1], :] = grad_img_resize
def save_caffe_image(img, filename, autoscale=True, autoscale_center=None): '''Takes an image in caffe format (01) or (c01, BGR) and saves it to a file''' if len(img.shape) == 2: # upsample grayscale 01 -> 01c img = np.tile(img[:, :, np.newaxis], (1, 1, 3)) else: img = img[::-1].transpose((1, 2, 0)) if autoscale_center is not None: img = norm01c(img, autoscale_center) elif autoscale: img = img.copy() img -= img.min() img *= 1.0 / (img.max() + 1e-10) skimage.io.imsave(filename, img)