2020年,移动平台上的机器学习不再是一项革命性的创新。将智能功能集成到应用程序中已成为标准做法。
幸运的是,这并不意味着苹果已停止开发创新技术。
在本文中,我将简要分享有关Core ML平台以及Apple生态系统中其他人工智能和机器学习技术的新闻。
核心ML
去年,Core ML平台进行了重大更新。今年,一切都变得更加温和了:添加了几种新类型的层,对加密模型的支持以及将模型更新发布到CloudKit的能力。
似乎已决定删除版本号。在去年的更新之后,该平台被称为Core ML 3,但现在它使用名称Core ML而没有版本号。但是,coremltools软件包已更新至版本4。
注意。mlmodel的内部规范现在是版本5,这意味着新模型将在Netron中出现,名称为“ Core ML v5”。
Core ML中的新图层类型
添加了以下层:
Convolution3DLayer, Pooling3DLayer, GlobalPooling3DLayer
: — Vision ( Core ML - , ).OneHotLayer
: .ClampedReLULayer
: ReLU ( ReLU6).- ArgSortLayer: . . , GatherLayer, argsort.
CumSumLayer
: .SliceBySizeLayer
注意:Core ML中已经提供了几种类型的拆分层。该层允许您传递一个张量,该张量包含将从其开始分区的索引。同时,扇区大小始终保持固定。
这些类型的图层可从版本5开始使用,即在iOS 14和macOS 11.0或更高版本中。
另一个有用的增强功能:以下层的8位量化操作:
InnerProductLayer
BatchedMatMulLayer
在Core ML的早期版本中,权重被量化,但是在加载模型后,权重被转换回浮点格式。这项新功能
int8DynamicQuantize
允许将权重存储为8位整数值,并且还可以使用整数执行实际计算。
使用INT8进行的计算可能比浮点运算快得多。这为CPU提供了一些优势,但是不确定GPU的性能是否会提高,因为浮点运算对其非常有效。也许,在将来的神经引擎更新中,将实现对INT8操作的内置支持(毕竟,苹果最近收购了Xnor.ai ...)。
在CPU方面,Core ML现在也可以在它们上使用16位浮点而不是32位(在A11 Bionic及更高版本上)。正如我们在“探索Swift中的数值计算”视频中所讨论的那样,Float16现在是Swift的一流数据类型。凭借对16位浮点运算的原生支持,Core ML可使速度提高一倍!
注意。在Core ML中,Float16数据类型已经在GPU和神经引擎上使用,因此,只有在CPU上使用时,这些差异才会明显。
其他(次要)更改:
UpsampleLayer
. BILINEAR ( align-corners). , , .-
ReorganizeDataLayerParams
PIXEL_SHUFFLE. , . , . -
SliceStaticLayer
SliceDynamicLayer
squeezeMasks, . -
TileLayer
, .
设备上的本地学习似乎没有任何变化:仍然仅支持完全连接和卷积层。
MLParameterKey
现在,CoreML.framework中的类包含RMSprop优化器的配置参数,但该增强功能尚未包含在NeuralNetwork.proto中。也许它将在下一个Beta中添加。
添加了以下新类型的模型:
VisionFeaturePrint.Object
-为对象识别优化的特征提取单元。
SerializedModel
...我不知道这到底是干什么的。这是“私人”定义,“如有更改,恕不另行通知或承担责任”。也许这就是Apple将专有模型格式嵌入到mlmodel中的方式?
将模型更新发布到CloudKit
这个新的Core ML组件使您可以与应用程序分开更新模型。
您不必更新整个应用程序,而只需使用mlmodel的新版本加载已部署的实例。老实说,这个想法并不新鲜,并且一些第三方供应商已经开发了相应的SDK。此外,自己创建这样的包并不难。在这种情况下,Apple解决方案的优势在于能够在Apple Cloud中托管模型。
由于应用程序可以具有多个模型,因此模型集合的新概念使您可以将模型合并到一个程序包中,以便应用程序可以同时更新所有模型。可以使用CloudKit仪表板创建此类集合。
该应用程序使用该类来下载和管理模型更新
MLModelCollection
。在WWDC视频显示的代码片段来完成这个任务。
为了准备要部署的Core ML模型,现在可以在Xcode中使用“创建模型存档”按钮。单击该文件将写入.mlarchive文件。该版本的模型可以提交到CloudKit仪表板,然后添加到模型集合(mlarchive看起来像是常规的ZIP存档,其中添加了mlmodelc文件夹的内容)。
您可以将不同的模型集合部署到不同的用户,这非常方便。例如,iPhone相机不同于iPad相机,因此您可能需要创建该模型的两个版本,然后将一个版本发送给iPhone用户,并将一个版本发送给iPad用户。
您可以为不同类别的设备(iPhone,iPad,TV,Watch),不同的操作系统及其版本,区域代码,语言代码和应用程序版本定义自定义规则。
似乎没有机制可以根据其他条件将用户分为几类,例如,对模型更新进行A / B测试或针对特定类型的设备(iPhone X或更早版本)进行调整。但是,仍然可以通过创建具有不同名称的集合,然后显式地从
MLModelCollection
在运行时通过指定名称提供适当的集合。
部署模型的新版本并不总是很快。在某个时候,应用程序会检测到新的可用模型,然后自动下载并将其放置在应用程序的测试环境中。但是,您无法确定这种情况的发生地点和发生方式:例如,当您不使用手机时,Core ML可以在后台下载。
因此,建议在所有情况下都将内置模型添加到应用程序中作为后备,例如,同时支持iPhone和iPad的通用模型。
尽管此便捷的解决方案使用户不必担心自托管模型,但请记住,您的应用程序现在正在使用CloudKit。据我了解,模型集合计入总存储配额,模型负载计入网络流量配额。
也可以看看:
- 部署模型和保护核心ML(WWDC视频)
- 创建和部署模型集合
- 检索扩展的模型集合
注意。不幸的是,使用CloudKit的新更新功能很难与本地模型个性化结合使用。没有简单的方法可以将个性化模型获得的知识转移到新模型或以某种方式将它们组合在一起。
加密模型
到目前为止,任何攻击者都可以轻松窃取您的Core ML模型并将其集成到自己的应用程序中。从iOS 14 / macOS 11.0开始,Core ML支持模型的自动加密和解密,从而限制了攻击者对mlmodelc文件夹的访问。加密可以通过CloudKit与新部署结合使用,也可以单独使用。
Xcode加密已编译的模型(mlmodelc),而不是原始的mlmodel。模型始终在用户设备上加密。而且只有在应用程序创建模型的实例时,Core ML才会自动对其解密。该模型的解密版本仅存在于内存中,不会存储为文件。
首先,您现在需要一个加密密钥。好消息是您不必自己管理此密钥!现在,Core ML Xcode模型查看器中提供了“创建加密密钥”按钮。(创建加密密钥)。当您单击此按钮时,Xcode会生成一个新的加密密钥,并将其与您的Apple开发团队帐户关联。您不必处理证书签名请求和物理访问密钥。
此过程将创建一个新的.mlmodelkey文件。密钥存储在Apple服务器上,但是您还可以获取本地副本以使用Xcode加密模型。您不需要将此加密密钥嵌入到应用程序中,特别是因为您不需要这样做!
要加密Core ML模型,您可以
--encrypt YourModel.mlmodelkey
为该模型添加编译器标志。并且,如果您计划使用CloudKit部署模型,则在创建模型档案时将需要指定加密密钥。
要在应用程序实例化模型后解密该模型,Core ML将需要通过网络从Apple的服务器中检索加密密钥。当然,这需要网络连接。 Core ML仅在您第一次使用模型时执行此过程。
如果没有网络连接,并且尚未加载加密密钥,则应用程序将无法实例化Core ML模型。因此,建议使用新功能
YourModel.load()
。它包含一个最终处理程序,使您可以响应下载错误。例如,错误代码modelKeyFetch
表明Core ML无法从Apple服务器下载加密密钥。
如果您担心有人会窃取您的专利技术,则此功能非常有用。另外,它很容易集成到您的应用程序中。
也可以看看:
- 部署模型和保护核心ML(WWDC视频)
- 生成模型加密密钥
- 在应用程序中加密模型
注意。根据此开发者论坛帖子中提供的信息,加密模型不支持本地个性化。听起来很合理。
CoreML.framework
用于Core ML模型的iOS API并没有太大变化。但是,我想指出几个有趣的观点。
这里唯一的新类
MLModelCollection
是旨在与CloudKit一起部署的类。
如您所知,当将mlmodel文件添加到项目中时,Xcode会自动生成一个Swift或Objective-C源文件,该文件包含用于简化模型处理的类。您会注意到这些生成的类中的一些更改:
-
init()
. ,let model = YourModel()
.YourModel(configuration:)
YourModel.load()
, (, ). - ,
CVPixelBuffer
YourModelInput
,CGImage
URL-, PNG- JPG-, . ,cropAndScale
cropRect
. , , .
MLModel文档中 有一个新警告:
仅在一个线程或一个发送队列中使用MLModel实例。为此,您可以序列化对模型的方法调用,或者为每个线程和调度队列创建模型的单独实例。
哦,对不起。在我看来,在MLModel内部使用了一个顺序队列来处理请求,但是我可能错了-或有所改变。无论如何,最好将来再坚持此建议。
已
MLMultiArray
实现的新初始化程序init(concatenating:axis:dataType:)
,它通过组合几个现有的多数组来创建一个新的多数组。它们必须具有相同的形状,但执行结合所沿的指定轴除外。似乎已添加了此功能,专门用于根据视频数据进行预测,就像Create ML中的新动作分类器模型一样。方便!
注意。枚举
MLMultiArrayDataType
现在包含静态属性.float
和.float64
。我不确切知道它们的用途,因为此枚举已经具有属性.float32
和.double
。Beta错误?
Xcode模型查看器
Xcode现在显示有关模型的更多信息,例如类标签和任何添加的自定义元数据。它还显示有关模型中图层类型的统计信息。
这是一个方便的实时查看器,使您无需运行应用程序即可在测试模式下更改模型。您可以将图像,视频或文本拖动到此预览窗口中,并立即查看模型预测。大更新!
此外,您现在可以在交互式环境中使用Core ML模型。Xcode为此自动生成一个类,您可以正常使用它。这是在将模型添加到应用程序之前进行交互式测试的另一种方法。
coremltools 4
虽然使用Create ML为简单项目创建自己的模型很方便,但TensorFlow和PyTorch更常用于培训。要在Core ML中使用这种模型,必须首先将其转换为mlmodel格式。这就是coremltools工具箱的用途。
好消息:文档要好得多。我建议您熟悉它。希望可以定期更新用户手册,因为该文档并非总是最新的。
注意。不幸的是,示例Jupyter笔记本电脑不见了。它们现在包含在用户手册中,但不作为笔记本计算机包含。转换模型
的方式发生了巨大变化... 以前使用的神经网络转换器已过时,已被更新和更灵活的版本所取代。
今天有三种类型的转换器可用:
- 适用于TensorFlow(1.x和2.x),tf.keras和PyTorch的现代转换器。所有这些转换器都基于相同的技术,并使用所谓的中间模型语言(MIL)。对于此类模型,您不再需要使用tfcoreml或onnx-coreml。
- 适用于Keras 1.x,Caffe和ONNX神经网络的旧转换器。为他们每个人都提供了一个专门的转换器。他们的进一步开发已中止,仅计划在将来进行修复。不再建议使用ONNX转换PyTorch模型。
- 用于非神经网络模型(例如scikit-learn和XGBoost)的转换器。
新的统一转换API用于转换TensorFlow 1.x,2.x,PyTorch或tf.keras模型。它的应用如下:
import coremltools as ct
class_labels = [ "cat", "dog" ]
image_input = ct.ImageType(shape=(1, 224, 224, 3),
bias=[-1, -1, -1],
scale=2/255.)
model = ct.convert(
keras_model,
inputs=[ image_input ],
classifier_config=ct.ClassifierConfig(class_labels)
)
model.save("YourModel.mlmodel")
该功能
ct.convert()
检查模型文件以确定其格式,然后自动选择适当的转换器。参数与之前使用的参数略有不同:预处理参数使用对象传递ImageType
,分类器标签使用对象传递,ClassifierConfig
依此类推。
新的转换API将模型转换为中间表示形式-所谓的。MIL。当前有可用的转换器将TensorFlow 1.x转换为MIL,TensorFlow 2.x转换为MIL(包括tf.keras)和将PyTorch转换为MIL。如果新的深度学习平台获得普及,它将获得自己的MIL转换器。
将模型转换为MIL格式后,可以根据一般规则进行优化,例如,删除不必要的操作或合并几个不同的层。然后将模型从MIL转换为mlmodel格式。
我还没有详细研究所有这些内容,但是这种新方法给了Coremtools 4希望能够创建比以前更有效的mlmodel文件的希望-尤其是对于TF 2.x图形。
在MIL中,我特别喜欢转换器能够处理尚未分析的层的功能。如果您的模型包含Core ML不直接支持的图层,则可能需要将其细分为更简单的MIL运算,例如矩阵乘法或其他算术运算。
在那之后,转换器将能够对这种类型的所有层使用所谓的“复合运算”。尽管有可能,这比使用自定义图层添加不受支持的操作要容易得多。该文档提供了使用此类复合操作的一个很好的示例。
也可以看看:
其他使用机器学习的Apple平台
iOS和macOS SDK中的其他几个高级框架也用于机器学习任务。让我们看看这方面的新功能。
视力
视觉计算机视觉平台已获得许多新功能。
视觉平台已经使用模型来识别人脸,独特特征和人体。新版本增加了以下功能:
手位置识别(
VNDetectHumanHandPoseRequest
)多人姿势
识别() Apple在OS中包含了姿势识别功能,真是太好了。有几种开放源代码模型支持此功能,但它们的效率或速度远不及后者。商业解决方案很昂贵。现在免费提供高质量的姿势识别工具! 现在,与查看静态图像相比,更多的关注是
VNDetectHumanBodyPoseRequest
离线和实时视频录制中的对象识别。为了方便起见,您可以使用
CMSampleBuffer
请求处理程序直接从摄像机使用对象。
而且,
VNImageBasedRequest
已将一个子类添加到该类中VNStatefulRequest
,该子类负责迅速确认所需对象的发现。与标准类不同,VNImageBasedRequest
它重用了跨越多个框架的有状态查询。该请求每N个视频帧执行一次分析。
找到搜索对象后,将调用包含该对象的最终处理程序,该处理程序
VNObservation
现在具有timeRange
指示视频中观察开始和结束时间的属性。
该类
VNStatefulRequest
不直接使用。它是一个抽象的基类,当前仅VNDetectTrajectoriesRequest
出于路径识别目的而通过查询进行子类化。这样可以识别沿抛物线运动的形状,例如在投掷或踢球时(这似乎是目前唯一与视频相关的内置任务)。
对于离线视频分析,您可以使用
VNVideoProcessor.
此对象将URL添加到本地视频,并每N帧或N秒发出一个或多个Vision请求。
用于分析视频记录的最重要的传统计算机视觉技术之一是光流... Vision
VNGenerateOpticalFlowRequest
中现在提供了一个查询,该查询可计算每个像素从一帧移动到另一帧的方向(密集光流)。结果,创建VNPixelBufferObservation
了一个包含新图像的对象,其中每个像素对应于两个32位或16位浮点值。
另外,添加了新的查询
VNDetectContoursRequest
以识别图像中对象的轮廓。此类路径将作为矢量路径返回。VNGeometryUtils
提供用于后续处理已识别轮廓的辅助工具,例如,将其简化为基本几何形状。
Vision的最后一项创新是内置功能提取器VisionFeaturePrint的新版本。 iOS已经实现了区块VisionFeaturePrint.Scene,对于创建图像分类器特别方便。此外,现已提供新的VisionFeaturePrint.Object模型,该模型已针对突出显示对象识别中使用的功能进行了优化。
该模型支持299x299输入图像,并分别返回形状为(288、35、35)和(768、17、17)的两个多数组。这不是一个明确的限制框架,而仅仅是“原始”功能。对于成熟的对象识别,您需要添加将这些功能转换为边界框和类标签的逻辑。如果您正在使用训练传递训练对象识别工具,则Create ML将执行此任务。
也可以看看:
- 探索计算机视觉API(WWDC视频)
- 通过视觉检测身体和手部姿势(WWDC视频)
- 探索行动与愿景应用程序(WWDC视频)
自然语言处理
对于自然语言处理任务,您可以使用自然语言平台。她积极使用在“创建ML”中训练的模型。
今年很少添加新功能:
NLTagger
而NLModel
现在发现多个标签,并预测其有效性。以前,标签的有效性仅由评分的分数确定。- 插入句子。词插入本来可以使用,但现在
NLEmbedding
支持整个句子。
在插入句子时,使用内置的神经网络将整个句子编码为512维向量。这使您可以获取句子中使用单词的上下文(单词插入不支持此功能)。
也可以看看:
- 使用自然语言使应用程序更智能(WWDC视频)
语音和声音分析
在这方面没有变化。
模型训练
使用Apple API的火车模型首先在iOS 11.3和Metal Performance Shaders平台上可用。在过去的几年中,增加了许多新的用于训练的API,而今年也不例外:根据我的计算,我们现在有多达7种不同的API在iOS和macOS平台上训练神经网络!
当前,以下Apple API可用于在iOS和macOS上训练机器学习模型-尤其是神经网络:
- Core ML中的本地学习。
- 创建ML:您可能将此接口称为应用程序,但它也是macOS上可用的平台。
- Metal Performance Shaders:用于在GPU上进行推理和训练的API。实际上,这是两个不同的API,如果您不熟悉Metal,则很难使用。此外,还提供了一个新的Metal Performance Shaders Graph框架,该框架似乎可以替代这些旧版API。
- BNNS:加速平台的一部分。以前,BNNS中仅提供推理例程,但今年还增加了培训支持。
- ML Compute:看起来非常有前途的全新平台。
- Turi Create:这实际上是Create ML的Python版本。最近,它的创建者已经忘记了它,尽管对该平台的支持尚未终止。
让我们仔细看看这些API的创新。
Core ML中的本地学习
实际上,这里没有重大变化。可以为其他几种图层类型添加更新支持,但是我还没有看到任何有关此类型的文档。
RMSprop优化器是未来Beta中预期的重要创新之一。当前的Beta版本中不包括该功能。
创建ML
Create ML平台最初仅适用于macOS。它可以在Swift Playground中运行,因此仅需几行代码即可用于训练模型。
去年,Create ML被转换为一个相当有限的应用程序,我很高兴看到今年的重大改进。话虽如此,Create ML仍然是一个平台,仍然可以从背后的代码中使用它。实际上,该应用程序只是用于平台的便捷图形界面。
在先前版本的Create ML中,您可以只训练一次模型。要更改某些内容,您必须从头开始对其进行重新培训,这花费了很多时间。
新版本的Xcode 12允许暂停训练并稍后恢复,保存模型检查点(快照),并查看初步的模型训练结果。现在,我们有了更多的工具来管理学习过程。在此更新中,创建ML非常有用!
CreateML.framework平台上还提供了新的API,用于设置培训课程,处理模型断点等;我想大多数人只会使用Create ML应用程序,但是很高兴看到该功能现在可以在平台上使用。
新的Create ML功能(在平台和应用程序中):
- 传送图片和视频的样式
- 视频中人为行为的分类
让我们仔细看看新的动作分类模型。它使用Vision平台上可用的姿势识别模型。动作分类器是一个神经网络,采用(
window_size, 3, 18
)形式输入,第一个值表示视频片段的持续时间,以帧数表示(通常使用约2秒的片段),而(3,18)表示姿势的关键点。
代替重复图层,神经网络使用一维卷积。这很可能是时空图卷积网络(STGCN)的一种变体-一种专门为时间序列预测设计的模型。在应用程序中使用此类模型时,这些详细信息不必担心。但是,我一直想知道这是如何工作的。
至于对象识别模型,您可以选择基于TinyYOLOv2训练整个网络,或者使用新的训练传递模式,该模式使用新的VisionFeaturePrint.Object特征提取单元。该模型的其余部分仍然类似于YOLO和SSD,但是由于有了端口,其训练将比训练整个基于YOLO的模型快得多。
也可以看看:
- 使用“创建ML”构建动作分类器(WWDC视频)
- 在“创建ML”(WWDC视频)中构建图像和视频样式转换模型
- Control training in Create ML with Swift ( Create ML Swift) ( WWDC)
Metal Performance Shaders
Metal Performance Shaders(MPS)是一个基于Metal的性能计算核心的平台,该平台主要用于图像处理,但自2016年以来也提供了对神经网络的支持。我已经在博客上写了很多。
今天,大多数用户将选择MP上的Core ML。当然,在GPU上运行模型时,Core ML仍然使用MPS的功能。但是,MPS也可以直接使用,特别是如果用户计划自己进行培训(顺便说一句,现在可以使用新的平台ML Compute,建议使用它代替MPS。下面将对其进行描述)。
今年MPSCNN的新功能很少,但是对现有功能进行了一些改进。
增加了新的课程
MPSImageCanny
用于边缘识别,使用MPSImageEDLines用于线段识别。当处理计算机视觉问题时,它们非常有用。
其他一些变化也值得注意:
MPSCNNConvolutionDataSource
添加kernelWeightsDataType
了一个新属性,该属性使您可以为加权系数使用与卷积不同的数据类型。有趣的是,权重不能为INT8数据类型,即使Core ML允许将此数据类型用于各个层。- 如果
kernelWeightsDataType
返回.float32
,则使用32位浮点而不是16位执行卷积层和完全连接层。以前,仅支持16位。 - 损失函数现在可以使用参数
reduceAcrossBatch
。
如果Metal不会吓到您,您仍然可以使用MPSCNN。但是,现在有一个可以大大简化此类图的创建和执行的新平台:MPS Graph。
注意。在WWDC视频指出MPSNDArray是一个新的API,但实际上它出来的最后一年。它的数据结构比MPSImage灵活得多,因为并非模型中的所有张量都可以是图像。
新增:金属性能着色器图
API早已在MPS中可用
MPSNNGraph
,但实际上,此类图仅描述神经网络。但是,并非所有图形都必须是神经网络,在这种情况下,Metal Performance Shaders Graph平台将很有用。
该新平台可用于创建通用GPU计算图。尽管MPS Graph平台是基于此平台构建的,但它并不依赖于Metal Performance Shaders。
在过时的API的早期版本中
MPSNNGraph
,无法向该图添加自定义操作。在这方面,新平台更加灵活。但是,您不能添加自己的金属芯。您将需要使用现有原语表达所有计算。
幸运的是编译器
MPSGraph
支持将此类原语集成到单个计算核心中,从而确保在GPU上进行最高效的操作。但是,如果不可能或很难将提供的原语用于某些操作,则此方案将无法工作。我只是不明白,为什么苹果公司在创建这样的新API时永远不允许完整的自定义功能!但是什么也做不了。
新平台
MPSGraph
是一个相当简单和逻辑的结构,它MPSGraphOperations
使用张量描述集合中的运算之间的关系MPSGraphTensors
包含运算结果。此外,您可以定义控件依赖关系,以强制各个节点先于其他节点启动。配置完图形后,必须执行图形或将其传送到命令缓冲区,然后等待结果。
MPSGraph
提供了一整套实例方法,使您可以将任何数学或神经网络操作添加到图中。
另外,还支持训练,这涉及到将损失处理操作添加到图形,然后以相反的顺序对所有图层执行梯度操作-就像传统的那样
MPSNNGraph
。为方便起见,还提供了自动微分模式,在该模式下,该模式将MPSGraph
自动执行图形的梯度运算。这样可以节省很多精力。
我喜欢现在有一个新的,简单明了的API用于创建此类计算图。它比以前的版本更容易使用。而且您无需成为金属专家即可使用它。顺便说一句,它在许多方面都类似于TensorFlow 1.x图,但同时在优化方面具有很大的优势,可以使成本最小化。但是,没有足够的机会向该图添加任意计算核心。
也可以看看:
BNNS(基本神经网络子例程)
如果Core ML在CPU上运行,则它使用属于Accelerate平台的BNSS例程。我已经在本文中写过有关BNNS的文章。这些BNNS功能中的大多数现在大部分已停产,并被新的功能集取代。
以前,仅支持完全连接的图层,折叠,分组和激活功能。此更新为BNNS增加了对n维数组,几乎所有类型的Core ML层以及此类训练层(包括当前不支持Core ML训练的层,例如LSTM)的向后兼容版本的支持。
还值得注意的是存在一层多重关注。... 这些层通常在BERT等Transformer模型中使用。另一个有趣的观点是张量卷积。
您可能不会自己使用这些BNNS功能-就像您不会使用MPS在GPU上进行训练一样。相反,现在可以使用更高级别的ML Compute平台来抽象化所使用的处理器。ML Compute基于BNNS和MPS,但是开发人员不必担心这么小的事情。
另请参阅:BNNS平台文档
新增:ML计算
ML Compute是一个全新的平台,可用于在CPU或GPU上训练神经网络(但显然不是在神经引擎处理器上)。在具有多个GPU的Mac Pro上,该平台可以自动使用它们进行训练。
我对另一个学习平台的出现感到有些惊讶,但是这个平台确实简化了所有事情,因为它允许您从BNNS和MPS以及将来的神经引擎中隐藏低级组件。
最好的是,iOS系统(不仅限于Mac)还支持ML Compute。有趣的是,Core ML在任何地方都没有提到。 ML Compute似乎是完全独立创建的。该框架不能用于创建Core ML模型。
根据我自己的经验,我可以说ML Compute的任务首先是加快第三方深度学习工具的工作。您无需编写任何代码即可直接与ML Compute一起使用。看起来(或开发者希望如此)像TensorFlow之类的工具将开始使用此平台在Mac上启用硬件加速的学习支持。
与BNNS中可用的图层大致相同。必须将图层添加到图形,然后执行(此处不使用“繁忙等待”模式)。
要创建图,必须首先实例化一个对象
MLCGraph
并向其添加节点。节点是子类MLCLayer
。节点通过对象彼此连接MLCTensor
包含其他图层的输出。
有趣的是,分割,连接,重新格式化和传输的操作不是单独的图层类型,而是直接在图形上进行的操作。
出色的调试功能-
summarizedDOTDescription
。它返回图形的DOT描述,然后您可以使用Graphviz或OmniGraffle从中创建图形(顺便说一下,Keras以此方式生成模型图)。
ML Compute区分推理图和学习图。后者包含其他节点,例如损耗层和优化器。
看起来这里没有办法创建自定义图层,因此您只需要了解ML Compute中可用的类型即可。
奇怪的是,在这个新平台上没有WWDC会议,而且文档也很分散。无论如何,我将继续关注它的开发,因为它似乎正是最适合在Apple设备上训练模型的API。
另请参阅:ML Compute Platform文档
结论
所述核心ML添加了许多有用的新功能,例如模型和加密自动更新。确实并不需要新的图层类型,因为去年添加的图层几乎可以解决任何问题。总的来说,我喜欢这个更新。
在coremltools 4中增加了重要的改进-新的转换器体系结构和内置支持TensorFlow 2和PyTorch。很高兴我们不再需要使用ONNX来转换PyTorch模型。
在视觉添加了许多方便的新功能。我喜欢苹果公司增加了视频分析功能。尽管机器学习系统可以应用于视频的各个帧,但在这种情况下,时间不计算在内。由于当今的移动设备足够快,可以基于视频数据实时执行机器学习,因此我相信视频将在不久的将来在计算机视觉技术的发展中发挥更重要的作用。
关于培训...不确定我们是否需要七个不同的API来完成此任务。我猜苹果只是不想淘汰过时的界面,直到新界面完全完善为止。关于ML Compute平台知之甚少。但是,在撰写本文时,仅发布了第一个beta版本。谁知道未来会发生什么...
演讲图片使用来自flaticon.com的Freepik图标。