def test_sample(sample, compute_metrics=True): model.eval() imgL, imgR, disp_gt = sample['left'], sample['right'], sample['disparity'] imgL = imgL.cuda() imgR = imgR.cuda() disp_gt = disp_gt.cuda() disp_ests = model(imgL, imgR) mask = (disp_gt < args.maxdisp) & (disp_gt > 0) loss = model_loss(disp_ests, disp_gt, mask) scalar_outputs = {"loss": loss} image_outputs = {"disp_est": disp_ests, "disp_gt": disp_gt, "imgL": imgL, "imgR": imgR} scalar_outputs["D1"] = [D1_metric(disp_est, disp_gt, mask) for disp_est in disp_ests] scalar_outputs["EPE"] = [EPE_metric(disp_est, disp_gt, mask) for disp_est in disp_ests] scalar_outputs["Thres1"] = [Thres_metric(disp_est, disp_gt, mask, 1.0) for disp_est in disp_ests] scalar_outputs["Thres2"] = [Thres_metric(disp_est, disp_gt, mask, 2.0) for disp_est in disp_ests] scalar_outputs["Thres3"] = [Thres_metric(disp_est, disp_gt, mask, 3.0) for disp_est in disp_ests] if compute_metrics: image_outputs["errormap"] = [disp_error_image_func()(disp_est, disp_gt) for disp_est in disp_ests] return tensor2float(loss), tensor2float(scalar_outputs), image_outputs
def train_sample(sample, compute_metrics=False): model.train() imgL, imgR, disp_gt = sample['left'], sample['right'], sample['disparity'] imgL = imgL.cuda() imgR = imgR.cuda() disp_gt = disp_gt.cuda() optimizer.zero_grad() disp_ests = model(imgL, imgR) mask = (disp_gt < args.maxdisp) & (disp_gt > 0) loss = model_loss(disp_ests, disp_gt, mask) scalar_outputs = {"loss": loss} image_outputs = {"disp_est": disp_ests, "disp_gt": disp_gt, "imgL": imgL, "imgR": imgR} if compute_metrics: with torch.no_grad(): image_outputs["errormap"] = [disp_error_image_func()(disp_est, disp_gt) for disp_est in disp_ests] scalar_outputs["EPE"] = [EPE_metric(disp_est, disp_gt, mask) for disp_est in disp_ests] scalar_outputs["D1"] = [D1_metric(disp_est, disp_gt, mask) for disp_est in disp_ests] # scalar_outputs["Thres1"] = [Thres_metric(disp_est, disp_gt, mask, 1.0) for disp_est in disp_ests] # scalar_outputs["Thres2"] = [Thres_metric(disp_est, disp_gt, mask, 2.0) for disp_est in disp_ests] # scalar_outputs["Thres3"] = [Thres_metric(disp_est, disp_gt, mask, 3.0) for disp_est in disp_ests] loss.backward() optimizer.step() return tensor2float(loss), tensor2float(scalar_outputs), image_outputs
# 辞書型変数にまとめる dataloaders_dict = {"train": train_dataloader, "val": val_dataloader} # 動作の確認 batch_iterator = iter(dataloaders_dict["val"]) # イタレータに変換 images, targets = next(batch_iterator) # 1番目の要素を取り出す print(images.size()) print("batch len is ", len(targets)) print(targets[0].shape) # ミニバッチのサイズのリスト、各要素は[n, 5]、nは物体数 # set model model = fc_model([400, 200, 100, 50, 100, 200, 300, 400]) print(model) # define loss criterion = model_loss() # define optimizer. use SGD here. optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=0.9, weight_decay=0.0001) ######### start training ########## # enable GPUs if any. device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") torch.backends.cudnn.benchmark = True model.to(device) model.train()