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_l或loss_mask

3、改配置继续训练某个模型

如果改了配置文件coco_inatance.py而模型没变,注意把模型保存路径下的配置文件如cascade_mask_rcnn_r50_fpn_1x_coco.py删掉,之前训练的时候改了几次参数,最后的修改没完全更新上,效果烂烂的。

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,

你可能感兴趣的:(ML,DL,pytorch,深度学习,python)