Flownet 2.0-pytorch window10编译过程

github上NVIDIA给出的flownet2-pytorch代码

我使用的环境

python 3.5
pytorch 1.0.1
cuda 9.0
cudnn 7.1
这里最重要的是你的cuda和pytorch版本要相对应,否则会有好多坑,建议用conda装。
除此之外,还有Microsoft Visual C++ Build Tools 14。

编译过程

  1. 分别进入networks下的这三个文件夹,然后找到setup.py,
    在这里插入图片描述
    在setup.py中呢,需要将cxx_args = ['-std=c++11']中的11改成14,因为前面我是下的VC 14,这个根据自己的情况来。
    然后在nvcc_args这个参数中,'-gencode', 'arch=compute_35,code=sm_35',这个里面的数字是对应你的显卡的算力,这个大家根据自己的显卡然后修改,我的算力是3.5,所以改成了35。
    至此,setup.py就修改完了,三个文件夹里的都要修改。
    修改完之后,分别在终端中进入这三个文件夹,然后输入python setup.py install这个命令,
    如果报下面这个错误的话,
invalid preprocessor command 'warning'

就得找到你的torch.h文件,我的路径是:

E:\Miniconda\install\envs\flow\Lib\site-packages\torch\lib\include\torch\csrc\api\include\torch\torch.h

找到torch.h之后,把下面这个warning删除即可。

#warning \
    "Including torch/torch.h for C++ extensions is deprecated. Please include torch/extension.h"

如果出现error: more than one operator "==" matches these operands:这类错误的话,就得找到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; }

THCNumerics.cuh的路径 :

E:\Miniconda\install\envs\flow\Lib\site-packages\torch\lib\include\THC

修改完后运行setup.py,生成以下三个文件夹,就算成功了。
运行setup.py后生成的文件夹

测试部分

我用的是run_a_pair.py来测试:
这里面的话不需要怎么改动,只需要把权重路径和测试图片的路径修改以下就行了。缺什么module的话直接pip安装就行。下面是我使用的flownet的权重:
https://pan.baidu.com/s/1jcnShI6JPtTCPHQguMH9cg
提取码:2233

在测试中,如果出现no kernel image is available for execution on the device这个错误的话,一般是两种解决方案:
第一种:你的cuda版本和你的算力不匹配,需要修改cuda的版本。
第二种:修改setup.py中的'-gencode', 'arch=compute_35,code=sm_35',修改完后,需要将__pycache__、还有生成的build、cuda.egg-info、dist,这四个文件夹删除,然后重新运行下setup.py。就ok了。
至此,我就跑通了这份flownet-pytorch的代码,不得不说,所用到的东西只要有一个不匹配,就会报错,我真是裂开,不过还好,最终还是能跑通了。

Reference:
Flownet2 NVIDIA pytorch最新安装教程 有效的避坑教程
基于flownet2-pytorch在微表情数据集上进行光流预测

你可能感兴趣的:(人工智能,pytorch,深度学习,神经网络)