利用预训练好的模型实现 FlowNetPytorch(ubuntu18.04 cuda10.1 cudnn7.6.4)
光流的定义之类的,大家如果不了解可以自行搜索,这里就不讲了。
要进行光流提取,有很多传统的方法,不一定要用深度学习,例如用opencv里面自带的方法也可以做。这里说一说flownet这个网络 目前看有v1 v2 v3了 原作者的github一直在更新也给了docker版本,奈何我这里配置docker的images就用不了,因此在网上找到了一个pytorch的实现。这里把实现过程分享给各位。
第一步是配置好自己的pytorch 具体怎么配置网上有很多教程,我只强调一点,安装的时候一定要按顺序来,不要随意乱来。
下载pytorch版本代码,链接在这里
#1 进入虚拟环境 pytorch 确定该环境中已经装好cuda cudnn torch等且版本需要对应好 保证自己的gpu可用,没有gpu的话我就帮不了你了,其实也可以做的,不过要改的地方挺多。
conda activate pytorch
#测试一下
python
import torch
ptint(torch.cuda.is_available())
#如果返回结果为true 恭喜你,基本能做了
#2 看一下 刚才下载的文件夹有个requirements.txt 看看自己的虚拟环境是不是都有这些包 看的方法是
conda list
#或者用pip
pip list
#保证这些都安装好了 输入下面的命令 测试电脑是否已经安装了所有需要的包
python main.py -h
#如果没有安装,或者安装版本有问题,根据报错提示,相应安装或升降版本
#2测试电脑是否已经安装了所有需要的包
python main.py -h
#如果没有安装,或者安装版本有问题,根据报错提示,相应安装或升降版本
#3 准备数据 并加载预训练好的模型,自己建文件夹,把数据和模型放进去
/home/flownet/FlowNetPytorch-master/data
#数据路径要完整,作者的数据命名给出的名字有点问题
#img_pairs = []
# for ext in args.img_exts:
# test_files = data_dir.files('*1.{}'.format(ext))
# for file in test_files:
# img_pair = file.parent / (file.namebase[:-1] + '2.{}'.format(ext))
# if img_pair.isfile():
# img_pairs.append([file, img_pair])
#根据run_inference.py程序中的这段代码 可以看见图片对命名应该是1和2结尾 而不是0和1结尾 因此需要对命名的图片进行一个修改
/home/flownet/FlowNetPytorch-master/pretrained/flownetc_EPE1_766.tar
#模型要把全名写进去,下载预训练模型在原作者谷歌云盘里,需要*,否则很慢,自己训练需要自己下载数据数据集,可能会更慢(如果有需要可以联系我 帮忙搬运到百度云盘),下载下来不要去解压
#4批量运行帮助,检查需要输入的东西
python run_inference.py -h
运行的结果如下所示:
PyTorch FlowNet inference on a folder of img pairs
positional arguments:
DIR path to images folder, image names must match
'[name]0.[ext]' and '[name]1.[ext]' ##注意!!这里的提示有问题!!,不是0和1##
PTH path to pre-trained model
optional arguments:
-h, --help show this help message and exit
--output DIR, -o DIR path to output folder. If not set, will be created in
data folder (default: None)
--output-value {raw,vis,both}, -v {raw,vis,both}
which value to output, between raw input (as a npy
file) and color vizualisation (as an image file). If
not set, will output both (default: both)
--div-flow DIV_FLOW value by which flow will be divided. overwritten if
stored in pretrained file (default: 20)
--img-exts [EXT [EXT ...]]
images extensions to glob (default: ['png', 'jpg',
'bmp', 'ppm'])
--max_flow MAX_FLOW max flow value. Flow map color is saturated above this
value. If not set, will use flow map's max value
(default: None)
--upsampling {nearest,bilinear}, -u {nearest,bilinear}
if not set, will output FlowNet raw input,which is 4
times downsampled. If set, will output full resolution
flow map, with selected upsampling (default: None) ##建议设置,输出完整大小的flow##
--bidirectional if set, will output invert flow (from 1 to 0) along
with regular flow (default: False) ##设置后 对偶输出,根据需要决定
#5看完后,写运行代码 直接进行批量测试
python run_inference.py -u bilinear /home/flownet/FlowNetPytorch-master/data /home/flownet/FlowNetPytorch-master/pretrained/flownetc_EPE1_766.tar
#6运行过程如下,做了一个示例
=> will save raw output and RGB visualization
=> fetching img pairs in '/home/flownet/FlowNetPytorch-master/data' ##找到的图片位置
=> will save everything to /home/flownet/FlowNetPytorch-master/data/flow ##默认结果保存位置
18 samples found ##找到了图片对个数,一开始根据 -h中的设置,怎么都跑不出来,后来检查了源代码,发现作者帮助给错了!!!
=> using pre-trained model 'flownetc' ##加载预训练模型,可以更换
100%|███████████| 18/18 [00:06<00:00, 2.80it/s]#速度还挺快的
#7到输出目录检查结果
#同时输出了flow和可视化的结果 可视化结果是拿来看的 flow可以作进一步使用
#至此就实现了利用pytorch对flownet进行复现的全过程,批量进行测试。如果要自己训练的,你需要去下载一下原作者的flying chair数据集,如果对原作者的代码和文章有兴趣想要学习和复现的请点击这里
#下一步我想实现以下flownet3 源代码在这里,如果已经有实现的朋友 欢迎指导和讨论