安装

需求

  • Linux 或 macOS,Python ≥ 3.7

  • PyTorch ≥ 1.8 和 torchvision 与 PyTorch 安装匹配。 在 pytorch.org 处一起安装它们,以确保这一点。

  • OpenCV 可选,但演示和可视化需要。

从源代码构建 Detectron2

需要 gcc & g++ ≥ 5.4。 ninja 可选,但推荐使用,可以加快构建速度。 在拥有它们之后,运行

python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'
# (add --user if you don't have permission)

# Or, to install it from a local clone:
git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2

# On macOS, you may need to prepend the above commands with a few environment variables:
CC=clang CXX=clang++ ARCHFLAGS="-arch x86_64" python -m pip install ...

重新构建从本地克隆构建的 detectron2,请使用 rm -rf build/ **/*.so 首先清除旧的构建。 您通常需要在重新安装 PyTorch 后重新构建 detectron2。

安装预构建的 Detectron2(仅限 Linux)

从下表中选择要安装的版本 v0.6(2021 年 10 月)

CUDAtorch 1.10torch 1.9torch 1.8
11.3
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cu113/torch1.10/index.html
11.1
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cu111/torch1.10/index.html
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cu111/torch1.9/index.html
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cu111/torch1.8/index.html
10.2
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cu102/torch1.10/index.html
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cu102/torch1.9/index.html
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cu102/torch1.8/index.html
10.1
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cu101/torch1.8/index.html
cpu
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cpu/torch1.10/index.html
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cpu/torch1.9/index.html
安装
python -m pip install detectron2 -f \
  https://dl.fbaipublicfiles.com/detectron2/wheels/cpu/torch1.8/index.html

请注意

  1. 预构建的软件包必须与相应版本的 CUDA 和 PyTorch 的官方软件包一起使用。 否则,请从源代码构建 detectron2。

  2. 每隔几个月就会发布新软件包。 因此,软件包可能不包含主分支中的最新功能,并且可能与使用 detectron2 的研究项目的开发分支不兼容(例如,那些在 projects 中的项目)。

常见安装问题

点击每个问题以查看解决方案

类似于“TH..”、“at::Tensor...”、“torch...”的未定义符号

这通常发生在 detectron2 或 torchvision 没有用您正在运行的 PyTorch 版本编译时。

如果错误来自预构建的 torchvision,请卸载 torchvision 和 pytorch,然后按照 pytorch.org 中的说明重新安装它们。 这样版本就会匹配。

如果错误来自预构建的 detectron2,请查看 发布说明,卸载并重新安装与 pytorch 版本匹配的正确预构建 detectron2。

如果错误来自您从源代码手动构建的 detectron2 或 torchvision,请删除您构建的文件(build/**/*.so)并重新构建它,以便它可以获取您环境中当前版本的 pytorch。

如果以上说明不能解决此问题,请提供一个可以重现此问题的环境(例如 Dockerfile)。

缺少 torch 动态库,或者使用 detectron2 时立即出现段错误。这通常发生在 detectron2 或 torchvision 没有用您正在运行的 PyTorch 版本编译时。 请查看前面的常见问题以了解解决方案。
未定义的 C++ 符号(例如“GLIBCXX..”)或找不到 C++ 符号。
通常是因为库是用更新的 C++ 编译器编译的,但用旧的 C++ 运行时运行。

这经常发生在旧的 anaconda 上。 运行 conda update libgcc 升级其运行时可能会有所帮助。

根本的解决方案是避免不匹配,要么使用旧版本的 C++ 编译器编译,要么使用适当的 C++ 运行时运行代码。 要使用特定的 C++ 运行时运行代码,可以使用环境变量 LD_PRELOAD=/path/to/libstdc++.so

“找不到 nvcc”或“没有用 GPU 支持编译”或“Detectron2 CUDA 编译器:不可用”。
构建 detectron2 时找不到 CUDA。 您应该确保
python -c 'import torch; from torch.utils.cpp_extension import CUDA_HOME; print(torch.cuda.is_available(), CUDA_HOME)'

在构建 detectron2 时打印 (True, a directory with cuda)

大多数模型可以在没有 GPU 支持的情况下运行推理(但不能训练)。 要使用 CPU,请在配置中设置 MODEL.DEVICE='cpu'

