一、BundleTrack 简介

BundleTrack不依赖于实例或类别级别的 3D 模型(不需要cad模型)对新物体进行 6D 姿势跟踪的通用框架。可以在各种具有挑战性的场景下进行长期、低漂移的跟踪,包括显着的遮挡和物体运动。 CUDA 中的高效实现为整个框架提供了 10Hz 的实时性能。
项目地址:https://github.com/wenbowen123/BundleTrack
ps: 能搜到笔者博文的肯定是论文已经看的很明白,且希望可以复现或者验证的,那数据结构、算法应当了然于胸。

二、环境配置-本机

项目是配在docker里运行的(不知道啥是docker就去Google or baidu 一下, 装个docker还是很简单的),此处有坑,作者并未说到虽然docker的镜像里面,作者配好了annaconda python c++ gcc cuda 等等。但是实际上我们的宿主机器还是要精确的配好nvidia driver 以及cuda=10.1,记住了啊!!!
关于本机的算力匹配能装上的驱动和cuda 见链接:
显卡型号算力查询:https://developer.nvidia.com/cuda-gpus

查询cuda与算力方法:

import torch
torch.cuda.get_arch_list()

output:

package pyton cuda  cudnn architectures
pytorch-1.0.0 py3.7 cuda10.0.130  cudnn7.4.1_1  sm_30, sm_35, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.0.0 py3.7 cuda8.0.61  cudnn7.1.2_1  sm_20, sm_35, sm_37, sm_50, sm_52, sm_53, sm_60, sm_61
pytorch-1.0.0 py3.7 cuda9.0.176 cudnn7.4.1_1  sm_35, sm_37, sm_50, sm_52, sm_53, sm_60, sm_61, sm_70
pytorch-1.0.1 py3.7 cuda10.0.130  cudnn7.4.2_0  sm_35, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.0.1 py3.7 cuda10.0.130  cudnn7.4.2_2  sm_35, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.0.1 py3.7 cuda8.0.61  cudnn7.1.2_0  sm_35, sm_37, sm_50, sm_52, sm_53, sm_60, sm_61
pytorch-1.0.1 py3.7 cuda8.0.61  cudnn7.1.2_2  sm_35, sm_37, sm_50, sm_52, sm_53, sm_60, sm_61
pytorch-1.0.1 py3.7 cuda9.0.176 cudnn7.4.2_0  sm_35, sm_50, sm_60, sm_61, sm_70
pytorch-1.0.1 py3.7 cuda9.0.176 cudnn7.4.2_2  sm_35, sm_50, sm_60, sm_70
pytorch-1.1.0 py3.7 cuda10.0.130  cudnn7.5.1_0  sm_35, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.1.0 py3.7 cuda9.0.176 cudnn7.5.1_0  sm_35, sm_50, sm_60, sm_61, sm_70
pytorch-1.2.0 py3.7 cuda9.2.148 cudnn7.6.2_0  sm_35, sm_50, sm_60, sm_61, sm_70
pytorch-1.2.0 py3.7 cuda10.0.130  cudnn7.6.2_0  sm_35, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.2.0 py3.7 cuda9.2.148 cudnn7.6.2_0  sm_35, sm_50, sm_60, sm_61, sm_70
pytorch-1.3.0 py3.7 cuda10.0.130  cudnn7.6.3_0  sm_30, sm_35, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.3.0 py3.7 cuda10.1.243  cudnn7.6.3_0  sm_30, sm_35, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.3.0 py3.7 cuda9.2.148 cudnn7.6.3_0  sm_35, sm_50, sm_60, sm_61, sm_70
pytorch-1.3.1 py3.7 cuda10.0.130  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.3.1 py3.7 cuda10.1.243  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.3.1 py3.7 cuda9.2.148 cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70
pytorch-1.4.0 py3.7 cuda10.0.130  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.4.0 py3.7 cuda10.1.243  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.4.0 py3.7 cuda9.2.148 cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70
pytorch-1.5.0 py3.7 cuda10.1.243  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.5.0 py3.7 cuda10.2.89 cudnn7.6.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.5.0 py3.7 cuda9.2.148 cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70
pytorch-1.5.1 py3.7 cuda10.1.243  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.5.1 py3.7 cuda10.2.89 cudnn7.6.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.5.1 py3.7 cuda9.2.148 cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70
pytorch-1.6.0 py3.7 cuda10.1.243  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.6.0 py3.7 cuda10.2.89 cudnn7.6.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.6.0 py3.7 cuda9.2.148 cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70
pytorch-1.7.0 py3.7 cuda10.1.243  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.7.0 py3.7 cuda10.2.89 cudnn7.6.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.7.0 py3.7 cuda11.0.221  cudnn8.0.3_0  sm_37, sm_50, sm_60, sm_61, sm_70, sm_75, sm_80
pytorch-1.7.0 py3.7 cuda9.2.148 cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70
pytorch-1.7.1 py3.7 cuda10.1.243  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.7.1 py3.7 cuda10.2.89 cudnn7.6.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.7.1 py3.7 cuda11.0.221  cudnn8.0.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75, sm_80
pytorch-1.7.1 py3.7 cuda9.2.148 cudnn7.6.3_0  sm_37, sm_50, sm_60, sm_61, sm_70
pytorch-1.8.0 py3.7 cuda10.1  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.8.0 py3.7 cuda10.2  cudnn7.6.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.8.0 py3.7 cuda11.1  cudnn8.0.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75, sm_80, sm_86
pytorch-1.8.1 py3.7 cuda10.1  cudnn7.6.3_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.8.1 py3.7 cuda10.2  cudnn7.6.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75
pytorch-1.8.1 py3.7 cuda11.1  cudnn8.0.5_0  sm_35, sm_37, sm_50, sm_60, sm_61, sm_70, sm_75, sm_80, sm_86

