def forward(self, y, true, it, writer=None): n = self.sizes[0] y_current = nn.functional.interpolate(y, self.proj_shapes[0], mode='area') current = self.init_op(y_current) curs = [] grads = [] fbpys = [] for i in range(len(self.sizes)): n = self.sizes[i] proj_shape = self.proj_shapes[i] if i < len(self.sizes)-1: y_current = nn.functional.interpolate(y, proj_shape, mode='area') else: y_current = y if i < 10: current = nn.functional.interpolate(current, (n, n), mode='bilinear') iteration = getattr(self, 'iteration_{}'.format(i)) current = iteration(current,curs,grads,fbpys, y_current,i) curs.append(current) else: current = nn.functional.interpolate(current, (n, n), mode='bilinear') iteration = getattr(self, 'iteration_{}'.format(i)) current = iteration(current,curs,grads,fbpys, y_current,i) if writer: util.summary_image(writer, 'iteration_{}'.format(i), current, it) return current, self.loss(current, true)
def summaries(writer, result, fbp, true, loss, it, do_print=False): """Save and print training and validation data to tensorboard""" residual = result - true squared_error = residual**2 mse = torch.mean(squared_error) maxval = torch.max(true) - torch.min(true) psnr = 20 * torch.log10(maxval) - 10 * torch.log10(mse) # ratio of mse to fbp mse relative = torch.mean((result - true)**2) / torch.mean((fbp - true)**2) ssi = ssim(result, true) ssi_fbp = ssim(fbp, true) # relative ssim relative_ssim = ssi / ssi_fbp if do_print: print(it, mse.item(), psnr.item(), relative.item(), ssi.item(), relative_ssim.item()) writer.add_scalar('loss', loss, it) writer.add_scalar('psnr', psnr, it) writer.add_scalar('relative', relative, it) writer.add_scalar('ssim', ssi, it) writer.add_scalar('relative ssim', relative_ssim, it) util.summary_image(writer, 'result', result, it) util.summary_image(writer, 'true', true, it)
def forward(self, y, true, it, writer=None): current = self.init_op(y) for i in range(self.niter): iteration = getattr(self, 'iteration_{}'.format(i)) current = iteration(current, y) if writer: util.summary_image(writer, 'iteration_{}'.format(i), current, it) return current, self.loss(current, true)
def summaries(writer, result, fbp, true, loss, it, do_print=False): residual = result - true squared_error = residual ** 2 mse = torch.mean(squared_error) maxval = torch.max(true) - torch.min(true) psnr = 20 * torch.log10(maxval) - 10 * torch.log10(mse) relative = torch.mean((result - true) ** 2) / torch.mean((fbp - true) ** 2) if do_print: print(it, mse.item(), psnr.item(), relative.item()) writer.add_scalar('loss', loss, it) writer.add_scalar('psnr', psnr, it) writer.add_scalar('relative', relative, it) util.summary_image(writer, 'result', result, it) util.summary_image(writer, 'true', true, it)