MMDetection内三个实用工具详解:日志分析、结果分析、混淆矩阵

实用工具目录

  • 一、日志分析
    • 使用方法
    • 实际案例
  • 二、结果分析
    • pkl结果文件生成
    • 使用方法
    • 实际案例
  • 三、混淆矩阵
    • 使用方法
    • 实际案例
      • 遇到的UserWarning
      • 解决方案

MMDetection官方除了训练和测试脚本,他们还在 mmdetection/tools/ 目录下提供了许多有用的工具。本帖先为大家重点介绍其中三个简单而实用的工具:日志分析、结果分析、混淆矩阵。

一、日志分析

tools/analysis_tools/analyze_logs.py 可利用指定的训练 log 文件绘制 loss/mAP 曲线图, 第一次运行前请先运行 pip install seaborn 安装必要依赖。

pip install seaborn -i https://pypi.tuna.tsinghua.edu.cn/simple

使用方法

以下是官方模板(记得勾选 paste as one line)

python tools/analysis_tools/analyze_logs.py plot_curve 
[--keys ${KEYS}] [--eval-interval ${EVALUATION_INTERVAL}] 
[--title ${TITLE}] [--legend ${LEGEND}] [--backend ${BACKEND}] 
[--style ${STYLE}] [--out ${OUT_FILE}]
  • 绘制分类损失曲线图

    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_bbox --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/analysis_tools/analyze_logs.py cal_train_time log.json [--include-outliers]
    

实际案例

在自己模型训练日志保存的mmdetection/work_dirs/faster-rcnn_r50_fpn_ms-3x_coco_oxford文件夹下找到不同训练策略下产生的.json文件,比较两次训练结果的bbox mAP

python tools/analysis_tools/analyze_logs.py plot_curve 
work_dirs/faster-rcnn_r50_fpn_ms-3x_coco_oxford/20240509_175112/vis_data/scalars.json 
work_dirs/faster-rcnn_r50_fpn_ms-3x_coco_oxford/20240508_120431/vis_data/scalars.json 
--keys bbox_mAP 
--legend scalars_09 scalars_08 
--out mAP/scalars_mAP.pdf

之后在mAP的文件夹将会生成一个以epoch为横轴的bbox mAP精度分析折线图,其中黄线代表正常训练策略下bbox的精度走势,蓝线代表微调策略下bbox的精度走势。
请添加图片描述

二、结果分析

pkl结果文件生成

利用配置文件和模型训练权重文件在tools/test.py指定生成pickle结果文件

python tools/test.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 \
    --out results.pkl \ 
    --show

使用 tools/analysis_tools/analyze_results.py 可计算每个图像 mAP,随后根据真实标注框与预测框的比较结果,展示或保存最高与最低 top-k 得分的预测图像。

使用方法

python tools/analysis_tools/analyze_results.py \
      ${CONFIG} \
      ${PREDICTION_PATH} \
      ${SHOW_DIR} \
      [--show] \
      [--wait-time ${WAIT_TIME}] \
      [--topk ${TOPK}] \
      [--show-score-thr ${SHOW_SCORE_THR}] \
      [--cfg-options ${CFG_OPTIONS}]

各个参数选项的作用:

  • config: model config 文件的路径。
  • prediction_path: 使用 tools/test.py 输出的 pickle 格式结果文件。
  • show_dir: 绘制真实标注框与预测框的图像存放目录。
  • --show:决定是否展示绘制 box 后的图片,默认值为 False
  • --wait-time: show 时间的间隔,若为 0 表示持续显示。
  • --topk: 根据最高或最低 topk 概率排序保存的图片数量,若不指定,默认设置为 20
  • --show-score-thr: 能够展示的概率阈值,默认为 0
  • --cfg-options: 如果指定,可根据指定键值对覆盖更新配置文件的对应选项

Top-K准确率(Top-K Accuracy)是一个相关的评价指标,它衡量的是模型预测的最高K个类别中是否包含了真实类别。如果真实类别位于模型预测概率最高的K个类别之中,则这次预测被认为是正确的,即便它不是概率最高的那个类别。这种评估方式在实践中特别有用,因为它能够反映出模型在面对多个可能正确答案时的鲁棒性,特别是在类别间区分度较低的情况下。

实际案例

mmdetection文件夹下新建results文件夹,再选用额外需要的可选参数

CUDA_VISIBLE_DEVICES=1 \
      python tools/analysis_tools/analyze_results.py \
      work_dirs/faster-rcnn_r50_fpn_ms-3x_coco_oxford/faster-rcnn_r50_fpn_ms-3x_coco_oxford.py \
      results.pkl \
      results \
      --topk 50

