大多数浏览器和
Developer App 均支持流媒体播放。
-
在 Create ML 中训练对象检测模型
自定的 Core ML 对象检测模型让您有机会为自己的 app 增添一些神奇的功能。了解 Xcode 中的 Create ML app 如何让训练和评估这些模型变得简单。看看您可以如何利用连续互通相机直接在 app 中测试模型性能。为 Core ML 构建和部署出色的对象检测模型变得从未如此简单。
资源
相关视频
Tech Talks
WWDC20
WWDC19
-
下载
上午好
我是 Alex Brown 是 Core ML 团队的一名工程师
今天 我们要 展示用于物体检测的 Create ML 在机器学习的新功能 这一会议中 我们向你们 介绍了全新的 Create ML App
这是一种非常 亲善好用的工具 可以帮助你 在 App 中添加自定义 机器学习模型
本会议中 我们会 更深入地介绍两个 专门的模板 分别是针对图像的 物体检测 和声音分类 我们先来看物体检测
物体检测可以让你的 App 识别 设备相机拍摄的 真实物体 并根据 它们是否出现 在何位置 有何关系作出反应 你可以在网上 下载能够分辨 物体所属大类的 物体检测器
但如果使用你自己的数据 训练自定机器学习模型 你就可以让你的 App 分辨不同物体间的细微差别 例如动物 手势 路标 游戏符号等等 如果你曾经使用过 Apple 的机器学习 你对图像分类就应该比较熟悉了
你可以使用图像分类 建立模型 为一幅图像 提供简短描述
我们可以将这幅图像描述为 户外或公园 或者 对特定 App 而言 描述为“一条狗”
但要是我们想要获取 场景中两个或以上的物体呢? 这种情况下 物体检测 就能派上用场 它可以检测出照片里 两个或以上的物体 并提供位置 大小等信息 还能给每个物体添加标签 这样一来 你的 App 就可以 运用设备用摄像头 做更复杂的事 但为此 我们要详细了解 如何用图像 训练你的模型
要训练物体检测器 你需要在图像上 标记出希望 模型检测的区域 标记物体用的 选框 起始点位于 希望标记物体的中心 并且有其大小 高度和宽度 单位均为像素 定位取图像左上角为原点 定位点是希望标记的物体中心 你将所有的 标注 标签 位置和大小 打包在一个 JSON 文件中 格式如下 你可以从网页 下载工具帮助实现 但要 确保这些工具的坐标系统 与 Create ML
App 的相一致 完成标注 图像后 将文件 拖拽到被标注图像 所在的文件夹 就好了
你的训练数据就准备就绪了 现在我们知道如何 展示用于物体检测的训练数据 我们来看一个实例
我的同事 Scott 有一个 不错的想法 制作 一款面向儿童的 数学游戏 并使用真正的骰子 生成问题
你们可以在 228 号 会议中了解更多 会议名为 使用 Core ML 和 ARKit 创建超棒的 App Scott 找我帮忙 给他的游戏构建一个模型 我提议用 Apple 的 Create ML App 来训练一个 物体检测器 Scott 早就把训练数据发给我了
他找了一堆图像 是角度不同 顶部点数不同的 骰子的图像 他标注了这些图像 在顶面画了选框 并且添加了标签 标注了每个骰子上面的点数大小 现在 数据就准备就绪了 我们来看看 如何 使用 Create ML App 来构建模型
首先 我们来检查数据
可以看到 我们把所有 图像放在一个文件夹里 每张图像 包含多个骰子
我们把所有 标注都放在一个 JSON 文件里
现在 我来打开 Create ML App 我可以从 Xcode 的 菜单打开 也可以使用聚焦
Create ML App 打开后 就可以选择 打开之前创建的文档 我们来创建一个新项目 首先 可以看到模板 选择器 可以 从一系列机器学习 模型中选择 这个案例中 我们选图像 物体检测器
我来给它命名 这样 之后就能把它区分出来 再添加一些细节
现在 可以看到主窗口 训练视图位于右侧 它已经选择了一个 训练标签页 准备接收我们的训练数据 我也可以将它直接 拖入训练数据区 在训练数据之前 App 便会检查 数据 确保其 格式正确 包含图像 而非声音等其他类型的文件 且饱含一个 JSON 文件 能正确描述图像文件 它同时还提供了一些初始数据 可以看到 我们大概有 1,000 幅图像 并且有 六个类 对应 骰子的六个面 非常好
我们还可以在这个界面上做些其他的 例如 我们可以提供 测试数据 从而 比较不同模型的表现 同时 我们也可以设置高级 参数 调整模型 训练的方式 但现在 这些 还不需要担心 我们已经 可以开始训练了
我们按下开始按钮 看看会发生什么
训练开始了 我们直接就会来到 训练标签页 这里可以看到 模型训练的进度 这是展示损失的图表 随着模型不断优化 损失也越来越少 所以这条线最后 应当到达图表底部 物体检测训练所需时间 比图像分类要长得多 我估计这可能要花上 至少一个小时 我们不想这么干等 所以我已经用这组数据训练好了一个模型
好了 现在我可以 跳转到之前看到的 训练标签页
可以看到 损失已经 显著减少了 表明 模型的性能随着 训练时间增加 而不断改善
这个界面上还有其他东西 我认为值得大家 仔细一看 首先是总体性能 92% 这个数字 对于物体检测器来说 相当不错
我们还想确认一下 是否对所有类 性能水平都较为一致
从 1 到 6 的每个类 性能都超过 90% 并且 值都大致相等 这很重要 因为 这表明 模型处理 骰子六个面时 性能一样好 对骰子游戏来说 公平性很重要 这一点也至关重要 所以 数学上来讲 这个模型性能不错 但我们又该如何相信 它适用于 我们的实例呢 我们可以使用输出标签页
Scott 发给我一张测试图像 让我在把模型发回给他之前 先测试一下 我们把这张图拖进来
看起来还不错 可以看到 场景中的 五枚骰子都被识别了 模型正确地在骰子的 顶面画出了方框 依次点击 6 1 5 我们 可以看到每个标签 置信度较高
性能很不错 所以 如果我要编写自己的 App 的话 我就可以直接 将生成的模型拖入 在 Xcode 中使用 我觉得 Scott 可能 也在等着把这个模型用到他的 App 里
但在此之前 我还想再试一件事
在我准备此次 演示 鼓弄骰子 照相机 和电脑的时候 我九岁的儿子过来问 我在干什么
我解释之后 他非常兴奋 并且想出了一个游戏 里面有熊 蝙蝠 和其他动物 它们共同合作 收集螺栓 造一艘太空船 要用不同颜色的骰子 升级不同 种类的怪物
我们拿到了他的骰子 并决定试一下 Scott 的模型 他用的骰子有一点不同 这些是角色扮演类游戏用的骰子 我们来看看模型的性能 到底如何使用 Mac 的连续互通相机 功能 我可以直接从 iPhone 导入照片 这一点很棒 因为这意味着我使用的 屏幕和相机与你的 App 使用的一样
我来拍摄一张照片 选择 使用照片 照片马上就被分析了 我们来看一下 到底发生了什么 模型正确识别了两枚 带点数的六面骰子 并且 附上了正确的标签 模型忽视了照片中 大多数的骰子 除了 那边的几枚
模型识别出的它们的点数 也是错误的 为什么会这样 问题在于预期的不同 Scott 知道 要使用的 都是白色六面骰子 用点数标明数字 我儿子对骰子的理解有点不同 这些骰子都是彩色的 它们不只有六个面 该如何在我们的 App 中 解决这个问题呢
我们可以继续 使用课堂上玩这个游戏 可能会用到的骰子 或者 我们可以用这些骰子 训练这个模型 有两种方法可以实现这一点 我们可以决定 只有六面带点骰子 有效 而排除 其他骰子 这样的话 我们只需要拍摄 包括两种骰子的照片 只标记六面骰子就好 或者 如果我们要编写 先前说到的游戏 我们就要 把其他类型的骰子加入模型 将它们一并标记 可以只标记数字 或者添加额外标记 记录颜色 红 6 黑 4 等等
我们把这个模型发给 Scott 他就可以编写演示 App 了 我可以使用分享按钮 直接用邮件发送模型
这样就行了
我们看到 你可以 使用 Create ML App 基于你收集的训练数据 训练物体检测器 有一些事情 希望 大家在收集训练数据时予以考虑 首先 每个类 带有标注的图片数量 应该均衡
这样 算法就知道每一个类 都同等重要 我们构建的模型 才能对所有类 有均衡的表现
其次 你需要很多图片 我建议 每个类中 你希望模型识别的 带标注的图片至少为 30 张 如果 性能不够好 或者 识别对象特别复杂 就进一步增加数量 比如 对象不同面的 外观不一样
我们之前遇到的 骰子颜色不同的问题怎么解决 图像中的区别不止这一种
我们建议你考虑 你的 App 在现实中是如何运用的 你的用户可能不会有 工作室光照 标准骰子 也没有一张精美的木质书桌
你或许可以找朋友 在不同情境下收集 额外数据 例如 室内灯光 室外自然光 不同的背景 还可以 添加一些你的模型 用不到的物体 这可以帮助模型适应普遍情况
如果你之前用过物体分类器 有一件事情你可能 意想不到 那就是 一个标签足矣
这是因为 既然你将 图片的一部分 解释为狗 也就意味着 其余部分不是 模型也会 照此训练
所以 比方说 你要 编写一款 App 用它识别 你冰箱里泡菜罐的 数量 你就不需要 把其他调味品都标记出来 模型自动就能归纳出 那些不是咸菜罐
模型构建完成后 你如果想把这一 功能加入你的 App 我们建议你 使用 Vision 框架 Vision 框架能够 将实时相机和视频 无缝整合进你的模型工作流
这就是训练物体检测器 需要知道的事项
[掌声]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。