mmdetection2.11.0 模型测试评估及计算各个类别的map

这篇具有很好参考价值的文章主要介绍了mmdetection2.11.0 模型测试评估及计算各个类别的map。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 计算各个类别的map

1.1 方法1: 直接计算, 仅支持voc 数据集与 custom 数据集

使用如下命令直接计算各个分类的map , 使用的图片为 config 配置中test中的数据集评估

python tools/test.py work_dirs/faster_rcnn_r50_fpn_1x_coco.py work_dirs/latest.pth --eval mAP

# 参数说明
- work_dir/faster_rcnn_r50_fpn_1x_coco.py: 模型配置文件
- work_dir/latest.pth: 训练好的模型
- --eval mAP: 使用map评估

但该方式只支持 voc 数据集与 custom 数据集

1.2 方法2: coco 数据集使用中间文件生成计算
1.2.1 先使用 test.py生成 results.pkl 文件
python tools/test.py work_dir/faster_rcnn_r50_fpn_1x_coco.py  work_dir/latest.pth  --out results.pkl

- work_dir/faster_rcnn_r50_fpn_1x_coco.py: 模型配置文件
- work_dir/latest.pth: 训练好的模型
- --out results.pkl: 代表输出到根目录的results.pkl文件中, 也可以输出到指定目录
1.2.2 使用VOC标准计算各个类别 map

这里要用到旧版本 1.0.0 下的 tools/voc_eval.py 文件, 由于该文件已经在2.11.0版本中移除, 所以需要去官网下载, 链接: voc.eval.py文件 , 后文也会复制一份放在本文中

下载后将 voc_eval.py 放到 tools 目录下, 然后执行如下命令,采用voc标准计算mAP:

python tools/voc_eval.py results.pkl  work_dirs/faster_rcnn_r50_fpn_1x_coco.py 

便可以得到如下结果:

mmdetection2.11.0 模型测试评估及计算各个类别的map

这些类别是我自己训练的数据集中的各个类别, 可以看到已经计算出了各个类别的 map值

1.2.3 使用coco 评估标准计算所有类别 bbox_mAP50, 75, 95, bbox_mAP_s/m/l的值

同样需要使用 1.1 中得到的 results.pkl 文件, 使用命令:

python tools/analysis_tools/eval_metric.py  work_dirs/faster_rcnn_r50_fpn_1x_coco.py  results.pkl  --eval=bbox

得到结果示例如下图:

mmdetection2.11.0 模型测试评估及计算各个类别的map

参考: mmdetection实战,训练扑克牌数据集(VOC格式)并测试计算mAP MMDetection 快速开始,训练自定义数据集

2. 绘制每个类别bbox 的结果曲线图并保存

2.1 先使用 test.py 生成输出 results.bbox.json 文件
python tools/test.py  work_dir/faster_rcnn_r50_fpn_1x_coco.py  work_dir/latest.pth  --format-only  --options "jsonfile_prefix=./results"
2.2 获得COCO bbox错误结果每个类别,保存分析结果图像到目录results/
python tools/analysis_tools/coco_error_analysis.py results.bbox.json results  --ann=D:/annotations.json

- results.bbox.json:上一步生成的文件
- results: 结果曲线图的生成目录, 此处将生成到results/ 目录下
- --ann=D:/annotations.json: 指定数据集的标注文件, 需要修改成你自己的, 默认为 data/coco/annotations/instances_val2017.json, 用的是官方的

生成的文件概览大体如下:

mmdetection2.11.0 模型测试评估及计算各个类别的map

注意点:

  • coco格式的json 标注文件中, 需要有 supercategory 键值, 参考coco数据集格式

mmdetection2.11.0 模型测试评估及计算各个类别的map

参考: mmdetection 官方教程

3. 关于分析日志的工具

python tools/analyze_logs.py plot_curve [--keys ${KEYS}] [--title ${TITLE}] [--legend ${LEGEND}] [--backend ${BACKEND}] [--style ${STYLE}] [--out ${OUT_FILE}]

- keys: 要展示的关键字
- title: 图的标题
- legend: 指定图例

例子:

  • 绘制一些运行的分类损失。
python tools/analysis_tools/analyze_logs.py plot_curve log.json --keys loss_cls --legend loss_cls
  • 绘制一些运行的分类和回归损失,并将该图保存为pdf。
python tools/analysis_tools/analyze_logs.py plot_curve log.json --keys loss_cls loss_reg --out losses.pdf
  • 比较同一图中两次运行的bbox mAP。
python tools/analysis_tools/analyze_logs.py plot_curve log1.json log2.json --keys bbox_mAP --legend run1 run2

还可以计算平均训练速度。

python tools/analyze_logs.py cal_train_time ${CONFIG_FILE} [--include-outliers]

预期输出将如下所示。

-----Analyze train time of work_dirs/some_exp/20190611_192040.log.json-----
slowest epoch 11, average time is 1.2024
fastest epoch 1, average time is 1.1909
time std over epochs is 0.0028
average iter time: 1.1959 s/iter

参考: mmdetection官方教程 MMDetection中文文档—2.入门 【通用视觉框架 OpenMMLab 字幕版】第四讲 目标检测 & MMDetection(下)—陈恺博士

4. 附录

voc_eval.py 具体代码如下:文章来源地址https://www.toymoban.com/news/detail-454599.html

from argparse import ArgumentParser

import mmcv

from mmdet import datasets
from mmdet.core import eval_map


