我是靠谱客的博主 友好母鸡,最近开发中收集的这篇文章主要介绍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] = 1
print(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踩坑与使用体会的全部内容,希望文章能够帮你解决MMDet踩坑与使用体会所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部