CUDA11.3 Pytorch1.11.0 Python3.9 亲测可用,其他版本应该也可以实现,这篇能解决大部分遇到的报错问题。
1.建立conda环境
conda create --name maskrcnn_benchmark -y
conda activate maskrcnn_benchmark
可以自己指定一个python版本
2.安装pip
conda install ipython pip
3.安装必要的包
pip install ninja yacs cython matplotlib tqdm opencv-python
4.安装pytorch
官方给出的教程如下,但是要求cuda9.0,我不想降版本
conda install -c pytorch pytorch-nightly torchvision cudatoolkit=9.0
根据自己选择的python版本和自己的cuda版本安装对应的pytorch,torchvision和torchaudio。
如cuda11.6
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.6 -c pytorch
cuda11.3
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio cudatoolkit=11.3 -c pytorch
但是用conda或者pip下载实在是太慢了很容易中途断网,我选择直接下载对应的whl文件,上传大服务器然后直接pip install这个whl文件就可以。这个网站也可以查到到底对应哪些版本。
我只下载了torch,剩下两个直接用pip安装对应版本的了。如:
python -m pip install torchvision==0.13.0 torchaudio==0.12.0
下载地址: pytorch、torchvision历史版本的whl文件下载地址、版本对应关系与离线安装方法_pytorch whl-优快云博客
5.安装pycocotools
我是直接在根目录下下载的,反正这几步安装完了一定要退回,要不然下一个git clone就在这个目录下了。
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
python setup.py build_ext install
cd #退回根目录
6.安装cityscapesScripts
git clone https://github.com/mcordts/cityscapesScripts.git
cd cityscapesScripts/
python setup.py build_ext install
记得退回
7.安装 apex
git clone https://github.com/NVIDIA/apex.git
cd apex
python setup.py install --cuda_ext --cpp_ext
安装apex报错:找不到torch,首先查看pytorch是否已经正确安装。在bash中输入python
import torch
print(torch.__version__)
如果能正确输出,那就是安装好了,否则退回安装pytorch那一步。
python3 setup.py install
如果安装apex这一步有别的报错,应该是有别的编译库没有装,可以把报错信息搜索一下,用apt装一下就行。
8.下载源码
git clone https://github.com/facebookresearch/maskrcnn-benchmark.git
cd maskrcnn-benchmark
# the following will install the lib with
# symbolic links, so that you can modify
# the files if you want and won't need to
# re-build it
python setup.py build develop
真正的恶战开始了,这一步报错很多,我也查了很久,根据这个github回答亲测有效,我也会一步一步列出。
remove THC.h by zyddnys · Pull Request #37 · CoinCheung/pytorch-loss
进入"maskrcnn_benchmark/csrc/"
a.删除或注释所有的#include <THC/THC.h>
b.把所有的THCudaCheck换成AT_CUDA_CHECK
c.新建一个common.hpp文件
/**
Computes ceil(a / b)
*/
template <typename T>
__host__ __device__ __forceinline__ T THCCeilDiv(T a, T b) {
return (a + b - 1) / b;
}
/**
Computes ceil(a / b) * b; i.e., rounds up `a` to the next highest
multiple of b
*/
template <typename T>
__host__ __device__ __forceinline__ T THCRoundUp(T a, T b) {
return THCCeilDiv(a, b) * b;
}
d.cu文件都加上common.hpp
#include "common.hpp"
重新安装一下,如果有以下错误:
9.检验环境是否安装完成,运行示例代码
官方给出的代码:
cd demo
# by default, it runs on the GPU
# for best results, use min-image-size 800
python webcam.py --min-image-size 800
但是我的服务器没有摄像头,我在demo里新建了一个文件,因为我是服务器转发图像到本地电脑,用了matplotlib显示,大家不需要的部分注释掉就行:
import cv2
from maskrcnn_benchmark.config import cfg
from predictor import COCODemo
import matplotlib
matplotlib.use('TkAgg') # 或者 'Agg'
import matplotlib.pyplot as plt
# 配置文件路径
config_file = "../configs/caffe2/e2e_mask_rcnn_R_50_FPN_1x_caffe2.yaml"
# 更新配置
cfg.merge_from_file(config_file)
cfg.merge_from_list(["MODEL.DEVICE", "cpu"])
# 创建 COCO demo 实例
coco_demo = COCODemo(
cfg,
min_image_size=800,
confidence_threshold=0.7,
)
# 加载图像
image_path = "test.png" # 替换为实际图像路径
image = cv2.imread(image_path) # 使用 OpenCV 加载图像
# 运行预测
predictions = coco_demo.run_on_opencv_image(image)
# 显示预测结果
# 使用 matplotlib 显示图像
plt.imshow(cv2.cvtColor(predictions, cv2.COLOR_BGR2RGB)) # 转换颜色格式为 RGB
plt.axis('off') # 关闭坐标轴
plt.show()
然后又开始报错,这部分基本已经完成了,就是找到报错的文件然后根据报错内容修改就可以。
改成PY37还报错,直接if 1就行。
其他包的依赖都要求numpy>=1.23,而且太低了也会报错 from numpy.core._multiarray_umath import (ImportError: DLL load failed),故而选择在代码中进行全局替换
使用grep查找含有np.float的文件
grep -r 'np.float' .
再将np.float都换成np.float64
find . -type f -name "*.py" -exec sed -i 's/np.float/np.float64/g' {} +
之后会下载一个文件
下载完又报错,找到这个文件取消判断就可以。
整理不易,有帮助的话点赞关注收藏一下吧~感谢!!