【TensorFlow Object Detection API 】Ubuntu16.04 训练自己的数据集 (一)_catn1p的博客-程序员秘密

技术标签: Tensorflow  Linux  Object Detection API  DeepLearning  TensorFlow Object Detection AP  配置环境  

Tensorflow Object Detection API

Tensorflow Object Detection API 是Tensorflow官方提供的一个目标检测的实现,可靠而且更新速度极快。就我个人使用的感受而言,好用但是坑也不少。现在就写一下我个人的训练过程,希望能给各位提供一个参考。

 

环境配置

Tensorflow Object Detection API 最近更新之后我个人是觉得环境配置方面更省心了,出的问题也少了很多。然而虽然环境配置问题少了,但是训练和测试的问题反而多了起来。

根据官方的指引,配置其实非常简单,官方指引 在这里 。

1. 拉取必要的文件

第一步当然是拉取一大堆的代码了,在你的工作目录使用下面的命令拉取。 无论是否是从源码编译的Tensorflow,我都建议你重新获取,因为最近Tensorflow Object Detection API 有更新,我是按照目前最新的版本来写的(我是8月8日拉取的代码)。如果你使用的版本和我不一致,可能出现一些我没有遇到的问题。

git clone https://github.com/tensorflow/models.git

如果你在国内拉取,可能出现速度缓慢的问题,可以参照我的另一篇博客解决这个问题。

2. 安装必要依赖

这里的依赖全部按照官方要求安装就可以了,另外注意,如果你最后想使用的 xx_fpn 的算法,最好将你的Tensorflow 更新至**1.9.0及以上**,这样在export inference graph 时候不会出现问题。

**具体依赖在这里:**

Tensorflow Object Detection API depends on the following libraries:

Protobuf 3.0.0
Python-tk
Pillow 1.0
lxml
tf Slim (which is included in the "tensorflow/models/research/" checkout)
Jupyter notebook
Matplotlib
Tensorflow (>=1.9.0)
Cython
contextlib2
cocoapi

**安装依赖:**
 

# For CPU
pip install tensorflow
# For GPU
pip install tensorflow-gpu

sudo apt-get install protobuf-compiler python-pil python-lxml python-tk
pip install --user Cython
pip install --user contextlib2
pip install --user jupyter
pip install --user matplotlib


# 如果你的apt-get总出问题 可以尝试sudo apt-get update 命令,执行完毕后再使用上述 apt-get install 命令安装必要依赖。 
# 如果未能解决,可以尝试仅使用 pip install 安装依赖, 命令如下

pip install --user Cython
pip install --user contextlib2
pip install --user pillow
pip install --user lxml
pip install --user jupyter
pip install --user matplotlib


# 这个 '--user' 的参数是仅给当前用户组安装,如果你是使用虚拟环境的,别忘记加上这个参数

3. 使用 Protobuf 完成配置

这一步经常出各种各样的问题,找不到文件或者执行过程中有一两个文件报错说缺少参数什么的。这些我都一一解决过了,下面是具体步骤

**检查当前 protoc 版本号 :**

使用下面的命令检查当前版本号:

protoc --version

# 我的输出为 libprotoc 3.4.0

如果你的版本号低于3.4.0 执行过程中将会出现问题,具体更改 protoc 版本的方法为

# 查询protoc的具体位置,命令如下

which protoc

# 我的输出为 /usr/bin/protoc,这就意味着我当前使用的protoc位置在此

# 下载linux_x64对应的protoc,亲测适合Ubuntu 16.04,命令如下

wget https://github.com/google/protobuf/releases/download/v3.4.0/protoc-3.4.0-linux-x86_64.zip

# 此版本应该适合绝大多数linux 
# 如果不适合你或者你是windows用户 
# 请参考我的另一篇windows环境配置博客 
# 或者 在github protobuf/releases下寻找自己合适的包下载

# 下载完成后需要解压, wget 和 unzip 都需要安装
# 如果提示你未找到该命令,可以使用下面命令安装
# installing wget
sudo apt-get install wget
# installing unzip
sudo apt-get install unzip

# 解压   -d参数指定解压出来的目录名为 protoc3
unzip protoc-3.4.0-linux-x86_64.zip -d protoc3

