MCPcopy Create free account
hub / github.com/diviswen/Cycle4Completion / get_loss

Function get_loss

model_code.py:53–105  ·  view source on GitHub ↗
(pred_X, pred_Y, pred_Y2X2Y, pred_X2Y2X, X2Y_logits, Y_logits, Y2X_logits, X_logits, X_feats, X2Y_feats,\
             Y_feats, Y2X_feats, complete_X, incomplete_Y, gt_X, gt_Y, gt_GT, Y2X2Y_feats, X2Y2X_feats, X2Y_code, Y2X_code, Y2X2Y_code)

Source from the content-addressed store, hash-verified

51 X_feats, X2Y_feats, Y_feats, Y2X_feats, complete_X, incomplete_Y, Y2X2Y_feats, X2Y2X_feats, X2Y_code, Y2X_code, Y2X2Y_code
52
53def get_loss(pred_X, pred_Y, pred_Y2X2Y, pred_X2Y2X, X2Y_logits, Y_logits, Y2X_logits, X_logits, X_feats, X2Y_feats,\
54 Y_feats, Y2X_feats, complete_X, incomplete_Y, gt_X, gt_Y, gt_GT, Y2X2Y_feats, X2Y2X_feats, X2Y_code, Y2X_code, Y2X2Y_code):
55
56 batch_size = gt_X.get_shape()[0].value#
57
58 complete_CD = 2048*nu.chamfer(complete_X, gt_GT)
59 chamfer_loss_X_cycle = 2048 * nu.chamfer(pred_X2Y2X, gt_X)
60 chamfer_loss_Y_cycle = 2048 * nu.chamfer(pred_Y2X2Y, gt_Y)
61
62 chamfer_loss_partial_X2Y = 2048 * nu.chamfer_single_side(gt_X, complete_X)
63 chamfer_loss_partial_Y2X = 2048 * nu.chamfer_single_side(incomplete_Y, gt_Y)
64
65
66 #optimizing encoder and decoder
67 chamfer_loss_X = 2048 * nu.chamfer(pred_X, gt_X)
68 chamfer_loss_Y = 2048 * nu.chamfer(pred_Y, gt_Y)
69
70
71 #optimizing discrminator
72 D_loss_X = X_logits - Y2X_logits
73 D_loss_Y = Y_logits - X2Y_logits
74
75
76 epsilon = tf.random_uniform([], 0.0, 1.0)
77
78 x_hat = epsilon*X_feats +(1-epsilon)*Y2X_feats
79 d_hat = nu.create_discrminator(x_hat, name='X')
80 gradients = tf.gradients(d_hat, [x_hat])[0]
81
82 gradients = tf.reshape(gradients, shape=[batch_size, -1])
83 slopes = tf.sqrt(tf.reduce_sum(tf.square(gradients), axis=1))
84 gp_X = tf.reduce_mean(tf.square(slopes - 1)*10)
85
86 y_hat = epsilon*Y_feats +(1-epsilon)*X2Y_feats
87 d_hat = nu.create_discrminator(y_hat, name='Y')
88 gradients = tf.gradients(d_hat, [y_hat])[0]
89 gradients = tf.reshape(gradients, shape=[batch_size, -1])
90 slopes = tf.sqrt(tf.reduce_sum(tf.square(gradients), axis=1))
91 gp_Y = tf.reduce_mean(tf.square(slopes - 1)*10)
92
93 D_loss = D_loss_Y + D_loss_X + tf.minimum((gp_Y + gp_X),10e7)
94
95 #optimizing transferer
96 G_loss_X2Y = -D_loss_Y
97 G_loss_Y2X = -D_loss_X
98
99 code_loss = tf.reduce_mean(tf.square(Y2X_code - Y2X2Y_code))*100
100
101 ED_loss = chamfer_loss_X + chamfer_loss_Y
102 Trans_loss = (G_loss_X2Y + G_loss_Y2X)*.1 + (chamfer_loss_partial_X2Y + chamfer_loss_partial_Y2X)*1.0 + (chamfer_loss_Y_cycle + chamfer_loss_X_cycle)*0.01 + code_loss
103
104 return ED_loss, Trans_loss, D_loss, chamfer_loss_X, chamfer_loss_Y, chamfer_loss_X_cycle, chamfer_loss_Y_cycle,\
105 D_loss_X, D_loss_Y, complete_CD, chamfer_loss_partial_X2Y, chamfer_loss_partial_Y2X, code_loss
106

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected