[新手友好]虚拟机Ubuntu18.04+python3装CPU版caffe和pyfasterrcnn

零、前言

刚入坑小白一枚,第一次写博客,如有不周到的地方请见谅,本人也是躺坑无数才慢慢摸索出来一条比较稳定的道路。

caffe和pyfasterrcnn,尤其fasterrcnn算是挺古老的东西了,不过工作室大家都用的这个网络,也有很多成熟的论文。正因如此,原本官方默认推荐python2+cuda8左右的版本,这就很痛苦了,我又不用python2,又不用GPU,大多数都是摸石头过河。

使用python3是为了不在2020年全面python3的趋势下入国军

使用cpu是因为我原来是双系统安装GPU的环境,可是安装经常出错,重装系统重装到我怕了,每次重装系统都心惊胆战怕把我windows给格了。因此拿虚拟机测试,崩了就崩了,做到重要的部分直接复制整个虚拟机就可以备份然后又可以任搞。

也建议想玩双系统的先玩玩虚拟机,熟悉了再去试。尤其是用GPU的话还要先弄显卡驱动,cuda,cudnn三座大山,cpu的话一上来就可以整caffe和pyfasterrcnn。

VMware还有一个好,安装时会自动装一个VMTools的工具,和windows交流很方便,文字,文件什么的都可以直接复制过去

本人用笔记本,配置是i5-7300hq,16G内存,1050m。
我自己平时配置环境都记录步骤。
这篇博文都是我按照之前的步骤,重新再新开一个虚拟机边配置边写的,梳理过一遍,报错的概率已经很小,而且装出来的系统很纯净。

另外这篇教程有点长,csdn的自动折叠有点烦,这里有一个自动展开的脚本,建议使用Tempermonkey暴力猴安装

一、虚拟机安装Ubuntu

1. 虚拟机基本安装

使用VMware15,下载镜像Ubuntu18.04.

  • 新建一个虚拟机
  • 选择VMwware15典型安装
  • 安装程序光盘映像文件,选择自己下载的镜像,他会提示检测到这是Ubuntu64位18.04.3,并且会简易安装
  • 输入全名,用户名,密码
  • 选择虚拟机存放的位置
  • 硬盘给个30G,然后勾选拆分成多个文件,这样虚拟机就是用多少占多少,不会一下子吃满30g,方便我们给之后做到重要的步骤做个备份来为所欲为
  • 之后再自定义硬件,内存给个8G,处理器给一个两核(这里丰俭由人了,建议给多一点)

之后便是漫长的等待,还挺漫长的,等待完之后就会进入桌面,建议这步做完就备个份,就是把虚拟机文件夹整个复制到另外一个地方
在等待过程中不妨先看看下面预习预习

2. 获取root权限

创建一个root账户,因为在普通用户权限下执行命令通常都要加sudo,而在root账户下输入命令前面不用再加sudo,而且有些指令必须要root账户才能用

打开终端,输入下面指令,注意一下在ubuntu的终端里面粘贴是使用ctrl+shift+v

sudo passwd root

输入想要设置的密码两次,就成功创建了root账户,
另外注意一下linux里面输入密码是不会显示的,但确实是有输入
想要提权为root用户的时候输入

su root

再输入密码,前面的用户名就会变成 root
注意一下root 用户的根目录就是在“计算机”看到的目录
普通用户的默认根目录是/home/用户名(也称家目录)
在cd的时候就会知道区别

3. 换源

刚安时候可能是全英的,需要下载中文语言包,不过我们先换源,下载就会更快一点

sudo gedit /etc/apt/sources.list

删除里面所有内容,然后添加

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

更改完成后输入更新源,以后用apt装什么东西之前都要先运行这个更新一下列表

sudo apt update

之后就可以在语言中心改成中文了,
另一个比较必要的操作是改一改分辨率,这么小个窗口看得我眼花
还有时区改为上海,
输入源改成ubuntu的智能拼音,这个输入法还算凑合,换搜狗什么的日后自己再研究

二、安装相关库

1. 安装依赖包

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

认真仔细逐条复制,这些库没有后面会爆各种奇怪错误

2. 配置环境变量

sudo gedit ~/.bashrc

在文件最后加入这两行内容

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH 

重启或输入下面使之生效

source ~/.bashrc

3. 安装pip3

既然是python3,pip是肯定要装的,Ubuntu18自带python27和36两个版本,平时在命令行里面输入python和python2都是打开27,只有输入python3才是打开36
另外想给36来pip安装东西,使用的也是pip3 install xxx,否则只是pip install的话就装给27了

