win10, cuda 9.0, python 3.5环境下复现 Flow-Guided Feature Aggregation for Video Object Detection 问题总结

本文详细记录了在配置MXNet与CUDA过程中遇到的各种编译错误及解决方案,包括处理Python版本兼容性问题,解决链接器错误,以及在特定环境下配置CUDA和VS2017的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

demo

  1. error:Microsoft Visual C++ is required
    参考链接,在vs2017中配置vc++ 14

  2. LINK : fatal error LNK1158: cannot run ‘rc.exe’
    参考链接 将rc.exe、rcdll.dll从C:\Program Files (x86)\Windows Kits\8.1\bin\x64复制到C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

  3. ‘dict’ object has no attribute ‘iteritems’
    对应文件的dict.iteritems改为dict.items (python 2 与 python 3的区别)
    源代码使用python 2编写的,因此许多代码需要改动,主要为print、dict、pickle等函数。

  4. LINK : fatal error LNK1181: 无法打开输入文件“ID=2.obj”

    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe --compiler-bindir “C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin” --shared “-LD:\Program Files\Anaconda3\libs” “-LD:\Program Files\Anaconda3\PCbuild\amd64” “-LC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64” “-LC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64” “-LC:\Program Files (x86)\Windows Kits\10\lib\10.0.17134.0\ucrt\x64” “-LC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64” “-LC:\Program Files (x86)\Windows Kits\10\lib\10.0.17134.0\um\x64” -lcublas build\temp.win-amd64-3.5\Release\gpu_nms.obj -o build\lib.win-amd64-3.5\gpu_nms.cp35-win_amd64.pyd --linker-options=/nologo,/INCREMENTAL:NO,/LTCG,/MANIFEST:EMBED,ID=2,/MANIFESTUAC:NO,/IMPLIB:build\temp.win-amd64-3.5\Release\gpu_nms.cp35-win_amd64.lib,/NODEFAULTLIB:libcmt.lib
    gpu_nms.obj
    LINK : fatal error LNK1181: 无法打开输入文件“ID=2.obj”
    error: command ‘C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe’ failed with exit status 2

    有一个曲线救国的方法:点此。出现改行错误后,将"ID=2,"去掉,手动执行该命令。有一个曲线救国的方法:点此。出现改行错误后,将"ID=2,"去掉,手动执行该命令。

  5. mxnet.base.NotImplementedForSymbol: Function __iadd__ (namely operator "+=") with arguments (<class 'mxnet.symbol.symbol.Symbol'>, <class 'int'>) is not implemented for Symbol and only available in NDArray.
    szha的回答
    '.\fgfa_rfcn\symbols\resnet_v1_101_flownet_rfcn.py’中的 aggregated_conv_feat += tiled_weight * warp_list[i]改为
    aggregated_conv_feat = aggregated_conv_feat + tiled_weight * warp_list[i]

  6. 由于编译mxnet太麻烦,所以直接pip安装0.12.1版本;测试demo.py无问题。

训练

  1. fail to open fgfa_rfcn_vid-0002.params

    mxnet.base.MXNetError: [15:13:33] D:\Program Files (x86)\Jenkins\workspace\mxnet\mxnet\dmlc-core\src\io\local_filesys.cc:166: Check failed: allow_null LocalFileSystem: fail to open "./output/fgfa_rfcn/imagenet_vid\resnet_v1_101_flownet_imagenet_vid_rfcn_end2end_ohem\VID_val_videos\DET_train_30classes_VID_train_15frames\fgfa_rfcn_vid-0002.params"

    注释掉experiments/fgfa_rfcn/fgfa_rfcn_end2end_train_test.py 的第20行。painterdrown的回答

  2. TypeError: a bytes-like object is required, not ‘str’

    Traceback (most recent call last):
    File “_ctypes/callbacks.c”, line 234, in ‘calling callback function’
    File “D:\Program Files\Anaconda3\lib\site-packages\mxnet\operator.py”, line 621, in creator
    op_prop = prop_cls(**kwargs)
    File “Flow-Guided-Feature-Aggregation/experiments/fgfa_rfcn…\fgfa_rfcn\operator_py\proposal_target.py”, line 94, in init
    self._cfg = pickle.loads(cfg)
    TypeError: a bytes-like object is required, not ‘str’

    先将cfg用pickle.dumps序列化,再用pickle.loads反序列化,思路是没有问题的。但是不知为何,pickle.loads时cfg的格式变成了字符串而不是bytes——将值复制出来却又是bytes。索性将cfg序列化至磁盘,然后从磁盘中读出来。方法如下

    fgfa_rfcn/symbols/resnet_v1_101_flownet_rfcn.py, line 965, 增加

    with open('cfg.pck', 'wb') as fp:
        pickle.dump(cfg, fp)
    

    且原本的970行改为 cfg=None

    fgfa_rfcn\operator_py\proposal_target.py, line 36、line 94, 改为

    with open('cfg.pck', 'rb') as fp:
        self._cfg = pickle.load(fp)
    

    终于,成功进行训练。

    Epoch[0] Batch [100] Speed: 0.44 samples/sec Train-RPNAcc=0.907294, RPNLogLoss=0.296552, RPNL1Loss=0.189087,
    RCNNAcc=0.807704, RCNNLogLoss=1.681007, RCNNL1Loss=0.130364,
    Epoch[0] Batch [200] Speed: 0.44 samples/sec Train-RPNAcc=0.923818, RPNLogLoss=0.242203, RPNL1Loss=0.156525,
    RCNNAcc=0.861396, RCNNLogLoss=1.166992, RCNNL1Loss=0.163834,

