def calculate_loss(self, logits):
# ??class_pred?box_pred
self.box_preds = logits
# ?????example
results = tf.while_loop(
cond=self._one_example_cond,
body=self._one_example_body,
loop_vars=[tf.constant(0), self.batch_size,
tf.constant(0.0), tf.constant(0.0), tf.constant(0.0), tf.constant(0.0),
tf.constant(0.0), tf.constant(0.0), tf.constant(0.0),
tf.constant(0.0), tf.constant(0.0)])
coord_loss = results[2]
object_loss = results[3]
noobject_loss = results[4]
class_loss = results[5]
iou_value = results[6]
object_value = results[7]
anyobject_value = results[8]
recall_value = results[9]
class_value = results[10]
# ?????
coord_loss = coord_loss * self.coord_scale / self.batch_size
object_loss = object_loss * self.object_scale / self.batch_size
noobject_loss = noobject_loss * self.noobject_scale / self.batch_size
class_loss = class_loss * self.class_scale / self.batch_size
# ???
iou_value /= tf.reduce_sum(tf.cast(self.object_nums, tf.float32), axis=[0])
object_value /= tf.reduce_sum(tf.cast(self.object_nums, tf.float32), axis=[0])
anyobject_value /= (self.batch_size * self.cell_size * self.cell_size * self.n_boxes)
recall_value /= tf.reduce_sum(tf.cast(self.object_nums, tf.float32), axis=[0])
class_value /= tf.reduce_sum(tf.cast(self.object_nums, tf.float32), axis=[0])
return coord_loss, object_loss, noobject_loss, class_loss, \
iou_value, object_value, anyobject_value, recall_value, class_value
评论列表
文章目录