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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM