def valid(model, device, dataloader): sigmod = nn.Sigmoid() pbar = tqdm(enumerate(dataloader), total=len(dataloader)) ajiMeanList = [] ajiList = [] for idx, (images, labels, bounds) in pbar: images = images.float().to(device) sout, sout_0, sout_1, sout_2, sout_3, cout, cout_0, cout_1, cout_2, cout_3 = model( images) # 计算损失函数 # 计算aji # print('输出图片的大小: ',sout.shape) for index in range(sout.shape[0]): pred_sout = sigmod(sout[index][0]).cpu().data.numpy() pred_cout = sigmod(cout[index][0]).cpu().data.numpy() gt_label0 = labels[index][0] # 格式化label gt_label0[gt_label0 != 0] = 1 # 后处理图像并且计算值 # 这个是TAFE需要进行的操作 postProcImg = post_proc(pred_sout - pred_cout, post_dilation_iter=2) # 解决一些训练的时候产生的错误 if postProcImg is not None: aji = get_fast_aji(remap_label(gt_label0), remap_label(postProcImg)) print(aji) ajiList.append(aji) # 全部计算完成之后计算一次数据 ajiArray = np.array(ajiList) ajiMean = np.mean(ajiArray) pbar.set_description(f'valid: ----ajiMean---- {ajiMean}') ajiMeanList.append(ajiMean) return ajiMeanList
ajis = [] for i, gt in enumerate(gts): spred = np.zeros(gt.shape, dtype=np.uint16) for isz, cur_sz in enumerate(size_list): pred_dir = os.path.join( pred_root_dir, 'noaug_nodrop_' + losstype + '_iouthsp' + str(iou_ths) + '_dilation_' + str(idilation) + '_sz' + cur_sz + '_ds0_dc2' + '_wtta', 'rnd_0', 'pred_res') dmat = scio.loadmat(os.path.join(pred_dir, str(i) + '.mat')) s = dmat['instance'].astype(np.uint16) s_mask = np.logical_and(spred == 0, s > 0) max_intance_id = spred.max() s[s_mask] += max_intance_id spred[s_mask] = s[s_mask] #spred = s spred = remap_label(spred) gt = remap_label(gt) aji = get_fast_aji(gt, spred) print(i + 1, aji) ajis.append(aji) if if_save: save_dir = os.path.join(pred_root_dir, 'final_res') confirm_loc(save_dir) scio.savemat(os.path.join(save_dir, str(i) + '.mat'), { 'instance': spred, 'gt': gt }) avg_aji = np.mean(ajis) print(avg_aji)
net_val_dir = '/data0/cong/workplace/kumar_5fold/val/baseline_4fold_epoch600' gts = np.load('/home/cong/workplace/kumar/gt.npy').astype(np.uint16) for itrain in range(ntrain): ajis_allcp = [] pred_dir = os.path.join(net_val_dir, 'rnd_' + str(itrain)) for i_cp in range(save_step, max_epoch + 1, save_step): ajis = [] for i in kfold_val_idx[itrain]: dmat = scio.loadmat( os.path.join(pred_dir, 'snapshot_' + str(i_cp), str(i) + '.mat')) s = dmat['s'] c = dmat['c'] if len(s.shape) > 2: s = np.reshape(s, [s.shape[1], s.shape[2]]) if len(c.shape) > 2: c = np.reshape(c, [c.shape[1], c.shape[2]]) lbl = post_proc(s - c, post_dilation_iter=2).astype(np.uint16) aji = get_fast_aji(remap_label(gts[i]), remap_label(lbl)) #print(i, aji) ajis.append(aji) avg_aji = np.array(ajis).mean() ajis_allcp.append(avg_aji) print('Itrain {0:d}: Validation AJI of snapshot {1:d}: {2:.3f}'.format( itrain, i_cp, avg_aji)) maxaji_allcp = np.array(ajis_allcp).max() icp = np.array(ajis_allcp).argmax() np.save(os.path.join(pred_dir, 'val_aji.npy'), np.array(ajis_allcp)) print('Itrain {0:d}: the max validation AJI {1:.3f} in {2:d} snapshot'. format(itrain, maxaji_allcp, icp))
dir_checkpoint = './weight/noaug_nodrop_focalloss_iouthsp5_dilation_2_sz' + str( cur_sz) + '_ds0_dc2_ifold' + str(ifold) + '/rnd_0/' snapshot_list = glob.glob(dir_checkpoint + '*.pth') for isnapshot_name in snapshot_list: isnapshot = int( isnapshot_name.split('/')[-1].split('.')[0].split('_')[-1]) # if isnapshot <= 10: # continue val_pred_filefold = './val/noaug_nodrop_focalloss_iouthsp5_dilation_2_sz' + str( cur_sz) + '_ds0_dc2_ifold' + str( ifold) + '_wtta/rnd_0/snapshot_' + str(isnapshot) ajis = [] for i_data in valset[0]: pred_dmat = scio.loadmat( os.path.join(val_pred_filefold, str(i_data) + '.mat')) pred_lbl_map = pred_dmat['instance'].copy() if len(np.unique(pred_lbl_map[pred_lbl_map > 0])) >= 1: pred_lbl_map = remap_label(pred_lbl_map) aji = get_fast_aji(remap_label(gts[i_data]), pred_lbl_map) ajis.append(aji) avg_aji = np.mean(ajis) if avg_aji >= cur_bset_aji: cur_bset_aji = avg_aji cur_best_aji_isnapshot = isnapshot info2print = 'Size: {:s}, snapshot: {:d}, cur aji: {:.5f}, best aji: {:.5f} in isnapshot: {:d}'.format( cur_sz, isnapshot, avg_aji, cur_bset_aji, cur_best_aji_isnapshot) print(info2print) f.write(info2print + '\n')
for i in valset: lbl = None for cursz in [48, 176]: dir_savefile = './val/noaug_nodrop_bceloss_iouthsp' + 'ths' + str( ths) + '_dilation_' + str(dilation_rate) + '_sz' + str( cursz) + '_ds' + str(dilation_s) + '_dc' + str( dilation_c) + '_wtta/rnd_' + str(irnd) + '/' dmat = scio.loadmat( os.path.join(dir_savefile, 'snapshot_' + str(i_cp), str(i) + '.mat')) if lbl is None: lbl = dmat['instance'] else: lbl_tmp = lbl.copy() max_num = instance_tmp.max() lbl[instance_tmp == 0] = dmat['instance'][lbl_tmp == 0] + max_num lbl = remap_label(lbl.astype(np.uint16)) aji = get_fast_aji(remap_label(gts[i]), remap_label(lbl)) #print(i, aji) ajis.append(aji) avg_aji = np.array(ajis).mean() ajis_allcp.append(avg_aji) print('Itrain {0:d}: Validation AJI of snapshot {1:d}: {2:.3f}'.format( itrain, i_cp, avg_aji)) maxaji_allcp = np.array(ajis_allcp).max() icp = np.array(ajis_allcp).argmax() np.save(os.path.join(pred_dir, 'val_aji.npy'), np.array(ajis_allcp)) print('Itrain {0:d}: the max validation AJI {1:.3f} in {2:d} snapshot'.format( itrain, maxaji_allcp, icp))