YOLO v11新增ap75指标详解

YOLO v11添加ap75指标

1、按yolo11/ultralytics/utils/metrics.py打开metrics.py文件

2、找到Metric()方法

3、找到下图所示内容在此方法后添加ap75方法

 @property
    def ap75(self):
        """
        Returns the Average Precision (AP) at an IoU threshold of 0.5 for all classes.

        Returns:
            (np.ndarray, list): Array of shape (nc,) with AP50 values per class, or an empty list if not available.
        """
        return self.all_ap[:, 5] if len(self.all_ap) else []

4、继续找到下图所示内容在此方法后添加ap75方法,注意按代码块修改return self.all_ap[:, 5]

 @property
    def map75(self):
        """
        Returns the mean Average Precision (mAP) at an IoU threshold of 0.75.

        Returns:
            (float): The mAP at an IoU threshold of 0.75.
        """
        return self.all_ap[:, 5].mean() if len(self.all_ap) else 0.0

5、找到mean_results()在此方法返回参数内添加map75

    def mean_results(self):
        """Mean of results, return mp, mr, map50, map."""
        return [self.mp, self.mr, self.map50, self.map75, self.map]

    def class_result(self, i):
        """Class-aware result, return p[i], r[i], ap50[i], ap[i]."""
        return self.p[i], self.r[i], self.ap50[i], self.ap75[i], self.ap[i]

6、找到def keys(self)方法,添加"metrics/mAP75(B)",

    def keys(self):
        """Returns a list of keys for accessing specific metrics."""
        return ["metrics/precision(B)", "metrics/recall(B)", "metrics/mAP50(B)", "metrics/mAP75(B)", "metrics/mAP50-95(B)"]

7、找到下一个def keys(self)方法,添加

@property
    def keys(self):
        """Returns a list of keys for accessing metrics."""
        return [
            "metrics/precision(B)",
            "metrics/recall(B)",
            "metrics/mAP50(B)",
            "metrics/mAP75(B)",
            "metrics/mAP50-95(B)",
            "metrics/precision(M)",
            "metrics/recall(M)",
            "metrics/mAP50(M)",
            "metrics/mAP75(M)",
            "metrics/mAP50-95(M)",
        ]

8、找到下一个def keys(self)方法,添加

@property
    def keys(self):
        """Returns list of evaluation metric keys."""
        return [
            "metrics/precision(B)",
            "metrics/recall(B)",
            "metrics/mAP50(B)",
            "metrics/mAP75(B)",
            "metrics/mAP50-95(B)",
            "metrics/precision(P)",
            "metrics/recall(P)",
            "metrics/mAP50(P)",
            "metrics/mAP75(P)",
            "metrics/mAP50-95(P)",
        ]

标题9、找到def fitness(self)方法,添加

    def fitness(self):
        """Model fitness as a weighted combination of metrics."""
        w = [0.0, 0.0, 0.1, 0.1, 0.9]  # weights for [P, R, mAP@0.5, mAP@0.5:0.95]
        return (np.array(self.mean_results()) * w).sum()

10、找到yolo11/ultralytics/models/yolo/detect/val.py路径下的val.py文件并打开,在如下图所示位置修改

def get_desc(self):
        """Return a formatted string summarizing class metrics of YOLO model."""
        return ("%22s" + "%11s" * 7) % ("Class", "Images", "Instances", "Box(P", "R", "mAP50", "mAP75", "mAP50-95)")

按以上步骤修改完成后,训练时可输出ap75指标

作者:一只蹦跶的小蹦跶

物联沃分享整理
物联沃-IOTWORD物联网 » YOLO v11新增ap75指标详解

发表回复