예제 #1
0
		lrD = opt.lrD*opt.lrDdecay**(i//opt.lrDstep)
		# make training batch
		batch = data.makeBatch(opt,trainData,PH)
		batch[lrD_PH] = lrD
		# update discriminator
		runList = [optimD,loss_D,grad_D_norm_mean]
		for u in range(opt.updateD):
			_,ld,gdn = sess.run(runList,feed_dict=batch)
		if (i+1)%10==0:
			print("it.{0}/{1}  lr={3}(GP),{4}(D)  loss={5}(GP),{6}(D)  norm={7}  time={2}"
				.format(util.toCyan("{0}".format(i+1)),
						opt.toIt,
						util.toGreen("{0:.2f}".format(time.time()-timeStart)),
						util.toYellow("X"),
						util.toYellow("{0:.0e}".format(lrD)),
						util.toRed("X"),
						util.toRed("{0:.4f}".format(ld)),
						util.toBlue("{0:.4f}".format(gdn))))
		# if (i+1)%20==0:
		# 	runList = [summaryLossTrain,summaryGradTrain]
		# 	sl,sg = sess.run(runList,feed_dict=batch)
		# 	summaryWriter.add_summary(sl,i+1)
		# 	summaryWriter.add_summary(sg,i+1)
		# if (i+1)%200==0:
		# 	si = sess.run(summaryImageTrain,feed_dict=batch)
		# 	summaryWriter.add_summary(si,i+1)
		# if (i+1)%500==0:
		# 	# run on test set
		# 	batch = data.makeBatch(opt,testData,PH)
		# 	si = sess.run(summaryImageTest,feed_dict=batch)
		# 	summaryWriter.add_summary(si,i+1)
예제 #2
0
        for i in range(c * opt.itPerChunk, (c + 1) * opt.itPerChunk):
            lr = opt.lr * opt.lrDecay**(i // opt.lrStep)
            # make training batch
            batch = data.makeBatch(opt, dataloader, PH)
            batch[lr_PH] = lr
            # run one step
            runList = [optim, loss, loss_depth, loss_mask, maskLogit]
            _, l, ld, lm, ml = sess.run(runList, feed_dict=batch)
            if (i + 1) % 20 == 0:
                print(
                    "it. {0}/{1}, lr={2}, loss={4} ({5},{6}), time={3}".format(
                        util.toCyan("{0}".format(i + 1)), opt.toIt,
                        util.toYellow("{0:.0e}".format(lr)),
                        util.toGreen("{0:.2f}".format(time.time() -
                                                      timeStart)),
                        util.toRed("{0:.2f}".format(l)),
                        util.toRed("{0:.2f}".format(ld)),
                        util.toRed("{0:.2f}".format(lm))))
            if (i + 1) % 100 == 0:
                summaryWriter.add_summary(
                    sess.run(summaryLoss, feed_dict=batch), i + 1)
            if (i + 1) % 500 == 0:
                summaryWriter.add_summary(
                    sess.run(summaryImage, feed_dict=batch), i + 1)
            if (i + 1) % 2000 == 0:
                util.saveModel(opt, sess, saver, i + 1)
                print(
                    util.toGreen("model saved: {0}/{1}, it.{2}".format(
                        opt.group, opt.model, i + 1)))
        dataloader.thread.join()
    # training loop
    for i in range(opt.fromIt, opt.toIt):
        lrGP = opt.lrGP * opt.lrGPdecay**(i // opt.lrGPstep)
        # make training batch
        batch = data.makeBatch_homo(opt, trainData, PH)
        batch[lrGP_PH] = lrGP
        # update geometric predictor
        runList = [optimGP, loss_GP, summaryLossTrain]
        _, lg, sl = sess.run(runList, feed_dict=batch)
        if (i + 1) % 20 == 0:
            print("it.{0}/{1} lr={3} loss={4} time={2}".format(
                util.toCyan("{0}".format(i + 1)), opt.toIt,
                util.toGreen("{0:.2f}".format(time.time() - timeStart)),
                util.toYellow("{0:.0e}".format(lrGP)),
                util.toRed("{0:.4f}".format(lg))))
        if (i + 1) % 50 == 0:
            summaryWriter.add_summary(sl, i + 1)
        if (i + 1) % 1000 == 0:
            si = sess.run(summaryImageTrain, feed_dict=batch)
            summaryWriter.add_summary(si, i + 1)
        if (i + 1) % 2000 == 0:
            # run on test set
            batch = data.makeBatch_homo(opt, testData, PH)
            runList = [summaryLossTest, summaryImageTest]
            sl, si = sess.run(runList, feed_dict=batch)
            summaryWriter.add_summary(sl, i + 1)
            summaryWriter.add_summary(si, i + 1)
        if (i + 1) % 5000 == 0:
            # save model
            util.saveModel(opt, sess, saver_GP, "GP", i + 1)
예제 #4
0
        imageWarpAll = geometric(
            opt, image, pInit) if opt.netType == "IC-STN" else geometric(
                opt, imagePert)
        imageWarp = imageWarpAll[-1]
        output = classifier(opt, imageWarp)
        train_loss = loss(output, label)
        train_loss.backward()
        # run one step
        optim.step()
        if (i + 1) % 100 == 0:
            print("it. {0}/{1}  lr={3}(GP),{4}(C), loss={5}, time={2}".format(
                util.toCyan("{0}".format(i + 1)), opt.toIt,
                util.toGreen("{0:.2f}".format(time.time() - timeStart)),
                util.toYellow("{0:.0e}".format(lrGP)),
                util.toYellow("{0:.0e}".format(lrC)),
                util.toRed("{0:.4f}".format(train_loss))))
        if (i + 1) % 200 == 0: vis.trainLoss(opt, i + 1, train_loss)
        if (i + 1) % 1000 == 0:
            # evaluate on test set
            testAcc, testMean, testVar = data.evalTest(opt, testData,
                                                       geometric, classifier)
            testError = (1 - testAcc) * 100
            vis.testLoss(opt, i + 1, testError)
            if opt.netType == "STN" or opt.netType == "IC-STN":
                vis.meanVar(opt, testMean, testVar)
        if (i + 1) % 10000 == 0:
            util.saveModel(opt, geometric, classifier, i + 1)
            print(
                util.toGreen("model saved: {0}/{1}, it.{2}".format(
                    opt.group, opt.model, i + 1)))
            opt.category, CAD))
        Vgt = np.concatenate([obj["V"], obj["Vd"]], axis=0)
        VgtN = len(Vgt)
        # load prediction
        Vpred24 = scipy.io.loadmat("results_{0}/{1}/{2}.mat".format(
            opt.group, opt.load, CAD))["pointcloud"][:, 0]
        assert (len(Vpred24) == opt.inputViewN)

        for a in range(opt.inputViewN):
            Vpred = Vpred24[a]
            VpredN = len(Vpred)
            # rotate CAD model to be in consistent coordinates
            Vpred[:, 1], Vpred[:, 2] = Vpred[:, 2], -Vpred[:, 1]
            # compute test error in both directions
            pred2GT_all[m, a] = computeTestError(Vpred, Vgt, type="pred->GT")
            GT2pred_all[m, a] = computeTestError(Vgt, Vpred, type="GT->pred")

        print("{0}/{1} {2}: {3}(pred->GT),{4}(GT->pred), time={5}".format(
            util.toCyan("{0}".format(m + 1)), util.toCyan("{0}".format(CADN)),
            CAD, util.toRed("{0:.4f}".format(pred2GT_all[m].mean() * 100)),
            util.toRed("{0:.4f}".format(GT2pred_all[m].mean() * 100)),
            util.toGreen("{0:.2f}".format(time.time() - timeStart))))

    scipy.io.savemat(
        "results_{0}/{1}/testerror.mat".format(opt.group, opt.load), {
            "pred2GT": pred2GT_all,
            "GT2pred": GT2pred_all
        })

print(util.toYellow("======= EVALUATION DONE ======="))
예제 #6
0
        imageWarpAll = geometric(
            opt, image, pInit) if opt.netType == "IC-STN" else geometric(
                opt, imagePert)
        imageWarp = imageWarpAll[-1]
        output = classifier(opt, imageWarp)
        train_loss = loss(output, label)
        train_loss.backward()
        # run one step
        optim.step()
        if (i + 1) % 100 == 0:
            print("it. {0}/{1}  lr={3}(GP),{4}(C), loss={5}, time={2}".format(
                util.toCyan("{0}".format(i + 1)), opt.toIt,
                util.toGreen("{0:.2f}".format(time.time() - timeStart)),
                util.toYellow("{0:.0e}".format(lrGP)),
                util.toYellow("{0:.0e}".format(lrC)),
                util.toRed("{0:.4f}".format(train_loss.data[0]))))
        if (i + 1) % 200 == 0: vis.trainLoss(opt, i + 1, train_loss)
        if (i + 1) % 1000 == 0:
            # evaluate on test set
            testAcc, testMean, testVar = data.evalTest(opt, testData,
                                                       geometric, classifier)
            testError = (1 - testAcc) * 100
            vis.testLoss(opt, i + 1, testError)
            if opt.netType == "STN" or opt.netType == "IC-STN":
                vis.meanVar(opt, testMean, testVar)
        if (i + 1) % 10000 == 0:
            util.saveModel(opt, geometric, classifier, i + 1)
            print(
                util.toGreen("model saved: {0}/{1}, it.{2}".format(
                    opt.group, opt.model, i + 1)))