调试SSD-pytorch代码问题汇总

2022-09-02 20:04:37 浏览数 (1)

代码链接:https://github.com/amdegroot/ssd.pytorch

1.执行demo-ssd.py,改动detection.py中49行:

if scores.numel() == 0:#scores.dim()

2. multibox_loss.py 中,97行

代码语言:javascript复制
“loss_c[pos] = 0” 调试过程中发现 loss_c的shape与pos的shape 不同,会出现不匹配错误,因此将此句改为以下:

loss_c[pos.view(-1,1)] = 0

将pos通过view(-1,1) 改为与loss_c相匹配的shape。

3.multibox_loss.py中 N=num_pos.data.sum()的dtype为torch.int64,而进行除法操作的 loss_l 与loss_c的dtype为torch.float32,执行时会出现 ‘torch.cuda.LongTensor but found type torch.cuda.FloatTensor for argument’类似错误,此时需要查看参数类型,将N的类型改为torch.float32即可。

N = num_pos.data.sum() N=N.float()

4.train.py代码中,在迭代过程中,每次执行batch张图片,通过images, targets = next(batch_iterator)读取图片时,如果next()中没有数据后会触发Stoplteration异常,使用下面语句替换 images, targets = next(batch_iterator)将解决这种异常问题。

while True: try: # 获得下一个值: images, targets = next(batch_iterator) except StopIteration: # 遇到StopIteration就退出循环 break

5.RuntimeError: CUDNN_STATUS_INTERNAL_ERROR的解决办法:

需要清除CUDA缓存,使用sudo进行,但它属于Linux命令,windows中需要进行以下操作:

(1).在任意目录中新建文本文件,命名为sudo.js

(2).用记事本打开刚才新建的文件,粘贴下面代码

var command = WScript.Arguments.Item(0); var argument = ""; for (var i = 0; i < WScript.Arguments.Count(); i){ argument = WScript.Arguments.Item(i) " "; } try{ var shellapp = new ActiveXObject("Shell.Application"); shellapp.ShellExecute(command, argument, null, "runas", 1); } catch(e){ WScript.Echo("Something wrong: " e.description " By http://www.alexblair.org"); }

使用cmd打开sudo.js文件即可进行sudo操作。

(3).执行sudo rm -f ~/.nv/ (一定最后边不要漏掉“/”,否则会提示“.nv”是目录)

注意:当执行(3)中语句时,我的系统提示‘Windows 找不到文件 rm’,这时可以尝试在代码最处添加

torch.cuda.set_device(0)

6.test.py 与 eval.py中 nosetest运行时出现 ‘ _jb_nosetest_runner.py: error: unrecognized arguments: ’ 错误:

代码语言:javascript复制
args = parser.parse_args() 替换为:

args, unknown = parser.parse_known_args()

0 人点赞