caffe 的docker安装过程及相关linux操作总结
一、caffe 和 docker的安装编译
- docker pull caffe镜像(注意使用docker安装省去安装CUDA和cudnn的安装。)
- 安装相关依赖包
- 安装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操作总结的更多相关文章
- 关于解决Mac使用docker安装SQL server for Linux 中文乱码问题
本人是Mac的追随者,无奈本学期数据库课要求使用Microsoft的SQL server.但是Microsoft并没有发布SQL server for Mac ,笔者使用Google搜索后, 发现可以 ...
- 手把手教你进行R语言的安装及安装过程中相关问题解决方案
这篇文章旨在为R语言的新手铺砖引路,行文相对基础,希望对在R语言安装上有问题的小伙伴提供帮助和指引.一.什么是 R 语言R 编程语言被广泛应用在统计科学和商业领域. 在各种编程语言排名中 R 语言的排 ...
- Docker安装过程
安装 Docker 源自:http://www.runoob.com/docker/centos-docker-install.html 从 2017 年 3 月开始 docker 在原来的基础上分为 ...
- docker安装jenkins及其相关问题解决
1.拉取镜像并启动容器 docker run -d -p 8080:8080 -p 50000:50000 -v $(pwd)/data:/var/jenkins_home --name jenkin ...
- docker 安装过程
- Docker 安装Hadoop HDFS命令行操作
网上拉取Docker模板,使用singlarities/hadoop镜像 [root@localhost /]# docker pull singularities/hadoop 查看: [root@ ...
- SpringBoot Docker入门,SpringBoot Docker安装
SpringBoot Docker入门,SpringBoot Docker安装 ================================ ©Copyright 蕃薯耀 2018年4月8日 ht ...
- Win 10 Docker安装和简单使用
Win 10 Docker安装和简单使用 1.环境准备 Docker for Windows需要运行在64位Windows 10 Pro专业版.企业版或教育版(1607年纪念更新,版本14393或更高 ...
- Solr安装过程
Solr安装过程 下载相关资料 solr 4.2.0 http://lucene.apache.org/solr/ 期间安装过 solr 4.3.0 很可惜没有配置成功 apache-tomcat-7 ...
随机推荐
- 模板——网络流Dinic
感谢这位大佬的博客:https://www.cnblogs.com/SYCstudio/p/7260613.html 给予了我莫大的帮助! 主要说一下网络流的几个注意点: 1.和二分图匹配相似,无法继 ...
- Apollo Lake设计缺陷,避免使用它们
很多经验告诉我们,在不大幅加电压超频的情况下,CPU很少会用坏.多数情况下电脑退役都是主板或其他部件故障,或是性能严重落后而不得不淘汰.但是如果CPU在制造阶段就存有缺陷的话,情况就不是这样了. 英特 ...
- 很好用的API管理--Swagger
1.打开NuGet程序包 2.安装下面两个程序包 3.安装完后会出现SwaggerConfig.cs类,并修改里面的内容 代码: [assembly: PreApplicationStartMetho ...
- tensorflow+inceptionv3图像分类网络结构的解析与代码实现
tensorflow+inceptionv3图像分类网络结构的解析与代码实现 论文链接:论文地址 ResNet传送门:Resnet-cifar10 DenseNet传送门:DenseNet SegNe ...
- 最小费用最大流——ZKW
对于最小费用最大流,我们的通常做法是EK+SPFA. 然而,卡常界大佬ZKW发明了一个求解最小费用最大流的方法,很强啊. 在学ZKW费用流前,先说说KM算法. KM算法 为啥要先提这个呢?因为ZKW费 ...
- utils04_搭建私有Git服务器
1.远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改.GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给G ...
- CSS3 进阶
background-clip指定了背景可以覆盖到什么范围.background-origin指定了背景从什么位置开始.在例子中设置背景平铺应该可以看得清楚些. CSS3之前的背景,按规定是不会进入到 ...
- C# 窗体内容显示不全
在T430上安装skyline的CS版时候,发现登陆窗口显示的内容不全,第二个缓冲的窗口也显示不全.设置了下面的参数后就可以了.
- JavaScript怎么解析后台传入的json字符串
var data = "{'name': '张三', 'age': 23, 'gender': true}"; //json字符串 var jso = JSON.parse(dat ...
- 左神算法书籍《程序员代码面试指南》——1_08构造数组的MaxTree
[题目] 将一个没有重复数字的数组中的数据构造一个二叉树 每个节点都是该子树的最大值 [要求] 时间复杂度为O(N)[题解] 使用单调栈,栈的顺序是维持从大到小排序 通过使用单调栈,将数组中中所有数的 ...