清楚的知道自己显卡配的上谁以后,就不要咔咔咔瞎给自己太多负担装太多版本的cuda了(比如显卡为rtx3070s,算力是sm_86, 那明显只能cuda>=11.1 啊, 装了cuda==10.2 也用不上okay? ),不然后期就会保熟悉的错误,be like: no kernel images.

好了 宿主机器的配置就这样okay:cuda=10.1

三、正式配置docker

3.1 首先看看BundleTrack readme的docker要求

很简单啊,在新建的终端里把两个镜像pull 下来:

docker pull wenbowen123/bundletrack:latest
docker pull wenbowen123/lf-net-release-env:latest

这里只要装了docker 就等镜像被拉到本地就好,值得注意的个点:
1 .用 超级用户权限来执行拉镜像okay? 不然又要报permisson deniny;
2 . 拉好一个就会自动将镜像实例化进入到容器内,怎么做呢, 执行退出命令回到宿主机器啊:exit.

3.1.1 把 BundleTrack 这个repo 弄到本地

这也是作者没有细说的!!!!
我管你用什么方式呢 反正把项目要克隆到本机, 路径当然是你放很多项目的路径好找啦(我建议不要换名字,项目主文件夹还是叫BundleTrack比较好,后面不容易混乱), 还有就是官方提到的weights还有数据 通通下载下来放到刚刚克隆下来的repo里头。
可能有人会问了,镜像不是都弄好了咩,咋还要在本地弄项目啊。是这样啊 镜像是基础的环境,项目的数据啊codes datasets weights 这么大, 就没有弄到镜像里面啊。

注意看啊,下载的数据权重就放在你的本地的repo下,就我框起来的这几个路径啊,不要被迷惑。

3.1.2 开启容器wenbowen123/bundletrack:latest

然后呢 再去运行我们的第一个容器 这里又有坑啦

首先看官方是让我们去项目文件下的docker下的run_container.sh 下面改路径。也就是进入我们的项目文件夹,然后我们就先改这个sh文件里的路径啊:

