Foundationpose在服务器上复现——基于docker镜像
【资料准备】
项目链接:https://github.com/NVlabs/FoundationPose
项目论文翻译:论文笔记(四十四)FoundationPose: Unified 6D Pose Estimation and Tracking of Novel Objects-CSDN博客
README翻译:
FoundationPose:统一的6D姿态估计与追踪新物体开源项目推荐-CSDN博客
参考的前辈复现:
【6D位姿估计】FoundationPose 跑通demo 训练记录_foundation pose-CSDN博客
【运行代码】
环境:我使用的是MobaXterm的服务器
1.拷贝项目到自己的目录
git clone https://github.com/NVlabs/FoundationPose.git
根据官方README下载权重文件放在weights/目录下:
no_diffusion - Google 云端硬盘
根据官方README下载测试数据,解压到demo_data/目录下:
demo_data - Google 云端硬盘
2.拉取docker环境
cd docker/
docker pull wenbowen123/foundationpose && docker tag wenbowen123/foundationpose foundationpose
#第一次进入容器,需要创建并运行容器(要把项目代码挂载docker容器里)
docker run -it --gpus all --name foundationpose
-v /data_sata/VSLAM_Group/Andy/FoundationPose:/workspace/FoundationPose
wenbowen123/foundationpose bash
#以上是我自己的路径,仅供我自己复现使用,挂载写法如下:
docker run -it --gpus all --name foundationpose
-v <宿主机路径>:/workspace/FoundationPose
wenbowen123/foundationpose bash
#进入docker容器
cd /workspace/FoundationPose
# 构建项目(首次运行需要)
bash build_all.sh
# 运行 demo
python run_demo.py --debug 2
#以后每次运行:
docker start foundationpose
docker exec -it foundationpose bash
cd /workspace/FoundationPose
python run_demo.py --debug 2
【可能遇到的错误】
1.docker镜像拉取问题:
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp xxx.xxx.xxx.xxx: i/o timeout.
参考前辈方案:
Docker pull拉取镜像报错处理:docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp xxx.xxx.xxx.xxx: i/o timeout. - AlphaGeek - 博客园
sudo nano /etc/docker/daemon.json#进入docker的配置文件
#加入以下源
{
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}
#如果跑的还是很慢
sudo nano /etc/resolv.conf
#修改DNS的IP地址
search localdomain
nameserver 114.114.114.114
2.代码卡在Init_done不动,是因为在服务器运行,无法可视化显示,需要注释掉run_demo.py
两行显示代码:
if debug>=1:
center_pose = pose@np.linalg.inv(to_origin)
vis = draw_posed_3d_box(reader.K, img=color, ob_in_cam=center_pose, bbox=bbox)
vis = draw_xyz_axis(color, ob_in_cam=center_pose, scale=0.1, K=reader.K, thickness=3, transparency=0, is_input_rgb=True)
# cv2.imshow('1', vis[...,::-1])
# cv2.waitKey(1)
3.如果还遇到其他卡顿错误,可以尝试自己打印语句在主要的一些py文件,看看卡在哪里了
【最后效果】
在项目debug文件夹下可以看到这些文件输出,ob_in_cam文件夹里是每一帧中,物体在相机坐标系下的 6D 姿态估计结果,track_vis文件夹里是每一帧可视化的 RGB 图像,上面叠加了预测的姿态渲染结果。

网络输入图像:

目标物体的掩码图像:

物体识别结果热图:
含义可能是:第一列是原始输入图片; 第二列是模型对物体的语义分割结果,红色区域是模型预测的物体像素范围; 第三列是模型预测的物体深度图; 第四列是这是6D姿态估计的关键点热图。

优化后姿态结果可视化图:
含义可能是:
第一列代表的是真实姿态下的渲染效果; 第二列是网络输入的原始图像; 第三列是用真实姿态渲染出来的深度图,色调表示物体距离相机的远近; 第四列是GT 法向图,渲染真实姿态下,每个像素的表面法向方向; 第五列是预测姿态的渲染图; 第六列是网络预测的姿态应用于3D模型上,然后渲染出一个叠加到白背景上的图像,用于视觉上验证姿态是否合理; 第七列是预测的深度图; 第八列是预测的法向图。

最后的6D位姿识别图:
哈哈,机器视觉领域努力学习中,给作者点个赞吧!









