Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程

本次记录在Ubuntu系统上尝试完成谷歌开源TensorFlow Object Detection API物体识别的超详细过程,期间参考了很多博主的文章,在这一如既往地对他们表示我由衷的感谢。另外,本人小小白一个,文中若有错误还望各位不吝赐教!

好,正式开始配置环境吧!

1 查看NVIDIA驱动

首先,检测NVIDIA图形卡和推荐的驱动程序的模型。执行命令:

ubuntu-drivers devices

sudo ubuntu-drivers autoinstall
#安装CUDA自动安装NVIDIA显卡驱动,此步骤可以跳过

服务器显示如下:
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第1张图片
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第2张图片

因此直接查看CUDA版本

cat /usr/local/cuda/version.txt

Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第3张图片
也就是说我使用的服务器为:CUDA Version 10.1.168

2 再查看cuDNN版本

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第4张图片

(base) qh@user:~$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 3
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"

好吧,原谅宝宝看不懂这是什么意思哭唧唧——
好吧,经查证,表示我的CuDNN版本为 7.6.3

3 安装适配的TensorFlow

根据TensorFlow版本要求中的这个表:
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第5张图片

CUDA 10.1 +cuDNN为 7.6.3,则尝试用

pip install tensorflow-gpu==1.13.1

很慢,考虑加清华镜像的(如果没有换源的话,但我好像换了)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
tensorflow-gpu==1.13.1

【⭐⭐⭐如果不行的话,那就执行
plan B
pip install tensorflow==2.1】

昂~之前那个安装好像并没有在环境里面哭唧唧,这里我重新新建虚拟环境吧:(先建环境激活后再安装TensorFlow1)
python版本要3.7!

conda create -n tensorflow python=3.7

小tips:

用pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
升级pip更快嗷~!!!

激活后安装TensorFlow,pillow, lxml, matplotlib, jupyter

然后退出,继续安装:
(我继续在虚拟环境中了应该没影响吧?)

4 下载protoc

1、Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,在GitHub中,下载对应自己的系统的版本:

git clone https://github.com/protocolbuffers/protobuf

经过几次失败后,终于下载成功啦:
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第6张图片

5 下载model包:

第一种,终端直接下载

在Downloads下创建一个空包,用于存储models

mkdir /home/qh/Downloads/models

然后在克隆到该位置去:
git clone https://github.com/tensorflow/models
/home/qh/Downloads/models

也就是:git clone https://github.com/tensorflow/models (需要git的地址)

第二种,手动下载到本地文件

直接在github下载zip包,本文直接下载的zip包(大概415M,虽然我们只会用到里面很少一部分内容)
下载后,解压到~/tensorflow目录下,为了与github目录结构一致,我们将models-master目录重命名为models

得到如下目录结构~/tensorflow/models/research/object_detection

2、找到Tensorflow object detection API的目录,命令行cd到models\research文件:

cd /home/qh/anaconda3/envs/tensorflow/models/research

继续输入:

