MMDet踩坑与使用体会
1、报错module 'torch' has no attribute 'count_nonzero'
我的Pytorch版本是1.6.0,可以在pytorch网页上搜一下,count_nonzero这个方法最低版本要求1.7.0
https://pytorch.org/docs/1.6.0/search.html?q=count_nonzero&check_keywords=yes&area=default
可用以下代码测试一下已安装torch是否支持这个方法
import torch
print(torch.__version__)x = torch.zeros(3,3)
x[torch.randn(3,3) > 0.5] = 1print(x)a=torch.count_nonzero(x)
print(a)
如果确认是pytorch版本太高的原因,又不想重装pytorch可以改成:
a=torch.tensor(torch.nonzero(x).shape[0])
2、同个任务不同loss的比较
同个任务换了模型后不能简单比较哪个方法的loss小,因为不同方法的loss定义可能是不同的。比如在分割场景中,有的loss有检测损失box_loss,有的没有,就不能粗暴对比了。可以具体关注其中的segm_mAP或loss_mask
3、改配置继续训练某个模型
如果改了配置文件coco_inatance.py而模型没变,注意把模型保存路径下的配置文件如cascade_mask_rcnn_r50_fpn_1x_coco.py删掉,之前训练的时候改了几次参数,最后的修改没完全更新上,效果烂烂的。如下的dump config是引起这个问题的关键。
# dump config
cfg.dump(osp.join(cfg.work_dir, osp.basename(args.config)))
4、同个模型不同backbone
同个模型根据backbone的不同,有多个模型,可查看对应配置文件夹下的README.md,了解其准确率mAP。有意思的是,某些模型的AP范围,最差的backbone可能AP很低,但最好的又很高。所以在用多个模型选型时,不能简单地用每个模型的的R-50版本进行比较。
README.md同样启发我们要用“mask mAP”、“box mAP”这种指标进行对比,而不是看loss。虽然在同个框架下,但loss不同。
5、OOM显存不足
在不同模型间切换时,注意修改某些重要参数,尤其某些配置文件也是层层嵌套的。如训练swin版的mask2former也要改调用的r50版配置文件,并且不同模型的类数量等参数可能命名方式不同,看一下配置文件就知道了。
vim configs/mask2former/mask2former_r50_lsj_8x2_50e_coco.py
修改:
num_things_classes = 80
samples_per_gpu=2,
workers_per_gpu=2,
改后:
num_things_classes = 1
samples_per_gpu=1,
workers_per_gpu=0,
6、评价指标
训练时打印如下输出
2023-01-11 02:32:33,580 - mmdet - INFO - Epoch(val) [83][151] bbox_mAP: 0.8710, bbox_mAP_50: 0.9640, bbox_mAP_75: 0.9090, bbox_mAP_s: -1.0000, bbox_mAP_m: -1.0000, bbox_mAP_l: 0.8710, bbox_mAP_copypaste: 0.871 0.964 0.909 -1.000 -1.000 0.871, segm_mAP: 0.8740, segm_mAP_50: 0.9550, segm_mAP_75: 0.9090, segm_mAP_s: -1.0000, segm_mAP_m: -1.0000, segm_mAP_l: 0.8740, segm_mAP_copypaste: 0.874 0.955 0.909 -1.000 -1.000 0.874
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.874
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.955
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.909
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 ] = -1.000
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.874
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.896
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.896
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.896
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 ] = -1.000
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.896
其中涉及
bbox_mAP、bbox_mAP_50、bbox_mAP_75、bbox_mAP_s、bbox_mAP_m、bbox_mAP_l
"bbox_mAP_copypaste": "0.845 0.933 0.857 -1.000 -1.000 0.845",
segm_mAP、segm_mAP_50、segm_mAP_75、segm_mAP_s、segm_mAP_m、segm_mAP_l
segm_mAP_copypaste": "0.847 0.928 0.857 -1.000 -1.000 0.848"
以上含义官方介绍:
https://blog.csdn.net/qq_17457331/article/details/84590662
https://blog.csdn.net/qq_27095227/article/details/105450470
这些是coco数据集的评价指标,
_50、_75 指IOU;
_s、_m、_l指面积大小area<32^2、 32^2< area<96^2、area >96^2,
0.50:0.95 指0.50:0.05:0.95的十个阈值,AP是用十个阈值下的P求平均获取的
7、“KeyError: 'TABLEMASTER is not in the models registry'” 提示没注册
TABLEMASTER 用到了mmdet、mmocr、mmcv,在TABLEMASTER开源代码里显式有mmdet和mmocr
搞了半天是因为我注释掉了下面2行,不该注释掉。项目中有些看起来没有用用到的import 包,不要注释掉,会影响mmcv的注册机制。搞不通的时候反思下,自己都干过啥
from mmocr.datasets import build_dataset # noqa: F401
from mmocr.models import build_detector # noqa: F401
8、KeyError: 'DiceLoss is already registered in models'
分析:我的mmdet版本高于项目要求,因此比开源的内容多一些,重复安装后,有些东西就重合了。改一下源码,加一行continue跳过即可,不重复注册。
vim /usr/local/lib/python3.7/dist-packages/mmcv/utils/registry.py
9、mmocr的衍生TABLEMASTER,训练时需要生成lmdb文件
lmdb(Lightning Memory-Mapped Database)闪电般的内存映射数据库,减少读取大量小文件的IO开销
data.mdb 数据文件
lock.mdb锁文件
MMDet踩坑与使用体会相关推荐
- MMDetectionV2 + Colab 超详细教程及踩坑实录
文章目录 前言 一.环境配置 二.准备自己的数据集 Aug.14更新 三:修改config文件 3.1 文件结构 3.2 (本地)修改config文件 3.2.1 (本地)构造自己模型的权重文件 3. ...
- 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)
目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...
- java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...
- python导入类有红线_python踩坑系列之导入包时下划红线及报错“No module named”问题...
python踩坑系列之导入包时下划红线及报错"No module named"问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下 ...
- mysql运维工资_MySQL运维踩坑
image ZERO 背景 本文主要是介绍在MySQL使用运维过程中所遇到的一些坑爹的地方,予自己以做记录! 前言 因操作系统重装之后,安装了mysql5.7,而由此带来了一系列的问题,现将解决这些m ...
- 微信跳一跳高分辅助踩坑
旧博文,搬到 csdn 原文:http://rebootcat.com/2018/01/08/wechat_jump_hack/ 最近挺火的微信跳一跳 最近新版微信的『跳一跳』小程序着实火了一把,也把 ...
- 【踩坑记录】记一次MySQL主从复制延迟的坑
最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误. 情景 一个活动信息需要审批,审批之后才能生效.因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容, ...
- 分布式深度学习最佳入门(踩坑)指南
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Lyon@知乎(已授权) 来源丨https://zhuanla ...
- python array赋值_从踩坑学Python内部原理(5):执行时机的差异
(给Python开发者加星标,提升Python技能) 英文:Satwik Kansal,翻译:暮晨 Python开发者整理自 GitHub [导读]:Python 是一个设计优美的解释型高级语言,它提 ...
最新文章
- 深度有趣 | 27 服饰关键点定位
- 【资源】Faster R-CNN原理及代码讲解电子书
- linux能远程打开桌面版,如何从Linux上远程显示Windows桌面
- OSINT系列:威胁信息挖掘ThreatMiner
- linux下C code block环境,linux 使用 codeblocks
- 重庆二师计算机科学与技术,应用型本科院校计算机科学与技术专业一流课程建设思考──以重庆第二师范学院为例...
- 用python制作一款录屏小工具
- 《深入理解Java虚拟机》第5章 调优案例分析与实战
- Navi.Soft31.任务管理器(定时同步+数据采集)
- CEF浏览器 模拟鼠标点击
- 2022“杭电杯”中国大学生算法设计超级联赛(5)杭电多校第五场
- pointer在html作用,html-CSS中的“ cursor:pointer”效果为什么不起作用
- 只有VOB 文件,怎样使用IfoEdit生成烧制DVD所需的IFO、BUP文件!
- 摄影的工作原理:相机,镜头等
- 苹果电脑MACbook Air快捷键大全
- 电脑新加内存条后 游戏崩溃 浏览器卡死 电脑蓝屏
- elemet-ui后台表格自动排序解决办法
- OA办公系统,打造企业办公智能化管理
- 使用jar命令替换jar包中的jar文件
- 人体骨骼关键点检测的算法
热门文章
- Attempt to invoke virtual method ‘void cn.jiguang.share.android.api.AbsPlatform.notifyError
- python青蛙跳台阶_Python算法题(一)——青蛙跳台阶
- warning:In file included from...
- Html5原生video标签禁止全屏播放的实现
- 喹啉羧酸类 DHODH 抑制剂用于治疗急性髓系白血病
- LeetCode 1052 爱生气的书店老板 HERODING的LeetCode之路
- 三级网络技术备考重点之中小型网络系统总体规划与设计
- 【Java】银行账户管理系统
- 远程语音 开源_通过开源语音聊天简化远程会议
- ps之一寸照片的制作详解(1)