1. 背景:

刚入门CV和deep learning几个月,想复现一下yolact++,最初的计划是在实验室电脑搭建环境复现,后来发现RTX3080显卡只支持CUDA11,那么能下载的pytorch最低版本是1.7,于是搭建了一个pytorch1.7的环境,调了一堆的bug把DCNv2跑通了,但是测试的时候还是寄了,好像是GPU算力匹配的问题。后来在显卡为MX250的笔记本Windows环境下配置成功了,就是帧率感人,实时识别只有3~4fps,原论文的效果是30+fps。跟汇报了一下,老板认为版本匹配是迟早会遇到的坎,鼓励我想办法在实验室主机复现,于是就有了下文。


2. 之前卡住的地方

输入:

python eval.py --trained_model=weights/yolact_plus_base_54_800000.pth--score_threshold=0.15 --top_k=15 --image=my_image.png

报错

1、error in modulated_deformable_im2col_cuda:
no kernel image is available for execution on the device2、RuntimeError: cublas runtime error :
the GPU program failed to execute at /pytorch/aten/src/THC/THCBlas.cu:309

网上搜了一圈,两个error主要问题基本都是版本匹配的问题,要么说是pytorch版本太高,要么说是pytorch和cudatoolkit版本不匹配。我在这个环境里的配置是torch1.7.1+cu110。心想这个环境被装来装去已经变成臭水沟了,还是另起炉灶从头再来吧。


3. 准备

3.1 低版本pytorch成功实现的环境配置

心想着既然Windows在低版本复现成功了,那就把pytorch相关包以外的功能包版本先照搬过来,先无脑截图了pip list和conda list。

大致看了一下,跟pytorch无关的包主要有以下几个大概会被用到:Python==3.7, Matplotlib==3.5.3, Opencv-python==4.6.0, Numpy==1.21.6, Pillow==5.4.1, Pip==22.2.2, H5py==3.1.0, Pycocotools==2.0.4,记得在Windows搭环境过程中这些包基本都是下载默认版本的,除了pillow需要卸掉下载5.4.1版本,这个时候会提示pillow和matplotlib版本不匹配,在Windows里略过就是了,在Ubuntu里还是得下Matplotlib==3.1.0避免冲突。在Windows环境下还需要下载一下VS2017,提供C++的支持。

跟pytorch相关的包就主要有这几个了:Cudatoolkit==10.0, Cudnn==7.6.5, Torch==1.2.0+cu92, Torchvision==0.4.0+cu92。

3.2 调研

在搭建环境前还是先找篇成功实现的博文参考参考:[深度学习 - 目标检测 ] yolact 环境配置_南城同学的博客-CSDN博客_yolact环境配置

这篇博文采用的也是较高版本的pytorch和cuda,但是只实现了yolact。

【DCNv2踩坑记录】Windows10 + RTX3060 + cuda11.0 + pytorch1.7.1成功编译_头发总是会长的的博客-CSDN博客_dcnv2代码

DCNv2是实现yolact++的重要一环,这篇博文是我第一次尝试时参考的,用的是一样的配置,只是人家在Windows成功了,我在Ubuntu寄了,但还是很有参考价值。我的报错在评论区有人提到了,楼主建议更换CUDA版本,于是打算把CUDA11.0换成11.1再试一次。

https://www.researchgate.net/publication/360133572_Real-Time_Instance_Segmentation_of_Metal_Screw_Defects_Based_on_Deep_Learning_Approach

这篇文章用的是RTX3080Ti的显卡,在Win10系统实现了yolact,也有一定借鉴意义,文章里的python版本是3.7,CUDA应该是11.1(原文可能写错了),pytorch1.9.0。


4. 正式开始搭建环境

conda创建虚拟环境

conda create -n yolact python=3.7
conda activate yolact

安装依赖

pip install cython opencv-python pillow==5.4.1 pycocotools matplotlib==3.1.0

安装pytorch

pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

pip安装避免DCNv2编译报错

安装CUDA11.1

安装pytorch的同时顺便装一下CUDA11.1,之前只安装了CUDA11.0和11.3。

CUDA Toolkit 11.1.0

wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
sudo sh cuda_11.1.0_455.23.05_linux.run

CUDA创建软链接

sudo gedit ~/.bashrc

添加如下内容。

export PATH=/usr/local/cuda-11.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

打开终端:

sudo rm -rf /usr/local/cuda    #删除之前创建的软链接
sudo ln -s /usr/local/cuda-11.1 /usr/local/cuda    #创建链接到cuda11.1的软链接

到这里环境基本配置好了,可以开始试试效果了。


5. 试验yolact效果

git clone https://github.com/dbolya/yolact.git
cd yolact

yolact github 地址:

https://github.com/dbolya/yolact#installation

在github里下载模型,我先试了试yolact_resnet50_54_800000.pth模型,在yolact文件夹下新建的weights文件夹里放入模型,然后在yolact文件夹下放一张测试图片。

python eval.py --trained_model=weights/yolact_resnet50_54_800000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png:output.png

可以在yolact文件夹下找到输出结果:

OK,至此yolact已经成功复现,下面还有一场硬仗要打:复现yolact++。

6. DCNv2编译

相较于yolact,yolact++需要额外编译DCNv2包。

首先按照github的教程编译一下:

cd external/DCNv2
python setup.py build develop

不出所料地报错:

/home/lin/CV_AI_learning/yolact/external/DCNv2/src/cuda/dcn_v2_cuda.cu(107): error: identifier "THCState_getCurrentStream" is undefined/home/lin/CV_AI_learning/yolact/external/DCNv2/src/cuda/dcn_v2_cuda.cu(279): error: identifier "THCState_getCurrentStream" is undefined/home/lin/CV_AI_learning/yolact/external/DCNv2/src/cuda/dcn_v2_cuda.cu(324): error: identifier "THCudaBlas_Sgemv" is undefined3 errors detected in the compilation of "/home/lin/CV_AI_learning/yolact/external/DCNv2/src/cuda/dcn_v2_cuda.cu".
error: command '/usr/local/cuda-11.0/bin/nvcc' failed with exit code 1

因为pytorch1.8版本太高了,DCNv2在低版本的pytorch用的函数在高版本有所改动。

下载高版本pytorch适配的DCNv2包:

GitHub - MatthewHowe/DCNv2: Deformable Convolutional Networks v2 with Pytorch

下载该工程,将DCN目录下的dcn_v2.py文件移动到上层,和make.sh文件放在同一级目录,然后执行:./make.sh,可以编译成功。

在之前CUDA11.0的环境中运行如下代码可编译成功:

python DCN/testcpu.py

但是运行如下代码:

python DCN/testcuda.py

报错:

error in modulated_deformable_im2col_cuda: no kernel image is available for execution on the device
RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`

网上查了一下,原因基本都是CUDA版本匹配的问题。

无奈之下又得重开环境,但是试了一下发现报了新的错

(yolact) lin@lin-System-Product-Name:~/CV_AI_learning/yolact/external/DCNv2/DCN$ python testcpu.py
Traceback (most recent call last):File "testcpu.py", line 11, in <module>from dcn_v2 import dcn_v2_conv, DCNv2, DCNFile "/home/lin/CV_AI_learning/yolact/external/DCNv2/dcn_v2.py", line 13, in <module>import _ext as _backend
ImportError: /home/lin/CV_AI_learning/yolact/external/DCNv2/_ext.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN6caffe28TypeMeta21_typeMetaDataInstanceIdEEPKNS_6detail12TypeMetaDataEv

网上给了一些模棱两可的解释:可能是pytorch和cuda版本不匹配,虽然我完全按照pytorch官网的版本对应关系安装的,后续又试了多个环境,无功而返,蚌埠住了,打退堂鼓了。


做个小总结,这篇博文大致介绍了如何复现yolact,但是高版本pytorch复现yolact++未能成功,主要是DCNv2出错,网上有许多教程是在Win10实现了高版本pytorch对DCNv2的配置,如果有兴趣的朋友们对操作系统没有要求的话可以在Windows试试,ubuntu在RTX30系列显卡可能比较难编译DCNv2,仅一家之言,背后本质的原因还是需要大佬解惑。

RTX3080在Ubuntu 20.04复现yolact相关推荐

  1. ConvE,知识图谱嵌入(KGE)论文复现(Ubuntu 20.04)

    ConvE,知识图谱嵌入(KGE)论文复现(Ubuntu 20.04) Paper:Convolutional 2D Knowledge Graph Embeddings 准备工作 GitHub地址, ...

  2. Ubuntu 20.04 LTS/RTX30XX显卡 快速配置深度学习环境(一行命令)

    近日,新入一台RTX3080的服务器,目前好像还没办法很方便地在 RTX 30 系列 GPU上通过 pip/conda 安装 TensorFlow 或 PyTorch.因为这些 GPU 需要 CUDA ...

  3. Ubuntu 20.04 服务器安装 R / RStudio / RStudio Server

    ​记录:笔者是一名计算机菜鸟,但是最近在一位同济老师的指导下进行一个生信相关的项目(单细胞水平的基因表型分类相关),原本是在本地的电脑上进行,但复现一篇NC上的文章代码,发现一个case竟然吃那么大的 ...

  4. Linux系统Ubuntu 20.04 ,cuda=11.1。实现C3D代码环境。

    行为识别C3D代码(pytorch)实现过程及常见错误 1.C3D网络代码 C3D(pytorch)实现代码链接 C3D代码链接 2.C3D代码复现过程 我认为这位博主对于C3D复现过程的描述是非常好 ...

  5. Ubuntu 20.04 系统迁移

    一.前言 现实工作中需要在Intel NUC上装一个Ubuntu 20.04系统,并运行ROS以及相关的很多功能包,但如果直接安装新新系统,之前的大量环境变量要重新去配置,所以考虑说将原先的Ubunt ...

  6. Ubuntu 20.04安装、显卡驱动配置及搜狗输入法配置(U盘离线安装、vi编辑器,esc ZZ,tty3模式)(一)

    小白装Ubuntu20.04-系列记录(一) 目录 小白装Ubuntu20.04-系列记录(一) Ubuntu 20.04安装 显卡驱动配置(U盘离线安装.vi编辑器,esc ZZ,tty3模式) 搜 ...

  7. ubuntu系统怎么安装ssh服务器配置,如何在Ubuntu 20.04 LTS上安装SSH服务器

    Terminal Linux Logo 在 步骤1.首先,通过apt在终端中运行以下以下命令,确保所有系统软件包都是最新的. sudo apt update sudo apt upgrade 步骤2. ...

  8. 【SVO2.0 安装编译】Ubuntu 20.04 + Noetic

    ways one 链接: https://pan.baidu.com/s/1ZAkeD64wjFsDHfpCm1CB1w 提取码: kxx2 (downloads and use idirectly) ...

  9. 如何在Ubuntu 20.04上设置Python虚拟环境

    I recently got myself a "new" laptop – a Lenovo x270 (yay)! And once again I needed to set ...

最新文章

  1. 数据结构----单链表增删改查
  2. windows中路径\和 linux中用/
  3. 创业必看:中国八大草根富豪发家史
  4. 剑指offer 求第n个丑数
  5. JVM源码分析之synchronized实现
  6. 开启mysql日志记录_Mysql开启日志记录
  7. java 的构造函数修饰符public private protected
  8. 用python可以画的可爱的图形_利用Python绘制诱人的桑基图
  9. Ubuntu连网的问题
  10. 我的Java之路(7)
  11. jieba 结巴结巴结巴
  12. 算法之寻找完数(C语言)
  13. Linux下tar压缩解压命令详解
  14. python实现遗传算法
  15. MySQL窗口函数(分组内排序、筛选)
  16. android实现短信自动转发,利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到微信...
  17. 计算机常见的三种拓扑结构,局域网拓扑结构(常见三种)
  18. matlab中求最小值min函数的使用详细介绍(附matlab代码)
  19. NLP-Beginner:自然语言处理入门练习----task 1基于机器学习的文本分类
  20. 梅宫主:穷人的命富人的命

热门文章

  1. 【蓝桥杯单片机】第十三届蓝桥杯单片机省赛客观题及其题解
  2. 数据结构——简单实现森林转化为二叉树
  3. VMware Workstation 12序列号: 5A02H-AU243-TZJ49-GTC7K-3C61N
  4. java线程状态——java线程状态图
  5. PXE的原理与配置方式
  6. Ambari-2.7.5.0 + HDP-3.1.5.0网盘地址
  7. web性能测试基础(一)
  8. html怎么调颜色的饱和度,css – LESS:色调,饱和度和亮度 – 如何使用?
  9. 如何制作个人的纯手写电子签名
  10. 微信小程序实现一个简单的倒计时效果