“无效的设备函数”或“没有可用于执行的内核映像”。
两种可能性
  • 您使用一个版本的 CUDA 构建 detectron2,但使用另一个版本运行它。

    要检查是否是这样,请使用 python -m detectron2.utils.collect_env 找出不一致的 CUDA 版本。 在此命令的输出中,您应该期望“Detectron2 CUDA 编译器”、“CUDA_HOME”、“PyTorch 使用 - CUDA 构建”包含相同版本的 cuda 库。

    当它们不一致时,您需要要么安装不同的 PyTorch 构建(或自己构建)以匹配您本地的 CUDA 安装,要么安装不同的 CUDA 版本以匹配 PyTorch。

  • PyTorch/torchvision/Detectron2 没有为正确的 GPU SM 架构(也称为计算能力)构建。

    PyTorch/detectron2/torchvision 包含的架构在 python -m detectron2.utils.collect_env 中的“架构标志”中可用。 它必须包含您 GPU 的架构,可以在 developer.nvidia.com/cuda-gpus 上找到。

    如果您使用预构建的 PyTorch/detectron2/torchvision,它们已经包含了对大多数流行 GPU 的支持。 如果不支持,您需要从源代码构建它们。

    从源代码构建 detectron2/torchvision 时,它们会检测 GPU 设备并仅为该设备构建。 这意味着编译后的代码可能无法在不同的 GPU 设备上运行。 要为正确的架构重新编译它们,请删除所有已安装/编译的文件,并使用 TORCH_CUDA_ARCH_LIST 环境变量正确设置重新构建它们。 例如,export TORCH_CUDA_ARCH_LIST="6.0;7.0" 使它为 P100 和 V100 都进行编译。

未定义的 CUDA 符号;无法打开 libcudart.so
用于构建 detectron2 或 torchvision 的 NVCC 版本与您正在运行的 CUDA 版本不匹配。 这经常发生在使用 anaconda 的 CUDA 运行时时。

使用 python -m detectron2.utils.collect_env 找出不一致的 CUDA 版本。 在此命令的输出中,您应该期望“Detectron2 CUDA 编译器”、“CUDA_HOME”、“PyTorch 使用 - CUDA 构建”包含相同版本的 cuda 库。

当它们不一致时,您需要要么安装不同的 PyTorch 构建(或自己构建)以匹配您本地的 CUDA 安装,要么安装不同的 CUDA 版本以匹配 PyTorch。

来自 NVCC / NVRTC 的 C++ 编译错误,或者“不支持的 gpu 架构”。
一些可能性
  1. 本地的 CUDA/NVCC 版本必须与 PyTorch 的 CUDA 版本匹配。 两者都可以在 python collect_env.py 中找到(从 这里 下载)。 当它们不一致时,您需要要么安装不同的 PyTorch 构建(或自己构建)以匹配您本地的 CUDA 安装,要么安装不同的 CUDA 版本以匹配 PyTorch。

  2. 本地的 CUDA/NVCC 版本应支持您 GPU 的 SM 架构(也称为计算能力)。 您 GPU 的能力可以在 developer.nvidia.com/cuda-gpus 上找到。 NVCC 支持的能力在 这里 列出。 如果您的 NVCC 版本太旧,可以通过设置环境变量 TORCH_CUDA_ARCH_LIST 为更低的、支持的能力来解决此问题。

  3. 您使用的 NVCC 和 GCC 的组合不兼容。 您需要更改其中一个的版本。 有关一些有效组合,请参阅 这里。 值得注意的是,CUDA<=10.1.105 不支持 GCC>7.3。

    PyTorch 使用的 CUDA/GCC 版本可以通过 print(torch.__config__.show()) 找到。

“ImportError:无法导入名称 '_C'”。
请按照上述说明构建并安装 detectron2。

或者,如果您正在从 detectron2 的根目录运行代码,请 cd 到另一个目录。 否则,您可能无法导入您安装的代码。

Windows 上的任何问题。

Detectron2 正在使用 CircleCI 不断地在 Windows 上构建。 但是,我们不提供对它的官方支持。 欢迎改进 Windows 代码兼容性的 PR。

在一些“TraceWarning”之后,ONNX 转换出现段错误。
ONNX 软件包是用过时的编译器编译的。

请使用与 PyTorch 使用的版本更接近的编译器从源代码构建并安装 ONNX(在 torch.__config__.show() 中可用)。

在旧版本的 MacOS 上出现“找不到库 -lstdc++”

请参阅 此 stackoverflow 答案

在特定环境中安装:

  • Colab:请参阅我们的 Colab 教程,其中包含分步说明。

  • Docker:官方的 Dockerfile 使用几个简单的命令安装 detectron2。