前言
同学们!春节了!春节了!专归于苹果开发者的一年一度的节日它来了!眼瞅着隔壁 GPT 在热火朝天的改变国际,猎奇苹果在 ML 方面都做了啥?所以默默地址开了相关的 session 学习了解一下。
本年 ML 相关 session 的数量,对比起 Vision Pro 那叫一个少的可怜。不过看了一遍 ML 相关的 session 后,感觉从上层开箱即用的 API 到自己练习、布置一个端智能模型,苹果仍是做了不少的优化和改进。总结出几个重点更新:
- 人体姿势辨认现在支撑 3D 姿势辨认了,你口袋中的私教能够更好的纠正你的动作了。除此之外,小猫小狗也支撑姿势辨认了。
- Vision Framework 添加了远景切割的 API 以及能够准确到单个人的人物切割 API。
- 语音辨认能够自定言语模型了,能够让言语模型运用咱们运用范畴的短语和专业术语进行练习,进步语音辨认准确性。
- Create ML 支撑了运用 BERT 嵌入的搬迁学习算法。而且也支撑将 BERT 作为 PyTorch 或 TensorFlow 的输入层进行练习并布置到端上运用。
- Create ML 添加了新的预练习模型来作为图画的特征提取器,新的特征提取器能够进步分类器的准确性、练习速度并削减内存占用。Create ML 还新增了多标签图画分类器模板,练习出的模型能够一起猜测多个标签。
- Create ML 供给了新的数据增强的API,能够用于自定义数据增强流水线。能够协助改进练习数据有限时模型的质量,进步模型的泛化才能。
- Core ML Tools 新增了练习时紧缩的 API,能够在保持模型功能的情况下,更好的平衡精度与紧缩比。
- iOS 17 优化了 Core ML 的底层推理引擎,无需从头编译模型或许修正代码,就能够带来猜测功能的提升。
- Core ML 新增了线程安全的异步猜测 API,支撑并发猜测来进步吞吐量,进步猜测功能。
Vision 相关更新
人体 3D 姿势辨认
简单来说,便是 Vision Framework 新增支撑了人体 3D 姿势辨认,经过运用新的 API(VNDetectHumanBodyPose3DRequest),能够从图画中获取到由 17 个关节点组成的 3D 人体姿势。
而且还能够获取到图画拍摄时,相机相关于人的方位以及人体关节点在2D图画中的投影方位等信息。
详见 WWDC23 session:Explore 3D body pose and person segmentation in Vision
动物姿势辨认
Vision Framework 从 iOS 13 开端就供给了动物辨认的 api(VNRecognizeAnimalsRequest),它能够检测猫和狗,并供给辨认动物的方位、标签信息以及置信度。
而进一步想了解动物的动作、行为等,该 API 就不能满意了。Animal Body Pose 是 Vision 中的一个新 API,经过 DetectAnimalBodyPoseRequest 回来动物身体关节方位的集合。该 API 支撑猫和狗的辨认,并回来包括尾巴、耳朵在内的 25 个动物身体要害点标志。
有了这些要害点后,咱们便能够经过特定算法辨认动物的行为,例如:
也能够在相机运用里,给狗狗戴上帽子和墨镜。或许结合电动手机云台,打造动物追踪运用。
详见 WWDC23 session:
-
Integrate with motorized iPhone stands with DockKit
-
Detect animal poses in Vision
图画方针切割
iOS 相册 app 里长按提取图片远景方针的功能,相信大家都体会过而且印象深刻。VisionKit 以及 Vision framework 使得咱们自己的运用也能够具有这样的才能。
VisionKit 供给了开箱即用的图片远景方针提取才能,只需要很少的代码,即可在咱们自己的运用里完结同系统相册运用相似的体会。可是 VisionKit 对处理图片的分辨率有所限制。
而 Vision framework 作为一个更低等级的结构,供给了愈加灵活和强壮的 API,它能够成为图画编辑管线的一部分,例如运用 CoreImage 的管线。而且,它不像 VisionKit 那样限制图画的最大分辨率。
iOS 17 Vision framework 添加了用于人物切割的 API:VNGeneratePersonInstanceMaskRequest;以及用于远景提取的api:VNGenerateForegroundInstanceMaskRequest。
相较 iOS 15 Vision framework 里供给的人物切割 API(VNGeneratePersonSegmentationRequest),新的 API 能够为场景中的每个人供给独自的遮罩(MASK)。
输入 | VNGeneratePersonSegmentationRequest | VNGeneratePersonInstanceMaskRequest |
---|---|---|
不同于人物提取,远景方针提取的 api 并不专心于提取某一类事物,任何远景方针,都或许被提取。例如下图中,远景提取得到的遮罩,除了人物还包括轿车,他们共同组成了这张图片的远景部分。
正如前文说到,Vision 非常适合同 CoreImage 一同运用,咱们能够用 Vision 提取远景,并运用 CoreImage 的 API 进行背景替换、远景添加光影等操作来生成一张新的图片。
详见 WWDC23 session:Lift subjects from images in your app
自定义语音辨认的言语模型
在 iOS 10,咱们能够经过 Speech Framework 供给的 API 进行语音辨认。语音辨认系统先将音频数据输入声学模型(Acoustic Model),生成音素表明,然后将音素表明转化为文本形式或转录。
因为一个音频数据或许对应多个音素表明,一个音素表明又或许对应多个转录,因而语音辨认系统会运用言语模型,猜测给定单词在一系列单词中呈现的或许性,来消除歧义并进步辨认的准确性。
Speech Framework 封装了整个语音辨认进程,供给开箱即用的 API。但因为它并未独自针对某个范畴进行优化和权重调整,它或许并不能适用于一切范畴的运用。
Session 中举了一个国际象棋的比如,当玩家说出“Play the Albin counter gambit”时,语音辨认器辨认成了“Play the album counter gambit”。
Play the Albin counter gambit 是国际象棋开局的一种着法,其间棋手在将王兵前进两格后,将主教置于第七横线,并将车置于第二横线。这个着法以 19 世纪法国国际象棋大师路易斯查尔斯阿尔宾命名。
这是因为通用的语音辨认模型在练习时,一般会运用很多音乐播映相关的指令,例如“Play the album xxx”,因而言语模型会优先认为这是一条音乐播映的指令。
从 iOS 17 开端,咱们能够自定义 SFSpeechRecognizer 的言语模型了。咱们能够经过新的 API,创立包括特定范畴的短语或许专业术语的练习数据,还能够运用模板生成很多契合规则模式的样本。然后用这些样本练习并布置咱们自定义的言语模型。而且,这个进程能够彻底在用户设备本地完结,降低了隐私合规方面的危险。
经过自定义言语模型,咱们能够让语音辨认针对咱们运用的范畴进行针对性的优化,进步语音辨认准确性。
详见 WWDC23 session:Customize on-device speech recognition
Create ML 以及 Core ML 的更新
Create ML 新增支撑 BERT
从头开端练习一个大型模型或许需要数千小时、数百万的标示文件和相关专业范畴的知识。而经过 Create ML 咱们能够轻松快速的练习自己的机器学习模型。
Create ML 为常见的机器学习使命供给了各种模板,而且能够运用操作系统内置的高度优化后的模型。咱们能够用它完结整个模型的开发工作流,例如模型练习、模型评价等。
关于文本分类来说,咱们能够在 Create ML 中挑选搬迁学习算法,并运用一个已预练习的嵌入模型来作为特征提取器。本年,Create ML 新增了 BERT 嵌入模型,它运用数十亿带标示的文本样本进行了练习,而且支撑多种言语,此外,BERT 还能够进步单言语文本分类器的准确性。
NLP 模型一般具有相似的流程:他们接收文本数据,经过一个输入层将其转化为数值特征表明,然后机器学习模型能够对其进行操作,并产生一些输出。
经过十几年的发展,输入层从静态词嵌入(word embeddings)发展到根据神经网络模型(例如 CNN 和 LSTM)的动态上下文词嵌入,然后到最近的根据 transformer 的上下文词嵌入。
此前,Create ML 现已支撑根据 LSTM 的 ELMo 模型用于练习分类和标示。然而 BERT 诞生后,它在各类 NLP 比赛中张狂屠榜,一时风头无两。
现在,Create ML 也支撑了 BERT,它运用数十亿带标示的文本样本进行了练习,而且支撑多种言语。运用 BERT 充当输入编码层,结合使命方针,添加不同功能的输出层联合练习,就能够完结不同的 NLP 使命。例如文本分类便是添加了分类器,收支语句,输出类别;阅读了解添加了一个全链接层,收支问题和文章,输出答案的方位。BERT 只需要根据使命进行微调即可。
经过 NLContextualEmbedding API,也能够将 BERT 作为 PyTorch 或 TensorFlow 的输入层进行练习,并运用 Core ML 供给的东西将成果转化为 Core ML 模型,然后布置到端上运用。
详见 WWDC23 session:Explore Natural Language multilingual models
新的多标签图画分类器
关于图画分类而言,咱们同样能够运用搬迁学习,并运用已预练习嵌入模型从图画中提取特征。最新版本的特征提取器,能够进步分类器的准确性,缩短练习时间,并削减存储提取特征所需的内存。
单标签图画分类器旨在猜测描绘图画内容的最佳标签。例如,它能够将此图画描绘为狗或户外,可是只能挑选一个。
而多标签图画分类器能够猜测图画的一组方针、特点或标签。例如,下图包括狗、玩具、草地和公园。
Create ML 新增了多标签图画分类器模板,它能够协助咱们快速的完结模型的练习、评价和导出。该模版会运用新的特征提取器来提取特征,然后练习分类器。
新的特征提取器,能够进步分类器的准确性、练习速度和内存运用率。
终究练习出的模型,能够一起猜测多个标签,如下图中的月亮仙人掌、厨房、桶状仙人掌和兔耳仙人掌:
数据增强(Data Augmentation):
为了取得泛化才能较好的模型,练习会集的图画应具有多种特征,如不同的光照条件、方向、背景等。可是要获取并标示这些图画,或许会非常耗时。
数据增强技能是一种经过让有限的数据产生更多的等价数据来人工扩展练习数据集的技能。 它是克服练习数据不足的有效手法,现在在深度学习的各个范畴中运用广泛。
数据增强能够经过变换图画生成新的练习样本,例如能够经过翻转、裁剪、添加对比度,或许组合转化:
本年,数据增强添加了新的 API,咱们能够用它来设计自定义的增强器。例如:结合图画的方针提取,咱们能够设计一个随机切换背景图,切换主体方位、变换的增强器:
这样咱们就得到了一系列不同场景下的练习样本。能够协助改进练习数据有限时模型的质量,进步模型的泛化才能。
详见 WWDC23 session:Discover machine learning enhancements in Create ML
模型紧缩
跟着端智能运用的增多,越来越多的功能由 AI 驱动。单个运用内布置模型的数量在增多,一起每个模型的巨细也在添加,这给空间占用、内存占用、运用功能等都带来了应战。因而,优化模型的巨细并保持在可控范围内是至关重要的。减小模型尺寸的好处有:在相同的内存占用下运行更多、更强壮的模型、进步模型的运算速度。
一般来说,减小模型巨细的办法,一种是设计一个更高效的模型架构,能够用更少、更小的权重完结良好的功能。另一种办法是紧缩现有模型的权重。本 Session 主要讨论后者。
紧缩模型权重有几种办法:
-
权重剪枝后,运用稀疏矩阵表明来更高效的打包权重:
经过剪枝,将权重矩阵中的一些接近 0 的权值设为 0,这样咱们就能够只存储非零值以及零的方位。模型的巨细与引进的稀疏程度成线性关系下降。
-
经过量化削减存储权重的精度:
对权重值进行缩放、偏移和舍入,将他们映射入一个更小的数据范围内,例如下图的 Int8 范围内。
-
经过运用调色板(权重聚类)削减存储权重的精度:
将相近的权重值聚类到一同,并运用它们所属的簇中心值来表明。这些簇中心值存储在查找表中,原始的权重矩阵转化为一个索引表,其间每个元素指向相应的簇中心值。在下图的比如中,能够运用 2 位来表明每个权重,相关于 Float16 完结了 8 倍的紧缩。
以上几种紧缩办法,均为练习后紧缩,且都是有损紧缩,在高紧缩率下,模型一般会呈现猜测准确性下降的问题。
为了克服在高紧缩率下模型功能下降的问题,Core ML Tools 7,新增了练习时紧缩的功能。运用新的 API,在预练习模型中插入一个紧缩层(例如剪枝层),然后运用本来的练习数据和代码对其进行微调(fine-tune)。在对权重进行紧缩时,对模型进行微调。紧缩是逐渐引进的,并以可微分的方法进行,使权重能够从头调整以适应紧缩。
练习后紧缩 | 练习时紧缩 |
---|---|
练习时紧缩能够在保持模型功能的情况下供给更好的紧缩率:
练习后紧缩 | 练习时紧缩 |
---|---|
详见 WWDC23 session:Use Core ML Tools for machine learning model compression
优化猜测功能
iOS 17 优化了 Core ML 的底层推理引擎,无需从头编译模型或许修正代码,就能够带来猜测功能的提升,提升起伏取决于模型和硬件。
关于开发者来说,需要留意的是模型的加载在延迟和内存方面或许价值高昂,因而应遵循:
-
不要在主线程上加载模型,考虑运用异步加载 API。
-
假如有连续多次的猜测,建议复用模型,而不是每次猜测都从头加载。
-
假如暂时不再运用模型,能够卸载它,释放相应的内存。
Core ML 新增了线程安全的异步猜测 API,支撑并发猜测来进步吞吐量,进步猜测功能。但需要留意操控最大并发量,避免内存峰值过高。
详见 WWDC23 session:lmprove Core ML integration with async prediction
总结
又是 GPT 又是 MR 的,感觉脑子有点不够用学不过来了,加油加油。作为一个 ML 萌新,有了解错误的地方,还请大佬们不吝指正,多谢!