谷歌MIT:微小运动放大算法的实现

原始论文题目:《Learning-based Video Motion Magnification》

作者:Tae-Hyun and Jaroensri, Ronnachai and Kim, Changil and Elgharib, Mohamed and Durand, Frdo and Freeman, William T and Matusik, Wojciech

本文算法基于ubuntu 18.04平台进行程序的运行。

1.支持库安装(Installation)

官方的安装方式,当然也可以自己看requirements.txt文件,将缺少的依赖库安装上。

sudo apt-get install python-dev 	# required to install setproctitle
pip install -r requirements.txt

2.程序运行(Running)

首先下载预训练模型,将预训练模型放置在data/文件夹下,预训练模型为checkpoint,模型放置完成后的文件夹结构如下所示(官方提供的模型应该不是完全的,仅为一部分,完全版需要对80G的训练集进行训练):

data/training/o3f_hmhm2_bg_qnoise_mix4_nl_n_t_ds3/checkpoint.

接下来将视频序列放置在data/vids/下,运行以下脚本语句中的一个:

# 动态模式或静态模式下的帧序列处理
sh run_on_test_videos.sh    
# Temporal filtering based processing (frequency band pass filter)
sh run_temporal_on_test_videos.sh        

:模型文件夹名字

:视频切割为图像时,保存的图像的文件夹的名字

:放大倍数

:是否为动态模式

说明:动态模式的含义是对连续帧视频序列进行处理。代码支持{‘fir’滤波器,‘butter’滤波器,‘differenceOfIIR’}滤波器。对于FIR滤波器来说,可以在时域以及频域进行滤波操作。

最后结合一个例子给出代码的使用方法,例子是对婴儿睡觉呼吸时肚子幅度的检测。对于一段视频序列,首先需要将视频序列提取为PNG格式的文件。我们可以在repo文件夹下运行如下的命令行代码(假定所有视频帧被放置在data/vids/baby路径下):

# Static mode, using first frame as reference.
sh run_on_test_videos.sh o3f_hmhm2_bg_qnoise_mix4_nl_n_t_ds3 baby 10
# Dynamic mode, magnify difference between consecutive frames.
sh run_on_test_videos.sh o3f_hmhm2_bg_qnoise_mix4_nl_n_t_ds3 baby 10 yes
# Using temporal filter (same as Wadhawa et al.)
sh run_temporal_on_test_videos.sh o3f_hmhm2_bg_qnoise_mix4_nl_n_t_ds3 baby 20 0.04 0.4 30 2 differenceOfIIR

以下的代码是用来将视频帧提取成为图像序列(如果用avconv不成功的话使用ffmpeg进行替代)首先要运行如下代码

avconv -i /baby.mp4 -f image2 /baby/%06d.png

:输入文件的路径;

baby.mp4:官方的测试视频名字,根据自己视频名称进行更改

:输出文件的路径

通过修改以上的脚本可以自定义视频以及定义结果的输出位置。可以通过修改configs/下的配置文件,对模型训练时的过程文件(checkpoint)的存储位置进行设置。

3.模型训练(Training)

使用convert_3frames_data_to_tfrecords.py文件,将数据集转化为tfrecords形式,或者下载已经处理后的tfrecords文件。文件下载地址为:https://groups.csail.mit.edu/graphics/deep_motion_mag/data/readme.txt

在配置文件中设置数据的路径,运行如下的训练脚本:

bash train.sh configs/.conf

特别需要注意的是:GPU已经配置完成。

需要在conf文件中录入自己的训练库文件的路径,成功配置后结果如下所示:

注意事项:

首先我想说的是,不建议利用Anaconda进行安装,虽然理论上来说这样也可以,但是由于自己的水平有限不能解决如下的问题:由于在安装opencv时,anaconda会自动将依赖包ffmpeg安装上,但是我发现anaconda安装的ffmpeg,不支持libx264,因此不能够进行编解码,此时,即使编译一个新的libx264,也是不能进行编解码,显示错误为

谷歌MIT:微小运动放大算法的实现_第1张图片

当然如果必须用anaconda进行安装也可以,只不过,需要在沙箱外重新安装一个tensorflow,利用沙箱外的环境和Anaconda安装的软件支持包共同进行程序的运行。

1.在进行程序的编译以及运行时,要将依赖库安装完全包括:

tensorflow、numpy、opencv-python、scipy、setproctitle、tqdm等

如果要是利用anaconda进行安装

2.如果对于新手来说一定是新安装的ubuntu系统,因此需要安装视频编解码依赖包ffmpeg:

需要在沙箱外进行程序的安装:按照以下的官网进行安装:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu这个问题困扰了我好久,最后才发现这个官网,成功安装。

3.一定要注意的是,也许avconv -i /baby.mp4 -f image2 /baby/%06d.png不能成功,因为没有相关编解码文件,此时可以更换为ffmpeg -i /baby.mp4 -f image2 /baby/%06d.png 当然在程序magnet.py中也要将相应的acvonv更换为ffmpeg。

4.最后一定要注意的是:

magnet.py文件中,‘libx264’中的x一定为小写,一定为小写。

因为刚开始的时候,我不能进行libx264的编解码,因此我改成了别的方式,但是发现别的方式不成功,又改回来了,此时由于没有注意,将libx264写成了libX264。当成功安装成功libx264编解码文件后,依然出现

 

突然想到了大小写问题,当更改完成后,可以编译及运行成功。

安装完成后,运行程序,最后得到的结果为:

谷歌MIT:微小运动放大算法的实现_第2张图片

注意,此时的结果输出为.mp4格式的文件,文件位置为data/output/baby,可以发现相比于原始视频,输出视频在运动的部位变化幅度更大一些。

5.需要将切割后的每帧图像文件放置到vids文件夹下的自己名字的文件夹中。否则程序将报错。

谷歌微小部位运动算法使用步骤总结

1.将待进行分析的视频文件放在data/vids/ 文件路径下;

2.运行

avconv(ffmpeg) -i /baby.mp4 -f image2 /baby/%06d.png

将视频文件转为图像

例如:

ffmpeg -i /home/yourname/deep_motion_mag-master/data/vids/baby.mp4 -f image2 /home/yourname/deep_motion_mag-master/data/output/baby/%06d.png

3.将生成的图像文件夹拷贝到vids文件夹下,否则将会显示为找不到文件

4.运行

# 动态模式或静态模式下的帧序列处理
sh run_on_test_videos.sh    
# Temporal filtering based processing (frequency band pass filter)
sh run_temporal_on_test_videos.sh        

例如:

sh run_on_test_videos.sh o3f_hmhm2_bg_qnoise_mix4_nl_n_t_ds3 自己的名字 15 yes

 

 

你可能感兴趣的:(Tensorflow,tensorflow,运动部位放大)