protoc object_detection/protos/*.proto --python_out=.

出现了一个问题?!!!不知道有没有影响

Import object_detection/protos/image_resizer.proto but not used.

3、在系统变量中新建名为:“PYTHONPATH”的变量,将Tensorflow object detection API目录下的research/ 及 research/slim 两个文件夹的完整目录进行添加。(注意用分号隔开)同时将…\models-master\research\object_detection路径加入到系统变量中
【这是win0里面,Linux里面Linux直接执行:】

export PYTHONPATH=$PYTHONPATH:pwd:pwd/slim

4、加载slim文件夹模块:
A:cd 切换到research/slim文件夹下:

cd /home/qh/anaconda3/envs/tensorflow/models-master/research/slim

输入:

python setup.py install

6 安装pycocotools,下载COCO

git clone https://github.com/philferriere/cocoapi

这次比较顺利了,一次成功:
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第7张图片

1
cd到PythonAPI目录:

cd /home/qh/anaconda3/envs/tensorflow/models-master/research

输入:

python setup.py install

昂~~~停滞不前了,接着等吧
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第8张图片

最后呢,成功!
然后将slim加入PYTHONPATH,输入命令如下:

sudo gedit ~/.bashrc

在打开的文件最下方输入:

export PYTHONPATH=$PYTHONPATH:‘pwd’:‘pwd’/slim

关掉后在终端输入以下,使得修改生效:

source ~/.bashrc

执行import slim成功则说明已经正确设置好了。

小tips:还有一种添加路径的方法 输入命令vim ~/.bashrc 进入文件进行编辑(按i键进入修改模式),输入命令 export
PYTHONPYTH=’/home/qh/anaconda3/envs/tf35/models/slim’,当然,绝对路径自行修改(Esc退出文件,
:wq!保存)。之后再 source ~/.bashrc 保存设置。可以通过 echo $PYTHONPATH 查看环境变量。

7 测试是否成功

python object_detection/builders/model_builder_test.py

出现了:
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第9张图片

查找了博文,发现可能原因:
tensorflow版本与CUDA的版本不对应
查看环境,发现此时我环境里面是:tensorflow-gpu-1.13.1

Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第10张图片

再查看几者之间的对应关系,对应关系见这里
好吧,开始执行plan B
装tensorflow-2.1.0

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
tensorflow-2.1.0

*那么一个新的问题又来啦,我该怎么才能直接从之前版本的TensorFlow换到2.1.0去了?难道全部重新安装咩??? *

昂~考虑卸载掉然后重新装吧:

pip uninstall tensorflow-gpu

然而,我佛了

Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第11张图片
没有匹配的版本???!!!

昂,在线等一个plan C……

一定是我哪里没有搞对,再重新回顾回顾:

CUDA 版本为10.1.168+CuDNN版本为 7.6.3,再次查看下表:
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第12张图片
看到一个博主说,若确认把cuda,cudnn,tensorflow 等都安装无误,版本关系都正确,仍是报错,请尝试更新pip

死马当活马医,我也想试一下(好像哪里不对,现在没有合适的TensorFlow版本呀!我还没安装呢?!!!)

pip install --upgrade pip

引用一博主的:

中间试了很多方法,具体是哪个方法解决了问题我也不知道了(换了tf低版本),最有可能的应该是下面这2种:

1.检查 /usr/local/cuda-10.0/lib64 下是否有 libcublas.so.10.0如果有, 终端输入:sudo ldconfig /usr/local/cuda-10.0/lib64

2.pip install conda

后来又出现了这个问题,用方法一解决了

尝试用

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade
tensorflow
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第13张图片
自动给我安装了tensorflow-2.2.0
但还是不成功

最后的最后……无果,安装什么都没有match的!!!
移除环境重新来,创建了
tf35 python=3.5
再用

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow

爱安装啥安装啥吧?!

自动给安装的是xxx
然后再继续过一遍之前的步骤。

最后尝试跑一个demo在/home/qh/anaconda3/envs/tf35/models/research
路径下运行输入jupyter notebook,系统会自动打开网页,然后选择object_detection模块,点进去/object_detection/object_detection_tutorial.ipynb
点击run all。

然后报错(由于不是tensorflow2.x版本,第一项就报错,但我给注释掉了昂~)

再接下来又报错:
TypeError: load() missing 2 required positional arguments: ‘tags’ and ‘export_dir’

Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第14张图片
昂~难道还是TensorFlow版本的问题???无解

我再卸掉好了

然后再装,就是要死磕!
结果:
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第15张图片
前面不行,后面自动也给我这个版本了唔~!!!好气
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第16张图片
昂~好吧,看在你安装好啦的份上!!!我继续

然后又是遇到一堆问题!
比如给models加入了环境变量还是import slim失败:

Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第17张图片
再比如之前的问题还是存在:
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第18张图片

但是但是!结果出来了!

8 成功出图

这大概就是坚持就是胜利吧!
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第19张图片
Ubuntu完成谷歌开源TensorFlow Object Detection API物体识别超详细过程_第20张图片
本篇 苦逼 教程就酱紫结束了吧,虽然很艰难,但出来图像了本小白还是敲开心!(尽管对大神来说根本不算什么……)

下一步:尝试开始训练新的模型,尝试做数据准备。下期见~

你可能感兴趣的:(图像识别,深度学习,tensorflow)