- 引言
- 依赖环境与安装脚本
- 光流提取
本文主要介绍使用OpenCV的TV-L1算法提取视频的光流。近年来很多SOTA视频动作识别模型都采用RGB-光流的两线架构,能为动作特性的捕捉带来可观的提升。然而在像UCF101这样数以万计的视频数据集上提取光流则需要非常大的计算量。博主试图用纯python脚本,在CPU上8线程提取时,一整晚只能完成不到1%的视频提取。因此,利用GPU进行加速则非常有必要。用conda和pip安装的opencv-python默认是不使用CUDA的,因此需要从C++源代码编译。本文参考mmlab的denseflow代码,介绍安装带有CUDA支持的OpenCV并加速提取光流的方法。
依赖环境与安装脚本在按照repo中的脚本进行安装前,首先保证机器上已经有CUDA环境mmlab的denseflow给予OpenCV和Boost,repo中提供了shell脚本。
然而博主在运行时发现频频报错,主要原因是将脚本拆开分别执行的原因。建议创建install_cv.sh一次性执行:
# ZZROOT is the root dir of all the installation # you may put these lines into your `.bashrc` or `.zshrc`. export ZZROOT=$HOME/app export PATH=$ZZROOT/bin:$PATH export LD_LIBRARY_PATH=$ZZROOT/lib:$ZZROOT/lib64:$LD_LIBRARY_PATH # fetch install scripts git clone https://github.com/innerlee/setup.git cd setup # opencv depends on ffmpeg for video decoding # ffmpeg depends on nasm, yasm, libx264, libx265, libvpx ./zznasm.sh ./zzyasm.sh ./zzlibx264.sh ./zzlibx265.sh ./zzlibvpx.sh # finally install ffmpeg ./zzffmpeg.sh # install opencv 4.3.0 ./zzopencv.sh # you may put this line into your .bashrc export OpenCV_DIR=$ZZROOT # install boost ./zzboost.sh # you may put this line into your .bashrc export BOOST_ROOT=$ZZROOT # finally, install denseflow ./zzdenseflow.sh
安装过程中出现任何报错情况时,首先进入报错包的build路径下,寻找CmakeFiles/CmakeOutput.log来确定错误是什么。debug后删除该包的build文件夹,重新执行install_cv.sh。已安装的部分会非常快。
光流提取在按照repo中的指导执行命令前,环境路径需要赋值。在命令行执行:
$ export ZZROOT=$HOME/app $ PATH=$ZZROOT/bin:$PATH $ LD_LIBRARY_PATH=$ZZROOT/lib:$ZZROOT/lib64:$LD_LIBRARY_PATH
然后按照执行命令即可:
denseflow test -b=20 -a=tvl1 -s=1 -if -v



