MMDetection实用工具详解(下):模型复杂度、基准测试

news2024/12/24 8:57:38

工具目录

  • 四、模型复杂度
    • 应用展示
      • 结果解析
  • 五、基准测试
    • 鲁棒性测试基准
    • 应用展示
      • 结果解析
        • Testing gaussian_noise at severity 0
        • Testing gaussian_noise at severity 2
        • Aggregated results
  • 遇到的tools自定义导包模块No Module Error错误
    • 解决思路

上期MMDetection内三个实用工具详解:日志分析、结果分析、混淆矩阵介绍了三个实用工具,接着上一期我们继续分享两个实用工具:模型复杂度、基准测试。

四、模型复杂度

tools/analysis_tools/get_flops.py 工具可用于计算指定模型的 FLOPs、参数量大小(改编自 flops-counter.pytorch )。

python tools/analysis_tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}]

获得的结果如下:

==============================
Input shape: (3, 1280, 800)
Flops: 239.32 GFLOPs
Params: 37.74 M
==============================

注意:这个工具还只是实验性质,我们不保证这个数值是绝对正确的。你可以将他用于简单的比较,但如果用于科技论文报告需要再三检查确认。

  1. FLOPs 与输入的形状大小相关,参数量没有这个关系,默认的输入形状大小为 (1, 3, 1280, 800) 。
  2. 一些算子并不计入 FLOPs,比如 GN 或其他自定义的算子。你可以参考 mmcv.cnn.get_model_complexity_info() 查看更详细的说明。
  3. 两阶段检测的 FLOPs 大小取决于 proposal 的数量。

应用展示

python tools/analysis_tools/get_flops.py work_dirs/faster-rcnn_r50_fpn_ms-3x_coco_oxford/faster-rcnn_r50_fpn_ms-3x_coco_oxford.py

结果解析

==============================
Use size divisor set input shape from (297, 300) to (800, 832)
==============================
Compute type: dataloader: load a picture from the dataset
Input shape: (800, 832)
Flops: 0.181T
Params: 41.353M
==============================
!!!Please be cautious if you use the results in papers. You may need to check if all ops are supported and verify that the flops computation is correct.
  • Flops: 0.181T FLOPs(Floating Point Operations Per Second)表示每秒浮点运算次数,这里是0.181万亿次(Tera,T=10^12)。这是评估模型计算复杂度的一个指标,意味着在执行特定任务或前向传播时,该模型大约需要进行0.181万亿次浮点运算。较高的FLOPs值通常意味着更大的计算需求和潜在的更长运行时间。

  • Params: 41.353M 参数量(Params)指的是模型中所有可学习参数的总数,这里是41.353百万(Mega,M=10^6)。模型参数包括权重和偏置等,它们是模型学习过程中的关键组成部分,决定了模型的容量、表达能力和泛化能力。较大的参数量可能会带来更强的学习能力,但也需要更多的内存资源,并可能导致过拟合问题,尤其是在数据集较小的情况下。

五、基准测试

鲁棒性测试基准

tools/analysis_tools/test_robustness.pytools/analysis_tools/robustness_eval.py 帮助使用者衡量模型的鲁棒性。其核心思想来源于 Benchmarking Robustness in Object Detection: Autonomous Driving when Winter is Coming。
在这里插入图片描述

应用展示

详细了解如何在污损图像上评估模型的效果,以及参考该基准的一组标准模型,请参照官方文档 robustness_benchmarking.md 获取终端命令模板,这里不再赘述。

首次使用请先安装包含图像损坏变换功能的科学库

pip install imagecorruptions

然后根据实际情况参考命令模板依次填入配置文件、权重文件、其他必要参数等

python tools/analysis_tools/test_robustness.py 
work_dirs/faster-rcnn_r50_fpn_ms-3x_coco_oxford/faster-rcnn_r50_fpn_ms-3x_coco_oxford.py 
work_dirs/faster-rcnn_r50_fpn_ms-3x_coco_oxford/iter_7080.pth 
--corruptions gaussian_noise 
--severities 0 2 
--out robustness_result.pkl

