【无标题】

解决:复现RFLA遇到的报错RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu)

问题描述:

使用博主https://blog.csdn.net/sinat_38213499/article/details/126813894的调试方法进行调试(在此表示感谢),在最后一步执行训练命令:python tools/train.py configs/rfla/aitod_cascade_r50_rfla_kld_1x.py后,训练了12轮,最后保存时报错:RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu)
报错截图

原因:

网上有一些这个问题的解决办法,但都是在跑yolo遇到的这个问题,由于rfla是22年才出的,网上资料很少。查阅了一些资料,原来是我们训练时数据是在GPU上的,而有部分自己生成的数据是保存在CPU上的,所以有冲突就会报这个错。 于是借鉴yolo的修改办法进行了尝试。

解决办法:

1、根据报错的最后个文件File “/home/ipsg/code/tx/mmdet-rfla-main/mmdet/core/post_processing/bbox_nms.py”,找到变量inds,就是生成这个ins变量时储存在cpu里了,需要将这个变量转换到GPU再进行后续处理。这是修改前的代码截图
在这里插入图片描述
给inds加一个.to(device),在使用.to(device)前得先声明一下。

device = torch.device("cuda:0" if torch.cuda.is_available() else "cuda:1")
inds = valid_mask.nonzero(as_tuple=False).squeeze(1).to(device)

在这里插入图片描述
2、看网上也对其他地方进行了修改,我索性就参照着修改了(训练一次的时间太久了,两个办法都用了,然后再训练,至于是哪个办法有用就不去深究了,有用就可以)。在…/mmdet-rfla-main/mmdet/core/bbox/assigners/point_assigner.py中找到变量points_range,进行和第一步一样的操作。

device = torch.device("cuda:0" if torch.cuda.is_available() else "cuda:1")  #加一行
inds = valid_mask.nonzero(as_tuple=False).squeeze(1).to(device)  #替换成这一句

这是修改后的代码截图
在这里插入图片描述

结果:

再训练,12轮后成功保存输出结果
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值