def _draw_batch_preds(harn, batch, outputs, lim=16): """ Example: >>> # xdoctest: +REQUIRES(--slow) >>> kw = {'workers': 0, 'xpu': 'cpu', 'batch_size': 8} >>> harn = setup_harn(cmdline=False, **kw).initialize() >>> batch = harn._demo_batch(tag='train') >>> outputs, loss_parts = harn.run_batch(batch) >>> toshow = harn._draw_batch_preds(batch, outputs) >>> # xdoctest: +REQUIRES(--show) >>> import kwplot >>> kwplot.autompl() >>> kwplot.imshow(toshow) """ import cv2 im = batch['im'].data.cpu().numpy() class_true = batch['class_idxs'].data.cpu().numpy() class_pred = outputs['class_probs'].data.cpu().numpy().argmax(axis=1) batch_imgs = [] for bx in range(min(len(class_true), lim)): orig_img = im[bx].transpose(1, 2, 0) out_size = class_pred[bx].shape[::-1] orig_img = cv2.resize(orig_img, tuple(map(int, out_size))) orig_img = kwimage.ensure_alpha_channel(orig_img) pred_heatmap = kwimage.Heatmap( class_idx=class_pred[bx], classes=harn.classes ) true_heatmap = kwimage.Heatmap( class_idx=class_true[bx], classes=harn.classes ) # TODO: scale up to original image size pred_img = pred_heatmap.draw_on(orig_img, channel='idx', with_alpha=.5) true_img = true_heatmap.draw_on(orig_img, channel='idx', with_alpha=.5) true_img = kwimage.ensure_uint255(true_img) pred_img = kwimage.ensure_uint255(pred_img) true_img = kwimage.draw_text_on_image( true_img, 'true', org=(0, 0), valign='top', color='blue') pred_img = kwimage.draw_text_on_image( pred_img, 'pred', org=(0, 0), valign='top', color='blue') item_img = kwimage.stack_images([pred_img, true_img], axis=1) batch_imgs.append(item_img) toshow = kwimage.stack_images_grid(batch_imgs, chunksize=2, overlap=-32) return toshow
def __getitem__(self, index): import kwimage # Load sample image and category sample = self.sampler.load_positive(index, with_annots=False) image = kwimage.atleast_3channels(sample['im'])[:, :, 0:3] target = sample['tr'] image = kwimage.ensure_uint255(image) if self.augmenter is not None: det = self.augmenter.to_deterministic() image = det.augment_image(image) # Resize to input dimensinos if self.input_dims is not None: dsize = tuple(self.input_dims[::-1]) image = kwimage.imresize(image, dsize=dsize, letterbox=True) class_id_to_idx = self.sampler.classes.id_to_idx cid = target['category_id'] cidx = class_id_to_idx[cid] im_chw = image.transpose(2, 0, 1) / 255.0 inputs = { 'rgb': torch.FloatTensor(im_chw), } labels = { 'class_idxs': cidx, } batch = { 'inputs': inputs, 'labels': labels, } return batch
fpath = ub.grabdata('https://i.redd.it/ywip9sbwysy71.jpg') data = kwimage.imread(fpath) subdata = data[242:-22, 22:300] img = subdata inty = integrate.cumtrapz(img, axis=0) intx = integrate.cumtrapz(img, axis=1) dery = np.gradient(img, axis=0) derx = np.gradient(img, axis=1) der_canvas = kwarray.normalize(kwimage.stack_images([dery, derx], axis=0)) int_canvas = kwarray.normalize(kwimage.stack_images([inty, intx], axis=0)) der_canvas = kwimage.ensure_uint255(der_canvas) int_canvas = kwimage.ensure_uint255(int_canvas) der_canvas = kwimage.draw_header_text(der_canvas, 'derivative', color='white') int_canvas = kwimage.draw_header_text(int_canvas, 'antiderivative', color='white') canvas = kwimage.stack_images([der_canvas, int_canvas], axis=1) # kwimage.imwrite('ftfy.jpg', canvas) kwplot.autompl() kwplot.imshow(canvas)