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
- Control training in Create ML with Swift — 用 Swift 控制 Create ML 训练、checkpoint、进度监听和继续训练。
- Build an Action Classifier with Create ML — 同属 2020 年 Create ML 新训练任务,展示从视频训练动作分类模型。
- Explore the Action & Vision app — 展示 Create ML、Core ML 和 Vision 如何组合成完整运动分析 app。
- Detect Body and Hand Pose with Vision — 补充 Vision 对照片和视频中人体、手部姿态的检测能力。
- Explore ARKit 4 — 补充 ARKit 4 的实时场景能力,可衔接本场 Style Transfer + ARKit 演示。
评论
GitHub Issues · utterances