win10下编译GANet

环境:vs2017 pytorch1.5 cuda10.1
github地址:https://github.com/feihuzhang/GANet
源码中给出的是在linux下的编译步骤,没提win10的事情,自己搞了下编译通过,记录一下。
首先,源码根目录下的compile.sh文件是给linux准备的,在windows上直接运行的话…,手动搞吧。

编译GANet

首先配置好你的cuda目录,在你的环境变量中设置好CUDA_PATH,然后打开你的cmd

cd GANet\libs\GANet
python setup.py build

不出意外你将得到一堆信息,最后的两行大概这样:

4 errors detected in the compilation of "C:/Users/zzubq/AppData/Local/Temp/tmpxft_00004958_00000000-10_GANet_kernel.cpp1.ii".
error: command 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v10.1\\bin\\nvcc.exe' failed with exit status 1

将编译的信息拷贝到nodepad++中,直接查找"error",可以找到如下信息:

C:/Users/zzubq/Anaconda3/lib/site-packages/torch/include\torch/csrc/jit/api/module.h(474): error: member "torch::jit::detail::ModulePolicy::all_slots" may not be initialized

C:/Users/zzubq/Anaconda3/lib/site-packages/torch/include\torch/csrc/jit/api/module.h(487): error: member "torch::jit::detail::ParameterPolicy::all_slots" may not be initialized

C:/Users/zzubq/Anaconda3/lib/site-packages/torch/include\torch/csrc/jit/api/module.h(501): error: member "torch::jit::detail::BufferPolicy::all_slots" may not be initialized

C:/Users/zzubq/Anaconda3/lib/site-packages/torch/include\torch/csrc/jit/api/module.h(514): error: member "torch::jit::detail::AttributePolicy::all_slots" may not be initialized

可以看到都是module.h出的错误,打开这个文件,将文件中所有的"constexpr"改成”const",可以使用nodepad++的全部替换功能,比如:

static constexpr bool all_slots = Policy::all_slots; 
修改成:
static const bool all_slots = Policy::all_slots;

然后修改cast.h这个文件,路径:{你的python路径}\Lib\site-packages\torch\include\pybind11\cast.h,1449行

explicit operator type&() { return *(this->value); }
修改成:
explicit operator type&() { return *((type*)this->value); }

保存退出,然后再去重新执行:

python setup.py build

等待完成,然后在libs\GANet\build下新建一个名为"lib"的文件夹,将刚才编译出来的“lib.win-amd64-3.70”文件夹下的内容全部拷贝到lib文件夹下,完成后目录结构如下:
win10下编译GANet_第1张图片
这两步其实就是compile.sh中的

cp -r build/lib* build/lib

编译sync_bn

根据上述的操作都已经改好了,所以直接运行即可

cd libs/sync_bn
python setup.py build

然后同样新建一个"lib"文件夹,拷贝过去,完成后目录结构如下:
win10下编译GANet_第2张图片
到这里就都编译好了,作者还提到安装apex,如果运行的时候没有碰到BN error的错误,就不用折腾了。
现在就可以直接按照作者给出的命令运行了,不过(表 重点)运行的话需要你的显存大于6.5G,硬性要求!如果你的显存比较可怜,可以将predict.py中的

parser.add_argument('--model', type=str, default='GANet_deep', help="model to train")
改成:
parser.add_argument('--model', type=str, default='GANet11', help="model to train")

也可以试试将参数中的cuda改成False,不过大概率的你会得到另外的错误,比如:

TypeError: batchnorm_forward(): incompatible function arguments. The following argument types are supported:

别问我怎么知道的,也别问我怎么解决。问就是“换一块显存大于6.5G的GPU”,CPU真的折腾不起,搞不定!(伤害性不大,侮辱性极强。我不会告诉你,今天为了这个受到了100000点的伤害 /哭)

你可能感兴趣的:(深度学习,GANet,双目重建)