一、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})

caffe 的docker安装过程及相关linux操作总结的更多相关文章

  1. 关于解决Mac使用docker安装SQL server for Linux 中文乱码问题

    本人是Mac的追随者,无奈本学期数据库课要求使用Microsoft的SQL server.但是Microsoft并没有发布SQL server for Mac ,笔者使用Google搜索后, 发现可以 ...

  2. 手把手教你进行R语言的安装及安装过程中相关问题解决方案

    这篇文章旨在为R语言的新手铺砖引路,行文相对基础,希望对在R语言安装上有问题的小伙伴提供帮助和指引.一.什么是 R 语言R 编程语言被广泛应用在统计科学和商业领域. 在各种编程语言排名中 R 语言的排 ...

  3. Docker安装过程

    安装 Docker 源自:http://www.runoob.com/docker/centos-docker-install.html 从 2017 年 3 月开始 docker 在原来的基础上分为 ...

  4. docker安装jenkins及其相关问题解决

    1.拉取镜像并启动容器 docker run -d -p 8080:8080 -p 50000:50000 -v $(pwd)/data:/var/jenkins_home --name jenkin ...

  5. docker 安装过程

  6. Docker 安装Hadoop HDFS命令行操作

    网上拉取Docker模板,使用singlarities/hadoop镜像 [root@localhost /]# docker pull singularities/hadoop 查看: [root@ ...

  7. SpringBoot Docker入门,SpringBoot Docker安装

    SpringBoot Docker入门,SpringBoot Docker安装 ================================ ©Copyright 蕃薯耀 2018年4月8日 ht ...

  8. Win 10 Docker安装和简单使用

    Win 10 Docker安装和简单使用 1.环境准备 Docker for Windows需要运行在64位Windows 10 Pro专业版.企业版或教育版(1607年纪念更新,版本14393或更高 ...

  9. Solr安装过程

    Solr安装过程 下载相关资料 solr 4.2.0 http://lucene.apache.org/solr/ 期间安装过 solr 4.3.0 很可惜没有配置成功 apache-tomcat-7 ...

随机推荐

  1. Genymotion 的那些事

    一.什么是Genymotion? Genymotion是一套完整的工具,它提供了Android虚拟环境. 支持Windows.Linux和Mac OS等操作系统. 在Android开发中可以代替安卓模 ...

  2. PAT甲级——A1073 Scientific Notation

    Scientific notation is the way that scientists easily handle very large numbers or very small number ...

  3. pycharm优化

    一.版本选择 建议安装5.0版本,因为好注册,这个你懂得. 下载地址: https://confluence.jetbrains.com/display/PYH/Previous+PyCharm+Re ...

  4. quatz调度-手动终止线程(2) Cleaner线程做清理工作

    import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import ja ...

  5. css3之背景background-origin,background-clip,background-size

    background-origin属性指定了背景图像的位置区域. content-box, padding-box,和 border-box区域内可以放置背景图像. background-clip用来 ...

  6. Django项目:CRM(客户关系管理系统)--79--69PerfectCRM实现CRM业务流程(bpm)学生讲师分页

    # student_views.py # ————————60PerfectCRM实现CRM学生上课记录———————— from django.shortcuts import render #页面 ...

  7. LUOGU 9月 月赛

    T1 签到题 传送门 解题思路 将原式化简一下,让n个1变成 (10^n-1)/9 ,然后再移项,变成了高次同余形式,用bsgs求解.交了好几次都是80,后来才被告知要快速乘. 代码 #include ...

  8. Java SE、Java EE、Java ME三者的区别

    1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...

  9. idea报错:Error:java不支持发行版本5的解决方法

    将以下对应配置一致即可. File-->Project Structure File-->Settings

  10. Django-rest Framework(四)

    序列化模块时rest-framework的很重要的组成部分 rest-framework序列化模块(核心) 一. 为什么要使用序列化组件? ​ 后台的数据多以后台的对象存在,经过序列化后,就可以格式化 ...