TextBoxes++在 ubuntu16.04上的編譯及訓練

    論文地址:https://arxiv.org/abs/1801.02765,發表於 AAAI2018

    Github地址:https://github.com/MhLiao/TextBoxes_plusplus.git

    對於閱讀這篇文章的讀者來說,對於 TextBoxes++論文本身應該已經不陌生。它是 TextBoxes 的一個擴展,TextBoxes 只可以檢測水平方向的文本,而 TextBoxes++可以檢測任意角度的文本,而且訪方法也是基於 SSD 改造實現的。TextBoxes++的具體實現細節我可能另外會寫一篇自己的解讀文章(只是可能),這裏主要是記錄一下如果把這個項目跑起來。

1.我的環境

    系統:Ubuntu 16.4

    CUDA:CUDA 8.0,cudnn v5.1

    GPU: NVIDIA GeForce RTX 2080 Ti

    應該有不少人是在 ubuntu 14.04上編譯的訪項目,我本來還擔心 ubuntu 16.04會不會有問題,結果還是可以跑的。問題有不少,但是貌似都不是系統版本的問題。因爲主要是自己搭環境,所以也沒用到 docker 。

2. CUDA和 cudnn

    因爲作者在說明文檔裏面明確地說要 cuda8.0, cudnn v5.1(cudnn 6 and cudnn 7 my fail),雖然我自己已經裝了 cuda 10.0了,現在得再裝個 cuda 8.0,外加 cudnn v5.1。   

2.1 cuda 8.0

    直接在官網(https://developer.nvidia.com/cuda-80-ga2-download-archive)上,按照自身系統的配置,填入相應信息進行下載,我下載的本地安裝包runfile(local)。

    

    下載完成後,運行安裝文件將 cuda 安裝到指定目錄即可。

     $ sh cuda_8.0.61_375.26_linux-run

      ......此外省略 N 多行......

      這裏要特別注意的是當問到你是否需要安裝 NVIDIA 顯卡驅動一步的時候你要根據你的實際情況來選擇。像我在我之前已經裝好顯卡驅動,所以這裏我明確地給了個 no。

     

      我將cuda 8.0安裝在了/usr/local/cuda-8.0文件夾下面。

2.2 cudnn v5.1

    依然是從 nvidia 的官網上(https://developer.nvidia.com/rdp/cudnn-archive)下載 cudnn v.5.1,應該是要註冊賬號纔行。

版本一大堆,選擇自己需要的即可,毫無疑問我應該選 cuDNN v5.1 for CUDA 8.0。下載之後怎麼安裝,nvidia官方也很人性話地給出了說明,請見頁面:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/

我解壓後基本照抄上面的命令就行了,只是注意將目標cuda目錄換成了我新裝好的/usr/local/cuda-8.0。

3. OpenCV 的問題

    作者給出的版本要求是 opencv 3.0,一開始我以爲只能裝 opencv 3.0.x。因爲我係統裏面裝的是 opencv 3.4.0,我一開始不想再折騰一遍 opencv,我就抱着試試看的心態直接用我已經裝好的 opencv 3.4.0 去編譯caffe,然後在 cmake 的時候直接報了下面這個錯誤:
-- CUDA detected: 8.0
-- Found cuDNN: ver. 5.1.10 found (include: /usr/local/cuda-8.0/include, library: /usr/local/cuda-8.0/lib64/libcudnn.so)
-- Added CUDA NVCC flags for: sm_75
CMake Error at /usr/local/share/OpenCV/OpenCVConfig.cmake:108 (message):
  OpenCV static library was compiled with CUDA 10.0 support.  Please, use the
  same version or rebuild OpenCV with CUDA 8.0

Call Stack (most recent call first):
  cmake/Dependencies.cmake:72 (find_package)
  CMakeLists.txt:43 (include)

意思就是說你 CUDA雖然用的是8.0,但是你 Opencv 靜態庫確是基於 CUDA 10.0環境編譯的。確實我之前裝 opencv 3.4.x 的時候是用的 cuda 10.0。爲此,我不得不基於 CUDA 8.0環境又重新編譯了 OpenCV。好了,下面就是我在在 ubuntu 16.04上編譯 opencv 3.4.0的一般過程。

#安裝依賴包
sudo apt-get update
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
sudo apt-get install build-essential
sudo apt-get install cmake cmake-gui git libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 處理圖像所需的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev # 處理視頻所需的包
sudo apt-get install libatlas-base-dev gfortran # 優化opencv功能
sudo apt-get install ffmpeg

#下載源碼包並解壓
https://github.com/opencv/opencv/archive/3.4.0.zip
unzip opencv-3.4.0.zip

#cmake 進行編譯安裝
cd opencv-3.4.0
mkdir build #新建編譯目錄
cd build
cmake ../ CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/opt/opencv-3.4.0 #指定安裝目錄
make -j8 #編譯
make install #安裝


ok 了!

4. 開始編譯 textboxes_plusplus 的 caffe

  好了,現在只剩下編譯項目自帶的 caffe 了。

  git clone https://github.com/LeftThink/TextBoxes_plusplus.git #克隆項目到本地

  cd TextBoxes_plusplus #進入目錄

  mdkri build #創建 build 目錄,等下要在這裏進行 cmake

  cd build

  cmake ..      #開始 cmake,生成編譯所需文件

  make -j8   #開始編譯

  ..........

(Use -Wno-deprecated-gpu-targets to suppress warning).
Scanning dependencies of target opencv_cudafilters
[ 27%] Building CXX object modules/cudafilters/CMakeFiles/opencv_cudafilters.dir/src/filtering.cpp.o
[ 27%] Linking CXX shared library ../../lib/libopencv_cudafilters.so
[ 27%] Built target opencv_cudafilters
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2

喲,報錯了!opencv 的錯!恍然大悟,我cmake 的時候沒有指定剛剛用 cuda 8.0重新編譯好的 opencv路徑,因爲我沒有設置安裝在默認路徑下面,指定好路徑再來cmake一次。   

  cmake -DOpenCV_DIR=/opt/opencv-3.4.0/share/OpenCV ..  #指定好 opencv 再 cmake

  make -j8  #再 make

  .....編譯成功了.....

5. 準備數據

  這是要準備好訓練用的 lmdb 數據。

6. 開始訓練

  在開始訓練前注意修改 examples/text/modelConfig.py 文件,填寫了你準備好的訓練和測試數據lmdb 文件的路徑(目錄),如圖:

作者提供了預訓練模型,我下載了預訓練模型,放置於 models目錄下。

然後就可以跑跑看了!

python examples/text/train.py 

...... ok ......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章