GPU版本光流算法

GPU版本光流算法

代码链接:gpu_flow

之前一直使用MATLAB 工具箱(Piotr’s Image & Video Matlab Toolbox)来提取光流,速度奇快,但是效果不是很好。后来用了opencv自带的TVL1算法,速度奇慢,速度几秒一帧(i7-7700k)。

在双流论文里看到了这个GPU版本的方法,同时大佬也推荐这个。于是就来试试。谁知道坑如此之深(主要还是自己太菜)不小心把系统玩坏了,走了个大弯路。

好了,正式介绍一下。把踩得坑都说一下。

###一. 克隆到本地

git clone https://github.com/feichtenhofer/gpu_flow.git


###二. 安装各种依赖项

依赖项

  1. Opencv 2.4 [本人使用opencv2.4.13, 2.4.9编译过程老失败]
  2. Qt 5.4
  3. cmake [这里啰嗦一下,强烈推荐使用cmake-gui]

###三. 参数调整

将compute_flow.cpp文件中 vid_path out_path out_path_jpeg 按照个人需求修改,分别对应与要处理视频所在地址,输出光流保存地址,输出图片保存地址。


###四. 安装

  1. mkdir -p build

  2. cd build

  3. cmake ..

    这里强烈建议用cmake-gui

  4. make


###五. 各种问题以及解决

  1. make时 /usr/bin/ld: cannot find -lopencv_dep_cudart

  2. make时 /usr/lib/x86_64-linux-gnu/libsoxr.so.0: undefined reference to `GOMP_parallel@GOMP_4.0’

  3. make时 CMake Warning at CMakeLists.txt:44 (ADD_EXECUTABLE):
    Cannot generate a safe runtime search path for target compute_flow because
    files in some directories may conflict with libraries in implicit
    directories:
    runtime library [libcudart.so.8.0] in /usr/local/cuda-8.0/lib64 may be hidden by files in:
    /usr/local/lib
    runtime library [libcublas.so.8.0] in /usr/local/cuda-8.0/lib64 may be hidden by files in:
    /usr/local/lib

  4. make时出现 /home/xxx/anaconda3/lib/libharfbuzz.so.0: undefined reference to ‘FT_Get_Var_Blend_Coordinates’ /home/xxx/anaconda3/lib/libharfbuzz.so.0: undefined reference to `FT_Done_MM_Var’


For 1.
网上解决方案:

在cmake时加上**-D CUDA_USE_STATIC_CUDA_RUNTIME=OFF **

即:

cmake -D CUDA_USE_STATIC_CUDA_RUNTIME=OFF ..


For 2.
但是第二个问题很难解决。。。

我的解决方案:

使用cmake-gui

在configure之后报错 去掉勾选的 CUDA_USE_STATIC_CUDA_RUNTIME

再configure一次。然后generate。

期间可能有这个错误:

CMake Error at CMakeLists.txt:20 (find_package):

  By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Qt5Core", but
  CMake did not find one.
  Could not find a package configuration file provided by "Qt5Core" with any
  of the following names:

 Qt5CoreConfig.cmake
 qt5core-config.cmake

一行命令解决:

sudo apt install qtbase5-dev

最后进入build文件夹中make一下。这样就搞定了。

在执行中可能遇到

./compute_flow: /home/xxx/anaconda3/lib/libgomp.so.1: version `GOMP_4.0' not found (required by /usr/lib/x86_64-linux-gnu/libsoxr.so.0)

升级一下anaconda就好了。(比较慢,耐心等待)

conda update conda
conda update anaconda

For 3.
cmake加上这个选项 cmake NO_DEFAULT_PATH=/usr/local/lib …
For 4.
找到anaconda3/lib/libharfbuzz.so.0 将其暂时重命名一下, 再make一下 发现没问题了。 最后别忘了把名字改回来。


###六. 执行

按照作者github上的介绍

./compute_flow [option]

速度确实快!!平均每帧~15ms的样子(320*240的视频, 1080ti单卡)

你可能感兴趣的:(opencv,计算机视觉)