NowGood 阅读(26) 评论(0)

-w387

安装环境:

  1. Ubuntu16.04
  2. CUDA8.0 + cuDNN5.0

安装 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位

Install Persistence Daemon

NVIDIA is providing a user-space daemon on Linux to support persistence of driver state across CUDA job runs. The daemon approach provides a more elegant and robust solution to this problem than persistence mode. For more details on the NVIDIA Persistence Daemon.The NVIDIA Persistence Daemon can be started as the root user by running:

/usr/bin/nvidia-persistenced --verbose

验证安装

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

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

执行 cuda-install-samples-8.0.sh <dir>, 然后在 <dir>目录 下会出现一个文件夹 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 账号, 下载 cuDNNv5

屏幕快照 2018-06-15 上午10.45.48-w493

安装 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  

安装 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

为了后续便于操作, 我们首先将该目录下的下的第一对样例数据中的复制到 /home/wangbin/github/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
    hsv = np.zeros_like(frame1)
    rad, ang = cv2.cartToPolar(blob[..., 0], blob[..., 1])
    hsv[..., 0] = ang * 180 / np.pi / 2
    hsv[..., 1] = cv2.normalize(rad, None, 0, 255, cv2.NORM_MINMAX)
    hsv[..., 2] = 255
    rgb = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
    cv2.imshow('flow', rgb)

背景比较暗的版本

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)

测试 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


## 视频输入源

关于将视频作为输入的代码, 我就不解释了, 代码也是放在 github 上, 有需要的自取

[github flownet2_videocapture.py](https://github.com/nowgood/script/blob/master/optical_flow/flownet2_videocapture.py)