FlowNet2.0 安装指南

\(安装环境: \color{red}{Ubuntu16.04 + 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)
版本, 如下图

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

光流可视化代码(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 相关知识

测试 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
参考
FlowNet2.0 安装指南的更多相关文章
- flownet2.0 caffe anaconda2 编译安装
1. 下载flownet2.0源码到指定目录 cd /home/zzq/saliency_models/deep_optical_flow git clone https://github.com/l ...
- FlowNet2.0论文笔记
原论文标题:FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks 文章是对FlowNet的进一步改进,主要贡献为如下 ...
- cord-in-a-box 2.0 安装指南
[TOC] 这篇文章简要介绍了 Ciab2.0 的安装. 包括硬件, 软件环境的选择, Ciab2.0的实际部署架构, 安装过程等. 下面就先对 Ciab2.0 部署环境做简要介绍. 1. 概述 这一 ...
- Hive 0.12.0安装指南
目录 目录 1 1. 前言 1 2. 约定 1 3. 服务端口 2 4. 安装MySQL 2 4.1. 安装MySQL 2 4.2. 创建Hive元数据库 2 5. 安装步骤 3 5.1. 下载Hiv ...
- HBase-1.2.1和Phoenix-4.7.0分布式安装指南
目录 目录 1 1. 前言 2 2. 概念 2 2.1. Region name 2 3. 约定 2 4. 相关端口 3 5. 下载HBase 3 6. 安装步骤 3 6.1. 修改conf/regi ...
- Spark 0.9.1和Shark 0.9.1分布式安装指南
目录 目录 1 1. 约定 1 2. 安装Scala 1 2.1. 下载 2 2.2. 安装 2 2.3. 设置环境变量 2 3. 安装Spark 2 3.1. 部署 2 3.2. 下载 3 3.3. ...
- HBase-0.98.0和Phoenix-4.0.0分布式安装指南
目录 目录 1 1. 前言 1 2. 约定 2 3. 相关端口 2 4. 下载HBase 2 5. 安装步骤 2 5.1. 修改conf/regionservers 2 5.2. 修改conf/hba ...
- Yarn上运行spark-1.6.0
目录 目录 1 1. 约定 1 2. 安装Scala 1 2.1. 下载 2 2.2. 安装 2 2.3. 设置环境变量 2 3. 安装Spark 2 3.1. 下载 2 3.2. 安装 2 3.3. ...
- Hive 1.2.1&Spark&Sqoop安装指南
目录 目录 1 1. 前言 1 2. 约定 2 3. 服务端口 2 4. 安装MySQL 2 4.1. 安装MySQL 2 4.2. 创建Hive元数据库 4 5. 安装步骤 5 5.1. 下载Hiv ...
随机推荐
- mariadb-5.5安装
mariadb-5.5 Windows10安装 1.官网下载:https://downloads.mariadb.org/ 2.解压mariadb-5.5.58-winx64.zip,目录C:\mar ...
- 机器学习-随机梯度下降(Stochastic gradient descent)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- Openldap命令详解
Openldap 客户端常用管理命令 1.ldapadd -x: 简答认证方式 -W: 不需要在命令上写密码 ldapapp -x -D "cn=Manager,dc=suixingpay, ...
- JAVA-比较浮点型数据
Float public static void main(String[] args) { Float x = 12.4F; Float y = 12.4F; // 比较对象地址 System.ou ...
- python 存储引擎 mysql(库,表, 行) 单表多表操作 (foreign key) sql_mode pymysql模块讲解
##################总结############### mysql 常用数据类型 整型:tinyint int(42亿条左右) bigint 小数:float double dec ...
- Web API中的模型验证
一.模型验证的作用 在ASP.NET Web API中,我们可以使用 System.ComponentModel.DataAnnotations 命名空间中的属性为模型上的属性设置验证规则. 一个模型 ...
- springboot打包成war,部署到tomcat无法访问的问题
如题:实在是太坑.平时本地测试觉得很方便,但是到了项目打包发布掉链子了. 如很多帖子一样: 首先springboot内嵌的tomcat,再依赖servlet-api,修改启动类继承SpringBoot ...
- js验证登录注册
js验证登录注册的优势,在前台直接验证,不需要在后台读取返回数据验证,减轻服务器压力. 登陆验证得必要性,拦截恶意脚本的登录注册攻击.哈哈,当然有些高手是可以直接跳过js验证的. 所以还是后台验证,并 ...
- Enum入门【原】
package com.bobo.www.cxf.impl; public enum Traffic { Red(1), Green(2), Yellow(3);//必须最前面 private int ...
- T-SQL 编程技巧
Ø T-SQL 编程是大多数程序员都会接触的,也是数据库编程必须掌握的技术.下面,是本人在工作或学习中积累的一些心得和技巧.主要包含以下内容: 1. waitfor延时执行 2. NOT 关 ...