nvidia在github上发布的flownet2-pytorch并不能按照它说明的那样直接安装,里面存在很多bug, 根据上网查询与自己实践,我把安装步骤一步一步列出来,供大家参考。
1) 创建环境
conda create -n flownet2 python=3.6.92)进入虚拟环境
conda activae flownet23)安装gcc7,g++7
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-7 sudo apt-get install g++-74)将gcc7,g++7作为默认选项
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100 sudo update-alternatives --config gcc sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100 sudo update-alternatives --config g++ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 505) 查看所有gcc版本
ls /usr/bin/gcc*6) 查看当前gcc版本
gcc -v7)安装pytorch
可行版本1:
conda install pytorch==1.5.1 torchvision==0.6.1 cudatoolkit=10.1 -c pytorch
可行版本2:
conda uninstall python conda install python==3.7 conda install pytorch==1.9.0 torchvision==0.6.1 cudatoolkit=10.2 -c pytorch8) 安装依赖包
pip install numpy pip install tensorboardX pip install setproctitle pip install colorama pip install tqdm pip install scipy pip install matplotlib pip install pytz pip install opencv-python9) 下载flownet代码
git clone https://github.com/NVIDIA/flownet2-pytorch.git cd flownet2-pytorch10)对以下文件进行修改,
在以下三个文件中
- networks/channelnorm_package/setup.py
- networks/resample2d_package/setup.py
- networks/correlation_package/setup.py
把
cxx_args = ['-std=c++11']
修改为
cxx_args = ['-std=c++14']11)在 flownet2-pytorch/utils/frame_utils.py 中
把
from scipy.misc import imread
修改为
from imageio import imread12)在 flownet2-pytorch/datasets.py 中
把
from scipy.misc import imread, imresize
修改为
from imageio import imread13) 在flownet2-pytorch/networks/channelnorm_package/channelnorm.py中
在第9行添加
input1 = input1.contiguous()
修改后代码如下:
class ChannelNormFunction(Function): @staticmethod def forward(ctx, input1, norm_deg=2): input1 = input1.contiguous() # 新添加的代码 assert input1.is_contiguous()14) 进入install.sh所在文件夹后输入如下命令
./install.sh15) 输入以下命令进行测试
python main.py -h
测试的过程中会出现各种module的缺失问题,缺什么就输入如下命令:
pip install modules_needed
根据个人经验,在8)中我已经把所有需要安装的module都记录下来了
测试成功应该输出以下结果:
usage: main.py [-h] [--start_epoch START_EPOCH] [--total_epochs TOTAL_EPOCHS]
[--batch_size BATCH_SIZE] [--train_n_batches TRAIN_N_BATCHES]
[--crop_size CROP_SIZE [CROP_SIZE ...]]
...
...
Model:
--model {ChannelNorm,FlowNet2,FlowNet2C,FlowNet2CS,FlowNet2CSS,FlowNet2S,FlowNet2SD,Resample2d,tofp16,tofp32}
16) 跑inference测试
(1)下载数据集
为了测试代码是否能跑通,我只下载了 MPI-Sintel 数据集,并新建一个datasets文件夹,把数据集放在这个文件夹下
(2)下载checkpoint
github上提供的checkpoint下载路径难以下载,我把checkpoint下载后转存到了百度云,大家可以从百度云下载。
链接:https://pan.baidu.com/s/19g9ufG5zPARxMFireouXXQ
提取码:w97r
值得注意的是: 下载得到的checkpoint文件是一个整体,不能用rar或tar解压。这个文件直接被使用。
(3)数据集及checkpoint路径设置
我的数据集存放路径是:flownet2-pytorch/datasets/MPI-Sintel
checkpoint的存放路径是:flownet2-pytorch/pre_train/
(4)inference测试,我的测试代码是
python main.py --inference --model FlowNet2 --save_flow --inference_dataset MpiSintelClean --inference_dataset_root ./datasets/MPI-Sintel/training --inference_visualize --resume ./pre_train/FlowNet2_checkpoint.pth.tar
备注:
- inference时,只能选择 /MPI-Sintel/training 文件夹
- 需要修改的仅仅是 --inference_dataset_root ./datasets/MPI-Sintel/training
- 和 --resume ./pre_train/FlowNet2_checkpoint.pth.tar 的路径
见 https://github.com/wzg16/FlowNet2-PyTorch-EasyToUse-Wrapper
# 其他问题
问题1: ModuleNotFoundError: No module named 'resample2d_cuda'
原因分析: 在执行上面的第14)步之后,更新了pytorch版本或者torchvision版本,导致针对原来版本编译的文件与当前版本的torch不适用。
解决方法1:
step1) 分别进入
/flownet2_pytorch/networks/resample2d_package/
/flownet2_pytorch/networks/correlation_package/
flownet2_pytorch/networks/channelnorm_package
等三个文件夹
step2) 执行以下命令:
python3 setup.py build python3 setup.py install
解决方法2: 重新运行
./install.sh
通过看install.sh的代码,方法2与方法1应该是等价的。



