zoukankan      html  css  js  c++  java
  • 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})




       

  • 相关阅读:
    Fragments (Android官方文档中文版)
    android文件存储的4种方式
    【翻译】C# 使用Image Guid 验证图片类型
    【转载】C# 在线程同步中使用信号量
    【翻译】SQL SERVER 2008 发送DataBase Mail
    【原创】C# Linq to XML
    【转】Web Service身份验证
    【原创】C# HttpWebRequest 发送SOAP XML
    【原创】包含CDATA C#操作XML(无命名空间),添加/删除/编辑节点
    MSSqlServer函数Len()、DataLength()
  • 原文地址:https://www.cnblogs.com/hotsnow/p/9833067.html
Copyright © 2011-2022 走看看