【教程】使用TensorFlow对象检测接口标注数据集
当为机器学习对象检测和识别模型构建数据集时,为数据集中的所有图像生成标注非常耗时。而这些标注是训练和测试模型所必需的,并且标注必须是准确的。因此,数据集中的所有图像都需要人为监督。不过,这并不意味着机器学习模型不能提供帮助。
在仅包含60个图像的小数据集上训练之后,检测赛车
因为,检查和纠正大多数标注都正确的图像通常比所有的标注都由人完成省时。在处理包含数千个图像的数据集时,即使每个图像节省几秒钟,也可以最终节省数小时的工作时间。
本文的目的是要证明,对于不需要高精度的物体识别和检测任务,小的数据集和“开箱即用”的模型就可以提供不错的结果。
以图像中的赛车检测为例,本文将通过以下步骤进行指导:
1. 在小数据集中标注图像。
2. 从这个数据集中训练一个简单的模型。
3. 使用这个简单的模型来预测新数据集图像的标注。
代码和数据请访问下方链接。本文假设你已经安装了TensorFlow Object Detection API。
GitHub:https://github.com/AndrewCarterUK/tf-example-object-detection-api-race-cars
标注图像
PASCAL VOC文件格式是用于图像标注的格式。这是Image Net使用的XML文件格式。而LabelImg程序可以用来生成和修改这种格式的标注。
范例库中的数据目录显示了使用此方法生成的标注(如下链接)。这种标记的映射文件需要手动创建,因为它不是由LabelImg产生。
https://github.com/AndrewCarterUK/tf-example-object-detection-api-race-cars/tree/master/data
训练模型
该TensorFlow目标检测接口提供了关于调整和利用现有模型的自定义数据集的详细文档。
训练模型的基本过程是:
1. 将PASCAL VOC原始数据集转换为TFRecord文件。范例库提供了一个可用于执行此操作的Python脚本。
2. 创建一个对象检测管道。该项目提供有关如何执行此操作的官方文档,并且在代码库中有一个示例。存储库中的示例基于ssd_mobilenet_v1_coco检查点,需要更多检查点可从官方文档下载。
3. 训练模型。可以在本地或在Google云平台上完成。取得这篇文章中的结果大约迭代1万次。
4. 将最后一个检查点导出到推理图(inference graph)。
这个过程的最终结果将是一个名为frozen_inference_graph.pb的文件。它可以用来预测标注的模型。
预测标注
可以使用pascal- vocwriter库生成在PASCAL VOC文件格式的标注。它有个非常好用的接口,下面的代码展示了向图像添加“cat”标注的示例:
from pascal_voc_writerimport Writer
writer= Writer('path/to/img.jpg',800,400)
writer.addObject('cat',100,100,200,200)
writer.save('path/to/img.xml')
范例库中的annotate.py文件使用这个库来调整官方文档中的推理示例,以创建PASCAL VOC标注文件而不是进行图像可视化。
可以根据数据集和操作符的需要优化生成注释的阈值。合适的阈值应该在错误率与错过率之间找到平衡点。如果删除错误标注对于操作员而言比标注遗漏容易,那么应该使用较低的阈值。
下面是来自简易模型的三个预测。尽管数据集非常小,训练次数也不多,但模型依然做出了不错的预测,可以节省标注这些图像的时间。
在这个例子中,两个标注正确,一个错过。在最远的车中建议标注的可能性数值稍有下降。
这些图像需要很长时间手动标注。模型在缩减大部分工作量方面做了不错的贡献。对于一些模糊的汽车来说,它也在努力辨认,但是这些模糊的汽车人类也很难辨别。
两辆车都被识别出来,但是红的那个边界框太宽了。
- 相差数十倍的SQL性能分析(r11笔记第98天)
- shell脚本实现整站缓存和预缓存,进一步提升网站整体加载速度
- Oracle中的PGA监控报警分析(r11笔记第96天)
- MySQL错误修复记录:Table xx is marked as crashed and should be repaired
- WordPress百度自动推送JS优化,规避错误、重复推送问题
- Oracle 12c中DBCA搭建备库体验(r11笔记第92天)
- 一行代码彻底禁用WordPress缩略图自动裁剪功能
- MySQL中xtrabackup备份恢复全攻略(r12笔记第11天)
- 分享一次Linux任务计划crontab不执行的问题排查过程
- MySQL 5.6, 5.7并行复制测试(r12笔记第9天)
- MySQL 5.6, 5.7并行复制测试(二)(r12笔记第10天)
- MySQL主从报错解决:Failed to initialize the master info structure
- 使用pt工具检测MySQL主从延迟(r12笔记第7天)
- WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Qt音视频开发5-vlc事件订阅
- matlab中使用VMD(变分模态分解)
- TKE中挂载文件到CFS子目录
- Nginx Ingress on TKE 部署最佳实践
- 腾讯地图点聚合开发-实现地图找房功能
- 机器学习Tips:关于Scikit-Learn的 10 个小秘密
- R语言ggmap空间可视化机动车碰撞–街道地图热力图
- R语言ggmap空间可视化机动车交通事故地图
- 基于matlab的Lorenz系统仿真可视化
- 使用R语言对进行空间数据可视化
- R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
- R语言马尔可夫体制转换模型Markov regime switching
- Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
- python3用ARIMA模型进行时间序列预测
- R语言马尔可夫转换模型研究交通伤亡人数事故预测