sudo apt install python3-pip

换不换源随意,我不换源速度也挺快的

4. 安装opencv_python

pip3 install opencv-python

5. 安装numpy1.15.0

首先卸载numpy,有人会问你,你不是安装嘛,咋卸载呢,你回头一看,发现opencv给拖家带口了一个numpy,但他会给你安一个1.17+的,然而这个1.17+好死不死,很多重要的函数修改了定义,导致很多人工智能相关库都出错,不信你试试导入opencv,保准报错

python3
>>> import cv2

相当愚蠢的设定,如果之后安装什么库把numpy给升级成1.17+,我们就用下面这条命令卸载

pip3 uninstall numpy

再重新指定版本安装,我们就要1.15的

pip3 install numpy==1.15.0

之后再import cv2就不会出错了
这里提一下cv2就是你装的python-opencv,我当时下载到版本是4.1.2
再提一嘴pkg-config opencv --modversion通过这个可以查到opencv版本,结果是3.2.0,我当时也纳闷,后来发现是在装依赖包第一条的时候装上的,这个opencv和py-cv没啥关系。

三、装caffe-cpu

主要参考该简书教程

做了这么多步骤终于可以开始装caffe了,有人会问,你18的系统,为什么不用这种安装方法呢,不一条代码就可以搞定了吗,编译这么多这么麻烦

sudo apt install caffe-cpu

所言极是,如果你只要caffe的话你可以这样做,如果你要继续往下装fasterrcnn,建议还是用下面的方法

1. 下载caffe源码

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

这条代码会把caffe文件夹下载到你当前cd的目录,建议自己复制一份到其他地方,然后就可以瞎搞了

2. 咋又要我装库

下面我就用caffe来表示caffe的主目录了,注意你先复制到一个自己喜欢的专门放库的文件夹(方便起见我是直接用家目录的),因为并不是像windows安装好就万事大吉的可以把安装包删掉的,这个是更类似“绿色安装”的存在,如果你之后为了省空间等把这个文件给删了,你会发现你用不了caffe了

下面先安装库,全给装上准没错,比之后编译时这里没库那里没库到处出错到处要救火好

cd caffe/python
#安装该目录下requirements.txt所需的包
for req in $(cat requirements.txt); do sudo pip3 install $req; done

3. 创建py36的连接库

sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python3-py36.so.1.65.1 /usr/local/lib/libboost_python3.so

这句命令,前面的文件是源文件,后面的文件是快捷方式
需要自己看看自己源文件的版本然后修改

cd /usr/lib/x86_64-linux-gnu/
ls libboost_python*

[新手友好]虚拟机Ubuntu18.04+python3装CPU版caffe和pyfasterrcnn_第1张图片
然后看到蓝白色的是快捷方式,白色的是源文件
比如libboost_python3-py36.so
就是libboost_python3-py36.so.1.65.1的一个快捷方式

之后就修改,比如说原主的是libboost_python-py35.so.1.5x.x ,
要改为libboost_python3-py36.so.1.65.1
改的时候一定要注意有空格断开前后两个文件

4. 最恐怖的修改Makefile.config

cd回去caffe的主目录
目录下的example只是caffe给的样例文件,不能拿来编译,只有Makefile.config才能编译

cd caffe/
cp Makefile.config.example Makefile.config
sudo gedit Makefile.config

请按照以下步骤仔细修改Makefile.config,活用ctrl+F搜索

第一步

我们用的是cpu,所以要把cpu的注释去掉

将# CPU_ONLY:=1
改为CPU_ONLY:=1

第二步

caffe通常都是要用opencv的,不知道官方在想什么把这里默认注释上了,去掉

将# OPENCV_VERSION := 3
改为OPENCV_VERSION := 3

第三步

把py2.7的两行注释掉,caffe默认是27,但我们的是36

# PYTHON_INCLUDE :=  /usr/include/python2.7 \
#               /usr/lib/python2.7/dist-packages/numpy/core/include

第四步

去掉py3.5的注释:

PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
                 /usr/local/lib/python3.5/dist-packages/numpy/core/include

然鹅我们的python版本是36,还需要把上面三个3.5的地方改成3.6
这恰恰展现了caffe的更新迟缓 对旧版本的优良兼容性

第五步

我们用的是python运行caffe,当然要去掉# WITH_PYTHON_LAYER := 1的注释

将# WITH_PYTHON_LAYER := 1
改为WITH_PYTHON_LAYER := 1

第六步

