欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用预训练好的模型实现 FlowNetPytorch(ubuntu18.04 cuda10.1 cudnn7.6.4)

程序员文章站 2022-05-27 14:41:06
...
光流的定义之类的,大家如果不了解可以自行搜索,这里就不讲了。

要进行光流提取,有很多传统的方法,不一定要用深度学习,例如用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 源代码在这里,如果已经有实现的朋友 欢迎指导和讨论