最后会生成mmdetection/results/badmmdetection/results/good文件夹

在这里插入图片描述

三、混淆矩阵

混淆矩阵(Confusion Matrix)是对检测结果的概览,是一种用于评估和可视化分类模型性能的重要工具。它以表格形式展现,直观地显示了模型预测类别与实际类别之间的对应关系,特别是对于错分情况的细节。

使用方法

首先,运行 tools/test.py 保存 .pkl 预测结果。 之后再运行

python tools/analysis_tools/confusion_matrix.py ${CONFIG}  ${DETECTION_RESULTS}  ${SAVE_DIR} --show

根据配置文件和pickle结果文件生成如下图所示的混淆矩阵
confusion_matrix_example

实际案例

python tools/analysis_tools/confusion_matrix.py 
work_dirs/faster-rcnn_r50_fpn_ms-3x_coco_oxford/faster-rcnn_r50_fpn_ms-3x_coco_oxford.py  
results.pkl  
results/confusion_matrix 
--show

遇到的UserWarning

在这里插入图片描述

报错 UserWarning: Tight layout not applied. The left and right margins cannot be made large enough to accommodate all axes decorations. fig.tight_layout()

查看生成的图片发现的确发现混淆矩阵的横纵坐标有被遮挡导致显示不完全

在这里插入图片描述

解决方案

mmdetection/tools/analysis_tools/confusion_matrix.py下修改源码

VSCode环境下快捷键Ctrl+F进入查找界面搜索subplots快速对应

fig, ax = plt.subplots(
        figsize=(0.7 * num_classes, 0.7 * num_classes * 0.7), dpi=180)

上述情况经反复校验,我将0.7全部换成1.5之后,即可生成完整的混淆矩阵图片
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Blender雕刻建模_笔画,镜像,动态拓扑

笔画 笔画选项,一般是对刷子(自由线)工具设置 描边方法如下:标红的为常用 -间隔:按一定间隔应用笔画的结果 例如:笔刷半径50,笔画间隔100%(笔刷直径的百分比)&#x…

聚苯并咪唑(PBI)为超高性能工程塑料 未来应用前景较好

聚苯并咪唑(PBI)为超高性能工程塑料 未来应用前景较好 聚苯并咪唑(简称PBI),是一类以苯并咪唑基团作为结构重复单元的杂环聚合物。聚苯并咪唑不溶于水,溶于强极性溶剂,具有耐高温、耐腐蚀、抗辐…

Java小游戏之汤姆猫

背景: 博主写过羊了个羊小游戏,客户觉得羊了个羊同学写过了,想换一个,于是笔者想到了汤姆猫。就是那个以前在苹果手机上的猫。 过程: 初始会有一个猫的图片展示,然后你点击按钮,猫会有不同动作…

Python筑基之旅-溯源及发展

目录 一、Python的起源 二、Python的版本更替及变化 三、Python的优缺点 四、Python的发展方向 五、Python之禅 六、推荐专栏/主页: 1、Python函数之旅:Functions 2、Python算法之旅:Algorithms 3、个人主页:https://mye…

湖南大学OS-2018期末考试(不含解析)

前言 不知道哪里翻出来的一张,看着确实像期末考卷,暂且放一下。或许做过,或许没做过。 总之答案不记得了。做完可以评论区发一下或者找我发出来。 共6道大题。 一、(30%) 1. (6%) 进程间通信的两种方法分别是什么&…

Media Encoder 2024 for Mac:专业的音视频编码神器

Media Encoder 2024 for Mac,作为Mac用户的专业音视频编码工具,凭借其强大的功能和用户友好的界面,深受专业人士的喜爱。它支持将各种格式的音视频素材转换为多种流行格式,如MP4、MOV、AVI等,满足不同的播放和发布需求…

python:functools.partial和functools.wraps使用

python:functools.partial和functools.wraps使用 1 前言 python内置的functools模块,提供了一些非常好用的类或者方法,其中functools.partial和functools.wraps的使用频率较高,本文将针对其分析使用。 2 使用 2.1 functools.p…

No module named ‘sklearn.metrics.ranking‘ 解决方法

错误代码 from sklearn.metrics.classification import * from sklearn.metrics.ranking import * 错误原因 sklearn这个文件夹下的_classification和_ranking前面有下划线! 解决方法 第一步:找到sklearn位置,可以打开命令行输入 pip sh…

ASTM通信协议校验和计算方法

