用Core ML构建用于人类行为的离线视频分类器

2020-07-26 23:03:17

随着iOS14在WWDC 2020之后的发布,苹果再次更新了其核心ML框架,提供了更丰富的界面,用于在用户设备上培训、运行和微调机器学习模型。在这些改进中,神经网络模型现在可以支持3D卷积和池层,这是许多流行的视频分类模型的骨干。今天,我们将介绍如何采用预先培训的现成视频分类模型,并使其在iOS上运行!

要全面了解今年为苹果平台推出的其他ML新进展,我推荐Matthijs Hollemans的文章“2020年的苹果机器学习:有什么新功能?”(Apple Machine Learning in 2020:What‘s new?)。

膨胀的3D ConvNet(或i3D)是DeepMind研究人员创建的一种架构,用于对视频执行人类行为分类。我们将使用在DeepMind的Kinetics 400数据集上预先训练的i3D模型。也就是说,在给定包含视频帧的张量的情况下,该模型将输出给定视频属于400个相应动作类中的任何一个的概率(例如,“空气击鼓”、“泡茶”、“板凳推”等)。

由于这是一个TensorFlow模型,我们的目标是将其转换为可在Apple平台上本地使用的MLModel。首先,我们将打开一个新的Colab笔记本并导入coem ltools,即Apple的Python库,用于模型转换、编辑和验证。

接下来,我们将获取Dynamics-i3D repo并运行包含的样例评估脚本,该脚本加载预先生成的RGB视频分类模型,对样例视频执行推断(以便我们知道它正在工作),然后将冻结的TensorFlow模型导出为Freeze_Model.pb。

接下来,我们将从repo中获取类标签,其中400个字符串中的每个字符串都对应于视频中的一个潜在操作。

最后,我们将使用coem ltools包将冻结的TensorFlow模型转换为可由iOS和MacOS应用程序直接使用的mlmodel。

该模型期望形状张量(1,NUM_FRAMES,224,224,3),即RGB帧的数组,每个RGB帧的大小为224 x 224,并且-根据模型的原始规范-像素值重新缩放到-1和1之间。

我们希望将帧的数量动态化,这样我们的模型就可以处理任何包含(比方说)25到300帧之间的视频。因此,我们创建了一个具有灵活形状的TensorType,该形状将被传递到转换器中。

此外,为了使我们的分类器模型更易于使用,我们告诉模型有关显式类标签的信息,以便这些标签在Xcode中显式可见。

#可选)添加要在Xcode.mlmodel.license=";Apache-2.0 License";mlmodel.Author=";Google Inc.中可见的元数据。";mlmodel.version=";1.0";mlmodel.Short_description=";卷积神经网络对在Kinetics 400数据集上训练的视频数据执行人体动作识别。";

🎉成功执行转换后,我们将把新的mlmodel保存到磁盘!现在可以将其导入到Xcode项目中。

VisualActionKit是一个SWIFT包,它有效地方便地包装了我们的Dynamics_i3d.ML模型。此程序包执行以下操作:

将资源数据预处理为模型预期的格式,包括使用原始i3D模型回放中概述的自定义大小调整策略将视频的每帧大小调整为224 x 224像素。

要安装此软件包以在我们自己的应用程序中使用,我们需要将以下内容添加到我们的应用程序的Package.swft中。

现在,我们可以对任何提供的视频执行操作分类,而不考虑来源或输入格式!以下是一些用法示例:

导入VisualActionKit让url=Bundle.module e.url(forResource:";Writing";,with Extension:";mp4";)让ASSET=AVAsset(url:url)try分类器.shared.classfy(资产){打印中的预测(预测)/[(c l a s s L a b e l:";w r i t I n g";,p r o b a)/[(c l a s s L a b e l:";w r i t I n";,p r o b a。9 9 7 8 8 1 2 3 3 6 9 2 1 6 92)、。。。}。

除了这个特定的操作分类模型之外,我们还可以使用这些相同的步骤,通过使用coem ltools v4将任何预先训练好的模型转换为在Apple平台上运行。

此外,与我们在这里所做的不同,如果我们有兴趣从头开始训练我们自己的操作分类器-而不涉及任何Python或模型转换代码-我们现在也可以这样做。要了解更多信息,我建议查看2020年的WWDC会议,内容包括Create ML。下次见!