FlowNet2是光流估计领域的经典工作,从事相关研究应用都难免引用这个工作。讲道理他的易用性在当年做的还是不错的,环境配置的主要问题是过于古早的Pytorch和Cuda版本和谜一样的c系语言报错。
项目地址:
https://github.com/NVIDIA/flownet2-pytorch
一. 编译过程
从github上拉下代码后,进入了第一道关卡:编译。因为flownet2依赖于cuda加速,所以需要编译后才能使用。按照官网的Installation步骤,会遇到以下问题:
1. 找不到NVCC,即使nvcc -V指令没问题
报错信息:
/usr/local/cuda/bin/nvcc: No such file or directory
解决方法:
~/.bashrc
文件中不能写成
CUDA_HOME=CUDA_HOME:/usr/local/cuda
应该写成
CUDA_HOME=/usr/local/cuda
具体原因不明,这个方法确实work,但不是一些博主说的CUDA_HOME
后有冒号的问题
2. gcc版本不得新于gcc7
3. pytroch和cuda版本必须匹配、
用issue里好哥哥的信息,pytorch不一定要用Readme里的0.4.1
为了配置各种工程的环境,我已经被迫熟练掌握CUDA,GCC,pytorch的版本切换了,哈,哈哈哈…
二. 运行过程
1. 预训练权重和测试数据的下载
首先需要一个好用的梯子,不然权重在google的网盘上是下不下来的。
权重
完成下载后,权重不需要解压,在项目根目录建一个checkpoint文件夹放进去即可
数据集
地址:
http://sintel.is.tue.mpg.de/downloads
下载其中的test即可
完成下载后,在根目录新建dataset文件夹,放入下载内容,解压
最后的目录应该长这样
2. 执行命令
Readme中提供的指令需要做一些替换,最后可以执行的命令为:
python main.py --inference \
--model FlowNet2 \ # 根据实际下载的模型修改
--save_flow --inference_dataset ImagesFromFolder \ # 注意和原命令有区别
--inference_dataset_root ./dataset/test/clean/wall \ # 数据集路径
--resume ./checkpoint/FlowNet2_checkpoint.pth.tar \ # 预训练权重路径
--save ./output
这其中遇到了两个问题:
a 数组越界
如果--inference_dataset
选项没有修改,会报错数组越界。因为这里使用的数据集不是十分标准的MPISinter数据集。
b CUDA, Pytorch, CUDNN版本不一致
error in Correlation_forward_cuda_kernel: invalid device functionncing
修改conda环境中的pytorch版本时,最好把整个环境都删了重建一个新环境。我这里报错就是因为cuda90没有删除影响了cuda100的使用。