大多数浏览器和
Developer App 均支持流媒体播放。
-
利用 Create ML 组件构建高级模型
利用 Create ML 组件将您的自定义机器学习模型提高到新的水平。我们将介绍如何处理视频或音频等时态数据,并构建可计算重复人为操作次数或提供高级声音分类的模型。我们还将分享有关使用增量拟合,以新数据加快模型训练的最佳实践。要简单了解自定义机器学习模型,请观看 WWDC22 的“了解 Create ML 组件”。
资源
相关视频
WWDC23
WWDC22
WWDC21
WWDC20
WWDC19
-
下载
♪ 柔和乐器演奏的嘻哈音乐 ♪ ♪ 嗨 我的名字叫 David Findlay 我是 Create ML 团队的工程师 本讲座的主题 是 Create ML 组件 这是一种强大的新方法 用于构建您自己的机器学习任务 我的同事 Alejandro 在“了解 Create ML 组件” 讲座中做了介绍 他探讨了 如何将 Create ML 任务 解构为组件 并揭示了 构建自定义模型是多么简单 转换器和估算器是主要的构件 您可以将它们组合在一起 构建自定义模型 如图像回归 本讲座的内容远不止基础知识 我想演示 Create ML 组件 会带来哪些可能性 我们看一下本讲座的内容 有很多东西要讲 我先讲视频数据 再详细介绍 处理时序数据的新组件 然后我会把这些概念付诸实践 只使用转换器构建一个 人体动作重复次数计数器 最后 我会训练 自定义声音分类器模型 我将讨论增量拟合 它允许您 批量更新模型 提前停止训练 并为模型设置检查点 这种级别的灵活性带来了很多机会 我等不及了 让我们开始吧 在 2020 年 全球开发者大会 (WWDC) 上 我们介绍了 Create ML 中的动作分类 它允许您对视频中的动作进行分类 我们还演示了如何创建健身分类器 来识别一个人的锻炼项目 如开合跳 弓步和深蹲 例如 您可以使用动作分类器 将此视频中的动作识别为开合跳 但如果您想数一下您的开合跳次数 该怎么办? 您需要考虑的第一件事是 开合跳跨越连续多帧 您需要一种处理时序数据的方法 感谢 Swift AsyncSequence 让这变得很容易 如果您不熟悉 AsyncSequence 请查看 “认识 AsyncSequence”讲座 通过 Create ML 组件 您可以 使用视频阅读器 将视频作为异步序列帧读取 AsyncSequence 提供了一种 循环访问序列帧的方式 和从视频中接收的顺序一样 例如 我可以使用 map 方法 轻松地异步转换每个视频帧 当您想一次处理一帧时 这很有用 但如果您想一次处理多帧 该怎么办? 这就是时序转换器的用武之地 例如 您可能想要对视频帧进行下采样 以加快视频中的动作 您可以为此使用下采样器 下采样器需要传入一个异步序列 并返回一个经过下采样的异步序列 或者您可能想要将帧分组到窗口中 这对于计算动作重复次数很重要 这就是滑动窗口转换器的用武之地 您可以指定窗口长度 也就是分组到窗口中的帧数 并指定步幅 也就是控制滑动间隔的方式 同样 输入是一个异步序列 在这种情况下 输出是一个窗口化的异步序列 一般来说 时序转换器 提供了一种将异步序列处理为 新的异步序列的方法 那么让我们把这些概念付诸实践 我不知道您的情况 但是当我锻炼时 我总是数不清我的动作重复次数 所以我决定稍微改变一下 用 Create ML 组件 构建一个 动作重复次数计数器 在这个例子中 我将介绍如何 将转换器和时序转换器组合在一起 让我们从姿态提取开始 我可以使用人体姿态提取器 来提取姿态 输入是一个图像 输出是一个人体姿态数组 在底层 我们利用 Vision 框架 来提取姿态 请注意 图像可以包含多个人 这在集体锻炼中很常见 这就是输出是人体姿态数组的原因 但我只对一次计算一个人的 动作重复次数感兴趣 所以我将姿态提取器 和姿态选择器组合 姿态选择器接受传入姿态数组 以及选择策略 然后返回一个单独的姿态 有几个选择策略可供选择 对于这个例子 我将使用 rightMostJointLocation 策略 下一步是将姿态分组到窗口中 我将为此添加一个滑动窗口转换器 我将使用 90 的窗口长度和步幅 这将生成不重叠窗口 每个窗口 90 个姿态 回想一下 滑动窗口转换器 是时序的 这使整个任务都是时序的 预期输入是一个异步序列帧 最后 我将添加一个 人体动作计数器 这个时序转换器 需要传入窗口化的异步序列帧 并返回截止到当时的 累积动作重复次数 到目前为止 您可能已经注意到 这个次数是一个浮点数 这是因为此任务也计算 部分动作的次数 就这么简单 现在我可以在我的锻炼视频中 计算我的重复次数了 并确保我没有作弊 但更好的方法是 在 App 中实时计算重复次数 这样就可以跟踪当前的锻炼情况 让我告诉您如何做到这一点 首先 我将使用 readCamera 方法 该方法需要传入相机配置 会返回一个异步的相机序列帧 接下来 我将步幅参数 调整为 15 帧 这样我就可以更频繁地获得 更新的计数 如果我的相机 以每秒 30 帧的速度捕获帧 那么我每半秒计数一次 现在我可以锻炼了 而无需担心漏记某个重复动作 到目前为止 我已经探讨了 用于转换异步序列的时序组件 接下来 我想专注于训练 依赖时序数据的自定义模型 2019 年 我们演示了 如何在 Create ML 中 训练声音分类器 然后在 2021 年 我们推出了 声音分类的增强功能 我想更进一步 增量训练自定义声音分类器 Create ML 框架中的 MLSoundClassifier 仍是训练自定义声音分类器模型的 最简单方法 但是当您需要更多的 可定制性和控制性时 您可以使用其底层的组件 最简单的形式下 声音分类器有两个组件: Audio Feature Print 是一个特征提取器 以及您选择的一个分类器 AudioFeaturePrint 是一个 从音频缓冲区的异步序列中 提取音频特征的时序转换器 与滑动窗口转换器相似 AudioFeaturePrint 将异步序列窗口化 然后提取特征 有几个分类器可供选择 但对于这个例子 我将使用逻辑回归分类器 然后将其与特征提取器组合在一起 以构建自定义声音分类器 下一步是将自定义声音分类器 与标记过的训练数据相拟合 如要了解有关收集训练数据的 更多信息 “了解 Create ML 组件”讲座 是一个很好的起点 到目前为止 一切进展顺利 但是构建机器学习模型 可能是一个迭代过程 例如 您可能会随着时间的推移 发现和收集新的训练数据 并希望更新您的模型 您可以提高模型质量 但是从头开始重新训练模型 非常耗时 这是因为您需要对以前的所有数据 重新进行特征提取 让我举个例子说明 在使用新发现的数据 对模型进行训练时如何节省时间 关键是对训练数据进行预处理 并将此过程与模型拟合分开 在这个例子中 我可以 将提取音频特征 与分类器拟合分开进行 这通常是有效的 在一系列转换器 后接一个估算器时 您可以对 经过转换器进入估算器的输入 进行预处理 您需要做的就是调用预处理方法 然后将模型与经过预处理的特征 相拟合 我觉得这很方便 因为我不需要 改变声音分类器的组成 现在可以单独提取特征 我可以灵活地只对新数据提取 音频特征 当您发现模型的新训练数据时 您可以轻松地对这些数据 进行单独的预处理 然后将新增的特征添加到 之前提取的特征上 这只是预处理可以节省时间的 第一个例子 让我们回到模型构建周期 您可能需要调整估算器参数 直到您对模型的质量感到满意为止 通过将特征提取与拟合分开 您可以只提取一次特征 然后将模型与不同的估算器参数 相拟合 我们来看一个 在不重新进行特征提取的情况下 更改分类器参数的例子 假设我已经提取了特征 我将修改分类器的 L2 惩罚参数 然后我需要将新的分类器 添加到旧的特征提取器上 在调整估算器时 不更改特征提取器很重要 因为这会使之前提取的特征无效 我们看一下如何以增量方式 使用批量数据拟合模型 机器学习模型 通常受益于大量的训练数据 但是 您的 App 可能 受到有限内存的限制 那么您该怎么办? 您可以使用 Create ML 组件 来训练模型 每次只将一批数据加载到内存中 我需要做的第一件事是将现有分类器 更换为可更新的分类器 为了使用批量数据训练自定义模型 分类器需要可更新 例如 可以轻松使用的 全连接神经网络分类器 而不是不可更新的 逻辑回归分类器
好 现在我将编写一个训练循环 我首先将创建一个默认的 初始化模型 还不能用来进行预测 因为这只是训练的起点 然后我会在训练开始前 提取音频特征 这是一个重要的步骤 因为我不想每次迭代都提取特征 下一步是定义训练循环 并指定您想要训练的 迭代次数 在继续之前 我将导入 Swift Algorithms 开源软件包 我将用它来创建批量训练数据 请务必查看 WWDC 2021 的 “认识 Swift 算法 和集合包”讲座 以了解更多信息
分批次发生在训练循环内 我将使用 chunks 方法 将特征分组为批次 以便进行训练 块大小是一次性加载到内存中的 特征数量 然后 我通过迭代批次 调用 update 方法来更新模型
当您增量训练模型时 您可以解锁更多的训练技巧 例如 在这个训练图中 经过大约 10 次迭代 模型精度就会稳定在 95% 此时模型已经收敛 您可以提前停止 让我们在训练循环中实施提前停止 我需要做的第一件事是 对我的验证集进行预测 我在这里使用了 mapFeatures 方法 因为我需要将验证集预测结果 与其标注数据 进行配对 下一步是衡量模型的质量 我现在将使用内置衡量标准 但没有什么能阻止您 实施自定义标准 最后 我将 在模型达到 95% 的精度时 停止训练 在训练循环之外 我会将模型写入磁盘 以便以后使用它进行预测 除了提前停止 我还想谈谈模型检查点
您可以在训练期间保存模型的进度 而不是等到最后 您甚至可以使用检查点来恢复训练 这很方便 尤其是在模型需要很长时间 来训练时 您需要做的就是在训练循环中 保存您的模型 我们建议通过定义检查点间隔 每隔几次迭代就这样做一次 就这么简单 在本讲座中 我介绍了时序组件 这是一种通过时序数据 比如音频和视频 构建机器学习任务的新方法 我将时序组件组合在一起 以制作人体动作重复次数计数器 最后 我谈到了增量拟合 这将为您开启新的可能性 以便将机器学习构建到 您的 App 中 感谢您的光临 请畅享 WWDC 的其余部分 ♪
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。