动手做系列:用TensorFlow教我的机器人识别日常物体
在这篇文章中,作者将向您展示如何通过在FloydHub(深度学习云平台)上使用TensorFlow进行迁移学习,从而教您自己的Cozmo机器人识别日常物体。
设置
安装Cozmo Python SDK,创建一个新的virtualenv,并将cozmo-tensorflow项目克隆到本地机器。
接下来,登录到FloydHub CLI(在此注册一个免费帐户)。
1.使用Cozmo机器人生成训练数据
为深度学习项目获取足够的训练数据可能是一种痛苦。幸运的是,我们有一个喜欢跑来跑去的机器人,我们可以用他的相机拍照,让Cozmo机器人为我们想让它学习的东西进行拍照。
让我们从一罐美味的苏打水开始吧。将Cozmo直接放在苏打水的前面。确保机器人在拍摄照片时有足够的空间在罐身周围旋转。请务必在运行cozmo-paparazzi脚本时输入Cozmo拍摄的对象的名称。
重复这个步骤在尽可能多的对象(标签)前。您现在应该将所有图像标签视为本地目录的/ data文件夹中的子目录。
将数据集上传到FloydHub
接下来,让我们将图像作为FloydHub数据集上传到FloydHub。这将使我们能够在即将到来的FloydHub模型训练和模型服务工作期间安装这些图像。 FloydHub上的数据集对于您的训练作业来说是引用版本控制的数据集的简单方法。
在我们的例子中,把它命名为图像数据集cozmo-images。然后将它制作成一个公共数据集,这样可以随意在您自己的Cozmo项目中使用它!
2.在FloydHub上训练我们的模型
现在乐趣开始了。首先,确保你在项目的根目录下,然后初始化一个FloydHub项目,以便我们可以在FloydHub完全配置的TensorFlow云GPU机器上训练我们的模型。
注意 - 如果最后一句话听起来像一小撮,那么只需知道FloydHub负责配置和优化云计算机上的所有内容,以便它可以用于基于GPU的深度学习实验。您可以指定您想要使用的确切的深度学习框架 - 无论是TensorFlow 1.4还是PyTorch 0.3或更高 - FloydHub将确保您的机器拥有立即开始训练所需的一切。
好的,回到任务中来,让我们开始初始化我们的项目:
现在我们准备在FloydHub上开展深度学习训练工作。
有几件事要注意:
- 我们将使用Google提供的Inception v3模型进行一些简单的迁移学习。我们可以从这个预先训练的模型开始,而不是从头开始训练模型,然后将其最后一层换掉,这样我们就可以教它识别我们希望Cozmo学习的物体。
- 我们将在我们的FloydHub机器上的/ data目录中安装Cozmo使用--data标志创建的图像数据集。
- 作者使用-tensorboard标记为Tensorboard启用此工作,以便可以直观地监控工作的训练过程。
- 然后编辑了retrain.py脚本(最初由TensorFlow团队提供)将其输出写入/ output目录。这在使用FloydHub时非常重要,因为FloydHub作业始终将其输出存储在/ output目录中)。在我们的例子中,我们将把我们重新训练的ImageNet模型及其相关的培训标签保存到作业/输出文件夹中。
没有必要在AWS上配置任何东西或安装TensorFlow或处理GPU驱动程序或类似的东西。(如果您密切关注,就会发现作业命令中没有包含—env标志,这是因为FloydHub的默认环境包括TensorFlow 1.1.0和Keras 2.0.6,这些都是需要的,可以用于训练) 。
一旦工作完成,将能够在你的工作的输出目录中看到你的新训练的模型。
这里建议将作业的输出转换为独立的FloydHub数据集,以便于您在未来的作业中安装我们的再训练模型(我们将在下一步中完成)。您可以通过单击作业输出页面上的“创建数据集”按钮来完成此操作。查看名为cozmo-imagenet的数据集以查看再训练模型和标签。
3.将Cozmo连接到我们的再训练模型
我们可以通过在FloydHub上运行另一项工作来测试我们新训练的模型:
- 安装我们的再训练模型和标签
- 为模型服务设置公共REST端点
模型服务是FloydHub上的一个实验性功能,为了使此功能有效,您需要在项目代码中包含一个名为app.py的简单Flask应用程序。
对于我们当前的项目,创建了一个简单的Flask应用程序,它将从POST请求中接收Cozmo的图像,使用我们在上一步中训练的模型对其进行评估,然后用模型的结果进行响应。然后Cozmo可以使用结果来确定它是否正在查看特定的对象。
最后,让我们运行我们的cozmo-detective.py脚本,让Cozmo在办公室周围寻找特定的对象。
每次Cozmo移动时,机器人都会向FloydHub上的模型端点发送任何它看到的黑白图像 - FloydHub将针对该图像运行模型,以“Cozmo的猜测”返回以下有效载荷,以及它花了多长时间计算猜测。
如果Cozmo至少有80%的人相信它正在查看有问题的物体,那么机器人就会胜利地向它奔跑!
一旦Cozmo找到你所有的遗失物品,不要忘记关闭你在FloydHub上的工作。