imageReal = data.perturbBG(opt,imageRealData) imageBGfake = data.perturbBG(opt,imageBGfakeData) pPertFG = opt.pertFG*tf.random_normal([opt.batchSize,opt.warpDim]) # ------ define GP and D ------ geometric = graph.geometric_multires discriminator = graph.discriminator # ------ geometric predictor ------ imageFGwarpAll,pAll,_ = geometric(opt,imageBGfake,imageFGfake,pPertFG) pWarp = pAll[-1] # ------ composite image ------ summaryImageTrain = [] summaryImageTest = [] summaryImageTrain.append(util.imageSummary(opt,imageReal,"TRAIN_real",opt.H,opt.W)) summaryImageTest.append(util.imageSummary(opt,imageReal,"TEST_real",opt.H,opt.W)) imageFGwarp = imageFGwarpAll[0] imageComp = graph.composite(opt,imageBGfake,imageFGwarp) summaryImageTrain.append(util.imageSummary(opt,imageComp,"TRAIN_compST{0}".format(0),opt.H,opt.W)) summaryImageTest.append(util.imageSummary(opt,imageComp,"TEST_compST{0}".format(0),opt.H,opt.W)) alpha = tf.random_uniform(shape=[opt.batchSize,1,1,1]) imageIntp = alpha*imageReal+(1-alpha)*imageComp # ------ discriminator ------ outComps,outIntps = [],[] outReal = discriminator(opt,imageReal) outComp = discriminator(opt,imageComp,reuse=True) outIntp = discriminator(opt,imageIntp,reuse=True) # ------ discriminator gradient ------ grad_D_fake = tf.gradients(outIntp,imageIntp)[0] grad_D_norm = tf.sqrt(tf.reduce_sum(grad_D_fake**2+1e-8,reduction_indices=[1,2,3])) grad_D_norm_mean = tf.reduce_mean(grad_D_norm) # ------ define loss (adversarial) ------ loss_D = tf.reduce_mean(outComp)-tf.reduce_mean(outReal)
imageBGreal = tf.placeholder(tf.float32, shape=[opt.batchSize, opt.H, opt.W, 3]) imageFGreal = tf.placeholder(tf.float32, shape=[opt.batchSize, opt.H, opt.W, 4]) PH = [imageBGreal, imageFGreal] # ------ generate perturbation ------ pPert = opt.homoPert * tf.random_normal([opt.batchSize, 8]) # ------ define GP and D ------ geometric = graph.geometric_multires # ------ geometric predictor ------ imageFGwarpAll, pAll, _ = geometric(opt, imageBGreal, imageFGreal, pPert) pWarp = pAll[-1] # ------ composite image ------ summaryImageTrain = [] summaryImageTest = [] imageReal = graph.composite(opt, imageBGreal, imageFGreal) summaryImageTrain.append( util.imageSummary(opt, imageReal, "TRAIN_real", opt.H, opt.W)) summaryImageTest.append( util.imageSummary(opt, imageReal, "TEST_real", opt.H, opt.W)) for l in range(opt.warpN + 1): imageFGwarp = imageFGwarpAll[l] imageComp = graph.composite(opt, imageBGreal, imageFGwarp) summaryImageTrain.append( util.imageSummary(opt, imageComp, "TRAIN_compST{0}".format(l), opt.H, opt.W)) summaryImageTest.append( util.imageSummary(opt, imageComp, "TEST_compST{0}".format(l), opt.H, opt.W)) # ------ define loss (L2) ------ pGT = tf.zeros_like(pPert)