我是windows环境,想跑一下ISBnet的一部分代码,然而发现官方方法似乎只能在linux上运行。但是我也在网上搜了一些相关帖子,发现其实win也可以运行,一下是解决方案:(假设你已经配置了anaconda环境)
1. 首先按照INSTALL.md前3个说明安装对应的包,这些都是可以跑的
2. 到第四步,要求:
sudo apt-get install libsparsehash-dev
然而Windows环境下无法完成,需要按照以下方法:
假如你可以在anaconda的prompt里执行:
conda install -c jithinpr2 google-sparsehash
则可以直接安装这个等效替代库,否则:
通过这个链接下载安装包:
https://anaconda.org/jithinpr2/google-sparsehash/files
之后再在prompt里执行,并安装:
conda install -y 文件名
至此,前置条件完成,需在
https://github.com/sparsehash/sparsehash/releases/tag/sparsehash-2.0.4
这个网址下载第一行的zip文件并解压,将所有src中的文件复制并粘贴到你conda环境文件夹的include文件夹内,如此则第四步等效操作完成!
在执行第6步时候会出现大量报错:
你需要不分顺序地执行以下操作,尝试解决你的报错:
1. 将ops文件夹中的cal_iou_and_masklabel和voxelize里所有的and和or改成C++中的&&和||
2. 将上述文件夹中所有的long改成int64_t, 同时在文件夹头部添加头文件
#include <cstdint>
相关的报错关键字是:error LNK2001: 无法解析的外部符号 "public: long * __cdecl at::TensorBase::data_ptr(void)const " (??$data_ptr@J@TensorBase@at@@QEBAPEAJXZ)
参考解决方案:原博主
另一种方案是改成longlong(未验证)
参考解决方案:原博主
3. hashtable-common.h可能出现报错信息,有关SPARSEHASH_COMPILE_ASSERT,删除对应行(其实是我找不到解决方法,但是这两行实际上不影响运行)
4.报错 subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1
# cmdclass={'build_ext': BuildExtension} #原来代码
cmdclass={'build_ext': BuildExtension.with_options(use_ninja=False)} # 改后代码
参考方案:原博主
最终效果:
安装完成
简单测试一个方法:(值得注意的是第一个方法要求数据在cpu上,后者需要放在gpu上,这意味着如果你的电脑没有卡,那么这个项目是无法运行的)
from isbnet.ops.functions import voxelization_idx,voxelization
import torch
coord=torch.randn(size=(100,3)).long()
pp=torch.cat([coord.new_full((coord.size(0), 1), 0), coord], 1)
pp2=torch.cat([coord.new_full((coord.size(0), 1), 1), coord], 1)
pp3=torch.cat([coord.new_full((coord.size(0), 1), 2), coord], 1)
pps=torch.cat([pp,pp2,pp3],0)
pp=voxelization_idx(pps,2)
print('finish',pp)
coords_float=torch.randn(size=(100,3)).to('cuda')
p2v_map=torch.randint(size=(3,40),low=0,high=10).to('cuda').int()
voxel_coords_float = voxelization(coords_float, p2v_map)