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

工具目录

  • 四、模型复杂度
    • 应用展示
      • 结果解析
  • 五、基准测试
    • 鲁棒性测试基准
    • 应用展示
      • 结果解析
        • 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 -i https://pypi.tuna.tsinghua.edu.cn/simple

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

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(空文件即可)

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值