mmyolo框架中计算各类别的AP@0.5指标

本文所用的mmyolo版本:0.3.0

背景:

首先要知道,mmyolo中在eval和test阶段进行指标计算的时候,对于COCO数据集默认用的就是mAP@0.5:0.95,即不同IoU阈值下的mAP计算,并且没有给出各类别的具体指标,如

可以看出,只给了 不同IoU下AP和AR的值,以及最后不同IoU下的mAP,当然也有针对small、medium、large下的指标,这一切都因为这是COCO数据集benchmark当时的传统。而如果我们需要训练我们自己的任务场景,比如yolov5实现xx检测,就不需要这些东西,我们需要的是:

1.各个类别的AP值

2.不一定要0.5:0.95,可能mAP@0.5就行,即固定IoU阈值为0.5下的mAP\各类别AP

因此怎么进行操作呢?首先要实现第一项:

1.各个类别的AP值

这个很简单,在config里的test_evaluator加入一个参数classwise=True

如下:

即可,因为test_evaluator一般跟val一样,因此我直接加在val里。

如果我不想改config,也可以调用tools/test.py进行测试的时候在命令后加入

--cfg-options test_evaluator.classwise=True

比如 

这样就可以实现测试的时候也对各个类别进行AP计算 

不管用上述哪种方式,最后都是大功告成。

注意这里各类别的AP只会显示AP@.5:.95的,因此接下来要进行第二个改动

2.各类别AP@0.5指标

为什么会出现默认计算IoU阈值0.5:0.95的指标呢?我们来看源码部分

## /opt/conda/lib/python3.8/site-packages/mmdet/evaluation/metrics/coco_metric.py
## line22
class CocoMetric(BaseMetric):def __init__(self,ann_file: Optional[str] = None,metric: Union[str, List[str]] = 'bbox',classwise: bool = False,proposal_nums: Sequence[int] = (100, 300, 1000),iou_thrs: Optional[Union[float, Sequence[float]]] = None,metric_items: Optional[Sequence[str]] = None,format_only: bool = False,outfile_prefix: Optional[str] = None,file_client_args: dict = dict(backend='disk'),collect_device: str = 'cpu',prefix: Optional[str] = None) -> None:super().__init__(collect_device=collect_device, prefix=prefix)# coco evaluation metricsself.metrics = metric if isinstance(metric, list) else [metric]allowed_metrics = ['bbox', 'segm', 'proposal', 'proposal_fast']for metric in self.metrics:if metric not in allowed_metrics:raise KeyError("metric should be one of 'bbox', 'segm', 'proposal', "f"'proposal_fast', but got {metric}.")# do class wise evaluation, default Falseself.classwise = classwise# proposal_nums used to compute recall or precision.self.proposal_nums = list(proposal_nums)# iou_thrs used to compute recall or precision.if iou_thrs is None:iou_thrs = np.linspace(.5, 0.95, int(np.round((0.95 - .5) / .05)) + 1, endpoint=True)self.iou_thrs = iou_thrsself.metric_items = metric_itemsself.format_only = format_onlyif self.format_only:assert outfile_prefix is not None, 'outfile_prefix must be not''None when format_only is True, otherwise the result files will''be saved to a temp directory which will be cleaned up at the end.'self.outfile_prefix = outfile_prefixself.file_client_args = file_client_argsself.file_client = FileClient(**file_client_args)# if ann_file is not specified,# initialize coco api with the converted datasetif ann_file is not None:with self.file_client.get_local_path(ann_file) as local_path:self._coco_api = COCO(local_path)else:self._coco_api = None# handle dataset lazy initself.cat_ids = Noneself.img_ids = None

可以看到如果我们在config里规定val_evaluator为CocoMetric的时候没有传入iou_thrs

这个参数的时候,就会默认规定iou_thrs为0.5:0.95的一系列离散值,那么修改就很简单了,只要在config里加入iou_thrs

注意这里的iou_thrs必须是一个list类型,不然会报错 。

然后就可以惊喜地看到各类别的AP@0.5

大功告成 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/267505.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言->自定义类型联合体和枚举类型

系列文章目录 文章目录 前言 ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青_C语言,函数,指针-CSDN博客 目的:学习联合体和枚举类型的…

Xinlinx Vivadao入门学习

#1, 引脚定义 1.1 Bank定义 1.2, 当两个banks的I/O口作为LVDS电平时,HR banks的I/O电压VCCO只能为2.5V,HP banks的I/O口电压为1.8V。两个banks支持LVDS的标准不同,HR I/O banks的I/O只能分配LVDS_25标准,…

运筹学经典问题(二):最短路问题

问题描述 给定一个图(有向图或无向图) G ( V , E ) G (V, E) G(V,E), V V V是图中点的集合, E E E是图中边的集合,图中每条边 ( i , j ) ∈ E (i, j) \in E (i,j)∈E都对应一个权重 c i j c_{ij} cij​(…

农副产品行业ERP有哪些?农副产品行业ERP是做什么的

现实生活当中有很多种类的农副产品,这些琳琅满目的商品有多元化的营销渠道和策略,同时在保质期、包装、价格策略、配料、生产工艺等诸多方面存在明显的差异。 由于行业的特殊性,传统的人工统计分析工作量较大,同时也难以确保业务…

使用Python实现阿里系某购物网站Sign参数加密

文章目录 1. 写在前面2. 抓包分析3. 断点分析4. 爬虫实现 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋…

2017下半年软工(桥接模式)

题目——桥接模式(抽象调用实现部分) package org.example.桥接模式;/*** 桥接模式的核心思想是将抽象部分与它的实现部分分离,使它们可以独立变化,就是说你在实现部分:WinImp、LinuxImp基础上还能加上RedHatImp&#…

12 位多通道国产芯片ACM32F403/F433 系列,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构,支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理,支持单精度FPU处理浮点数据,同时还支持Memory Protection Unit (MPU)用于提升应用的…

Science Robotics 挖掘机升级智能机器人,充分使用当地材料自主搭建石墙和土墙

建筑业对人类生产力至关重要,但需要实质性创新来满足不断增长的需求并减少其对环境的严重影响。建筑业是世界上最大的经济部门之一,占全球国内生产总值的13%。推而广之,它几乎是所有其他行业的重要组成部分:建筑业负责运输和农业基…

OpenHarmony创新赛人气投票活动,最佳人气作品由你来定!

12月1日至12月15日 十大入围作品线上投票激战正酣 最佳人气作品,由你来定! 投票链接:OpenHarmony创新赛人气作品投票正式开启——最佳人气作品,由你来定! - 文章 OpenHarmony开发者论坛

有趣的数学 数学建模入门三 数学建模入门示例两例 利用微积分求解

一、入门示例1 1、问题描述 某宾馆有150间客房,经过一段时间的经营,该宾馆经理得到一些数据:如果每间客房定价为200元,入住率为55%;定价为180元,入住率为65%;定价为160元…

数据结构之----逻辑结构、物理结构

数据结构之----逻辑结构、物理结构 目前我们常见的数据结构分别有: 数组、链表、栈、队列、哈希表、树、堆、图 而它们可以从 逻辑结构和物理结构两个维度进行分类。 什么是逻辑结构? 逻辑结构是指数据元素之间的逻辑关系,而逻辑结构又分为…

如何部署自己的服务渲染页面为Pdf文档

前言 相信大家都觉得官方发布的文档生成模块https://docs.mendix.com/appstore/modules/document-generation/很有用,它能把Mendix页面像素级导出到Pdf文件中,这对于归档等业务非常有价值。但部署依赖公有云提供的渲染服务,而中国本土用户对…