zoukankan      html  css  js  c++  java
  • FlowNet2.0 安装指南

    -w387

    (安装环境: color{red}{Ubuntu16.04 + CUDA8.0 + cuDNN5.0})

    安装 CUDA

    CUDA 安装准备

    CUDA 官方安装文档

    首先查看是否电脑具有支持 CUDA 的 GPU

    lspci | grep -i nvidia
    

    查看 Linux 版本信息与 gcc 版本

    uname -m && cat /etc/*release && gcc --version
    

    下载

    下载 CUDA-8.0, 注意选取 deb(local) 版本, 如下图

    屏幕快照 2018-06-15 上午9.59.40-w593

    安装 CUDA

    sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
    sudo apt-key add /var/cuda-repo-8-0-local-ga2/7fa2af80.pub
    sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
    sudo apt-get update
    sudo apt-get install cuda
    

    环境设置

    .bashrc 中加入

    export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64 ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}  # 64位系统
    export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}   # 32位
    

    安装 Persistence Daemon

    The daemon approach provides a more elegant and robust solution to this problem than persistence mode.

    /usr/bin/nvidia-persistenced --verbose
    

    验证安装

    查看 GPU 驱动和 CUDA 的版本信息

    cat /proc/driver/nvidia/version && nvcc -V
    

    执行 cuda-install-samples-8.0.sh

    , 然后在 目录下会出现一个文件夹NVIDIA_CUDA-8.0_Samples

    cuda-install-samples-8.0.sh ~
    cd ~/NVIDIA_CUDA-8.0_Samples
    make -j `nproc`
    cd  ~/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release
    ./deviceQuery
    
    

    安装 cuDNN

    注册 Nvidia 账号, Nvidia cuDNNv5,选择 cuDNN v5 Library for Linux 下载

    cuDNN 官方安装指南

    tar -xzvf cudnn-8.0-linux-x64-v5.0-ga.tgz
    sudo cp cuda/include/cudnn.h /usr/local/cuda/include
    sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
    sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
    

    验证安装

    cp -r /usr/src/cudnn_samples_v7/ $HOME
    cd  $HOME/cudnn_samples_v7/mnistCUDNN
    make clean && make `nproc`
    ./mnistCUDNN
    
    

    如果看到如下信息, 恭喜你, 安装成功

    Test passed!
    

    环境依赖安装

    sudo apt-get update
    sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler -y
    sudo apt-get install --no-install-recommends libboost-all-dev -y
    sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev -y
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev -y
    sudo apt-get install git cmake build-essential -y
    
    

    安装 opencv

    下载 opencv

    git clone https://github.com/opencv/opencv.git
    cd opencv 
    git checkout 3.3.1 
    

    编译 opencv 3.3.1

    mkdir build  # 创建编译的文件目录
    cd build
    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
    make -j `nproc`  # 编译
    sudo make install
    pkg-config --modversion opencv  
    

    opencv-python

    推荐使用 cmake-gui 来配置编译选项, 比较方便, 如果你想指定特定版本的 python, 在 cmake-gui 配置也很方便, 不过没有什么必要, 即使你指定了特定的 python 环境(如 conda env), 系统还是会把 opencv 编译的动态库 cv2XX.so 放在系统位置 /usr/local/lib/pythonXX 下, 可以通过以下方式查看

    find /usr/local/lib -type f -name "cv2*.so"
    
    output: /usr/local/lib/python2.7/sist-packages/cv2.so
    

    然后进入自己的 python 目录, 如 ~/anaconda2/env/opencv/lib/python2.7/site-packages/, 创建软连接, 以 python2.7为例

    ln -s /usr/local/lib/python2.7/sist-packages/cv2.so cv2.so
    

    使用 opencv-python, 像上面这么麻烦没什么必要, 直接使用 pip 就可以, 很方便
    pip install opencv-python
    pip install opencv-contrib-python

    安装 flownet2.0

    安装前准备

    在安装 flownet2.0 时, 你的安装目录的组织可能和我不同, 所以这里我按照我的安装目录来说明, 这样便于我说明, 应该也便于你理解, 当你安装时, 你只需要简单的将我的安装目录替换成你自己的就可以了, 就是这么简单, 下面开始介绍了

    首先介绍下我的安装目录是

    install_dir = /home/wangbin/github/
    
    cd /home/wangbin/github/
    git clone https://github.com/lmb-freiburg/flownet2
    cd flownet2
    cp Makefile.config.example Makefile.config
    

    下面我们需要考虑如何来配置 caffe 的 Makefile.config 了, 如果你是第一次接触 caffe, 可以参考 官方 docker 版本的 Makefile.config配置, 你可以直接使用官方的配置文件, 不过你也可以使用我修改的版本, 下面介绍

    想必大家都比较熟悉 Anaconda, 由于我们要使用 pycaffe, 所以我们需要配置 python, 貌似 caffe 对 python3 支持不好, 所以选择 python2.7. 为了不影响其他软件的运行, 我们使用 conda 配置一个虚拟 python2.7 的环境, Anaconda 安装见这里

    conda create -n flownet2.0 python=2.7
    conda install numpy
    conda instaLL cython
    conda install scipy
    conda install scikit-image
    pip install msgpack
    pip install opencv-python
    

    我的 Anaconda 安装目录是

    /home/wangbin/software/anaconda2
    

    然后修改 Makefile.config 中文件中的 python 相关变量

    ANACONDA_HOME := $(HOME)/software/anaconda2/envs/flownet2
    PYTHON_INCLUDE := $(ANACONDA_HOME)/include 
            $(ANACONDA_HOME)/include/python2.7 
            $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
    
    PYTHON_LIB := $(ANACONDA_HOME)/lib
    LINKFLAGS := -Wl,-rpath,$(PYTHON_LIB)
    

    便于参考这里贴出我的 Makefile.config 文件

    同时修改 Makefile 文件的变量

    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial  opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
    
    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
    

    编译安装 caffe

    make -j `nproc` all tools pycaffe 
    

    编译成功之后, 将 pycaffe 加入 $PYTHONPATH

    sudo echo export PYTHONPATH=:$PYTHONPATH:"~/github/flownet2/python" >> ~/.bashrc
    

    配置环境, 每次使用 flownet2.0 时, 都要进行如下操作

    source set-env.sh 
    

    重要: 使用上述脚本建立 flownet2的环境, 要确保你的 python 路径和系统路径中不包含其他版本的 caffe

    下载模型

    cd models 
    ./download-models.sh 
    

    使用 image pair 测试模型

    FlyingChairs 测试数据位于

    /home/wangbin/github/flownet2/data/FlyingChairs_examples
    

    为了后续便于操作, 我们首先将该目录下的下的第一对样例数据中的复制到 flownet2/models 目录下

    cp /home/wangbin/github/flownet2/data/FlyingChairs_examples/0000000-*  /home/wangbin/github/flownet2/models/
    

    0000000-gt.flo 是 ground-truth 光流

    (2通道)光流, 我们是无法通过图片查看器 eog 打开, 我们需要将光流图转化为 RGB 图, 转化工具下面介绍

    光流可视化工具

    [Middlebury 光流可视化工具] (http://vision.middlebury.edu/flow/submit/)
    具体使用见 flow-code文件夹中的 README.md

    wget http://vision.middlebury.edu/flow/code/flow-code.zip
    unzip flow-code.zip
    cd flow-code/imageLib
    make -j `nproc`
    cd ..
    make -j `nproc`
    

    使用生成的可执行文件 color_flow将光流图转化成 RGB 图, 图的颜色表示运动方向, 颜色的深浅表示的是运动的快慢

    usage: ./color_flow [-quiet] in.flo out.png [maxmotion]
    

    下面使用 color_flow 将第一对 FlyingChairs 的 ground-truth 光流 0000000-gt.flo 转化为 RGB 图

    ./color_flow 0000000-gt.flo  0000000-gt.png
    
    

    0000000-gt

    光流可视化代码(python)

    如果想要在代码中使用光流可视化, 有个简单的 python 版本可以使用(使用 opencv), 简单的没法相信,

    背景比较亮的版本

    def visualize_optical_flow(frame1, blob):
        # optical flow visualization 光流可视化
        # 由于frame的数据类型为np.uint8 即 usigned char, 最大存储值为255, 如果赋值为256, 结果为 0,
        # 也就是说及时赋值很大, 也会被截断
        # 对于 饱和度s 和亮度v 而言, 最大值是255, s = 255 色相最饱和, v = 255, 图片最亮
        # 而对与颜色而言, opencv3中, (0, 180) 就会把所有颜色域过一遍, 所以这里下面就算角度时会除以 2
    
        # np.zeros_like(): Return an array of zeros with the same shape and type as a given array.
        hsv = np.zeros_like(frame1)
    
        # cv2.cartToPolar(x, y): brief Calculates the magnitude and angle of 2D vectors.
        mag, ang = cv2.cartToPolar(blob[..., 0], blob[..., 1])
    
        # degree to rad: degree*180/np.pi
        hsv[..., 0] = (ang * 180 / np.pi) / 2
        
        # brief Normalizes the norm or value range of an array
        # norm_type = cv2.NORM_MINMAX, 即将值标准化到(0, 255)
        hsv[..., 1] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)
        
        # 亮度为255
        hsv[..., 2] = 255
        bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
        return bgr
    

    背景比较暗的版本

    def visualize_optical_flow(frame1, blob):
        # optical flow visualization
        hsv = np.zeros_like(frame1)
        rad, ang = cv2.cartToPolar(blob[..., 0], blob[..., 1])
        hsv[..., 0] = ang * 180 / np.pi / 2
        hsv[..., 2] = cv2.normalize(rad, None, 0, 255, cv2.NORM_MINMAX)
        hsv[..., 1] = 255
        rgb = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
        cv2.imshow('flow', rgb)
    

    HSV 调色板

    推荐看学会调色,从理解HSL面板开始, 了解 HSV 相关知识

    -w650

    测试 image pair

    将 flownet2.0/script 目录加入 PATH 中, 便于我们任何目录下使用 script 下的脚本

    sudo echo export PATH=$PATH:"/home/wangbin/github/flownet2/scripts" >> ~/.bashrc
    
    cd models 
    
    run-flownet.py FlowNet2/FlowNet2_weights.caffemodel.h5  
    FlowNet2/FlowNet2_deploy.prototxt.template 
    0000000-img0.ppm 0000000-img1.ppm 0000000-pre.flo
    
    ./color_flow 0000000-pre.flo  0000000-pre.png
    eog 0000000-pre.png
    

    视频输入源

    我们使用 flownet2.0 处理大部分是视频内容, 我这里写了一份关于将视频作为输入源的代码, 分享在 github 上, 有需要的自取, 这部分虽然简短, 不过应该是本博客最有价值的部分了

    github flownet2_videocapture.py

    参考

    1. install opencv on ubuntu
    2. 学会调色,从理解HSL面板开始
    3. Ubuntu16.04 Caffe 安装步骤记录(超详尽)
    4. Github FlowNet2



  • 相关阅读:
    如何在IIS7/7.5上配置IISADMPWD
    运用DebugDiag诊断ASP.Net异常
    vuecli3修改项目启动端口
    彻底删除vscode及安装的插件和个人配置信息
    angular中的 input select 值绑定无效,以及多出一个空白选项问题
    简述MVC模式
    vuecli3 运行报错
    前端开发规范
    nodejs 下载最新版本
    小程序 自定义弹窗出现后存在滚动穿透问题
  • 原文地址:https://www.cnblogs.com/nowgood/p/FlowNet2_install.html
Copyright © 2011-2022 走看看