RTX3080在Ubuntu 20.04复现yolact

2023-10-31

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 device

2、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 undefined

3 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, DCN
  File "/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,仅一家之言,背后本质的原因还是需要大佬解惑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTX3080在Ubuntu 20.04复现yolact 的相关文章

  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • ubuntu中R的igraph包的安装

    我使用以下命令在 ubuntu 中安装 R 的 igraph 包 install packages igraph 但我收到一条错误消息 警告 无法访问存储库的索引 http ftp iitm ac in cran src contrib h
  • 如何在ubuntu的conda环境中更改Rstudio中的R版本

    我在基本系统中安装了 R 4 3 和 Rstudio 在 conda 环境中安装了旧版本的 R 4 2 3 命令which R返回环境中安装的 R 的目录 home 用户 miniconda3 envs anndata2ri pip bin
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 无法在 mysql-apt-config [Ubuntu 14.04] 中选择“确定”

    我使用的是 Ubuntu 14 04 sudo apt get update总是给我这个选项来配置 mysql apt config 我尝试选择版本 按 tab gt 在 确定 上突出显示的键 按 Enter 但没有任何反应 它再次返回并突
  • PostgreSQL - 致命:用户“myuser”身份验证失败[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚刚在我的 Ubuntu Box 中安装了 PostGreSQL 我想做的第一件事就是创建一个数据库 我读了文档 http www postgres
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • ubuntu 16.04.1 LTS 启动 Android 模拟器时崩溃

    我已经尝试过 Android studio 上的 AVD 和 Genymotion 模拟器 我的 ubuntu 16 04 1 在启动 android 模拟器时崩溃 冻结 我的电脑内存是16G 在我于 2016 年 9 月 19 日安装了
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少

随机推荐

  • 蓝桥杯算法提高VIP-队列操作

    题目 题目链接 题解 模拟队列 代码 include
  • 删除vim打开文件末尾的^M

    最近在Windows下写了一个shell脚本 拿到Linux下执行的时候一直提示找不到文件 但是文件明明就存在 在Linux用vi vim 打开脚本 文件内容不为空 仔细检查脚本内容也没有出错 只是每行 末尾 多出来一个 M 符号 去掉这个
  • Qt使用QTcpSocket及QTcpServer传输文件

    服务端具体代码如下 h include
  • Python学习笔记合集(Pyhton基础总结)

    Python学习笔记合集 Python学习笔记合集 Pyhton基础总结 第一天主要讲了Python基本语句 上 第二天主要讲了Python基本语句 下 第三天主要讲了import导包 库 和Python条件语句 第四天主要讲了Python
  • 闭包【JavaScript基础面试题】

    闭包的定义 如果一个函数能访问外部的变量 那么就形成了一个闭包 闭包形成的原理 当一个普通函数执行结束之后 函数内的变量会被全部销毁 垃圾回收 但是 如果某些变量在函数外部会被用到 那么该变量就不会被销毁 因此形成了闭包 可以看下面的例子
  • [INFO] [copilotIgnore] inactive,github copilot没反应怎么解决

    在使用github copilot的时候 插件不工作 后台出现了这种输出 这种情况下就是它的激活出现了问题 如果账号的使用权没有问题的话 就将该插件disable之后再重新enable 重新观察输出 就会看到copilot在重新链接引擎了
  • C语言头文件和条件编译

    目录 一 条件编译 1 ifdef else endif 2 ifndef 用法 3 if和 elif 4 上述指令的嵌套使用 5 line 和 error 6 pragma 二 include 1 头文件被包含的方式 1 1 本地文件包含
  • 基于 pytorch的 肺部x光片疾病识别

    目录 案例主要流程 数据集下载地址 数据示例 模型结构示意图 ResNet 网络结构图
  • Python基础数据之列表知识(二)

    Python基础数据之列表知识 二 一 列表的特点 二 列表的排序 三 列表的嵌套 1 嵌套的基本使用 2 嵌套的示例 四 列表的循环删除 五 列表相关知识链接 一 列表的特点 1 有序 2 独立 3 列表中的元素可以重复 二 列表的排序
  • 【数据结构】队列的链式实现

    链式队列定义及各类操作 include
  • 目标检测之Dynamic Head: Unifying Object Detection Heads with Attentions

    cvpr2021 论文 https arxiv org pdf 2106 08322v1 pdf 代码 https github com microsoft DynamicHead 1 摘要 作者认为目标检测的头部是由三个部分组成 首先 头
  • openpyxl表格样式设置

    import pandas as pd from openpyxl import Workbook from openpyxl import load workbook from openpyxl styles import Alignme
  • Atomic Operations (standardized memory model)

    C 规范未引用任何特定的编译器 操作系统或CPU 它引用了 abstract machine 抽象机 它是对实际系统的概括 在语言规范中 程序员的工作是为抽象机编写代码 编译器的工作是在具体机器上实现该代码 通过严格按照规范进行编码 可以确
  • Visual Studio显示C4996错误,建议使用scanf_s函数

    在使用Visual Studio时编译器显示C4996错误 原因是VS编译器无法识别scanf函数 scanf s函数才是VS编译器自带的输入函数 但是scanf s函数只能在VS编译器中使用 其它编译器不支持 如果想在VS编译器中使用sc
  • 如何去除table的边框_怎么把table的外面的边框去掉

    展开全部 它有三个参数 cols rows none 当rules cols时 表格会隐藏纵向的分隔线 这样我们就只能看到表格的行 当rules rows时 则隐藏了横向62616964757a686964616fe4b893e5b19e3
  • 定时上报GPS坐标信息至服务器

    定时上报GPS坐标信息至服务器 本文通过一个 定时上报GPS坐标信息至服务器 的例子来讲述Android网络应用程序的开发 使用最为流行的restfull接口 第一步 定义网络接口 客户端以post方式将经纬度上传至服务器 第二步 开发服务
  • c语言延时错误,延时函数报错,volatile一例

    延时函数出错 volatile一例 莫名其妙的错误 使用Systick做的延时 初始化是这样的 SysTick配置 SysTick CLKSourceConfig SysTick CLKSource HCLK Div8 if SysTick
  • 详解python中的round()函数

    round 是python自带的一个函数 用于数字的四舍五入 但是round 的输出结果与Python的版本有关 在python3中 round 1 0 2 0 0 在python2中 round 1 0 2 0 1 python Pyth
  • U盘启动中标麒麟V6双系统安装教程

    U盘启动中标麒麟V6双系统安装教程 本教程是双系统教程 一般是安装XP win7的机器需要安装中标麒麟的朋友使用 教程内容都是在网上找到相关资料结合自己经验编写 以供需要的朋友参考 一 准备工作 1 U盘一个 2G以上 2 下载中标麒麟V6
  • RTX3080在Ubuntu 20.04复现yolact

    1 背景 刚入门CV和deep learning几个月 想复现一下yolact 最初的计划是在实验室电脑搭建环境复现 后来发现RTX3080显卡只支持CUDA11 那么能下载的pytorch最低版本是1 7 于是搭建了一个pytorch1