mAP IoU Precision Sweep
SkillDev toolsCompute mean Average Precision by sweeping IoU thresholds from 0.5 to 0.95 on RLE-encoded instance masks using pycocotools
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the mAP IoU Precision Sweep skill
What this skill tells your AI
The instructions your AI receives, as published by wenmin-wu/ds-skills in skills/cv/map-iou-precision-sweep/SKILL.md and read by ahel’s review.
Overview
The standard COCO-style mAP for instance segmentation averages precision across IoU thresholds [0.5, 0.55, ..., 0.95]. This implementation uses pycocotools mask_util.iou for fast RLE-based IoU computation, then sweeps thresholds to compute TP/FP/FN counts and average precision. Essential for offline evaluation of Mask R-CNN, Detectron2, or MMDetection outputs.
Quick Start
import numpy as np
from pycocotools import mask as mask_util
def precision_at(threshold, iou_matrix):
matches = iou_matrix > threshold
tp = np.sum(np.sum(matches, axis=1) == 1)
fp = np.sum(np.sum(matches, axis=0) == 0)
fn = np.sum(np.sum(matches, axis=1) == 0)
return tp, fp, fn
def compute_map(pred_masks, gt_masks):
enc_preds = [mask_util.encode(np.asfortranarray(m)) for m in pred_masks]
enc_gts = [mask_util.encode(np.asfortranarray(m)) for m in gt_masks]
ious = mask_util.iou(enc_preds, enc_gts, [0] * len(enc_gts))
precisions = []
for t in np.arange(0.5, 1.0, 0.05):
tp, fp, fn = precision_at(t, ious)
precisions.append(tp / (tp + fp + fn) if (tp + fp + fn) > 0 else 0)
return np.mean(precisions)
Workflow
- Encode predicted and ground-truth binary masks as RLE using
mask_util.encode - Compute the full IoU matrix with
mask_util.iou(fast C implementation) - For each threshold in [0.5, 0.55, ..., 0.95], count TP/FP/FN
- Compute precision per threshold, then average across all 10 thresholds
Key Decisions
- RLE encoding:
np.asfortranarrayis required — pycocotools expects Fortran-order arrays - One-to-one matching: each pred matches at most one GT (sum axis check == 1)
- Empty predictions: return 0 if no predictions; missing this causes division errors
- Integration: wrap in a Detectron2
DatasetEvaluatorfor periodic validation during training
References
Signals
- GitHub stars
- 60
- Forks
- 4
- Last commit
- Apr 2026
Advanced
- Catalog kind
- skill
- Gateway key
cv-map-iou-precision-sweep- Source
- github.com/wenmin-wu/ds-skills