TensorFlow对象检测是一种功能强大的技术,可以识别图像中的不同对象,包括它们的位置。训练有素的物体检测模型可以在移动设备和边缘设备上运行,以便非常快速地执行预测。我已经使用这项技术来构建一个演示,通过iOS应用程序检测Anki Overdrive汽车和障碍物。当检测到障碍物时,汽车会自动停止。
这张照片显示了有两辆车和一部手机的轨道以及在物体周围绘制矩形的iOS应用程序。
我在GitHub上开源了代码。回购包括两部分:
- 训练有素的深度学习模型,通过iOS应用程序识别Anki Overdrive轨道上的项目
- 文档如何训练TensorFlow对象检测模型
README中的说明非常详细。下面简要概述了训练模型检测自己的对象时可以遵循的主要步骤。
1)开发环境设置
首先,您需要下载经过培训的MobileNet模型,该模型是移动设备的优化模型。不是从头开始训练新模型,而是使用转移学习。基本上,神经网络的最后一层被替换为您自己的对象。
2)LabelImg图像
而对于视觉识别模型,只需要提供图像和类别的名称,对象检测的标签更复杂。除了您还需要提供其位置的对象列表之外,我还使用labelImg来创建标签和矩形,如屏幕截图所示。
根据我的阅读,这些是关于如何创建培训数据的一些最佳实践:
- 每个对象拍摄/获取至少50张照片。
- 使用相当小的分辨率,例如640 x 480。
- 使用不同大小的物体和不同角度。
- 使用包含多个对象的图片。
- 使用labelImg标记对象时,请将矩形尽可能靠近对象放置。
从labelImg工具导出的图像和注释需要转换为TensorFlow Object Detection所期望的特定格式(TFRecords)。
3)模型的培训
只需几个培训步骤即可在当地进行培训。例如,如果要测试代码是否运行,这很有用。当你可以使用GPU时,也可以在本地进行许多步骤的训练,但我还没有尝试过。
我在IBM Cloud上使用Kubernetes来运行培训。17.000个训练步骤大约需要1.5天。为了也利用GPU,我想看看FfDL。当我发现更多信息时,我会写下来。如果您想使用IBM Cloud,您可以获得一个免费帐户。
在训练之后,需要创建模型的冻结图。repo包含一个脚本和一个Docker容器来执行此操作。
4)在笔记本和应用程序中使用模型
可以使用Python笔记本测试训练模型。屏幕截图显示了测试图像中检测到的对象。
repo还包含一个iOS应用程序,我在GitHub上找到了它。
将汽车和iOS应用程序连接到Watson IoT平台
为了在电话放在轨道上时停止Anki Overdrive汽车,您需要设置其他组件,尤其是Node.js控制器和Watson IoT平台。为此,请按照我的项目node-mqtt-for-anki-overdrive中的说明进行操作。
以下是高级架构图:
下一个屏幕截图显示了一个简单的Node-RED流程,可以在检测到障碍物时停止汽车。