实际操作中请使用 paste in one line 粘贴以上代码

  • corruption:代表使用一组自定义的损坏变换,代码中使用的是 gaussian_noise
  • severities:代表选择施加在图像上的损坏变换的严重程度。 严重程度从 1 到 5 逐级增强,0 表示不对图像施加损坏变换,即原始图像数据。
  • out:指明输出的 pkl 格式的结果文件路径。

结果解析

Testing gaussian_noise at severity 0
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.850
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.990
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.968
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.789
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.868
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.886
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.886
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.886
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.822
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.901
06/14 00:43:06 - mmengine - INFO - bbox_mAP_copypaste: 0.850 0.990 0.968 -1.000 0.789 0.868
06/14 00:43:07 - mmengine - INFO - Results has been saved to robustness_result.pkl.
06/14 00:43:07 - mmengine - INFO - Epoch(test) [737/737]    coco/bbox_mAP: 0.8500  coco/bbox_mAP_50: 0.9900  coco/bbox_mAP_75: 0.9680  coco/bbox_mAP_s: -1.0000  coco/bbox_mAP_m: 0.7890  coco/bbox_mAP_l: 0.8680  data_time: 2.1947  time: 2.2805

在没有高斯噪声的情况下(Severity 0),模型展示出了非常出色的性能:

  • 总体平均精度(AP) 在不同的IoU阈值和目标尺寸上都很高,尤其是在 IoU 介于0.50到0.95之间时,AP达到了0.850,表明模型在无噪声环境下的目标检测精确度很高。
  • 特别是,当 IoU 设定为0.50时(AP@[IoU=0.50]),模型在不限制最大检测数量时(maxDets=1000)几乎达到了完美的识别率,AP为0.990,显示出极强的召回能力。
  • 对于更严格的要求,如IoU阈值为0.75时(AP@[IoU=0.75]),模型依然保持了0.968的AP,证明其在精确匹配目标边界方面表现优异。
  • 模型在检测大型目标时(AP@[area=large])的性能略优于中型目标(AP@[area=medium]),分别为0.868和0.789。
Testing gaussian_noise at severity 2
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.657
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.883
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.766
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.540
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.688
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.705
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.705
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.705
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.577
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.736
06/14 01:11:05 - mmengine - INFO - bbox_mAP_copypaste: 0.657 0.883 0.766 -1.000 0.540 0.688
06/14 01:11:05 - mmengine - INFO - Results has been saved to robustness_result.pkl.
06/14 01:11:06 - mmengine - INFO - Epoch(test) [737/737]    coco/bbox_mAP: 0.6570  coco/bbox_mAP_50: 0.8830  coco/bbox_mAP_75: 0.7660  coco/bbox_mAP_s: -1.0000  coco/bbox_mAP_m: 0.5400  coco/bbox_mAP_l: 0.6880  data_time: 2.1945  time: 2.2723

然而,在施加了些许高斯噪声(Severity 2)后,模型的性能显著下降:

  • 总体AP从0.850降到了0.657,尤其是在不同IoU阈值和目标尺寸上都观察到了下降,这说明噪声对模型识别和定位目标的能力产生了负面影响。
  • 尤其是对于中型目标(AP@[area=medium]),其性能从0.789骤降至0.540,表明噪声对此类尺寸的目标检测影响最大。
  • 召回率(AR)也呈现出类似的下降趋势,反映了在噪声环境下模型找回目标的能力减弱。
Aggregated results
model: robustness_result_results.pkl
Mean Performance under Corruption [mPC] (bbox)
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.131
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.177
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.153
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -0.200
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.108
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.138

