外国大叔利用谷歌Vision Kit(视觉套件)+迁移学习,做了一个能识别手势的“魔盒”!

TOC

使用Google AIY Vision Kit收集训练数据,通过转移学习构建Hand Gesture Classifier(手势分类器),并将其部署在Google AIY Vision Kit上。

我一直想建立自己的训练数据集,并用它来训练深度学习模型。 该项目是Google AIY Vision Kit上Hand Command Recognizer的第二部分,解释了如何:

  1. 使用Google AIY Vision Kit收集1,500手指令图像的训练数据集。

  2. 使用此数据集并通过重新训练最后一层MobileNet模型来转移学习以构建Hand Command Classifier。

  3. 在Edge AI设备上部署手动命令分类器 - Google AIY Vision Kit。

一个相当准确的模型,延迟为1-2秒,在Google AIY Vision框上运行,不需要访问Internet或云。 它可用于控制移动机器人,更换电视遥控器或许多其他应用程序。

Classifier 设计

用于实时应用的成功深度学习模型的两个重要特性是稳健性和低延迟。

通过对图像背景进行高度控制可以改善模型稳健性。这也有助于减少模型训练时间和所需训练数据集的大小。

如果我们减少可能的搜索区域并且只在图像的特定部分中寻找可能显示该命令的手部命令(而不是使用不同大小的滑动窗口扫描整个图像),则可以改善模型延迟。

为了实现这些目标,我利用了Google AIY Vision Kit上预装的最先进的人脸识别模型。

这就是Hand Command Recognizer的工作原理。首先,识别器尝试在图像上检测并定位人脸,并确保其稳定且不会四处移动。给定检测到的面部框的大小和位置,识别器估计可能显示手部命令的胸部盒的大小和位置。这消除了在整个图像上搜索手部命令的需要,因此大大减少了模型推断期间的延迟。

因为我们可以决定我们穿上什么T短裤,我们对分类图像的背景有很高的控制能力,这增加了模型的稳健性,消除了收集大型训练数据集的需要,减少了模型的训练时间。。 各种可能的背景也是有限的(根据衣柜中可用的T恤和夹克的数量。)

Alt
在这里插入图片描述

步骤1。设置Google AIY Vision Kit

  1. 购买Google AIY Vision Kit并按照这些说明进行组装

  2. 为组装的Google AIY Vision Kit提供动力

  3. 启动Dev终端

  4. 停止并禁用joy_detector_demo应用程序,该应用程序设置为在引导后自动启动

步骤2。收集训练图像

脚本training_data_collector.py为您的模型构建训练数据集。 它使用您的手动命令记录图像,并将它们存储在具有文件夹training_data的标签(类)名称的子文件夹中。

每次运行脚本时,都应该提供两个参数的值:

  1. label =具有您正在录制的特定手势的类的名称

  2. num_images =要在会话期间记录的图像数

    ./training_data_collector.py --label no_hands --num_images 100

例如,此命令将用手向下记录100个图像(no_hands)并将它们放在文件夹training_data的名为no_hands的子文件夹中。 如果子文件夹no_hands或主文件夹training_data不存在,脚本将创建文件夹。 如果存在,脚本将在此会话期间将100个新图像添加到存储在no_hands中的现有图像。

我使用以下手部命令和标签来训练我的模型

  1. 带有样本图像的模型标签(类)

  2. 为了使图像采集过程更容易,每个记录会话分为两个阶段。

原始图像捕获。

第一阶段开始时,Google AIY Vision Kit顶部的LED为红色。 在此阶段期间,原始图像(以及在每个图像上检测到的面部框的位置的大小)被记录并存储在临时文件夹中。

图像后处理。 第二阶段开始时,Google AIY Vision Kit顶部的LED变为蓝色。 在此阶段,每个记录的原始图像都被裁剪,调整为160 x 160像素,并保存在training_data文件夹的子文件夹中,并带有手势标签的名称(类)。

收集训练数据时的实用建议:

  1. 确保您的 headbox和 chestbox都适合图像。否则,将不保存训练图像。

  2. 选择合理数量的图像(100-200)以在会话中捕获,这样您就不会感到疲倦。我录制了200张图片,花了大约2-3分钟收集。

  3. 确保您录制的手势与–label参数中指定的标签相匹配。

  4. 在会话期间(靠近或远离摄像机,略微旋转身体和手等)改变您的身体和手的位置,以使您的训练数据集更加多样化。

  5. 在2-5个不同的环境中记录图像。例如,您可以在明亮的房间(环境#1)中为每个穿着红色T恤的标签记录200张图像,然后在较暗的房间(环境#2)中为每个穿着蓝色毛衣的标签记录另外200张图像等。 。

  6. 确保在每个环境中记录所有标签的训练图像,以便特定环境和特定手动命令之间没有相关性。

  7. 在房间内捕捉到足够明亮的图像,使您的双手清晰可见。出于同样的原因,使用浅色和深色的T恤/毛衣。

  8. 查看您收集的图像,如果看到任何图像,请删除无效的图像。

在这里插入图片描述

步骤3。训练你的模型

有一个很棒的教程TensorFlowfor Poets解释了如何使用TensorFlow Hub模块重新训练MobileNet上的自定义数据。 按照这些说明中的步骤1到4进行操作。 唯一的区别是:

  1. 代替步骤3(下载训练图像)将包含您收集的训练数据(名为training_data)的文件夹从Google AIY Vision套件复制到您的计算机。 文件夹training_data将用于训练您的模型,而不是TensorFlow for Poets教程中提到的文件夹flower_photos

  2. 在步骤4(重新)训练网络useIMAGE_SIZE = 160而不是224或您的模型将无法编译。

下面是一个用于训练模型的命令的屏幕截图(脚本retrain.py可以在下面的代码部分或GitHub存储库中找到。)

python-m script.retrain

--bottleneck_dir=tf_files/bottlenecks

--how_many_training_steps=1500

--model_dir=tf_files/models/

--summaries_dir=tf_files/training_summaries/"mobilenet_0.50_160"

--output_graph=tf_files/hand_gesture_classifier.pb

--output_labels=tf_files/hand_gesture_labels.txt

--architecture="mobilenet_0.50_160"

--image_dir=tf_files/training_data

--random_brightness 15

您可以使用几个可选的训练参数来使您的模型更加健壮 - 例如我使用random_brightness随机更改训练图像的亮度。 在retrain.py中很好地解释了可用的参数

训练完成后,您应该获得冻结的再训练图形hand_gesture_classifier.pb和标签为hand_gesture_labels.txt的文件。 欢迎跳过TensorFlow for Poets教程的其余步骤。

步骤4。在Linux机器上编译模型

然后应该使用这个编译器在Linux机器上编译再训练的冻结图形hand_gesture_classifier.pb(我在Ubuntu 16.04上成功运行它; Google在Ubuntu 14.04上测试它)。 确保您没有在Google Vision Kit上运行它!

此步骤将创建文件hand_gesture_classifier.binaryproto。 您可以在Google AIY项目页面上找到更多信息。

步骤5。将您的模型上传到Google AIY Vision Kit并运行它!

hand_gesture_classifier.binaryprotohand_gesture_labels.txt上传到Google AIY Vision Kit并运行它。

猜你喜欢

转载自blog.csdn.net/gravitylink/article/details/89636111