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



  • 相关阅读:
    HDOJ 4747 Mex
    HDU 1203 I NEED A OFFER!
    HDU 2616 Kill the monster
    HDU 3496 Watch The Movie
    Codeforces 347A A. Difference Row
    Codeforces 347B B. Fixed Points
    Codeforces 372B B. Hungry Sequence
    HDU 1476 Sudoku Killer
    HDU 1987 How many ways
    HDU 2564 词组缩写
  • 原文地址:https://www.cnblogs.com/nowgood/p/FlowNet2_install.html
Copyright © 2011-2022 走看看