【YOLOX】训练过程の填坑记录

教程目录

  • 报错1:ModuleNotFoundError: No module named 'yolox'
      • 解决方法
      • 参考博客
  • 报错2:ImportError: dlopen:cannot load any more object with static TLS
      • 解决方法
      • 参考博客
  • 报错3: Running setup.py install for apex ... error
      • 解决方法
      • 参考博客
  • 报错4:RuntimeError: The NVIDIA driver on your system is too old.
      • 解决方法
      • 参考博客
  • 报错5: PackageNotFoundError: Packages missing in current channels:
      • 解决方法
      • 参考博客

本以为,配置环境是最难的阶段,没想到…


报错1:ModuleNotFoundError: No module named ‘yolox’

在这里插入图片描述

解决方法

主要因为一级目录搜索包原则:同级搜索,向下搜索,不支持向父级搜索。在pycharm等IDE中,从项目根路径开始向下搜索,train.py是二级目录,yolox是一级目录,而 train.py 是二级目录无法搜索一级目录yolox包。

因此在 from yolox.core import Trainer, launch 上面添加如下代码(注意要将路径替换成自己项目的路径)即可:

import sys
sys.path.append('/data3/zhanghuiyong/YOLOX/')

参考博客

  • ModuleNotFoundError: No module named ‘yolox’
  • YOLOX复现教程
  • 命令行下执行python找不包的解决方法

报错2:ImportError: dlopen:cannot load any more object with static TLS

【YOLOX】训练过程の填坑记录_第1张图片

解决方法

1. 更换 import xxx 顺序,将 import cv2 放到 import torch 之前。但在有些文件中,import torch 和import cv2 并没有同时出现如下图所示。

【YOLOX】训练过程の填坑记录_第2张图片
因此,可以将最终报错所需要的文件放到 train.py 的 import torch 前,如下图所示。

【YOLOX】训练过程の填坑记录_第3张图片

2. 此外,在查阅相关博客时发现,一些博主能够成功将程序运行起来时,opencv 的版本为2.7的版本,因此我还试着将 opencv-python 的版本,由 4.5 的高版本换为 3.1 的低版本。所以如果更换import 顺序没有作用的话,可以尝试降低 openv-python 的版本。

【YOLOX】训练过程の填坑记录_第4张图片
【YOLOX】训练过程の填坑记录_第5张图片

关于如何降低 opencv-python 的版本:

  1. 卸载 opencv-python: pip uninstall opencv-python
  2. 从网站 https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/ 下载对应的whl版本到一个任意文件夹中
  3. cd 到对应的文件夹,执行:pip3 install opencv_python-4.1.0.25-cp37-cp37m-manylinux1_x86_64.whl 进行安装。

或者

  1. 卸载 opencv-python: pip uninstall opencv-python
  2. 安装 opencv-python: pip install opencv-python==3.1.0.4

参考博客

  • 教程 | PyTorch分布式测试踩坑小结
  • ImportError: dlopen: cannot load any more object with static TLS
  • Github问题讨论

报错3: Running setup.py install for apex … error

在通过如下命令安装 apex 时

git clone https://github.com/NVIDIA/apex
cd apex
pip3 install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

报错:

RuntimeError: Error compiling objects for extension
Running setup.py install for apex … error
ERROR: Command errored out with exit status 1: /data3/zhanghuiyong/anaconda3/envs/YOLOX/bin/python3 -u -c ‘import io, os, sys, setuptools, tokenize; sys.argv[0] = ‘"’"’/tmp/pip-req-build-xtdi0urj/setup.py’"’"’; file=’"’"’/tmp/pip-req-build-xtdi0urj/setup.py’"’"’;f = getattr(tokenize, ‘"’"‘open’"’"’, open)(file) if os.path.exists(file) else io.StringIO(’"’"‘from setuptools import setup; setup()’"’"’);code = f.read().replace(’"’"’\r\n’"’"’, ‘"’"’\n’"’"’);f.close();exec(compile(code, file, ‘"’"‘exec’"’"’))’ --cpp_ext --cuda_ext install --record /tmp/pip-record-zvi4kbo5/install-record.txt --single-version-externally-managed --compile --install-headers /data3/zhanghuiyong/anaconda3/envs/YOLOX/include/python3.6m/apex Check the logs for full command output.

【YOLOX】训练过程の填坑记录_第6张图片

解决方法

这里问题的主要原因是 cuda 和 torch 版本不一致所导致的,我的cuda是10.2,pytorch1.9 的版本,所以会有这样的报错。若cuda版本不是很高,则可以改变pytorch的版本;若是感觉麻烦,可以通过修改 setup.py 代码,直接忽略版本检查。

以下介绍如何进行修改:

  1. 打开下载的软件安装包apex,找到setup.py文件。
  2. 将 setup.py 里面的 check_cuda_torch_binary_vs_bare_metal 函数进行更改,直接return,如下图所示:

【YOLOX】训练过程の填坑记录_第7张图片
然后再执行安装指令:

pip3 install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

此时可能还会报相同的错误,需要更换指令进行安装。 相关博客提到:

apex不能直接使用pip install来安装,用这种方式安装之后会报错。
具体应该使用如下方法安装:python3 setup.py install

最后安装成功,如下图。

【YOLOX】训练过程の填坑记录_第8张图片

参考博客

  • YOLOX安装部署使用训练教程以及报错
  • 调错日记|apex安装、pytorch载入模型报错
  • Pytorch 安装 APEX 疑难杂症解决方案

报错4:RuntimeError: The NVIDIA driver on your system is too old.

RuntimeError: The NVIDIA driver on your system is too old (found version 10010). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.

【YOLOX】训练过程の填坑记录_第9张图片

解决方法

这里问题的主要原因也是 cuda 和 torch 版本不一致所导致的,实验室的cuda是10.2的版本,pytorch 是 1.9 的版本,但官方(可以点击链接查看) 给出的与 cuda10.2版本对应的pytorch 版本应该是 1.7的,因此在实验室不能改变cuda 版本的情况下我只能将 pytorch 的版本降低。

【YOLOX】训练过程の填坑记录_第10张图片

步骤:

  1. 卸载pytorch
conda uninstall pytorch
conda uninstall libtorch
  1. 安装pytorch
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=10.1

参考博客

  • pytorch安装及卸载

报错5: PackageNotFoundError: Packages missing in current channels:

解决方法

主要原因是因为镜像源链接里没有包含 pytorch的,因此需要额外添加。通过如下指令添加 pytorch 额外镜像源链接:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64

添加之后,如图所示

【YOLOX】训练过程の填坑记录_第11张图片

参考博客

  • 使用清华镜像安装pytorch失败的解决方法
  • Python安装库Could not find a version that satisfies the requirement requests (from versions: none)
  • 为Conda添加清华软件源

你可能感兴趣的:(深度学习,Bug,&,Solution,pytorch)