Lis通信接口开发 <STX> FN <Frame> <ETB>or<ETX> <CS><CR> <LF> 其中&#xff1a; <STX>&#xff1a;起始帧头&#xff08;0x02&#xff09; FN&#xff1a;帧号&#xff08;范围0&#xff5e;7&#xff0c;1&#xff5e;7完…

软考--试题六--抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory) 意图 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定他们具体的类 结构 适用性 1、一个系统要独立于它的产品的创建、组合和表示时 2、一个系统要由多个产品系统中的一个来配置时 3、当要强调一系列相关的产品对象的设…

问界新M5交付,「975」组合站稳中国豪华智电定位

‍作者 |老缅 编辑 |德新 5月15日&#xff0c;问界新M5已正式开启全国用户交付。从网传图片可以看到&#xff0c;华为余承东以及赛力斯AITO问界BU总裁何利扬亲自出席了首批交车仪式。 4月23日&#xff0c;在不到1个月前&#xff0c;新M5发布。新M5共推出三款车型&#xff1a; …

基于ASN.1的RSA算法公私钥存储格式解读

1.概述 RFC5958主要定义非对称密钥的封装语法&#xff0c;RFC5958用于替代RFC5208。非对称算法会涉及到1对公私钥&#xff0c;例如按照RSA算法&#xff0c;公钥是n和e&#xff0c;私钥是d和n。当需要将公私钥保存到文件时&#xff0c;需按照一定的格式保存。本文主要定义公私钥…

leetcode刷题(6):二叉树的使用

文章目录 104. 二叉树的最大深度解题思路c 实现 94. 二叉树的中序遍历解题思路c 实现 101. 对称二叉树解题思路c 实现 96. 不同的二叉搜索树解题思路c 实现 102. 二叉树的层序遍历解题思路c 实现 104. 二叉树的最大深度 题目: 给定一个二叉树 root &#xff0c;返回其最大深度…

一文读懂deepSpeed:深度学习训练的并行化

引言 在深度学习领域&#xff0c;模型训练的过程不仅资源密集&#xff0c;而且技术复杂。近年来&#xff0c;随着模型规模和数据量的不断增长&#xff0c;深度学习训练面临着越来越多的挑战。这些挑战主要体现在计算资源的需求、训练效率、模型复杂度以及内存管理等多个方面。…

postgres 修改系统时间测试

修改系统时间 [rootmmsql01 ~]# date 2024年 05月 16日 星期四 13:07:02 CST [rootmmsql01 ~]# timedatectl set-time "2024-05-16 13:30:00" [rootmmsql01 ~]# date 2024年 05月 16日 星期四 13:30:03 CST [rootmmsql01 ~]# timedatectl set-time "2024-05-16…

基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统

1 基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统 文章目录 1 基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统1.1 二、基于qemu固件安装操作系统1.1.1 1、virt-manager安装1.1.2 2、创建虚拟机1.1.2.1 Ubuntu系统开机等待时间长问题解决 1.1.3 3、virt-manager日常使用1.1.4 4、…

GAN实例基于神经网络

目录 1.前言 2.实验 1.前言 需要了解GAN的原理查看对抗生成网络&#xff08;GAN&#xff09;&#xff0c;DCGAN原理。 采用手写数字识别数据集 2.实验 import argparse import os import numpy as np import mathimport torchvision.transforms as transforms from torchvi…

怎么把照片变小做头像?多种方法教你图片改尺寸

现在在社交媒体平台或者是社交软件上&#xff0c;我们经常会去更改头像来展示自己&#xff0c;但是有时候我们拍摄的照片太大无法直接用作头像&#xff0c;这时候就需要去修改图片尺寸&#xff0c;将图片改大小到合适的数值才能使用&#xff0c;那么如何快速的将图片改大小呢&a…

在UBuntu上安装QT环境

一、UBuntu环境 二、官网下载QT https://download.qt.io/archive/qt/ 安装所需选择版本下载&#xff0c;可以现在windows下载在复制进去 三、安装QT 1、复制到ubuntu 2、打开终端&#xff0c;改变刚下载文件的权限 权限代号 r&#xff1a;读取权限&#xff0c;数字代号为 “…

手机图片恢复不求人:手动找回丢失的照片!

无论是外出旅行、聚会还是日常点滴&#xff0c;我们总是习惯用手机记录下来&#xff0c;让美好的瞬间定格在一张张照片中。然而&#xff0c;有时因为误删、清空缓存或是更换手机&#xff0c;那些珍贵的照片突然消失了。手机图片恢复有什么简单易行、容易上手的方法吗&#xff1…