ubuntu anaconda虚拟环境中bpnp运行环境的安装。
bpnp代码链接:BoChenYS/BPnP: Back-propagatable PnP (github.com)
安装
anaconda虚拟环境创建
参考链接里requirements.sh内推荐的配置,使用python版本为3.7。
在命令行输入下面命令,建立名为bpnp的环境。
conda create -n bpnp python=3.7
激活环境:
conda activate bpnp
安装cudatoolkit和pytorch
1、查看电脑配置
安装nvidia驱动(可以看csdn上的教程)
查看驱动情况
nvidia-smi
执行情况:
看出来:驱动版本450.156.00;cuda能支持的最高版本:11.0。
2、安装cudatoolkit
conda install cudatoolkit=11.0
等号右侧为版本号,根据自己的情况更改。
3、查看对应cudatoolkit版本的pytorch
到官网看对应版本关系:Previous PyTorch Versions | PyTorch
可以直接复制官网的命令下载pytorch。
示例:我的cudatoolkit版本11.0,所以打开官网后可以按ctrl+f搜索“CUDA 10.2”,高亮处下方就是对应命令,注意对应系统选linux。
conda命令下载没换源可能会很慢甚至报错,可以往下拖一拖用pip下载。
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
4、验证pytorch功能
python
import torch
torch.cuda.is_available()
返回true就是成功了。
退出用ctrl+d
安装requirements中其他部分
1、安装nccl
conda install nccl
或
pip install nccl
2、安装ipython ninja cython matplotlib opencv=3.4 tqdm requests six scipy
可以直接复制requirements.sh里的安装命令
有可能conda-forge无法安装,那么就可以用conda install 安装包名称
或者 pip install 安装包名称 来下载各种需要的库。
如,pip install kornia=版本号
3、补充安装
require 还需要chaedet才能不报错。
conda install chardet
我遇到的问题
问题1
UserWarning: A100-PCIE-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70.
NVIDIA A100-PCIE-40GB 带有的CUDA算力是8.0,它和现有的PyTorch版本不匹配,现有的PyTorch版本支持的CUDA算力是 3.7,5.0,6.0,7.0,7.5。
解决方法1
第一次下载时,cudatoolkit版本较低,并非11.0版本,所以卸载cudatoolkit(conda uninstall cudatoolkit),然后重新下载较高版本的cuda和pytorch。
问题2
AttributeError: module 'kornia' has no attribute 'angle_axis_to_quaternion'
在官方文件中,四元数表示为 [x, y, z, w]。 但是,在代码实现中,四元数是 [w, x, y, z]。
有问题,所以官方更新的较高版本不再用这个了,所以降kornia版本就可以解决。
解决方法2
conda uninstall kornia
pip install kornia=0.5.0
问题3
Traceback (most recent call last): File "demoPoseEst.py", line 67, in <module> loss.backward()
... ...
RuntimeError: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(...) instead.
解决方法3
根据错误信息,看起来问题出现在BPnP.py
文件中的backward
函数中,使用了view
函数导致了RuntimeError
。
在BPnP.py
文件中,将backward
函数中的view
操作改为reshape
操作。(红框改为绿框内容)
pts3d_flat = pts3d.clone().reshape(-1).detach().requires_grad_()
运行结果
注:程序只是跑通。