ubuntu18.04 CUDA10.1 docker中安装caffe-ssd及分类检测数据集训练与测试(一)



前言

在unbutu中配置显卡环境,docker容器的使用,以及搭建caffe-ssd深度学习的环境,最后训练自己的数据得出模型是一件困难的事情。经过一个多星期不断调试环境反复修改,作者本人终于搭建好了容器和caffe-ssd的环境,并成功训练起来了自己的分类数据集,得到了其pth模型,并转为caffe的om模型。
本篇文章主要是介绍caffe-ssd环境的搭建过程


一、caffe-ssd是什么?

ssd算法,其英文全名是Single Shot MultiBox Detector,属于one-stage方法,MultiBox指明了ssd算法是多框预测,是相对于RCNN系列目标检测算法,yolo系列目标检测算法的改进算法,ssd算法在准确度和速度上都比yolo要好很多,对于Faster R-CNN,首先通过CNN得到候选框,然后再进行分类与回归,而yolo与ssd可以一步到位完成检测。
Caffe(全称:Convolutional Architecture for Fast Feature Embedding),是一个计算CNN相关算法的深度学习框架,可以在LINUX下运行。
caffe-ssd则是一套框架+算法集成起来解决CV,NLP方向的解决方案。在计算机视觉领域的分类和检测应用领域广泛。

二、使用步骤

1.总体环境介绍

1)显卡GPU:NVIDIA GTX 1660 6G
2)CUDA:10.1
3) Anaconda3 + python3.6
4) Ubuntu18.04

2.创建docker与安装配置

查看是否存在容器
docker ps -a
在这里插入图片描述没有的话则创建容器:
命令:nvidia-docker run --runtime=nvidia --gpus all -dit --restart=always --privileged -v /tmp/.X11-unix:/tmp/.X11-unix -v /work:/work -p 10086:22 -e DISPLAY=:0 -e LANG=C.UTF-8 --shm-size 16G --name ub18.04-cuda10.1-init -w / 镜像docker 的id /bin/bash
参数解释;
nvidia-docker run #
-dit # 后台运行容器
–restart=always # docker重启时,自动重启
–net=bredge-zwh # 网桥名称
-p 10086:22 # 端口映射
-v /work:/my_work # 目录映射
-v /tmp/.X11-unix:/tmp/.X11-unix # 图形界面信息窗体sockt
–privileged # container内的root拥有真正的root权限
-e DISPLAY=:0 # 图形界面端口
-e LANG=C.UTF-8 # 支持中文环境
–shm-size 16G # 共享内存
–name chipeak-ub18.04-cuda10.1-caffe-zwh # 容器名称
9e47e9dfcb9a # 进行id
/bin/bash # 启动终端
QT_X11_NO_MITSHM=1
-w /home/jello # 指定工作目录

	 --restart=always  docker重启时,自动重启
	 -e LANG=C.UTF-8   支持中文环境
	 -p 本机端口——>容器端口映射
	 -v 挂在宿主文件,到容器。
	 -name 容器名称
	 -c 接下来的表示一个字符串		 

