百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

今天,人工智能正影响咱们生产、生活的方方面面。10月10日,为期三天的2018华为全联接大会在上海拉开帷幕,这次大会以“+智能,见将来”为主题,发布了AI战略及全球领先的全栈全场景AI解决方案,并推出全球首个覆盖全场景人工智能的昇腾系列IP和芯片,打造全面领先的AI实力。而咱们做为Python程序员在人工智能领域的技术与贡献也是举重若轻的,下面来了解一下怎么训练本身的目标检测模型。程序员

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

TensorFlow内包含了一个强大的物体检测API,咱们能够利用这API来训练本身的数据集实现特殊的目标检测。web

Dat Tran就分享了本身实现可爱的浣熊检测器的经历,在文章中做者把检测器的训练流程进行了梳理,咱们能够触类旁通来训练其余在工做项目中须要的检测器。下面咱们一块儿来学习一下吧!面试

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

为何要作这件事?编程

方便面君不只可爱,在国外很广泛的与人们平静地生活在一块儿。处于对它的喜好和与浣熊为邻的状况,做者选择了它做为检测器的检测对象。完成后能够将摄像安装在房子周围,检测是否有浣熊闯入了你家,你就能及时知道是否来了不速之客了。看来浣熊还真多啊!服务器

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

建立数据集网络

机器学习须要数据做为原料,那么咱们首先须要作的就是创建起一个可供训练的数据集,同时咱们须要利用符合Tensorflow的数据格式来保持这些数据及其标签:机器学习

1. Tensorflow的物体检测接口主要使用TFRecord文件格式,咱们须要将数据转换为这个格式;函数

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

2.有不少工具能够完成数据的转换,不管是相似PASCAL VOC数据集或是Oxford Pet数据集的格式,都有不少成熟的脚原本完成转换,甚至也能够本身写一个脚原本转换,跟着文档解释不会太难;工具

3.在准备输入数据以前你须要考虑两件事情:其一,你须要一些浣熊的彩色图片;其二,你须要在图中浣熊的位置框坐标(xmin,ymin,xmax,ymax)来定位浣熊的位置并进行分类。对于只检测一种物体来讲咱们的任务十分简单,只须要定义一类就能够了;性能

4.哪里去找数据呢?互联网是最大的资源啦。包括各大搜索引擎的图片搜索和图像网站,寻找一些不一样尺度、位姿、光照下的图片。做者找了大概两百张的浣熊图片来训练本身的检测器(数据量有点小,可是来练手仍是能够的);

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

5.有了数据之后咱们须要给他们打标签。分类很简单都是浣熊,可是咱们须要手动在每一张图中框出浣熊的位置。一个比较好的打标工具是LabelImg。编译好后只要要在图片上轻点鼠标就能够获得PASCAL VOC格式的XML文件,再利用一个脚本就能够转换成Tensorflow须要的输入格式了;有时候在Mac上打开jpeg图像会出现问题,须要将其转换为png来解决;

6.最后,将图像的标签转换为TFRecord格式后,并将起分为训练集(~160张)和测试集(~40张)就能够开始下一步的工做了!

小提示:

1. 还有不少图像标注工具,包括 FIAT (Fast Image Data Annotation Tool)、BBox-Label-Tool、以及matlab自带的trainingImageLabeler等等,能够根据条件和须要自行选择;

2. 图像格式转换一样也有不少工具,做者推荐了ImageMagick的工具,固然咱们还有ps,美图的工具,甚至本身写一个脚本也是一两分钟的事;

3. 整个训练过程当中最耗时的就是数据的标注了,做者表示仅仅一类图像200张的排序和打标签就花了他两个多小时的时间,若是须要大量图像的话仍是要情人帮忙或者找标注公司,例如CrowdFlower, CrowdAI 和 Amazon’s Mechanical Turk;

4. 对于图像的选择,尽可能选择适中的图像,要是太大不只运算速度慢还会形成内存溢出,须要调节训练批量的大小。

训练模型

输入数据搞定后咱们就开始训练模型啦。通常对于物体识别训练来讲有标准的工做流程。首先须要利用一个预训练模型来做为训练的基础,做者使用了ssd_mobilenet_v1。同时须要将分类改变为1,并更改模型、训练数据、标签数据的路径。对于学习率、批量大小和其余超参数先用默认参数来进行训练。

随后构建标签映射就能够进行训练了。

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

小提示:

1. API中有一个数据加强选项data_augmentation_option,这个选项对于较为单一的训练数据来讲十分有用。

2. 重要!标签的值须要从1开始标记,0是一个占位符,在为每一类分类标签赋值时须要注意。

作完了这些进一步的准备工做,咱们终于能够开始训练了。咱们能够选择在本身本地的GPU上训练网络,或者在云服务器上训练。在云服务器上可能须要一额外的配置文件。做者使用Google Cloud就须要一个YAML的文件来定义使用机器的参数。

在训练的过程当中,咱们能够经过tensorboard 来实时监测模型的训练状况一遍在出现异常时及时调整训练策略。

下图是做者基于24幅图的批量大小进行了一个多小时22k次训练的结果,但在40min左右就出现了很好的收敛结果。

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

图中显示了loss和精度随训练的变化状况。在预训练模型的帮助下,损失函数降低很快。

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

同时做者还将训练过程当中模型表现随训练次数的变化呈现了出来:

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

在通过测试和轻微的调整以后(实现本身的精度),就能够完成训练了。

模型的使用

完成训练以后咱们须要将模型保存下来,一般使用checkpoint的模式来保存。因为咱们是基于云端训练的,须要经过一个脚本将模型导入到本机使用。下面是做者将这个模型放到一个youtube浣熊视频中的结果:

浣熊出没

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

捕捉到浣熊

百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

看完视频咱们会发现有时会出现漏识别和误识别。这主要是由于咱们用于训练的数据集过小了,模型缺少鲁棒性和泛化性,须要更多的数据来提升它的性能,而这也是目前人工智能面临的最大问题。若是对Python编程、网络爬虫、机器学习、数据挖掘、web开发、人工智能、面试经验交流。感兴趣能够加君519970686,群内会有不按期的发放免费的资料连接,这些资料都是从各个技术网站搜集、整理出来的,若是你有好的学习资料能够私聊发我,我会注明出处以后分享给你们。欢迎分享,欢迎评论,欢迎转发

结语

在跟随做者完成物体检测器的训练后,咱们应该也能够经过相应的步骤开发本身的检测器。固然须要提升分类器的表现,就须要更多的数据,数据,数据!

这个一检测器训练时间很短并且表现看起来不错。但对于多类物体的的话,表现是会有些许降低的,同时训练时间也要增长才能获得较好的结果。同时咱们须要在心中谨记一个原则,最终的模型必定是速度与精度,效率与效果的平衡。深度学习和其余的科学同样都有矛盾与平衡的一面,真正的产品效果其实取决于你倾向天平的哪一方! (原文出处https://www.toutiao.com/i6612915175940948488/)

相关文章
相关标签/搜索