caffe 的docker安裝過程及相關linux操作總結


一、caffe 和 docker的安裝編譯

  1.     docker pull caffe鏡像(注意使用docker安裝省去安裝CUDA和cudnn的安裝。)
  2.     安裝相關依賴包
  3.  安裝opencv3(使用源碼安裝)

             下載opencv源碼到 /opt 目錄下,解壓並進入opencv-3.1.0目錄;

           mkdir build # 創建編譯的文件目錄

         cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

         make -j8 #編譯

            sudo make install #安裝

//////////////////////////////////////////////////////////////////////////////////////////////
   linux知識補充:           

     pkg-config --modversion opencv

            pkg-config --libs --cflags opencv #查看gcc或g++編譯的CFLAGS,即頭文件路徑和動態庫路徑

            注意的是靜態庫使用ar命令對 .o 文件操作創建的,文件以 .a 結束命名; 使用時在靜態庫名前加 --lib,如gcc -o hello main.c -L. -lmyhello

            同理動態庫使用 gcc -shared -fPCI -o libmyhello.so hello.o 命令創建,文件以 .so 命名;

    1、使用時記得把 libmyhello.so 復制到目錄 /usr/lib 中再跑 gcc -o hello main.c -L. -lmyhello; 因為一般Linux系統把/lib和/usr/lib兩個目錄作為默認的庫搜索路徑

    2、或者添加linux的搜索路徑,在 /etc/ld.so.conf 文件中添加庫的搜索路徑;當靜態庫和動態庫同名時, gcc命令將優先使用動態庫。

           如果 pkg-config --modversion查找不到版本,則手動添加opencv源碼的opencv4.pc文件到/usr/lib/pkconfig/;

           opencv4.pc的目錄在 ~/Desktop/opencv-4.0.0-alpha/build/unix-install,可以使用 find ./ -name opencv4.pc 來在當前目錄往下查找

           或者使用 export PKG_CONFIG_PATH=~/Desktop/opencv-4.0.0-alpha/build/unix-install:$PKG_CONFIG_PATH //opencv4.pc在源碼的路徑

      然后使用$echo$PKG_CONFIG_PATH 來查看 PKG_CONFIG_PATH的路徑設置是什么。

//////////////////////////////////////////////////////////////////////////////////////////////////

    4、安裝caffe和編譯


    git clone https://github.com/BVLC/caffe.git

    sudo cp Makefile.config.example Makefile.config

    sudo gedit Makefile.config #開啟選項和設置路徑(cudnn,opencv 版本,python 接口層,python 路徑)

    然后修改 caffe 目錄下的 Makefile 文件(NVCCFLAGS,LIBRARIES)

    make all -j8  #編譯

    sudo make runtest -j8  #跑自帶的測試

    ###編譯pycaffe

    cd caffe

    sudo make pycaffe -j8



    5、下載模型VGG16預訓練模型:

  sh  data/scripts/fetch_faster_rcnn_models.sh
此腳本會下載好faster-rcnn的訓練好的模型,接着運行demo.py就可以運行示例程序了。具體過程看另外一篇關於demo源碼解析的博客.

///////////////////////////////////////////////////////////////////////////////////////////////////////////
    caffe安裝編譯成功后,跑fast-cnn代碼時(Python tools/demo.py),會出現cudnn6不兼容該項目的錯誤,此時有兩種方法:

    cd caffe-fast-rcnn
    git remote add caffe https://github.com/BVLC/caffe.git
    git fetch caffe
    git merge caffe/master
    最后注釋掉 self_.attr(“phase”) = static_cast(this->phase_); from include/caffe/layers/python_layer.hpp after merging.
    這種方法有時候會成功,有時候則不會
    手動修改文件
    1. 用最新caffe源碼的以下文件替換掉faster rcnn 的對應文件
    include/caffe/layers/cudnn_relu_layer.hpp, src/caffe/layers/cudnn_relu_layer.cpp, src/caffe/layers/cudnn_relu_layer.cu
    include/caffe/layers/cudnn_sigmoid_layer.hpp, src/caffe/layers/cudnn_sigmoid_layer.cpp, src/caffe/layers/cudnn_sigmoid_layer.cu
    include/caffe/layers/cudnn_tanh_layer.hpp, src/caffe/layers/cudnn_tanh_layer.cpp, src/caffe/layers/cudnn_tanh_layer.cu
    2 用caffe源碼中的這個文件替換掉faster rcnn 對應文件
    include/caffe/util/cudnn.hpp

 至此可以使用訓練好的模型VGG16來檢測識別物體了。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


二、所用到的docker命令   

docker rename 原容器名  新容器名    docker tag 41b730702607 opmaster/basic_server:devel //鏡像id  ,改新鏡像名字和標簽

////////////////////////////////////////////////////////////
    #使docker映射到本機host的GUI口來顯示,使用nvidia的GPU來創建容器,並提供交互(-it)的bash,設置數據卷來掛載共享數據,並命名容器名

    sudo nvidia-docker run -it \
    > -v /tmp/.X11-unix:/tmp/.X11-unix \
    > -e DISPLAY=unix$DISPLAY \
    > -e GDK_SCALE \
    > -e GDK_DPI_SCALE \
    > -v /home/csj/Desktop/caffe_docker_mnt/:/home/caffe_docker_mnt \
    > --name shijie_caffe_container1 \
    > 1febdeef0276 \
    > /bin/bash

    jupyter notebook --allow-root   #使用jupyter notebook
//////////////////////////////////////////////////////////////////////////////////////////////////////////

    sudo nvidia-docker start   2806cb9d9633
    sudo nvidia-docker exec -it  2806cb9d9633 /bin/bash
    sudo nvidia-docker commit 2806cb9d9633 shijie_image:v1 //保存改動的容器到鏡像

    docker commit  -m="First Image"  -a="786389209"  7a15f99695c0   786389209/unbantu:17.10.0 #

    * -m 提交的描述信息

    * -a 指定鏡像作者

    sudo nvidia-docker save shijie_image:v1   /home/shijie_docker/shijie_image.tar //保存鏡像為 .tar 文件到host本地目錄

    sudo nvidia-docker load   -i   file-path

    #注意load和import命令不同,前者導入鏡像到本地鏡像倉庫,后者只是導入一個快照,退出會回滾原始版本。

    rm          #刪除一個或多個容器

    rmi         #刪除一個或多個鏡像


    #登錄docker並上傳鏡像

    docker  login

    docker  push  786389209/unbantu-test:lastest

 


三、cmake 的介紹

  CMake是一個比make更高級的編譯配置工具,它可以根據不同平台、不同的編譯器,生成相應的Makefile或者vcproj項目。通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建項目生成目標文件,還支持安裝(make install)、測試安裝的程序是否能正確執行(make test,或者ctest)、生成當前平台的安裝包(make package)、生成源碼包(make package_source)、產生Dashboard顯示數據並上傳等高級功能,只要在CMakeLists.txt中簡單配置,就可以完成很多復雜的功能,包括寫測試用例。如果有嵌套目錄,子目錄下可以有自己的CMakeLists.txt。總之很強大!

    比如Kdevelop中opencv的文件簡單的CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(opencv)  #工程名字
find_package(OpenCV REQUIRED)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")  #opencv4必須添加對C++11的支持

add_executable(opencv main.cpp)
target_link_libraries(opencv ${OpenCV_LIBS})

 




   


免責聲明!

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



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