Defined in tensorflow/contrib/metrics/python/ops/

See the guide: Metrics (contrib) > Metric Ops

Calculate per-step mean Intersection-Over-Union (mIOU).

Mean Intersection-Over-Union is a common evaluation metric for semantic image segmentation, which first computes the IOU for each semantic class and then computes the average over classes. IOU is defined as follows: IOU = true_positive / (true_positive + false_positive + false_negative). The predictions are accumulated in a confusion matrix, weighted by weights, and mIOU is then calculated from it.

For estimation of the metric over a stream of data, the function creates an update_op operation that updates these variables and returns the mean_iou.

If weights is None, weights default to 1. Use weights of 0 to mask values.


  • predictions: A Tensor of prediction results for semantic labels, whose shape is [batch size] and type int32 or int64. The tensor will be flattened, if its rank > 1.
  • labels: A Tensor of ground truth labels with shape [batch size] and of type int32 or int64. The tensor will be flattened, if its rank > 1.
  • num_classes: The possible number of labels the prediction task can have. This value must be provided, since a confusion matrix of dimension = [num_classes, num_classes] will be allocated.
  • weights: An optional Tensor whose shape is broadcastable to predictions.
  • metrics_collections: An optional list of collections that mean_iou should be added to.
  • updates_collections: An optional list of collections update_op should be added to.
  • name: An optional variable_scope name.


  • mean_iou: A Tensor representing the mean intersection-over-union.
  • update_op: An operation that increments the confusion matrix.


  • ValueError: If predictions and labels have mismatched shapes, or if weights is not None and its shape doesn't match predictions, or if either metrics_collections or updates_collections are not a list or tuple.