Flownet2 NVIDIA pytorch最新安装教程 有效的避坑教程

Github 英伟达的 Flownet2-pytorch 项目地址:https://github.com/NVIDIA/flownet2-pytorch

先来闲谈

第一次见识到英伟达的工程师是如此不负责,在Readme里面的安装版本引导简直就是一个大坑,你按照他描述的版本来进行安装保证编译出问题。
说实话这个项目的历史坎坷,之前这个项目的代码最初的版本是由 ClementPinard的FlowNetPytorch项目所复现的,胆大包天的英伟达工程师把别人的代码原封照搬,还把人家的LICENSE给改了…后来两边终于协商好了,所以,你会在readme的最下面,看到:
在这里插入图片描述

工具的版本

由于这份代码最开始的源码使用pytorch <0.4写的,所以他的readme里面也提到过,使用旧版的torch请回溯到18年的代码。但你万万不会想到,在readme上的0.4.1也是不对的,因为这份Readme是2018年更新的,而他最新使用了torch 1.0来开发,知道torch历史的人都知道这是0版本和1版本 是torch 的一个很大的分水岭。所以,下面请注意你的工具的版本,每一个版本都不能出错。

请务必遵循以下工具的安装顺序:

  • VS2015 with update3
  • CUDA10.0
  • cdNN 对应 cuda10
  • cu10版本的torch1.0.1
  • torchvision 0.2.1

(1)为什么要使用vs2015 update3?**
涉及到这个项目所使用的cuda源码时需要VC14进行编译的,vs2017使用的vc15,vs2019使用的是vc16,update1以上对c11标准支持更好。

(2)为什么使用CUDA10.0?
首先使用torch1.0.1需要,其次,cuda9.2的某些部件安装会出现问题,曾经使用过cuda9以下版本的朋友应该知道挺多坑的,里面也有不少问题

源码编译(最多坑)

首先,进入到networks文件夹,
分别进入这三个文件:
Flownet2 NVIDIA pytorch最新安装教程 有效的避坑教程_第1张图片
都执行一下:

python setup.py install

如无意外,你会出现如下错误:

error C1021: 无效的预处理器命令“warning”

你需要打开:torch/torch.h然后把warning那段话删掉,这是因为Flownet2里面使用了旧版的torch.h头文件,但他在更新之后没有改成extension.h,这里问题不大,warning删掉就行。

好了,接下来,重新执行python setup.py install,如无意外你会遇到类似如下的问题:

error: more than one operator "==" matches these operands:

参考了很久以前一些在Linux下解决torch无法编译的博文,推测这是类似的原因,这是因为torch关于Half和cuda的头文件关于Half 的三元运算符定义重叠了,编译器不知道选择哪个进行编译,(这些是cuda9开发以前遗留的兼容问题),我们找到torch的源文件,对头文件进行修改,编译不适用cuda的头文件部分内容,操作步骤如下:
找到THCNumerics.cuh文件,一般来说在这个目录:'...\Python36\Lib\site-packages\torch\lib\include\THC\THCNumerics.cuh'

找到

static inline __host__ __device__ bool lt(at::Half a, at::Half b) { return a < b; } 
static inline __host__ __device__ bool le(at::Half a, at::Half b) { return a <= b; } 
static inline __host__ __device__ bool gt(at::Half a, at::Half b) { return a > b; } 
static inline __host__ __device__ bool ge(at::Half a, at::Half b) { return a >= b; } 
static inline __host__ __device__ bool eq(at::Half a, at::Half b) { return a == b; }
static inline __host__ __device__ bool ne(at::Half a, at::Half b) { return a != b; }

把以上这些代码注释掉。
然后编译,OK,至此,请保证你是按照我刚才的工具版本进行操作的。

资料下载

为了防止原版本代码在修改之后不能按照本教程进行实现,在这里放出我此时的代码版本。
我的 Flownet 代码:https://pan.baidu.com/s/1VEc_cXW6j7yVX-r0tBQJxA
提取码:qfqg
里面包含源码所需要的权重

vs2015 update3:ed2k://|file|cn_visual_studio_community_2015_with_update_3_x86_x64_dvd_8923246.iso|7633565696|605D19028916D09E1BFA2DABBD266FE9|/
cuda10+cudNN的离线安装包:…
torch 1.0.1的离线安装 whl:
torchvision的安装命令:

pip install torchvision==0.2.1 -f https://download.pytorch.org/whl/torch_stable.html

你可能感兴趣的:(Flownet2 NVIDIA pytorch最新安装教程 有效的避坑教程)