测试

尚未进行

当在 `zsh` 中遇到 `zsh: command not found: uname` 错误时,说明系统无法找到 `uname` 命令。`uname` 是 Unix/Linux 系统的标准命令(通常位于 `/bin/uname` 或 `/usr/bin/uname`),用于显示系统信息(如内核名称、版本等)。以下是详细分析和解决方案: --- ### **1. 问题原因分析** #### **情况1:`PATH` 环境变量错误** - `uname` 的路径未包含在 `PATH` 中,导致 Shell 无法定位命令。 #### **情况2:系统文件损坏** - `/bin/uname` 或 `/usr/bin/uname` 被误删或损坏(极少数情况)。 #### **情况3:非 Unix/Linux 系统** -Windows 的原生 Shell(如 `cmd.exe` 或 `PowerShell`)中直接运行 `zsh`,但未正确配置 Unix 工具链(如 Cygwin、WSL 或 Git Bash)。 #### **情况4:Shell 配置冲突** - `~/.zshrc` 或 `~/.zprofile` 中可能覆盖了 `PATH` 或定义了错误的别名。 --- ### **2. 解决方案** #### **方案A:检查 `PATH` 环境变量** - **查看当前 `PATH`**: ```bash echo $PATH | tr &#39;:&#39; &#39;\n&#39; ``` - 确认输出中包含 `/bin` 和 `/usr/bin`(标准 Unix 命令路径)。 - **临时修复 `PATH`**: ```bash export PATH="/bin:/usr/bin:$PATH" ``` - 永久生效:将上述命令添加到 `~/.zprofile` 或 `~/.zshrc`。 #### **方案B:直接调用完整路径** - 尝试用绝对路径运行 `uname`: ```bash /bin/uname -a # 或 /usr/bin/uname -a ``` - 如果成功,说明是 `PATH` 问题;如果失败,可能是文件损坏。 #### **方案C:检查系统文件完整性** - **确认 `uname` 是否存在**: ```bash ls -l /bin/uname /usr/bin/uname 2>/dev/null ``` - 如果文件不存在,需重新安装核心工具包: - **Debian/Ubuntu**: ```bash sudo apt-get install --reinstall coreutils ``` - **macOS**: `uname` 是系统内置命令,通常不会丢失。若缺失,需通过恢复模式重装系统。 #### **方案D:在非 Unix 系统中配置环境** - **Windows + Git Bash**: - 确保 Git Bash 的 `/bin` 目录在 `PATH` 中: ```bash export PATH="/c/Program Files/Git/usr/bin:$PATH" # 示例路径,根据实际安装位置调整 ``` - **Windows + WSL**: - 在 WSL 中运行 `zsh` 时,确保启动的是 Linux 子系统的 Shell 而非原生 Windows Shell。 #### **方案E:检查 Shell 配置文件** - **排查 `~/.zshrc` 或 `~/.zprofile`**: ```bash grep -i "PATH=" ~/.zshrc ~/.zprofile ``` - 如果发现 `PATH` 被覆盖(如 `PATH="/custom/path"`),改为追加路径: ```bash export PATH="/custom/path:$PATH" ``` --- ### **3. 常见问题排查** #### **问题1:`PATH` 修复后仍报错** - **可能原因**:`zsh` 缓存了旧的命令路径。 - **解决方案**: ```bash rehash # 清除 zsh 的命令哈希表 hash -r # 替代命令(bash/zsh 通用) ``` #### **问题2:`uname` 存在但无执行权限** - **修复权限**: ```bash sudo chmod +x /bin/uname ``` #### **问题3:在 Docker 容器中报错** - **可能原因**:基础镜像过于精简(如 `alpine`)。 - **解决方案**: ```bash apk add coreutils # Alpine Linux # 或 apt-get update && apt-get install -y coreutils # Debian/Ubuntu ``` --- ### **4. 验证最终结果** ```bash # 1. 检查 uname 是否可执行 which uname || echo "Not found" # 2. 测试命令 uname -a 2>/dev/null && echo "Success" || echo "Failed" # 3. 检查系统关键路径是否在 PATH 中 echo $PATH | grep -E "/bin|/usr/bin" ``` --- ### **5. 预防措施** 1. **避免直接覆盖 `PATH`** 在 `~/.zshrc` 中使用追加而非赋值: ```bash export PATH="$HOME/.local/bin:$PATH" # 正确:用户路径优先 ``` 2. **使用 `command -v` 替代直接调用** 在脚本中检查命令是否存在: ```bash if ! command -v uname &>/dev/null; then echo "Error: uname not found" >&2 exit 1 fi ``` 3. **定期备份配置文件** 防止误修改导致环境变量丢失: ```bash cp ~/.zshrc ~/.zshrc.bak ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值