pytorch_nicp编译

NICP学习:(117条消息) 激光slam理论与实践 - 第四章 前端配准(ICP)_ppipp1109的博客-CSDN博客

(117条消息) 激光SLAM:ICP升级版本NICP(Normal ICP)原理+法向量即曲率计算代码_月照银海似蛟龙的博客-CSDN博客

1.nicp pytorch版编译:  GitHub - wuhaozhe/pytorch-nicp: GPU Accelerated Non-rigid ICP for surface registration      

2.按照说明,先安装pyotorch3d: pytorch3d/INSTALL.md at main · facebookresearch/pytorch3d · GitHub ,执行以下语句:

conda create -n pytorch3d python=3.9

conda activate pytorch3d

conda install -c pytorch pytorch=1.9.1 torchvision cudatoolkit=10.2

conda install -c fvcore -c iopath -c conda-forge fvcore iopath

conda install -c bottler nvidiacub

conda install pytorch3d -c pytorch3d

3.安装依赖项:pip install -r requirements.txt

其中:sklearn>=0.24.2 应改成:scikit-learn>=0.24.2

环境要求open3d最低的版本为0.14.1,于是open3d==0.14.1

4.运行python demo_nicp.py

(1)报错:libc10_cuda.so: cannot open shared object file: No such file or directory

ImportError: libc10_cuda.so After installing using Intall.MD guide · Issue #1152 · facebookresearch/pytorch3d · GitHub,这个回答用的pytorch==1.10.0,删除环境安装conda install -c pytorch pytorch=1.10.0 torchvision cudatoolkit=11.1,还是报错

(2)报错找不到pytorch3d 模型,根据pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py38_cu113_pyt1110/download.html 安装pytorch3d,配置环境为:python=3.8,conda install -c pytorch pytorch=1.11.0 torchvision cudatoolkit=11.3,还是报错:libc10_cuda.so: cannot open shared object file

(3)ImportError: libc10_cuda.so: cannot open shared object file: No such file or directory · Issue #1060 · facebookresearch/pytorch3d · GitHub的回答,pytoch不应该是conda-forge应该这样:

pytorch 1.6.0  py3.8_cuda10.2.89_cudnn7.6.5_0  pytorch

而我是:

pytorch   1.11.0    cpu_py38h39c826d_1    conda-forge

于是下载touch源码安装:下载

torch-1.11.0+cu113-cp38-cp38-linux_x86_64.whl和torchvision-0.12.0+cu113-cp38-cp38-linux_x86_64.whl

(4)安装后报错:libstdc++.so.6: version `GLIBCXX_3.4.26' not found

这种情况说明libstdc++.so.6连接的版本不够高。

a:查看libstdc++.so.6 运行库,注意大小写:strings /usr/lib64/libstdc++.so.6 |grep GLIBC 没有找到GLIBCXX_3.4.26

b: 直接:wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip

然后解压:unzip libstdc.so_.6.0.26.zip 

c: 先备份libstdc++.so.6 :copy libstdc++.so.6 libstdc++.so.6.copy

d: 然后删除:rm libstdc++.so.6

e: 然后建立软连接: ln -s libstdc++.so.6.0.26 libstdc++.so.6

f: 再次查看:strings /usr/lib64/libstdc++.so.6 |grep GLIBC 

包含了GLIBCXX_3.4.26即可解决

(5) 报错:No module named 'face_alignment',直接pip install face_alignment

5.成功:

Mesh2mesh:将一个mesh转换成需要的模型(标准模型)默认是bfm模型,需要*.obj,*.mtl以及uv贴图:扫描模型:216090个点,431544个面,通过nicp可转换成bfm模型:35709个点和70789个面

Mesh2pcl:将一个点云转换成bfm模型,需要点云上68个点的index信息

Demo_4d,通过一段视频流包含深度和彩色的图,生成bfm模型:

Denselandmark的3d点生成的bfm模型:     

Denselandmark生成的flam模型: 

 修改生成自己的模型:demo_nicp.py

device = torch.device('cuda:0')

pcls = io3d.load_ply_as_pointcloud('./test_data/base1.ply', device = device)

norm_pcls, norm_param = normalize_pcl(pcls)

pcl_lm_file = open('./test_data/base1_lmk.txt')

lm_list = []

for line in pcl_lm_file:

    line = int(line.strip())

    lm_list.append(line)

target_lm_index = torch.from_numpy(np.array(lm_list)).to(device)

lm_mask = (target_lm_index >= 0)

target_lm_index = target_lm_index.unsqueeze(0)

target_lm_index_m = target_lm_index[:, lm_mask]

#bfm_meshes, bfm_lm_index = load_bfm_model(torch.device('cuda:0'))

flame_meshes = io3d.load_obj_as_mesh('./test_data/base_flame.obj', device = device)

flame_meshes, flame_norm_param = normalize_mesh(flame_meshes)

dummy_render = render.create_dummy_render([1, 0, 0], device = device)

target_lm_index_flame, lm_mask_flame = get_mesh_landmark(flame_meshes, dummy_render)

#lm_mask_flame = torch.all(lm_mask, dim = 0)

flame_lm_index_m = target_lm_index_flame[:, lm_mask]

print(target_lm_index_m)

print(flame_meshes[flame_lm_index_m])

coarse_config = json.load(open('config/coarse_grain.json'))

registered_mesh = non_rigid_icp_mesh2pcl(flame_meshes, norm_pcls, flame_lm_index_m, target_lm_index_m, coarse_config)

io3d.save_meshes_as_objs(['test_data/final2.obj'], registered_mesh, save_textures = True)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值