汇总结果 中的“Mean Performance under Corruption [mPC]”似乎是对模型在不同噪声等级下的平均性能评估:

  1. AP@[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.131:这表示在所有目标尺寸范围内,当考虑从IoU阈值0.50至0.95的匹配,并且每张图片只考虑最多100个检测结果时,模型的平均精度是13.1%。这个值表明在广泛的匹配标准和有限的检测展示下,模型的整体性能较低。
  2. AP@[ IoU=0.50 | area= all | maxDets=100 ] = 0.177:特别针对IoU阈值为0.50时,模型的平均精度稍有提升,达到了17.7%,说明在较为宽松的匹配标准下,模型表现稍好。
  3. AP@[ IoU=0.75 | area= all | maxDets=100 ] = 0.153:当提高匹配严格度至IoU=0.75时,AP反而略有下降,说明模型在高精度匹配上的能力较弱。
  4. AP@[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -0.200:理论上,这是一个不合理的值,因为AP不能为负。正常解读应寻找错误或理解这里的-0.200是一个标记错误,可能意在指出模型在小目标检测上的性能极差或无法计算,但这需要根据实际情况校正。
  5. AP@[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.108AP@[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.138:这两个值分别表示中型和大型目标在同样条件下的平均精度,显示模型在检测较大目标时比小目标稍有优势,但仍处于较低水平。

总之,高斯噪声,尤其是在Severity 2的水平,显著降低了模型在目标检测任务上的精度和召回率,特别是对中型目标的影响最为严重。这强调了在实际应用中,提高模型对图像噪声鲁棒性的必要性。

遇到的tools自定义导包模块No Module Error错误

报错from tools.analysis_tools.robustness_eval import get_results ModuleNotFoundError: No module named 'tools.analysis_tools'

解决思路

我习惯性进入mmdetection文件后再用tools/内的工具文件

cd mmdetection

进入mmdetection目录之后使用鲁棒性测试基准工具,需要注意以下自定义导包语句

from tools.analysis_tools.robustness_eval import get_results

去掉tools.analysis.改为

from robustness_eval import get_results

再在tools/analysis_tools/文件夹下加上__init__.py(空文件即可)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2、给出五种并行计算机体系结构的名称,并分别画出其典型结构。

①并行向量处理机(PVP) ②对称多机系统(SMP) ③大规模并行处理机(MPP) ④分布式共享存储器多机系统(DSM) ⑤工作站机群(COW)

户外led显示屏如何选择?

在繁华的都市中,户外LED显示屏以其独特的魅力,成为传递信息、展示形象的重要工具。然而,面对市场上琳琅满目的产品,如何选择一款适合自己的户外LED显示屏呢?下面,我们将从屏幕类型、尺寸等具体参数出发&…

教程:A5000 GPU 上运行阿里最新开源大模型 Qwen2

这是我们新一篇关于大模型的文章,我们此前还讲过如何运行 LLama3 大模型。而这次,我们将使用 Ollama 运行阿里千问Qwen2:7b。要知道 Qwen2 可是目前最热门的开源大语言模型了,甚至在一些性能测试中比 LLama3 表现还突出。谁不想试试看呢&…

Golang | Leetcode Golang题解之第149题直线上最多的点数

题目&#xff1a; 题解&#xff1a; func maxPoints(points [][]int) (ans int) {n : len(points)if n < 2 {return n}for i, p : range points {if ans > n-i || ans > n/2 {break}cnt : map[int]int{}for _, q : range points[i1:] {x, y : p[0]-q[0], p[1]-q[1]if…

《NVIDIA-Jetson AGX Orin》移除或临时忽略 NVIDIA 仓库

阿丹&#xff1a; 开发的过程中出现了一些问题&#xff0c;在下载以及安装docker的时候&#xff0c;明明已经修改到了阿里云的国内镜像&#xff0c;但是还在下载的时候去访问了英伟达的下载仓库。在国内网络环境就会导致下载失败&#xff0c;网络不可达&#xff0c;本文章记录一…

现在Java行情不好可以转.net吗?

转向.NET开发可能是一个选择&#xff0c;但要注意以下几点。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 技术转…

好书推荐:生成式AI入门与AWS实战

这本书给LLM的爱好者者提供了完整的学习路线&#xff0c;让读者从使用大语言模型开始到剖析常用的技术概念&#xff0c;能够填补了机器学习爱好者从传统的文字处理到大语言模型的空白知识&#xff0c;包括显存计算优化&#xff0c;微调&#xff0c;RAG&#xff0c; 多模态&…

电池包断路单元DBU的预充电电阻应用案例

当电池组接触器闭合到电机和逆变器上时&#xff0c;逆变器电容器中会有电流涌入。这种非常高的电流至少可能会使接触器老化&#xff0c;并可能永久损坏接触器。 因此&#xff0c;当我们关闭电池组上的接触器时&#xff0c;我们分三个步骤执行此操作&#xff1a; 1.关闭主负极…

【机器学习】鸢尾花分类:机器学习领域经典入门项目实战

学习机器学习&#xff0c;就像学习任何新技能一样&#xff0c;最好的方法之一就是通过实战来巩固理论知识。鸢尾花分类项目是一个经典的入门项目&#xff0c;它不仅简单易懂&#xff0c;还能帮助我们掌握机器学习的基本步骤和方法。 鸢尾花数据集&#xff08;Iris Dataset&…

NLP入门——基于TF-IDF算法的应用

从json格式数据中抽出句子和标签 首先查看json格式的数据文件&#xff1a; :~/nlp/tnews/src$ less train.json可以看到json字符串表示一个对象&#xff0c;我们利用json.loads() 函数会将其转换为一个 Python 字典。docs python json #ext.py #encoding: utf-8import sys f…

计算机网络 —— 应用层(DNS域名系统)

计算机网络 —— 应用层&#xff08;DNS域名系统&#xff09; 什么是DNS域名的层次结构域名分类 域名服务器的分类域名解析方式递归查询&#xff08;Recursive Query&#xff09;迭代查询&#xff08;Iterative Query&#xff09;域名的高速缓存 我们今天来看DNS域名系统 什么…

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll)

目录 一、前提 二、如何引用静态链接库 三、如何引用动态链接库 四、示例代码资源 在开发项目中经常会存在需要调用第三方库的时候&#xff0c;对于Qt如何来调用第三方库&#xff0c;为了方便自己特意记录下详细过程。 一、前提 1. window 10操作系统 2. 已安装了Qt6.7.…

[大模型]Phi-3-mini-4k-instruct langchain 接入

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 。 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行演示。 创建工作…

10大wordpress外贸主题

手动工具wordpress外贸模板 适合生产套筒扳、管钳、工具箱、斧子、锤子、防爆工具、螺丝刀、扳手等手动工具的厂家。 https://www.jianzhanpress.com/?p4806 Invisible Trade WP外贸网站模板 WordPress Invisible Trade外贸网站模板&#xff0c;做进出口贸易公司官网的word…

7-25 数字三角形问题

7-25 数字三角形问题 分数 10 全屏浏览 作者 夏仁强 单位 贵州工程应用技术学院 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法&#xff0c;计算出从三角形的顶至底的一条路径&#xff0c;使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角…

【Spring】Spring事务相关源码分析

目录&#xff1a; 1.讲述事务的一些基础概念。 2.讲述事务的生命周期源码 3.配置事务&#xff0c;以及事务注解的源码 1.前言 具体事务中Spring是怎么管理事务&#xff0c;怎么去管理、创建、销毁等操作的呢&#xff1f;这一次来分解一下。 2.事务概述&#xff08;复习&a…

MySQL的增删查改(CRUD)

目录 一.CRUD 1.什么是CRUD 2.CRUD的特点 二.新增&#xff08;Create&#xff09; 单列插入全行数据 表的复制 额外小知识 三.阅读(Read) 1.全表查询指定列查询 2.查询字段为表达式 3.别名 ​编辑 4.去重 5.排序 1.根据列名进行排序 2.使用表达式及别名进行排序…

读AI未来进行式笔记12读后总结与感想兼导读

1. 基本信息 AI未来进行式 李开复 陈楸帆 著 浙江人民出版社,2022年5月出版 1.1. 读薄率 书籍总字数301千字&#xff0c;笔记总字数39650字。 读薄率39650301000≈13.2% 1.2. 读厚方向 千脑智能 脑机穿越 未来呼啸而来 虚拟人 AI3.0 新机器人 人工不智能&#xff…

搜索与图论:染色法判别二分图

搜索与图论&#xff1a;染色法判别二分图 题目描述参考代码 题目描述 输入样例 4 4 1 3 1 4 2 3 2 4输出样例 Yes参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010, M 200010;int n, m; i…

[C][数据结构][排序][下][快速排序][归并排序]详细讲解

文章目录 1.快速排序1.基本思想2.hoare版本3.挖坑法4.前后指针版本5.非递归版本改写 2.归并排序 1.快速排序 1.基本思想 任取待排序元素序列的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右…