基于flownet2-pytorch在微表情数据集上进行光流预测

Reference:
1. 光流估计——从传统方法到深度学习
2. Flownet2 NVIDIA pytorch最新安装教程 有效的避坑教程
3. 使用NVIDIA flownet2-pytorch实现生成光流

一、环境配置

默认背景:已安装好Anaconda3,cuda 10.0,cuDnn 7.6.0

  • 安装Anaconda3:镜像下载地址
  • 修改jupyter notebook默认工作路径
    • anaconda prompt 中jupyter notebook --generate-config生成配置文件
    • 打开这个配置文件,修改notebook_dir为指定路径,c.NotebookApp.notebook_dir = 'D:\ForPython\workplace'
    • jupyter notebook右键属性-快捷方式-目标,将最后的%USERPROFILE%删掉即可

1. 下载flownet2-pytorch项目

github下载 | 百度网盘下载-提取码:2333

2. 安装pytorch

  • 打开Anaconda Prompt,创建自定义名为pytorch的环境,Python3.5版本
conda create -n pytorch python=3.5 
  • 激活自定义pytorch环境
conda activate pytorch
  • 官网下载pytorch

版本根据情况选择:win10 + cuda10 + python3.5 对应下载

  • torch-1.0.1-cp35-cp35m-win_amd64.whl
  • torchvision-0.4.0-cp35-cp35m-win_amd64.whl

附-以上2个文件的网盘链接 提取码:2333

  • pip安装pytorch
pip install D:\ForPython\pytorch\torch-1.0.1-cp35-cp35m-win_amd64.whl
pip install D:\ForPython\pytorch\torchvision-0.4.0-cp35-cp35m-win_amd64.whl
  • 测试pytorch是否安装成功
python
import torch
x=torch.rand(4,3)
print(x)

# 成功运行即可 ↓
# tensor([[0.8313, 0.3844, 0.0501],
#        [0.8976, 0.7217, 0.2202],
#        [0.2422, 0.4707, 0.3695],
#        [0.8791, 0.2858, 0.5675]])

3. 源码编译

  • 运行setup.py
    进入到networks下的这三个文件夹
    image
python setup.py install

# 报错
# fatal error C1021: invalid preprocessor command 'warning'

打开torch/torch.h文件删掉这段warning ↓

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

再次运行

python setup.py install

又报了error,此时打开 THCNumerics.cuh
D:\ForPython\ANACONDA\envs\pytorch\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; }

环境配置完毕,在flownet2文件目录下执行python main.py -h,可查看帮助指令

(pytorch) D:\ForPython\workplace\flownet\flownet2-pytorch-master>python main.py --help
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 ...]]
               [--gradient_clip GRADIENT_CLIP]
               [--schedule_lr_frequency SCHEDULE_LR_FREQUENCY]
               [--schedule_lr_fraction SCHEDULE_LR_FRACTION]
               [--rgb_max RGB_MAX] [--number_workers NUMBER_WORKERS]
               [--number_gpus NUMBER_GPUS] [--no_cuda] [--seed SEED]
               [--name NAME] [--save SAVE]
               [--validation_frequency VALIDATION_FREQUENCY]
               [--validation_n_batches VALIDATION_N_BATCHES]
               [--render_validation] [--inference] [--inference_visualize]
               [--inference_size INFERENCE_SIZE [INFERENCE_SIZE ...]]
               [--inference_batch_size INFERENCE_BATCH_SIZE]
               [--inference_n_batches INFERENCE_N_BATCHES] [--save_flow]
               [--resume PATH] [--log_frequency LOG_FREQUENCY]
               [--skip_training] [--skip_validation] [--fp16]
               [--fp16_scale FP16_SCALE]
               [--model {FlowNet2CSS,FlowNet2S,ChannelNorm,FlowNet2,FlowNet2C,tofp32,FlowNet2SD,Resample2d,tofp16,FlowNet2CS}]

4. 安装缺失的包

  • Anaconda Prompt激活pytorch环境
anaconda activate pytorch
  • 进入flownet2所在文件目录
cd D:\ForPython\workplace\flownet\flownet2-pytorch-master
d:
  • 对main.py执行帮助
python main.py -h
# 提示:No module named 'tensorboardX'
# No module named 'setproctitle'
# No module named 'colorama'
# No module named 'tqdm'

# 还会出现很多其它包的缺失,缺什么安装什么即可
  • 使用pip安装缺失的包
pip install tensorboardX
pip install setproctitle
pip install colorama
pip install tqdm

# 若安装速度太慢,可加上镜像源,例如:
pip install --index-url https://pypi.douban.com/simple tqdm

