人工智能教程:使用TensorFlow对象检测接口标注数据集
2018年02月09日 由 yuxiangyu 发表
690261
0
在仅包含60个图像的小数据集上训练之后,检测赛车
当为机器学习对象检测和识别模型构建数据集时,为数据集中的所有图像生成标注非常耗时。而这些标注是训练和测试模型所必需的,并且标注必须是准确的。因此,数据集中的所有图像都需要人为监督。不过,这并不意味着机器学习模型不能提供帮助,这时就可以使用TensorFlow对象检测接口标注数据集。
因为,检查和纠正大多数标注都正确的图像通常比所有的标注都由人完成省时。在处理包含数千个图像的数据集时,即使每个图像节省几秒钟,也可以最终节省数小时的工作时间。
本文的目的是要证明,对于不需要高精度的物体识别和检测任务,小的数据集和“开箱即用”的模型就可以提供不错的结果。
以图像中的赛车检测为例,本文将通过以下步骤进行指导:
- 在小数据集中标注图像。
- 从这个数据集中训练一个简单的模型。
- 使用这个简单的模型来预测新数据集图像的标注。
代码和数据请访问下方链接。本文假设你已经安装了
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目标检测接口提供了关于调整和利用现有模型的自定义数据集的详细文档。
训练模型的基本过程是:
- 将PASCAL VOC原始数据集转换为TFRecord文件。范例库提供了一个可用于执行此操作的Python脚本。
- 创建一个对象检测管道。该项目提供有关如何执行此操作的官方文档,并且在代码库中有一个示例。存储库中的示例基于ssd_mobilenet_v1_coco检查点,需要更多检查点可从官方文档下载。
- 训练模型。可以在本地或在Google云平台上完成。取得这篇文章中的结果大约迭代1万次。
- 将最后一个检查点导出到推理图(inference graph)。
这个过程的最终结果将是一个名为frozen_inference_graph.pb的文件。它可以用来预测标注的模型。
预测标注
可以使用
pascal- vocwriter库生成在PASCAL VOC文件格式的标注。它有个非常好用的接口,下面的代码展示了向图像添加“cat”标注的示例:
from pascal_voc_writer import 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标注文件而不是进行图像可视化。
可以根据数据集和操作符的需要优化生成注释的阈值。合适的阈值应该在错误率与错过率之间找到平衡点。如果删除错误标注对于操作员而言比标注遗漏容易,那么应该使用较低的阈值。
下面是来自简易模型的三个预测。尽管数据集非常小,训练次数也不多,但模型依然做出了不错的预测,可以节省标注这些图像的时间。
在这个例子中,两个标注正确,一个错过。在最远的车中建议标注的可能性数值稍有下降。
这些图像需要很长时间手动标注。模型在缩减大部分工作量方面做了不错的贡献。对于一些模糊的汽车来说,它也在努力辨认,但是这些模糊的汽车人类也很难辨别。
两辆车都被识别出来,但是红的那个边界框太宽了。