在INCLUDE_DIRS和LIBRARY_DIRS后面分别加上/usr/include/hdf5/serial和/usr/lib/x86_64-linux-gnu/hdf5/serial,效果如下

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/hdf5/serial

这里也给出我改好的Makefile.config,如果上面有什么不明白还是可以下载看一看,不过也要根据自己电脑实际版本做做修改

5. 激动人心的编译

下面是激动人心的编译环节,To be? Or not to be?
薛定谔的编译成功概率,这里的快感甚于抽SSR

sudo make all -j4
sudo make test -j4
sudo make runtest -j4

如果报错就复制错误信息自己上网找找
然后就make clean清除编译信息重新编译
[新手友好]虚拟机Ubuntu18.04+python3装CPU版caffe和pyfasterrcnn_第2张图片
我已经反复多次躺坑,按照这个教程来应该不太会出错了
千锤万炼之后看到这一连串的OK简直就是人间极乐

6. 测试

上面的1162难通过后,应该就不会有什么问题了
在python3下import caffe也不会出错
如果出错了,首先尝试一下重启,还有错自己上网查一查

7. 跑跑样例

这一篇文章对caffe的示例程序,解释了里面的语句,讲得很仔细,推荐去看看
注意的是下面的这些指令都是要在caffe主目录下运行,不能cd进去详细目录再运行

cd caffe
sudo sh data/mnist/get_mnist.sh #由于省空间,数据集是要自己另外下载的
sudo time sh examples/mnist/train_lenet.sh #将数据集转换成LMDB数据才可以被caffe识别
sudo gedit examples/mnist/lenet_solver.prototxt #修改配置文件

这个是运行的配置文件
有两个地方值得注意

这里是最大迭代层数,按需要改,默认是10000
max_iter: 10000
这里是修改用cpu还是gpu运行,默认是gpu,我们要改过来
将solver_mode: GPU
改为solver_mode: CPU

输入下面就可以开跑了

sudo time sh examples/mnist/train_lenet.sh

加入time参数可以查看运行的时间,我迭代10000层用虚拟机cpu跑大概需要17分钟
[新手友好]虚拟机Ubuntu18.04+python3装CPU版caffe和pyfasterrcnn_第3张图片

对结果的解释请看上面那一篇文章

训练后,会在examples/mnist下生成四个文件,分别是迭代5000次和10000次的模型,如果要重跑,就把这四个删掉

lenet_iter_10000.caffemodel
lenet_iter_10000.solverstate
lenet_iter_5000.caffemodel
lenet_iter_5000.solverstate

sudo rm -r lenet_iter_*

测试准确率

cd caffe/examples/mnist
touch test_lenet.sh         #生成空白文件
sudo gedit test_lenet.sh    #编辑

加入如下内容

#!/usr/bin/env sh
./build/tools/caffe test  -model examples/mnist/lenet_train_test.prototxt  -weights examples/mnist/lenet_iter_10000.caffemodel  -iterations 100

运行测试

cd ~/caffe
sudo sh ./examples/mnist/test_lenet.sh 

即可看到结果
[新手友好]虚拟机Ubuntu18.04+python3装CPU版caffe和pyfasterrcnn_第4张图片

四、装py-faster-rcnn

1. 下载py-faster-rcnn源码

git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

下载后也是备一下份,下面就用py-faster-rcnn代表FRCN的安装主目录

2. 编译lib文件夹

cd py-faster-rcnn/lib/

第一步 修改setup.py

gedit setup.py 

把下面三个有关cuda的都给注释掉

#CUDA = locate_cuda()
#self.set_executable('compiler_so', CUDA['nvcc'])
#Extension('nms.gpu_nms',
    #['nms/nms_kernel.cu', 'nms/gpu_nms.pyx'],
    #library_dirs=[CUDA['lib64']],
    #libraries=['cudart'],
    #language='c++',
    #runtime_library_dirs=[CUDA['lib64']],
    # this syntax is specific to this build system
    # we're only going to use certain compiler args with nvcc and not with
    # gcc the implementation of this trick is in customize_compiler() below
    #extra_compile_args={'gcc': ["-Wno-unused-function"],
    #                    'nvcc': ['-arch=sm_35',
    #                             '--ptxas-options=-v',
    #                             '-c',
    #                             '--compiler-options',
    #                             "'-fPIC'"]},
    #include_dirs = [numpy_include, CUDA['include']]
#),

第二步 修改Makefile

gedit Makefile 

把python改成python3,代表用36来make,如果不改,就是用27来make,会报错的

