提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Ubuntu20.04下DenseFusion Demo复现(30系显卡+CUDA11.1+pytorch1.8.0))

文章目录

    • Ubuntu20.04下DenseFusion Demo复现(30系显卡+CUDA11.1+pytorch1.8.0))
  • 前言
  • 一、DenseFusion的几个pytorch版本
  • 二、DenseFusion的30系显卡下环境配置
    • 1. 具体环境
    • 2. GitHub拉取代码
    • 3. 编译lib下的KNN库
    • 4. 模型训练
  • 三、典型报错说明
    • 1. 显卡、CUDA、cudnn、pytorch、torchvison版本不匹配
    • 2. 没有正确编译lib/knn
    • 3. lib/knn编译出错
  • 总结

前言

这几天想要学习并复现一个6D目标位姿检测的算法,调研发现一篇斯坦福大学李飞飞教授论文《DenseFusion: 6D Object Pose Estimation by Iterative Dense Fusion》,第一作者为上海交通大学Chen Wang。DenseFusion提出一种从RGB-D图像中估计一组已知目标6D姿态的通用框架,采用一种新颖的密集融合方法,对RGB与深度两个数据源分别进行处理。复现过程中,在笔记本(RTX 1050)上按照Demo的README文档一次通过,但是在台式机(RTX 3060)上却各种问题频出,经历四五天的百般折腾,终于跑通,这里简单记录,加深自己对pytorch框架的学习理解,同时也希望能够帮助到大家对DenseFusion的学习。

DenseFusion(pytorch=0.4.1):https://github.com/j96w/DenseFusion


提示:以下是本篇文章正文内容,下面案例可供参考

一、DenseFusion的几个pytorch版本

起初,DenseFusion构建于pytorch0.4.1版本之上,但是由于pytorch更新很快,且随着显卡进入20系、30系,低pytorch版本难以满足需求,因此DenseFusion的官方GitHub上也增添了pytorch1.0.0版本。另外,hoangcuongbk80构建了pytorch1.0.0版本,drapado构建了pytorch1.6.0版本,相应记录如下:
DenseFusion(pytorch=1.0.0):https://github.com/j96w/DenseFusion/tree/Pytorch-1.0
hoangcuongbk80(pytorch=1.0.0):https://github.com/hoangcuongbk80/Object-RPE/tree/iliad/DenseFusion
drapado(pytorch=1.6.0):https://github.com/drapado/DenseFusion-1/tree/Pytorch-1.6
但是,问题来了,30系显卡对应到cuda的版本需要11.0以上,而cuda的11.0版本通过pytorch官网可以查到至少需要pytorch版本1.7.0以上。所以,我的3060显卡和我毫无疑问共同经历了数日的各种神奇报错,在几乎把DenseFusion下Issue几乎都看完一遍以后,终于跑通!这里首先记录正确的环境配置流程,然后再附上各种报错,说明每一个步骤的原因。

二、DenseFusion的30系显卡下环境配置

1. 具体环境

考虑最新的pytorch版本可能会出现更多问题,因此我还是保守一些选择了pytorch-1.8.0版本,其他关键框架或库
的版本如下:

CUDA = 11.1
CUDNN = 8.0.5
pytorch = 1.8.0
torchvision = 0.9.0
python = 3.6.13

其他库就正常pip安装即可,要是出问题也是小问题,基本上百度或者谷歌很容易解决。由于测试需要,我选择在conda的虚拟环境下配置的环境,这样要是环境在配置过程出现各种各样的问题,直接删除重建即可。这里需要强调一下,CUDA=11.1与cudnn=8.0.5是安装在Ubuntu20.04本机下的,并非是在conda的虚拟环境下配置的!!!否则你在后续编译knn时会报错。安装方法这里附上链接,非常简单。当然,conda虚拟环境下的pytorch1.8.0的安装根据官网命令输入如下:

# CUDA 11.1
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge

2. GitHub拉取代码

这里,直接参照上面链接下载drapado构建的代码,完成这一步我们就已经能够在前人的帮助下,跨过很多神奇的坑,这里也要非常感谢他们的贡献。drapado主要工作是修改了/lib/knn/下三个文件的代码,这样保证了编译过程与后续模型训练的正确。当然,如果你是20系显卡,在与他环境配置一致情况下(CUDA=10.2),再按照他的步骤,应该也就没问题了。好的,30系显卡我们继续…

3. 编译lib下的KNN库

其实,大部分的报错原因都来自于这个KNN库,在完成上述步骤的基础上,到这里也非常简单了:

cd lib/knn
python setup.py install
cd dist
unzip knn_pytorch-0.1-py3.6-linux-x86_64.egg
cp knn_pytorch/knn_pytorch.py ../knn_pytorch.py
cp knn_pytorch/knn_pytorch.cpython-36m-x86_64-linux-gnu.so ../knn_pytorch.cpython-36m-x86_64-linux-gnu.so

4. 模型训练

若按照上述流程,基本上不会出现问题。现在就可以愉快地开始训练模型了!直接按照官方文档README.md,在DenseFusion文件夹下输入:

./experiments/scripts/train_linemod.sh

然后,我们就可以愉快地接杯茶开始摸鱼等待了。。。
而且不出意外的话,训练将会大概在第5个迭代的时候报错:

RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method…

这时候不要慌,请随手打开/lib/loss_refiner.py文件,定位到44行knn()函数并修改如下:

至此,DenseFusion在Ubuntu20.04、30系显卡、pytorch=1.8.0环境下的复现就完美结束了,随手附一张训练到第37个Epoch的图片:

在第五个迭代因为报错而中断训练的,DenseFusion提供了恢复训练的接口,非常方便,直接打开./experiments/scripts/train_linemod.sh文件,作出部分修改如下图所是即可(–resume_posenet参数后的模型名称可在./trained_models/linemod下根据需要选择需要选择):

三、典型报错说明

在复现过程中,出现各种神奇报错,这里也作出整理,便于日后参考,同时也说明上述每一步骤的原因。

1. 显卡、CUDA、cudnn、pytorch、torchvison版本不匹配

报错:pred = torch.add(torch.bmm(model_points, base), points + pred_t) RuntimeError: cublas runtime error : the GPU program failed to execute at /pytorch/aten/src/THC/THCBlas.cu:441
我在前期没有注意到显卡版本的问题,在查询问题的过程中,很多人都提到了CUDA、pytorch版本要匹配的问题,也有很多人在卸载后重新安装问题得到了解决。但是因为我是直接在conda的虚拟环境下通过pytorch官网的安装命令安装的,理因不会出现这个问题,后来发现是显卡版本的问题,也就是在pytorch=1.0.0,CUDA=10.0环境,仍然无法在30系显卡下运行,这里也在GitHub上找到答案。所以,这也是我们30系显卡只能选择pytorch=1.7.0版本以上的原因

2. 没有正确编译lib/knn

报错:/code/DenseFusion-Pytorch/lib/knn/knn_pytorch.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN6caffe26detail37_typeMetaDataInstance_preallocated_10E
这里仅仅列了一个报错,其实还有很多种报错,根源也都在这。而所谓正确的编译,主要包括两个:(1) 正确的环境(显卡、CUDA、pytorch版本等);(2) 正确的编译步骤。其实编译步骤很简单,如步骤三所示即可。但是环境问题往往会被忽略!!!尤其是如果你的环境不对,编译可能并不会报错,这就导致你可能很难定位到这个问题所在了。

3. lib/knn编译出错

报错:subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.g++问题,提示缺少xxx.o文件
如果仅仅在虚拟环境安装了与显卡匹配的CUDA版本,即CUDA>11.0版本,那么在对lib/knn进行编译的时候,就会产生这样的问题,起初,我是通过这里的方法进行解决,虽然能够使得knn编译成功,但是在训练过程的报错却见都没见过,我的理解是knn.o的低版本所致。解决方法就是在本机上同样安装一个CUDA11.1的环境,至此,即可编译成功并开始训练!洒花洒花。

总结

总的来说,这一次的DenseFusion的环境配置让我既痛苦又快乐,毕竟四五天的找问题差点让上周的周报都没得东西写。。。同时,总结经历此次折腾获取的经验:

  1. 30系显卡与CUDA11.0以上版本才能兼容,这是此次惨痛的教训。
  2. 遇到问题除了百度、谷歌外,确实需要格外关注GitHub上的Issue,即使好像初搜并没有搜出符合自己的问题,但是仔细找基本上你遇到的问题也都有前人经历过了!
  3. 要有格外的耐心!!!