# 这里注意按装 scipy
# 若版本太高,会出现
# ImportError: cannot import name ‘imread’
# 指定版本为1.2.1 亲测可行
pip install --index-url https://pypi.douban.com/simple scipy==1.2.1
  • 解决安装过程中的error

安装setproctitle遇到的error: Microsoft Visual C++ 14.0 is required.
点击下载Microsoft Visual C++ Build Tools 2015,默认安装即可。

二、预训练模型用于光流预测

1. 下载数据集和权重文件

无法科学上网,折腾了好久才下好,为方便其它小伙伴,已传到网盘。
网盘链接-提取码:2333,包括:

  • FlyingChairs 310G
  • flyingthings3d__optical_flow 30G
  • MPI-Sintel-complete 5G
  • checkpoints 2G

目前我只使用到MPI-Sintel-complete这个数据集和checkpoints

2. 运行实例

# 激活pytorch环境
conda activate pytorch 
# 进入flownet2工作目录
cd D:\ForPython\workplace\flownet\flownet2-pytorch-master
d:
# 键入命令,选择模型、输出类型、输出路径、数据集类型、数据集路径、权重文件路径等
python main.py
--inference
--model FlowNet2
--save_flow
--save ./output/me_samm_006_1_2
--inference_dataset ImagesFromFolder
--inference_dataset_root ./datasets/micro_expression/samm/006/006_1_2/2
--resume ./models/checkpoints/FlowNet2_checkpoint.pth.tar
  • –model:模型。这里使用FlowNet2,可选值可输入python main.py --help查看
  • –resume:训练模型权重的位置。已下载到checkpoints文件夹中。
  • –inference:相当于predict或test,是基于训练数据中模型权重定义的学习能力
  • –inference_dataset:数据类型。这里使用ImagesFromFolder类,输入png图像。
    查看更多数据类型细节
  • –inference_dataset_root:数据的位置
  • –save_flow:表明光流预测的结果应该保存为.flo文件
  • –save:预测的光流文件以及日志应保存到的位置
    运行上述命令会将生成的光流文件保存到./output/inference/run.epoch-0-flow-field文件夹,生成的.flo文件。

3. 运行实例时遇到的error

Traceback (most recent call last):
  File "main.py", line 111, in 
    args.current_hash = subprocess.check_output(["git", "rev-parse", "HEAD"]).rstrip()
  File "D:\ForPython\ANACONDA\envs\pytorch\lib\subprocess.py", line 316, in check_output
    **kwargs).stdout
  File "D:\ForPython\ANACONDA\envs\pytorch\lib\subprocess.py", line 383, in run
    with Popen(*popenargs, **kwargs) as process:
  File "D:\ForPython\ANACONDA\envs\pytorch\lib\subprocess.py", line 676, in __init__
    restore_signals, start_new_session)
  File "D:\ForPython\ANACONDA\envs\pytorch\lib\subprocess.py", line 957, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。

解决方案:打开main.py 将line111,123,124注释掉。参考->问答区issue108

ImportError: DLL load failed: 页面文件太小,无法完成操作。


IndexError: Traceback (most recent call last):
  File "D:\ForPython\ANACONDA\envs\pytorch\lib\site-packages\torch\utils\data\dataloader.py", line 138, in _worker_loop
    samples = collate_fn([dataset[i] for i in batch_indices])
  File "D:\ForPython\ANACONDA\envs\pytorch\lib\site-packages\torch\utils\data\dataloader.py", line 138, in 
    samples = collate_fn([dataset[i] for i in batch_indices])
  File "D:\ForPython\workplace\flownet\flownet2-pytorch-master\datasets.py", line 348, in __getitem__
    img1 = frame_utils.read_gen(self.image_list[index][0])
  File "D:\ForPython\workplace\flownet\flownet2-pytorch-master\utils\frame_utils.py", line 10, in read_gen
    if im.shape[2] > 3:
IndexError: tuple index out of range

解决方案:后台进程太多了,关掉就好了(尤其那个腾讯会议占gpu60%+,点名批评!)

4. flo文件可视化

  • 下载开源工具-github链接
  • 安装相关包
pip install --index-url https://pypi.douban.com/simple numpy tqdm matplotlib eel ffmpeg
  • 将flo转为png

有三种使用方式,命令行、Python、GUI,这里使用命令行。

# 进入到flowiz所在文件目录
cd D:\ForPython\workplace\flownet\youngqh-flowiz-master\flowiz

# demo/flo/*.flo 为 flo 所在文件夹路径
# --outdir 输出 png 存放的目录
python -m flowiz demo/flo/*.flo --outdir demo/png/

# (注意,只能一张一张图片处理)例如:
python -m flowiz demo/flo/samm006_1_2/2.flo --outdir demo/png/samm006_1_2

你可能感兴趣的:(深度学习,深度学习,pytorch)