def valid(net, optimizer, valid_loader, use_lovasz=False, save_imgs=False, fold_num=0): net.eval() # keep track of losses val_ious = [] val_iter_loss = 0. # no gradients during validation with torch.no_grad(): for i, data in enumerate(valid_loader): valid_imgs = data['img'].to(device) valid_msks = data['msk'].to(device) valid_msk_bool = data['has_msk'].float().to(device) # get predictions msk_vpreds, bool_vpreds = net(valid_imgs) msk_blend_vpreds = msk_vpreds * bool_vpreds.view( valid_imgs.size(0), 1, 1, 1) if save_imgs: img_grid = vsn.utils.make_grid(valid_imgs, normalize=True) msk_grid = vsn.utils.make_grid(msk_vpreds) vsn.utils.save_image( img_grid, '../imgs/valid_imgs_fold-{}.png'.format(fold_num)) vsn.utils.save_image( msk_grid, '../imgs/valid_msks_fold-{}.png'.format(fold_num)) # calculate loss if use_lovasz: vloss = L.lovasz_hinge(msk_vpreds, valid_msks) #vloss += focal_loss(msk_vpreds, valid_msks) #vloss -= dice(msk_vpreds.sigmoid(), valid_msks) else: vloss = focal_loss(msk_vpreds, valid_msks) vloss += L.lovasz_hinge(msk_vpreds, valid_msks) #vloss -= dice(msk_vpreds.sigmoid(), valid_msks) vloss += args.lambda_bool * bce(bool_vpreds, valid_msk_bool.view(-1, 1)) vloss += args.lambda_bool * focal_loss(msk_blend_vpreds, valid_msks) #vloss += args.lambda_dice * dice(msk_vpreds.sigmoid(), valid_msks) # get validation stats val_iter_loss += vloss.item() val_ious.append( get_iou_vector( valid_msks.cpu().numpy()[:, :, 13:114, 13:114], msk_vpreds.sigmoid().cpu().numpy()[:, :, 13:114, 13:114])) epoch_vloss = val_iter_loss / (len(valid_loader.dataset) / args.batch_size) print('Avg Eval Loss: {:.4}, Avg IOU: {:.4}'.format( epoch_vloss, np.mean(val_ious))) return epoch_vloss, np.mean(val_ious)
def valid(net, optimizer, valid_loader, mtype='student', use_lovasz=False): net.eval() # keep track of losses val_ious = [] val_iter_loss = 0. # no gradients during validation with torch.no_grad(): for i, data in enumerate(valid_loader): valid_imgs = data['img'].cuda() valid_msks = data['msk'].cuda() valid_msk_bool = data['has_msk'].float().cuda() # get predictions msk_vpreds, bool_v = net(valid_imgs) # calculate loss if use_lovasz: vloss = L.lovasz_hinge(msk_vpreds, valid_msks) else: vloss = focal_loss(msk_vpreds, valid_msks) vloss += L.lovasz_hinge(msk_vpreds, valid_msks) vloss += bce(bool_v, valid_msk_bool.view(-1, 1)) # get validation stats val_iter_loss += vloss.item() val_ious.append( get_iou_vector( valid_msks.cpu().numpy()[:, :, 13:114, 13:114], msk_vpreds.sigmoid().cpu().numpy()[:, :, 13:114, 13:114])) epoch_vloss = val_iter_loss / (len(valid_loader.dataset) / args.batch_size) print('{} Avg Eval Loss: {:.4}, Avg IOU: {:.4}'.format( mtype, epoch_vloss, np.mean(val_ious))) return epoch_vloss, np.mean(val_ious)
def valid(net, optimizer, valid_loader, save_imgs=False, fold_num=0): net.eval() # keep track of losses val_ious = [] val_iter_loss = 0. # no gradients during validation with torch.no_grad(): for i, data in enumerate(valid_loader): valid_imgs = data['img'].to(device) valid_msks = data['msk'] #valid_msks_half = data['msk_half'].to(device) #valid_msks_qrtr = data['msk_qrtr'].to(device) valid_msk_bool = data['has_msk'].to(device) # get predictions msk_vpreds = net(valid_imgs) # calculate loss # main mask loss vloss = focal_loss(msk_vpreds[0], valid_msks[0].to(device)) vloss += L.lovasz_hinge(msk_vpreds[0], valid_msks[0].to(device)) # aux mask losses for j in range(len(valid_msks)): #print(msk_preds[i+1].size(), msks[i].size()) vloss += 0.1 * focal_loss( msk_vpreds[j + 1][valid_msk_bool], valid_msks[j][valid_msk_bool].to(device)) vloss += 0.1 * L.lovasz_hinge( msk_vpreds[j + 1][valid_msk_bool], valid_msks[j][valid_msk_bool].to(device)) # binary loss vloss += 0.05 * bce(msk_vpreds[-1], valid_msk_bool.float().view(-1, 1)) # get validation stats val_iter_loss += vloss.item() val_ious.append( get_iou_vector( valid_msks[0].cpu().numpy()[:, :, 13:114, 13:114], msk_vpreds[0].sigmoid().cpu().numpy()[:, :, 13:114, 13:114])) epoch_vloss = val_iter_loss / (len(valid_loader.dataset) / args.batch_size) print('Avg Eval Loss: {:.4}, Avg IOU: {:.4}'.format( epoch_vloss, np.mean(val_ious))) return epoch_vloss, np.mean(val_ious)