BUNDLETRACK_DIR="你的宿主机器下的BundleTrack主路径,be like: /home/xx/project/BundleTrack"
NOCS_DIR="你的宿主机器下的NOCS数据集的路径,be like: /home/xx/project/BundleTrack/NOCS"
YCBINEOAT_DIR="你的宿主机器下的YCBINEOAT数据集的路径,be like: /home/xx/project/BundleTrack/YCBINEOAT"
echo "BUNDLETRACK_DIR $BUNDLETRACK_DIR"
echo "NOCS_DIR $NOCS_DIR"
echo "YCBINEOAT_DIR $YCBINEOAT_DIR"docker run --gpus all -it --network=host --name bundletrack  -m  16000m --cap-add=SYS_PTRACE --security-opt seccomp=unconfined  -v $BUNDLETRACK_DIR:$BUNDLETRACK_DIR:rw -v $NOCS_DIR:$NOCS_DIR -v $YCBINEOAT_DIR:$YCBINEOAT_DIR -v /tmp:/tmp  --ipc=host -e DISPLAY=${DISPLAY} -e GIT_INDEX_FILE wenbowen123/bundletrack:latest bash

如果没问题的话 运行 bash run_container.sh 那就成功的进入容器了
但是一般怎么会没问题一帆风顺呢 哈哈哈哈 一般这里可能出现三个问题: swap memory limit; --gpus all报错; 以及容器已存在 。前两个问题呢我们参见前人方法,一般都能解决啦(注意长命令最好复制粘贴):

https://blog.csdn.net/Tang_Zhe/article/details/122936986

最后一个容器已经存在情况我,总是有的的粗暴办法 哈哈哈。

docker stop $(docker -ps -a -q)# 将若有容器暂停
docker rm $(docker -ps -a -q)# 将若有容器删除
#第二个命令其实是很粗暴,因为我的docker目前只是在
#弄bundletrack所以我就所有实例化的容器都删了,如果
#你只删除一个,就`docker -ps -a` 看看里面
#bundletrack 对应的容器ID ,然后执行
# docker rm container_ID 即可

这里顺带说下,容器的一些基本命令:

exit# 在容器的终端里退出容器回到宿主机器
docker start container_ID # 启动已存在的容器
docker attach container_ID # 进入容器,先start 再attac,相信我

运行完 bash run_container.sh 以后,我们在wenbowen123/bundletrack这个镜像实例化的容器内部了,在容器内,我们cd到BundelTrack路径下(容器内部的文件夹结构跟我们的linux是比较相似的),执行编译:rm -rf build && mkdir build && cd build && cmake .. && make
值得一说的是,bash run_container.sh 会把我们的在宿主机器下面Bundletrack的路径挂载到容器内部,我们文件的修改在宿主机下修改就可以了。

3.2 跑NOCS 推理

首先我们看一下官方文档。
我们先要在内一个容器内开启服务器。

3.2.1开启 wenbowen123/lf-net-release-env:latest 容器


照着官方节奏做:
在宿主机器下开始一个终端,cd到BundleTrack/lf-net-release 下 执行run_container.sh 进入容器,cd到 lf-net-release 下,执行python run_server.py 开启容器 ,页面应该如下:

回到刚刚的bundletrack:last 的容器的终端:
(–nocs_dir 改成你自己宿主机器下的绝对路径)

python scripts/run_nocs.py --nocs_dir /home/cy/PycharmProjects/BundleTrack/NOCS --scene_id 1 --port 5555 --model_name can_arizona_tea_norm

3.2.2 结果展示

生成的结果在宿主机器的 /tmp/BundleTrack/NOCS 下。
在跑inferenc 过程,图像的visual是不显示的,只保存所有目标相对于相机的转换矩阵。
结果如下:

【IROS 2021: BundleTrack】docker 配置6D位姿识别运行环境相关推荐

  1. Docker——使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境

    Docker--使用docker工具管理软件/组件的运行,镜像.容器.数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境 一.docker的安装和卸载 1.卸载 2.安装 3. 导 ...

  2. Ubuntu 18.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM2+SLAM相关库的安装

    文章目录 一.换源 二.安装三方库 2.1 安装必要的依赖项 2.2 安装Pangolin 2.3 安装OpenCV3 2.4 安装Eigen3 三.安装ORB-SLAM2 四.安装ORB-SLAM3 ...

  3. java applet配置_配置Java Applet的运行环境

    Java小程序,也就是Java Applet,可以在Web浏览器中运行.Java Applet必须以脚本的形式嵌入到HTML页面中,才能在web浏览器中运行. 之前总以为本地安装了JDK,指定好JAV ...

  4. win7和win2008 r2下配置IIS7(ASP.net运行环境)

    win7和win2008 r2下配置IIS7(ASP.net运行环境) 1.先要设置应用程序池(ApplicationPool)为Classic.NETAppPool,而不是默认的DefaultApp ...

  5. java applet怎么运行_配置Java Applet的运行环境

    Java小程序,也就是Java Applet,可以在Web浏览器中运行.Java Applet必须以脚本的形式嵌入到HTML页面中,才能在web浏览器中运行. 之前总以为本地安装了JDK,指定好JAV ...

  6. Ubuntu配置多版本Python运行环境

    Ubuntu配置多版本Python运行环境 环境 操作系统 Ubuntu 18.04.6 LTS (Bionic Beaver) 内容 机器已有python 3.6,再增加python 3.9,当运行 ...

  7. linux(centos7) docker配置前后端分离项目环境

    一.安装docker 1.更新yum包,并安装需要的软件包,yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖 yum -y upgrade yu ...

  8. 用Docker打造多版本PHP运行环境

    2019独角兽企业重金招聘Python工程师标准>>> 背景 随着Docker的不断成熟,越来越多的站长以及运维人员选择Docker构建程序运行环境,另外由于国内的云服务厂商通常在新 ...

  9. Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM+Gazebo仿真运行ORB-SLAM2+各种相关库的安装

    文章目录 一.换源 1.1 通过软件更新 1.2 通过修改源文件 二.安装三方库 2.1 安装必要的依赖项 2.2 安装Pangolin 2.3 安装OpenCV3 2.4 安装Eigen3 三.安装 ...

最新文章

  1. cmake qmake
  2. Pandas简明教程:七、Pandas缺失数据的处理(数据清洗基础)
  3. sql 树状结构中知道 父节点与孙节点_sqlserver树状结构表中,获取指定节点的所有父节点路径_MySQL...
  4. 4.1.8 文件保护
  5. 视频API的发展方向
  6. 输入过滤筛选下拉信息(类似百度输入)
  7. 效率提高N倍的19条MySQL优化秘籍
  8. php+select为空,SELECT时候,如何处理某字段空值?
  9. PHP在线预览word、excel等office文档
  10. Python爬虫从入门到精通——爬虫基础:HTTP基本原理
  11. 【Linux系统IO函数】read、write函数及实现文件拷贝
  12. odoo 重写unlink方法
  13. 邮箱地址注册申请能免费注册吗?
  14. 怎么把几个PDF文件合并成一个PDF
  15. Oracle+mybatis+Java批量插入如何提升效率(10W级)
  16. Android入门视频教程,抖音音视频开发
  17. FANUC机器人6点示教法设定工具坐标系的具体步骤
  18. JavaScript获得字符串实际长度
  19. 【每日新闻】2019年大数据10大发展趋势出炉!
  20. 严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost

热门文章

  1. BBB学习(八):操作BBB普通IO口
  2. 素描史上最全手、脚画法丨必须收藏…
  3. 第三方即时通信服务-环信
  4. 【总结】2014年度总结
  5. 读书笔记1.2—《时间管理:如何充分利用你的24小时》—让你时间发挥最大效用
  6. java毕业设计_银行账目管理系统
  7. 域名被用来干嘛的?你知道吗?
  8. android app 64位架构升级 适配64位cpu架构
  9. 视频教程-清华-尹成老师-Python爬虫day23-Python
  10. 第十届中国云计算大会·中国站:展望未来十年科技走向