启动创建的docker容器``
docker exec -it docker的名字 /bin/bash
`在这里插入图片描述

3.caffe-ssd环境的搭建

1)Anaconda安装
  wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-4.2.0-Linux-x86_64.sh #如果没有,则需要安装wget
  bash Anaconda3-4.2.0-Linux-x86_64.sh #安装anaconda,一路yes

2)相关依赖库安装

apt-get update
apt-get install git
apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler -y
apt-get install --no-install-recommends libboost-all-dev -y 
apt-get install libopenblas-dev liblapack-dev libatlas-base-dev -y
apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev -y

参考博客:https://blog.csdn.net/tanghong1996/article/details/96307323

3)创建conda环境

conda env list  #查看conda环境
conda create -n caffe-py3.6 python=3.6 #创建conda环境
conda activate caffe-py3.6 #激活conda环境
conda install libgcc #安装lib库
conda install protobuf=3.0.0
conda install -c menpo opencv3 numpy #安装opencv3

4)找到cudnn的路径
我的路径如下:/my_software_package/cudnn-10.1-linux-x64-v7.6.5.32
在这里插入图片描述然后运行下面的命令:

cp cuda/include/cudnn.h /usr/local/cuda/include/ 
cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/ 
chmod a+r /usr/local/cuda/include/cudnn.h 

5)caffe下载与配置

git clone git://github.com/weiliu89/caffe.git
cd caffe  #进入caffe路径
git checkout ssd  #检测是否存在ssd分支
cd ../
mv caffe caffe-ssd-init 
cp -r caffe-ssd-init  caffe-ssd-init
cd caffe-sdd
cp Makefile.config.example Makefile.config

下图是我下载的caffe路径
在这里插入图片描述得到的caffe-ssd的目录结构
在这里插入图片描述修改Makefile.config里的配置
1)查找
USE_CUDNN := 1
USE_OPENCV := 1
OPENCV_VERSION := 3
WITH_PYTHON_LAYER := 1 (这一句大概在94行 自行查找 ctrl+F)
全部取消注释
在这里插入图片描述2)39-45行修改,删除掉compute_20 21
在这里插入图片描述3)然后修改python目录,因为采用的是anaconda,所以
注释掉原先的python2.7引用目录,修改为anaconda
大概70-87行,这里的usr不修改。
将python2.7注释掉
#PYTHON_INCLUDE := /usr/include/python2.7
/usr/lib/python2.7/dist-packages/numpy/core/include

将
	# ANACONDA_HOME := $(HOME)/anaconda2
	# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
					$(ANACONDA_HOME)/include/python2.7 \
					$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
改为:
	ANACONDA_HOME := /my_app/anaconda3/envs/caffe-py3.6
    PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
					$(ANACONDA_HOME)/include/python3.6m \
					$(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include \

将
	PYTHON_LIB := /usr/lib
	# PYTHON_LIB := $(ANACONDA_HOME)/lib
改为:
	#PYTHON_LIB := /usr/lib
	PYTHON_LIB := $(ANACONDA_HOME)/lib


将
	# PYTHON_LIBRARIES := boost_python3 python3.5m
修改成:
	PYTHON_LIBRARIES := boost_python3 python3.6m

在这里插入图片描述在这里插入图片描述将一图的Anconda路径变为二图的样子,注意是自己的Anconda路径,不然会编译报错。

4.将INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
在这里插入图片描述路径根据自己的环境配置来,一定自己查找一下路径是否正确,我在这里走了很多弯路,都是环境路径没有配置好!

保存退出修改Makefile中的配置
将下面注释
#NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC ( C O M M O N F L A G S ) 添 加 N V C C F L A G S + = − D F O R C E I N L I N E S − c c b i n = (COMMON_FLAGS) 添加 NVCCFLAGS += -D_FORCE_INLINES -ccbin= (COMMONFLAGS)NVCCFLAGS+=DFORCEINLINESccbin=(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)


LIBRARIES += boost_thread stdc++
更改成
LIBRARIES += boost_thread stdc++ boost_regex

LIBRARIES += glog gflags protobuf boost_system boost_filesystem boost_regex m hdf5_hl hdf5
修改为:
LIBRARIES += glog gflags protobuf leveldb snappy
lmdb boost_system boost_filesystem hdf5_hl hdf5 m
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio

在这里插入图片描述这个很重要必须的改一下,要不后面容易报错。退出保存一下就行了。就这样我们全部修改完毕!

make
make all -j12
在这里插入图片描述遇到这个错误,说明Makefile.config路径没调好,如下图调整自己的Anaconda路径:
在这里插入图片描述最后结果为如下图说明编译成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/202103221852455.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyOTg3ODk0,size_16,color_FFFFFF,t_70#pic_center

make test -j12
在这里插入图片描述上图为正确的测试编译

make runtest -j12 #这一步可能会报错,但不会有太大的问题,继续下面的步骤就好了。
在这里插入图片描述这是运行成功的截图

make pycaffe
在这里插入图片描述最后进入到cd caffe/python下进行python #python环境测试
在这里插入图片描述需要导入scikit-image工具包
pip install scikit-image

在这里插入图片描述出现上图错误,需要安装protobuf
pip install protobuf

成功:

python
>>> import caffe as cf
>>> print(cf.__version__)
1.0.0

在这里插入图片描述安装成功,到次就可以安安静静的去训练数据跑模型了,哈哈


总结

花费了一个多星期的时间,终于将代码跑通,下面是我后续跑通的截图,我跑了一个公开数据集ImageNet在加上我自己的数据集。下期我将详细的写怎样处理公开数据集,从训练,测试到模型转换完整流程!
在这里插入图片描述最后,如果按照教程做起来比较吃力的话,遇见的BUG比较多,留下你们的联系方式,我可以将完全做好caffe-ssd的docker镜像传给你们。哈哈,希望看到有效的话,点个赞收藏一下,这是对我最大的鼓励,谢谢!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值