2021-01-05 从零开始:使用Flownet2生成optical flow

从零开始:使用Flownet2生成optical flow

1介绍

本文利用flownet2生成一个有意思的短视频,介绍了本人从下载到使用遇到的一些坑,第一篇博客,没啥经验,逻辑不清楚还请见谅!

由于手头的科研任务需要生成光流图作为输入,因此开始想办法得到光流图,刚开始了解的是利用denseflow来生成,后来在配置denseflow环境的时候总是遇到奇怪的错误,本小白没能解决,于是随即转用flownet2了,听组内的小伙伴说 flownet2效果比较好。

flownet2生成的光流视频

原视频是来自douyin的短视频,上面是根据flownet2生成的视频。这样一对比感觉就很有趣了 (^ _ ^)

2.下载及运行

代码下载地址github code,也可以直接利用下面的命令来下载。

在安装install.sh之前,参考1.链接中所说的那样,需要将c++11改为14

git clone https://github.com/NVIDIA/flownet2-pytorch.git

然后,

cd flownet2-pytorch

接着,

bash install.sh

这样,我们便成功的安装了flownet2.

由于我只需要利用flownet2来生成我所需要的光流图,于是便没有从头开始训练模型,我直接用预训练好的模型来进行生成的(链接)。

生成的代码是

python main.py --inference --model FlowNet2 \
--save_flow --inference_dataset ImagesFromFolder \
--resume /home/wenshijie/flownet2-pytorch/checkpoints/FlowNet2_checkpoint.pth.tar \
--save /home/wenshijie/flownet2-pytorch/douyin/output/ \
--inference_dataset_root /home/wenshijie/flownet2-pytorch/douyin/frames/ \
--number_gpus 1

将number_gpus设置为1是为了生成和原图像帧数-1的光流图数,也就是假如inference_dataset_root目录下有50帧图片,那么可以生成49帧光流图,如果这里不设置为1而是默认为4的话,只能生成12帧光流图。

由于生成的光流图是.flo文件不能直接可视化,于是通过下面两种方法来生成png格式的图片:

  1. 通过flow-code来转化,这也是目前大多数人采用的方法,下载地址为:link,至于安装可参考2.链接中所述,这一步倒没有遇见很多坑
    在这里插入图片描述
    安装好了之后,单独生成一个转化 .py文件,用来批量转化
import os
path = './run.epoch-0-flow-field/'
png_path = './png/'
length = len(os.listdir(path))
num = 0
while (num < length):
    ml = '/home/wenshijie/flownet2-pytorch/flow-code/color_flow\t' + path + str(num).rjust(6,'0') + '.flo\t' + png_path + str(num).rjust(6,'0') + '.png'
    os.system(ml)
    num += 1

注意在这里,要注意修改你自己的文件路径确保正常运行。还有,str(num).rjust(6,‘0’)为什么后面加了rjust(6,‘0’),是因为在flownet2代码中生成的是000001.flo这样的文件名,如果不加则会出现如下错误
在这里插入图片描述
经过以上步骤就可以生成png图像了

  1. 第二种方法就是通过flowiz 链接来转化,这种转化比较小众一点,但是更有意思,文首的视频便是通过这种方法来生成的。关于flowiz的下载和安装比较容易,直接一步执行即可
pip install flowiz -U

普通的单个文件的转化可以直接参照官网即可,下面我们介绍一种批量转化的方法

python -m flowiz \
# 待转化的.flo文件地址,
/home/wenshijie/flownet2-pytorch/douyin/output/inference/run.epoch-0-flow-field/*.flo \ 
# 输出的png文件地址
-o /home/wenshijie/flownet2-pytorch/douyin/output/color_coding \
# 输出的视频文件地址
-v /home/wenshijie/flownet2-pytorch/douyin/output/color_coding/video \
-r 30

这第二种方法不仅可以生成png文件,还可以直接生成MP4文件。需要指明的是,如果想根据你的视频生成你的光流视频,得有这么几个步骤:

  • 首先你得把你的视频生成图片序列,这个步骤可以通过ffmpeg来实现

  • 然后将图片通过flownet2生成.flo文件,

  • 最后用flowiz将.flo文件生成视频和png图片序列。

还有,最后生成的视频是.flo.png格式的,windows自带的视频播放器是不支持这种格式的直接播放的,你可以将视频发送到微信,在微信中就可以直接播放,当然,通过别的播放器也能播放,除了自带的,,,

3.总结

至此,我们就可以将一个普通的视频序列生成一个光流视频序列。

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值