WWDC Quick Look 💓 By SwiftGGTeam
Build Image and Video Style Transfer models in Create ML

Build Image and Video Style Transfer models in Create ML

观看原视频

Highlight

Create ML 在 2020 年新增 Style Transfer 模板,开发者提供一张风格图和一个内容图片目录,就能训练可用于图片和实时视频的 Core ML 风格迁移模型。

核心内容

风格迁移以前更像研究项目。开发者要准备神经网络、训练脚本、推理管线,还要为移动设备性能做优化。Session 开头把问题缩小成两个输入:一张 style image(风格图)和一张 content image(内容图)。模型学习颜色、形状、纹理,再把这些视觉特征应用到内容图上。

Create ML app 在 2020 年新增 Style Transfer 模板,把训练入口放进可视化流程。开发者拖入风格图、验证图和内容图片目录,选择 image 或 video 优化目标,设置 style strength(风格强度)和 style density(风格密度),再开始训练。演示中的训练会每五次迭代生成一个 checkpoint,用验证图直接展示当前模型效果。

这场 session 的重点不止是生成一张风格化图片。演讲者展示了 video use case:模型可以逐帧处理视频,并在 A13 Bionic 上达到最高 120 fps。后半段把模型放进 ARKit 管线,AR frame 中的 CVPixelBuffer 被缩放到模型输入尺寸,经 Core ML 风格化后用 Metal 渲染到屏幕上。

最后的 AR 演示说明了这类模型的组合方式。一个模型可以处理真实环境背景,另一个模型可以处理 person segmentation(人物分割)得到的人物区域,结果再用 Metal 混合。Create ML 负责训练小模型,Core ML 负责推理,ARKit 和 Metal 负责实时场景。

详细内容

Style Transfer 学什么

00:19)Style Transfer 是 Create ML app 这一年新增的机器学习任务。它把风格图和内容图混合:风格图提供颜色、形状、纹理,内容图提供要保留的主体结构。演示中,白底黑色笔触会生成黑白结果,马赛克和冰裂纹也可以成为风格来源。

关键点:

  • 风格图不局限于绘画,mosaic(马赛克)、自然纹理和图案都可以作为训练素材。
  • 模型会学习风格图的视觉质量,再迁移到新的内容图或视频帧上。
  • 训练内容图应该接近未来推理时要处理的画面,演示使用了 natural content images(自然内容图片)。

用参数控制结果

02:10)Create ML 给 Style Transfer 暴露了两个主要参数。style strength 控制内容与风格的平衡。低强度时,背景只吸收少量风格;高强度时,人物和背景都会更明显地采用风格图的颜色和纹理。

02:54)style density 控制模型学习粗粒度还是细粒度的风格。低密度会让模型关注鸟这样的高层细节;高密度会让模型更关注颜色和笔触。这个参数适合用来探索同一张风格图的不同输出。

关键点:

  • style strength 解决“保留多少原图内容”的问题。
  • style density 解决“学习多粗或多细的风格细节”的问题。
  • 两个滑块都在训练前设置,演示也说明默认参数在多数场景中表现不错。

在 Create ML app 中训练

03:45)训练流程从新建 Style Transfer 文档开始。演示项目名为 DanceStylizer,训练输入包括一张风格图、一张验证图和一个内容图片目录。Create ML app 可以直接下载几百张自然内容图片,也可以使用开发者自己的图片文件夹。演示里使用了 600 张自然内容图片。

04:57)训练目标可以选择 image 或 video。演示选择 video,并训练 400 iterations(迭代)。开始训练后,Create ML 会处理风格图和内容图,并立即启动训练。每五次迭代,一个新的 model checkpoint 会风格化验证图,开发者可以边训练边看质量变化。

关键点:

  • 验证图用于在训练过程中观察模型质量,不需要等到训练结束。
  • snapshot 是可以稍后放进 app 的 ML model,会保存在 model sources 下。
  • style loss 和 content loss 图表帮助判断模型对风格与内容的学习进度。
  • 训练 400 次迭代后,如果 style loss 已经收敛,可以停止;如果还想改进,可以点 train more 继续训练。

预览、导出和集成

06:30)Preview tab 用来测试训练后的模型。开发者可以拖入新的测试图片,在 stylized image 和 original content 之间切换,也可以比较不同 snapshot 的结果。因为演示模型优化过 video use case,视频也可以拖入预览,结果可以下载、分享,或用 QuickTime Player 打开。

07:13)Output tab 展示模型信息。演示里的模型小于 1 MB,适合随 app 打包。这个页面还会显示 OS availability(系统可用性),以及 predictions 中的 input 和 output layer names(输入输出层名称)。最后可以通过 get、open in Xcode 或 share 把模型交给 app 使用。

关键点:

  • 预览阶段要用训练集之外的新图片或视频检查效果。
  • snapshot 对比适合选择主观上更好的风格化版本。
  • 输出信息里的系统可用性和输入输出层名称,是集成前必须确认的模型接口。

放进实时 AR 场景

08:24)第二段演示把 Style Transfer 模型和 ARKit 结合。ARKit 捕捉真实环境,每个 style transform model 负责把场景转换成一种视觉风格。每个 AR frame 都包含一个 CVPixelBuffer,演示会把它缩放到 Style Transfer 模型期望的输入尺寸,再用 Core ML 风格化,并用 Metal 渲染到屏幕。

10:18)更复杂的版本同时运行多个风格迁移模型。演示结合 Apple Neural Engine、ARKit person segmentation 和 Metal:背景环境使用一个模型,分割出来的人物使用另一个模型,两个风格化结果最后被混合。

关键点:

  • ARKit 提供 AR frames 和 person segmentation。
  • Core ML 执行 Create ML 训练出来的 Style Transfer 模型。
  • Metal 负责把风格化结果渲染或混合到屏幕。
  • 多模型实时运行依赖优化过的 Style Transfer 模型和 Apple Neural Engine。

核心启发

  • 实时相机滤镜:做什么:为相机或短视频 app 加一个自定义艺术滤镜。为什么值得做:session 明确展示 video style transfer 能逐帧运行,并在 A13 Bionic 上达到最高 120 fps。怎么开始:用 Create ML 训练 video 优化的 Style Transfer 模型,在相机帧管线中把帧转换成模型输入,再把输出渲染回预览层。

  • 品牌视觉套件:做什么:把品牌图案、纹理或插画风格变成可复用滤镜。为什么值得做:Style Transfer 可以学习颜色、形状和纹理,且模型小于 1 MB,适合随 app 打包。怎么开始:准备一张代表品牌风格的 style image,使用接近真实用户照片的内容图片目录训练,再用 Preview tab 对多张测试图比较 snapshot。

  • AR 场景换肤:做什么:给 AR 场景加实时视觉主题,例如把房间变成手绘、冰裂纹或马赛克风格。为什么值得做:演示中 ARKit frame 经过 Core ML 风格化,再用 Metal 渲染到屏幕。怎么开始:从 ARKit 拿到 CVPixelBuffer,按模型输入尺寸缩放,执行 Style Transfer 模型,再把结果交给 Metal 显示。

  • 人物和背景分层风格:做什么:让人物和背景使用不同风格,例如人物保持清晰,背景变成艺术纹理。为什么值得做:session 演示了结合 ARKit person segmentation,同时运行两个风格迁移模型并用 Metal 混合。怎么开始:先分别训练两个风格模型,再用 segmentation mask 把背景和人物区域分开处理。

关联 Session

评论

GitHub Issues · utterances