in 04_detect_segment/utils_box.py [0:0]
def batch_mean(ious):
"""Computes the average IOU across a batch of IOUs
IOUs of value 1 mean that the network correctly detected nothing when there was
nothing to detect. To compute the average IOU, 1 values are eliminated. The result
is the average IOU across all instances where either something was detected or
there was something to detect. In the rare case where the result would be 0/0,
the return value is 1 which is not really correct but should be rare and offset
a further average of batch_mean() results only a little.
Args:
ious: shape[batch]
Returns:
mean IOU
"""
correct_non_detections = tf.equal(ious, 1.0)
other_detections = tf.logical_not(correct_non_detections)
n = tf.reduce_sum(tf.cast(other_detections, tf.float32))
m = tf.reduce_sum(tf.where(correct_non_detections, tf.zeros_like(ious), ious))
safe_n = tf.where(tf.equal(n, 0.0), tf.ones_like(n), n)
safe_m = tf.where(tf.equal(n, 0.0), tf.ones_like(m), m)
return safe_m/safe_n