def voc_eval(result_file, dataset, iou_thr=0.5, nproc=4):
    det_results = mmcv.load(result_file)
    annotations = [dataset.get_ann_info(i) for i in range(len(dataset))]
    if hasattr(dataset, 'year') and dataset.year == 2007:
        dataset_name = 'voc07'
    else:
        dataset_name = dataset.CLASSES
    eval_map(
        det_results,
        annotations,
        scale_ranges=None,
        iou_thr=iou_thr,
        dataset=dataset_name,
        logger='print',
        nproc=nproc)


def main():
    parser = ArgumentParser(description='VOC Evaluation')
    parser.add_argument('result', help='result file path')
    parser.add_argument('config', help='config file path')
    parser.add_argument(
        '--iou-thr',
        type=float,
        default=0.5,
        help='IoU threshold for evaluation')
    parser.add_argument(
        '--nproc',
        type=int,
        default=4,
        help='Processes to be used for computing mAP')
    args = parser.parse_args()
    cfg = mmcv.Config.fromfile(args.config)
    test_dataset = mmcv.runner.obj_from_dict(cfg.data.test, datasets)
    voc_eval(args.result, test_dataset, args.iou_thr, args.nproc)


if __name__ == '__main__':
    main()

到了这里,关于mmdetection2.11.0 模型测试评估及计算各个类别的map的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MMDetection3d对KITT数据集的训练与评估介绍

    如有错误,恳请指出。 在之后的时间内,可能会学习与点云相关的知识,进一步学习基于点云的3D目标检测。然后,为了快速入门这个领域,想使用mmdetection3d开源算法库来尝试训练一些经典的3d目标检测模型,比如:SECOND,PointPillars,3D-SSD等等。之后重点是详细介绍KITTI数据

    2024年02月02日
    浏览(27)
  • flume1.11.0安装部署

    上传;  解压; 进入conf目录,修改 flume-env.sh,配置 JAVA_HOME; 安装nginx; \\\"yum  update\\\"命令最后报错了,但好像没有影响nginx的安装,估计是版本兼容性问题,如下图; nginx命令; 启动nginx后,访问80端口; nginx网络80端口访问日志文件保存位置; 注意:网上说“在hadoop3.x之前需

    2024年02月09日
    浏览(34)
  • Android11.0 launcher修改为单层

    OS: RK3568 Android11.0 现在的产品基本都是按照手机样式去做,所以需要把系统默认的Launcher样式,去掉抽屉改为单层显示,也就是把所有的app添加到workspace中。 以下修改是在设备横屏模式下进行 。 1.添加一个宏开关控制Launcher单双层显示 源码: /packages/apps/Launcher3/src/com/android/

    2024年02月08日
    浏览(37)
  • Android11.0 修改系统默认显示大小

    系统设置中的显示大小调整的就是屏幕密度,调整的越小,屏幕显示的内容就越多。 在系统中都会有定义一个默认的屏幕密度 设置中显示大小相关内容 源码:/packages/apps/Settings/res/xml/display_settings.xml 源码:/packages/apps/Settings/src/com/android/settings/display/ScreenZoomSettings.java 密度缩

    2024年02月09日
    浏览(33)
  • Android11.0 导航栏添加图标截屏

    需求: 导航栏添加截屏和电源键图标,控制截屏和用于设备重启关机功能。设置中添加延时截屏和控制截屏图标显示开关。 1. 导航栏添加图标 1.1 添加布局文件和图标icon 在layout目录下添加nav_power.xml和screenshot.xml文件 frameworks/base/packages/SystemUI/res/layout/nav_power.xml frameworks/base

    2024年02月15日
    浏览(31)
  • SocketTools .NET Edition 11.0 Crack

    SocketTools .NET Edition 一套 .NET 类,可轻松向软件添加 Internet 功能,支持 .NET 4.0 至 .NET 8.0。 特征 SocketTools 提供入门所需的一切,包括文档和示例,以及免费技术支持来回答您的开发问题。 Visual Studio 2022 和 .NET 8.0   文件传输、网络服务和电子邮件 TLS 1.3 和 SSH2 OAuth 2.0 身份验证

    2024年02月09日
    浏览(34)
  • 推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。

    📕我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。🌎跑过十五公里、徒步爬过衡山、🔥有过三个

    2024年02月08日
    浏览(39)
  • Android 11.0 系统开机自启动第三方app

      在11.0的系统rom定制化开发中,由于有些第三方app,需要在接收到开机广播后,启动app,但是在10.0以后第三方app就接收不到开机广播了 只有系统app才可以接收到开机广播了,所以在app内通过接收开机广播自启动就没法实现了 这就需要在系统中添加监听开机完成广播的功能,

    2024年02月16日
    浏览(47)
  • Android 11.0 SystemUI下拉状态栏禁止QuickQSPanel展开

       在11.0系统rom产品定制化开发中,对于SystemUI定制开发功能也有不少的,增加快捷功能模块,隐藏状态栏图标项目开发需要要求定制QSPanel相关UI和开发功能, 要求首次下拉后展示快捷功能模块以后就是显示QuickQSPanel而不展开QSPanel,接下来要从下滑手势下拉出状态栏分析功能

    2024年02月08日
    浏览(41)
  • Android 11.0 以太网设置默认静态ip地址

    在11.0的系统rom开发过程中,在进行以太网产品开发的过程中,有功能要求设置默认静态ip地址的功能,不使用动态ip, 方便ip地址管理所以就需要熟悉以太网的ip设置流程,然后设置对应的ip地址就可以了

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包