all:
	python3 setup.py build_ext --inplace
	rm -rf build

第三步 make

make

报点小warn,无伤大雅,看到最后他成功执行rm -rf build就成了
[新手友好]虚拟机Ubuntu18.04+python3装CPU版caffe和pyfasterrcnn_第5张图片

3. 编译FRCN里面的caffe

cd py-faster-rcnn/caffe-fast-rcnn/

尤其注意此caffe非上面的caffe,FRCN用的应该是旧版的caffe,当时我误以为FRCN自带caffe了那上面的caffe就可以偷懒不用装了吧,结果发现import caffe之后是没有东西的

第一步 似曾相识Makefile.config

把刚才我们在caffe修改的Makefile.config复制到py-faster-rcnn/caffe-fast-rcnn/这个目录下面,所以说如果你刚才直接用一条命令装caffe,那你就少了一次锻炼的机会,现在要还回来了

第二步 又是激动人心的编译环节

make -j2 && make pycaffe

其实j2, j4, j8都可以,看心情,不过性能跟不上的话有时候编译太快虚拟机会卡死

可能会出现的错误

(1)numpy/arrayobject.h: 没有那个文件或目录

[新手友好]虚拟机Ubuntu18.04+python3装CPU版caffe和pyfasterrcnn_第6张图片
解决方法

sudo apt-get install python-numpy

五、跑一下例程

1.下载官方demo训练模型

cd py-faster-rcnn/data/scripts/
./fetch_faster_rcnn_models.sh

然后肯定会报错,因为这个要文明上网才能下得了
可以在这个百度云里面下载
下载tgz后解压,放到 py-faster-rcnn/data/目录下
复制和解压要看是否复制好了,ubuntu坑爹的地方是有时候会没有复制完全
里面是两个训练好的model文件,解压后大小应该是785.5MB

文件比较大,在等待下载的时候不妨先做下面的步骤

2. 修改其他文件为使用cpu

第一处

py-faster-rcnn/lib/fast_rcnn/config.py
将__C.USE_GPU_NMS = True
改为__C.USE_GPU_NMS = False

第二处

py-faster-rcnn/lib/fast_rcnn/nms_wrapper.py
from fast_rcnn.config import cfg
# from nms.gpu_nms import gpu_nms
from nms.cpu_nms import cpu_nms

def nms(dets, thresh, force_cpu=True):
    """Dispatch to either CPU or GPU NMS implementations."""

    if dets.shape[0] == 0:
        return []
    # if cfg.USE_GPU_NMS and not force_cpu:
    #     return gpu_nms(dets, thresh, device_id=cfg.GPU_ID)
    else:
        return cpu_nms(dets, thresh)

第三处

py-faster-rcnn/tools/test_net.py 
和 py-faster-rcnn/tools/train_net.py
将caffe.set_mode_gpu()
改为caffe.set_mode_cpu()

3. 将python2的语法转成python3

有一个很有用的工具叫做2to3,我当时不知道有这个工具,手动修改print语法感觉要疯掉了

sudo apt install 2to3
2to3 -f all -f idioms /home/wu/py-faster-rcnn/ -w

4. 装一装必要的库

easydict和Matplotlib两个库不在requirement里面,我们还要自己装

pip3 install easydict
pip3 install Matplotlib

又要重装numpy,卸载时可以看到numpy又双叒叕被升级到了1.17+

pip3 uninstall numpy
pip3 install numpy==1.15.0

5. 终于到最后一步了

三二一,发射

cd py-faster-rcnn/tools
python3 demo.py --cpu

如无意外,你应该就可以看到这只小猫咪了!!!!!!![新手友好]虚拟机Ubuntu18.04+python3装CPU版caffe和pyfasterrcnn_第7张图片
终于完事了,我好happy啊!!!!!!!!!!!!
有了这个经验就可以开始研究双系统的安装了

可能遇到的错误

(1)Check failed: *ptr host allocation of size 1382400000 failed

内存或者cpu性能不够了,关掉虚拟机给他分多一点内存和cpu吧

感谢

https://blog.csdn.net/u013989576/article/details/72667245
https://blog.csdn.net/HUXINY/article/details/83990628(最详细,有setup代码)
https://www.jianshu.com/p/30fcc3df764d
https://blog.csdn.net/zzyincsdn/article/details/83989606(这个是tfFRCN,和pyFRCN略有不同)

你可能感兴趣的:(深度学习,caffe,深度学习,虚拟机,fastrcnn,ubuntu18)