# 复制protoc 到对应目录
sudo cp -rf protoc3/bin/* /usr/bin/       
# 这个 /usr/bin/就是你刚刚 which protoc 执行打印的那个目录,有人是 /usr/local/bin/
# 注意不要复制错了目录
sudo cp -rf protoc3/include/* /usr/include/
# 同理,有的人是 /usr/local/include/

# 重新查询protoc 版本号,如果你复制的目录没错,应该已经是 3.4.0了
protoc --version

此时你的protoc 版本号应该已经正确了,那么下一步就是执行protoc

# 执行此命令的目录为 xx/models/research/

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

# 未报错即为成功

4. 添加 Libraries 路径并测试

# 执行此命令的目录为 xx/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

如果不每次跑之前都手动添加Libraries,就需要改一堆文件,还不如这样省心。你可以把这个 `pwd`改为 xx/models/research/ 然后写入 ~/.bashrc 就不用每次都重新执行一遍了。

**测试命令如下:**

python object_detection/builders/model_builder_test.py

# 如没有错误,会输出OK

 

至此,环境配置方面就算是完成了。下一部分将讲解如何将自己的图片制作为训练集,并如何送入训练。同时,如果你有任何问题,欢迎你在这里提问。也推荐你到Github官方讨论区提问,地址在这里

 

参考目录

  1. Peter, Szoldan. ObjectDetecionAPI TypeError: __new__() got an unexpected keyword argument 'serialized_options'[EB/OL]. https://stackoverflow.com/questions/50338968/objectdetecionapi-typeerror-new-got-an-unexpected-keyword-argument-seria.
  2. pkulzc. Installation[EB/OL]. https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xy_zhangchn/article/details/81663472

智能推荐

自定义圆形进度条跟随logo及数字进度_周阿宝的博客-程序员秘密

想说最近公司在出一个设计,需要绘制一个圆形进度条,还得要有数字进度,还要求要有动画,当时看到这个,讲真,我是懵逼的。其实之前很少接触到View的绘制这一块,而且很多时候都是利用人家写好的框架,自己直接嵌套使用就OK了,但是我们公司这个,应该是新颖的进度。我没办法找到一模一样的进度条,无奈之下,只好自己来进行绘制了。先给你们看看我们的设计图:     对,就是你们看到的这样,

CToolTipCtrl使用详细解说 _scollins的博客-程序员秘密

<br />摘要:CToolTipCtrl的一般用法和动态改变ToolTip的显示内容的方法及步骤。 <br />    链接:VCHelp: http://www.vchelp.net <br />    CToolTipCtrl使用详细解说 <br />    by 闻怡洋 <br />    ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。 <br />    一般用法步骤: <br />   

阅读QtCreator--Concurrent预备知识_嵌入式农民工的博客-程序员秘密

摘自:http://m.oschina.net/blog/67836 在QtCreator当中用到了不少的Concurrent(并发),比如编译时,搜索时等。其实在很多场合中都需要用到,一般是CPU去做一项大任务(花费较长时间)时相应用户操作。另一个重要用途就是在当前这个多核,甚至多CPU的年代,并行变成成为一种时尚了,它也确实提高了应用程序的性能。我的电脑是单CPU,2核心4线程,所以相

JAVA内存泄露检测工具如何使用_weixin_30312563的博客-程序员秘密

JAVA内存泄露检测工具如何使用在cmd执行:java -Xmx1000m -jar ha404.jarHeapAnalyzer 是 IBM 的一个用来分析 Java 程序的内存堆使用情况的图形化工具。IBM HeapAnalyzer怎么用?IBM HeapAnalyzer,下载之后首先阅读一下readme,这上面详细写了HeapAnalyzer的使用方法。可以在命令行中输入jav...

11_RHEL安装Maya2015_weixin_30485291的博客-程序员秘密

1. 解压 tar -xvf ./Autodesk_Maya_English_2015_Linux_64bit.tgz2. 运行./setup 2.1补充如果提示缺少 libpng12.so.0,按照下面步骤解决:此库文件是个早期的版本,而且软件仓库也没有早期版本的安装包,必须下载早期的版本,并手动编译安装。 下载 wget ftp://f...

Ubuntu下删除键失效的问题_bkzy的博客-程序员秘密_ubuntu删除键不能用

在Ubuntu系统下,因为误操作,导致删除键(backspace)以及方向键失效,按下删除键反而会多出来一个空格。查了很多文章,最终在 《Ubuntu终端输入异常、无法退格(删除文本)、使用方向键命令 - _再见理想 - 博客园 (cnblogs.com)》 找到了解决方法:重装ncurses-base库,并重启Ubuntu。重装方法:sudo apt-get install ncurses-base...

随便推点

Casper(CSPR)已在Metal Pay上线,进一步整合到现有的商业模式中_唐华斑竹的博客-程序员秘密

我们很高兴能向我们的社区介绍CasperLabs和他们的代币CSPR!作为一家具有大胆想法的区块链公司,CasperLabs致力于在企业层面加快区块链技术的步伐。Casper是做什么的?Casper区块链在设计时结合业务考虑,以可升级的合约和可预测的Gas费为特色。Casper正在寻求让公司更容易地将区块链技术整合到现有的商业模式中。这意味着这是一个易于使用、能抗外部攻击、能够快速有效地扩展的项目。Casper和Metal Pay将CSPR加入Metal Pay将有助于把Casper定位为最易访问.

如何将已下载音乐导入到iPhone的网易云音乐中_SilenceAtNBT的博客-程序员秘密

背景有些音乐是网易云音乐上没有的,即便是花钱也无法得到的,这样一来,如果对于一个只使用单一软件播放音乐的人来说,很坑,怎么办呢?对策既然这样,找找别的方法,其实iTunes本身应该是一个很好用的音乐同步工具,但是,我不知道大家遇没遇到过跟我一样的问题,我总是连接不上,告诉我失败,结果我放弃了,不再使用iTunes。 网易云音乐提供了一个非常好的功能叫#我的音乐云盘#,这个功能Ma...

物联网开发之4G通讯模块_小耿的嵌入式之路的博客-程序员秘密

  在万物互联的物联网时代,物与物之间的连接主要是通过网络进行,网络之间既可以通过网线载体连接也可以通过4G、WIFY等进行无线连接,在无线远距离通讯中目前主要采用的就是4G技术。4G模块是连接物与物的重要载体,是终端设备接入互联网的核心部件,许多新兴市场对4G通信模块的需求都在日益扩大,4G通信模块把频率接收器和信号增幅器等部件全都整合在一起,实现了一体化。  4G模块用的是龙尚4G模块U...

2022年全球市场无线调制解调器总体规模、主要生产商、主要地区、产品和应用细分研究报告_普通网友的博客-程序员秘密

据GIR (Global Info Research)调研,按收入计,2021年全球无线调制解调器收入大约 百万美元,预计2028年达到 百万美元,2022至2028期间,年复合增长率CAGR为 %。同时2020年全球无线调制解调器销量大约 ,预计2028年将达到 。2021年中国市场规模大约为 百万美元,在全球市场占比约为 %,同期北美和欧洲市场分别占比为 %和 %。未来几年,中国CAGR为 %,同期美国和欧洲CAGR分别为 %和 %,亚太地区将扮演更重要角色,除中美欧之外,日本、韩国、印度和东南亚地区,

Java多线程之锁的升级_专业跳大神儿的博客-程序员秘密_多线程锁的升级

Java多线程之锁的升级先说说为什么会有锁升级 因为Sycronized是重量级锁(也是悲观锁),每次在要进行锁的请求的时候,如果当前资源被其他线程占有要将当前的线程阻塞加入到阻塞队列,然后清空当前线程的缓存,等到锁释放的时候再通过notify或者notifyAll唤醒当前的线程,并让其处于就绪状态。这样线程的来回切换是非常消耗系统资源的,而且有的时候,线程刚挂起资源就释放了。而Java的线...

jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe_气自华的博客-程序员秘密

jdk安装好之后,也配置好了环境变量,打开cmd输入javac可以跳出相关信息,可是输入Java却一直提示:系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe在网上核对环境变量都正确啊,最后打开系统变量中的path可以看到如下信息:C:\ProgramData\Oracle\Java\javapath;%SystemR

推荐文章

热门文章

相关标签