DenseFusion Demo复现(30系显卡+CUDA11.1+pytorch1.8.0))相关推荐

  1. 鸿蒙系统绿幕,英伟达发布新RTX 30系显卡:全新安培架构 支持8K游戏

    9月2日凌晨消息,英伟达在线上举行发布会,正式发布了GeForce RTX 30系显卡.发布会依然在老黄的厨房中进行,总计发布了RTX3080.3070与性能怪兽RTX 3090三款显卡. RTX 3 ...

  2. 深度学习环境配置7——(30系显卡)windows下的tensorflow-gpu==2.4.0环境配置

    深度学习环境配置7--(30系显卡)windows下的tensorflow-gpu==2.4.0环境配置 注意事项 一.2021/10/8更新 学习前言 各个版本tensorflow2的配置教程 环境 ...

  3. 深度学习之30系显卡虚拟环境配置(100%成功,windows,英伟达30系显卡,torch版本1.7.1)

    傻瓜式教学,肯定保证您配置成功 目录 前言 一.安装显卡驱动 1.查看自己的显卡型号 2.上官网下载显卡驱动 3.检查是否安装成功 二.安装Anaconda(Miniconda也行) 三.安装pyth ...

  4. 基于30系显卡以及Ubuntu18.04系统的YOLOv3环境搭建和训练模型以及测试

    基于30系显卡以及Ubuntu18.04系统的YOLOv3环境搭建和训练模型以及测试 安装环境 下面是官网对N卡框架以及驱动和cuda版本的部分对应关系 驱动 (可以跳过这段安装,你可以在安装CUDA ...

  5. 30系显卡安装tensorflow-gpu1.15.0

    安培架构下的30系显卡仅支持CUDA11以上的版本,目前最新的Tensorflow和PyTorch虽然都可以直接使用,然而谷歌不再维护的tensorflow1.x却无法安装在CUDA11环境下.好在N ...

  6. 30系显卡配置tensorflow1.x环境

    说明: nvidia 30系显卡仅支持cuda11.0及以上版本,对应cudnn最低版本为8.0,tf版本为2.4.0 在win系统中无法实现30系显卡运行tf1的代码 该教程使用的环境如下: Ubu ...

  7. 30系显卡配置pytorch环境

    我先说明,我是个新手,我只是把困扰了我很久的问题解决了,然后写个记录. 问题描述 我最开始按照Bubbliiiing大佬分享的博客内容进行目标检测相关的学习,原来用的是1650的笔记本,一切顺利,唯独 ...

  8. 30系显卡能用服务器系统吗,买显卡吗 来看看适合自己的30系列显卡

    影驰GeForce RTX 3070 金属大师 "买显卡吗?"应该是笔者最近常被人问到的一句话了,究其原因呢,大概是因为最近一系列30系显卡的发售了,有恐怖性能的RTX 3090, ...

  9. 30系显卡怎么配置rangenet++和SuMa++

    30系显卡怎么配置rangenet++和SuMa++ 说在前面 NVIDIA driver CUDA 11.1 cudnn TensorRT 7.2.3 rangenet++安装 && ...

最新文章

  1. python定义私有变量的方法_Python怎么修改私有属性 如何访问python类中的私有方法...
  2. 8种最有效的网站推广方案
  3. localhost,127.0.0.1 与 本机IP的区别
  4. MVC + AJAX请求失败的问题
  5. codeforces 85D. Sum of Medians
  6. 模拟grid点击事件
  7. sublime----------快捷键的记录
  8. LeetCode 368. 最大整除子集(动态规划)
  9. 软件项目管理案例教程课后答案
  10. 机械制图与计算机绘图的区别,机械制图与计算机绘图教案.doc
  11. 基于Maven 分模块开发实践
  12. 创建多媒体APP 之 音频播放:管理音频焦点
  13. vue学习笔记 DAY1 P1~P6
  14. js之延迟执行及循环执行
  15. 计算机底层:CPU结构与组成原理、工作原理
  16. 模拟电路3(三极管及其基本放大原理)
  17. 使用Fragment
  18. “带薪摸鱼”偷刷阿里老哥的面经宝典,三次挑战字节,终斩offer,修成正果!
  19. 采购项目管理:定义和流程
  20. kafka安装部署详解

热门文章

  1. 《iVX 高仿美团APP制作移动端完整项目》08 会员页 标题、会员卡 制作
  2. 哈希表哪家强?编程语言找你来帮忙!
  3. MacBook 电池电量未达到 100%?如何关闭电池健康管理
  4. 常用IDE/编辑器 格式化代码快捷键
  5. 用flask框架写一个问答系统
  6. CreateWindow()
  7. 新一配:区块链的应用【转载】
  8. 简记_静电放电抗扰度——ESD
  9. 从耳鸣的声音来判断耳鸣的类型
  10. sql 计算两个日期差几天