调试SSD-pytorch代码问题汇总

本文详细介绍了SSD.pytorch模型在调试过程中遇到的常见问题及解决方案,包括代码修改、异常处理、CUDA缓存清理等,适用于模型训练与测试阶段。

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

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

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

2. multibox_loss.py 中,97行

“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: ’ 错误:

args = parser.parse_args() 替换为:
args, unknown = parser.parse_known_args()
<think> 嗯,用户遇到了一个经典的Linux命令使用问题,和之前引用中描述的案例本质上相同。用户在执行cp命令复制目录时遇到了"omitting directory"错误,这明显是因为目录复制需要递归参数而用户没有添加。 用户的具体命令是`cp /root/faster-rcnn-pytorch/VOCdevkit /root/ssd-pytorch`,这是两个深度学习项目目录之间的操作。考虑到VOCdevkit通常包含PASCAL VOC数据集,里面可能有上千个图片和标注文件组成的多层目录结构,必须使用递归复制。 注意到用户可能是深度学习研究者或工程师,正在复用数据集。有趣的是用户同时提到了faster-rcnn和ssd两个目标检测算法项目,ta可能在对比实验或迁移数据。这类用户通常需要高效完成环境配置,对命令行可能不够熟悉但理解力强。 回顾引用[1]的解释很准确:Linux的cp命令默认不复制目录是为防止误操作,需要显式使用-r(或-R、--recursive)参数。用户案例的特殊性在于目标路径/root/ssd-pytorch已经存在,这种情况cp会把源目录复制为目标路径的子目录(即/root/ssd-pytorch/VOCdevkit)。 另外想到两个潜在陷阱:一是如果目标目录已有同名子目录,递归复制会覆盖而非合并;二是用户如果用tab补全路径要小心结尾斜杠——有斜杠时复制目录内容,无斜杠则复制整个目录。这些细节都应该在回答中提醒。 最后决定在解决方案里给出三种完整命令变体:基本递归复制、带进度显示的rsync方案、以及创建父目录的复合命令。这样既解决当前问题,也覆盖了用户可能需要的进阶场景。 </think> 这个错误表明 `cp` 命令遇到了一个目录 `/root/faster-rcnn-pytorch/VOCdevkit`,但你**没有使用递归复制选项 `-r`(或 `-R`、`--recursive`)**。Linux 的 `cp` 命令默认只复制文件,遇到目录时会跳过并报此错误。 **解决方法如下:** 1. **使用 `-r` (递归) 选项(首选方法):** 这是复制目录及其所有内容(文件、子目录)的标准方法。 ```bash cp -r /root/faster-rcnn-pytorch/VOCdevkit /root/ssd-pytorch/ ``` * **命令详解:** * `cp`: 复制命令。 * `-r` (或 `-R`, `--recursive`): 告诉 `cp` 递归地复制整个目录树。 * `/root/faster-rcnn-pytorch/VOCdevkit`: 源目录的完整路径。 * `/root/ssd-pytorch/`: 目标目录的完整路径。如果 `/root/ssd-pytorch/` 目录**已经存在**,`VOCdevkit` 目录及其内容会被复制到 `/root/ssd-pytorch/VOCdevkit` 下面。如果 `/root/ssd-pytorch/` **不存在**,则 `cp -r` 会尝试创建它并将源目录的内容放入其中(效果等同于创建 `/root/ssd-pytorch` 并复制 `VOCdevkit` 进去)。 2. **使用 `rsync` (替代方法,功能更强大):** `rsync` 是另一个强大的复制工具,默认支持递归复制目录,并提供进度显示、增量复制等高级功能。 ```bash rsync -av /root/faster-rcnn-pytorch/VOCdevkit/ /root/ssd-pytorch/ ``` * **命令详解:** * `rsync`: 强大的文件同步工具。 * `-a`: 归档模式,保留权限、所有权、时间戳等,并启用递归复制 (`-r` 是其一部分)。 * `-v`: 详细输出模式,显示正在复制的文件。 * 注意源路径末尾的 `/`:`/root/faster-rcnn-pytorch/VOCdevkit/`(带斜杠)表示复制该目录**下的内容**到目标目录 `/root/ssd-pytorch/` 下。如果源路径末尾不加 `/`(`/root/faster-rcnn-pytorch/VOCdevkit`),则会将 `VOCdevkit` 目录本身复制到目标目录下(效果同 `cp -r` 不带斜杠)。 3. **确保目标目录存在(如果必要):** 虽然 `cp -r` 会尝试创建最终的目标目录,但有时显式创建父目录更安全,特别是路径较长时。使用 `mkdir -p`: ```bash mkdir -p /root/ssd-pytorch/ # 确保目标父目录存在,-p 选项创建不存在的父级目录 cp -r /root/faster-rcnn-pytorch/VOCdevkit /root/ssd-pytorch/ ``` **总结:** 你遇到的问题是因为复制的是**目录** (`VOCdevkit`),而 `cp` 命令需要 `-r`(或 `-R`)选项来处理目录。**直接在你的命令前加上 `-r` 选项即可解决:** ```bash cp -r /root/faster-rcnn-pytorch/VOCdevkit /root/ssd-pytorch/ ``` [^1]: 参考站内引用关于 `cp: omitting directory` 错误的核心原因分析:`cp` 命令默认不复制目录,需要 `-r` 选项进行递归复制。
评论 63
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值