(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)
| 51 | X_feats, X2Y_feats, Y_feats, Y2X_feats, complete_X, incomplete_Y, Y2X2Y_feats, X2Y2X_feats, X2Y_code, Y2X_code, Y2X2Y_code |
| 52 | |
| 53 | def 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 |
nothing calls this directly
no outgoing calls
no test coverage detected