Bender
Bender 是一个在 MetalPerformanceShaders 上的抽象层,非常适合处理神经网络。
内容
文档位于 Documentation
文件夹下
- API 包含了开始所需的最重要的信息。
- 支持层 解释了哪些层被支持以及它们如何映射到 TensorFlow 操作。
- 导入 解释了如何从 TensorFlow 等其他框架导入模型。您还可以找到有关如何为自定义实现增强此功能的信息。
简介
在 MetalPerformanceShaders 之上,Bender 是一个抽象层,用于与神经网络交互。在人工智能环境中,即使在训练过程之前,在移动设备上执行神经网络也越来越受到关注。我们希望能使每个人在 iOS 上执行预训练的网络变得更简单。
Bender 允许您使用最常用的层(如卷积、池化、全连接和一些标准化等)轻松定义和运行神经网络。它在接收这些层的参数方面也非常灵活。
我们还想支持加载使用 TensorFlow 或 Caffe2 等其他框架训练的模型。目前,Bender 包含一个 TensorFlow 适配器,它可以加载带有变量的图并将其“翻译”为 Bender 层。这个功能支持 TensorFlow 的一部分操作,但我们计划进一步扩展以覆盖更多情况。
为什么我们需要 Bender?
在 Xmartlabs,我们正要开始一个机器学习项目,并调查了在 iOS 中可用的框架。我们发现 MetalPerformanceShaders 很有用,但不是特别易于使用,并且我们发现自己重复写了很多代码和信息。这就是我们开始构建一个处理这些类型内容的框架的原因。
我们还发现自己需要创建脚本来将我们使用 TensorFlow 训练的模型从训练状态转换为 iOS 可用状态。这意味着将权重转换到 MPSCNN 格式,并将 TensorFlow 中不同类型层的参数映射到 MPSCNN 内核使用的参数。虽然 TensorFlow 可以编译成 iOS 版本,但目前它不支持在 GPU 上运行,这是我们想要做的。我们也不想将 TensorFlow 的静态库包含到我们的项目中。这就是我们开始着手开发一个适配器,用于解析 TF 图并将其转换到我们的 Bender 层的原因。
使用方式
您可以使用我们的自定义操作在 Bender 中定义自己的网络,或者加载来自 TensorFlow 的导出模型。定义网络和加载模型可以这样操作
import MetalBender
let url = Bundle.main.url(forResource: "myModel", withExtension: "pb")! // A TensorFlow model.
let network = Network.load(url: url, inputSize: LayerSize(h: 256, w: 256, f: 3))
network.run(input: /* ... */) { output in
// ...
}
有关更多信息,请参阅导入。
如果您要自己定义网络,可以这样操作
let network = Network(inputSize: LayerSize(h: 256, w: 256, f: 3))
network.start
->> Convolution(convSize: ConvSize(outputChannels: 16, kernelSize: 3, stride: 2))
->> InstanceNorm()
->> Convolution(convSize: ConvSize(outputChannels: 32, kernelSize: 3, stride: 2), neuronType: .relu)
->> InstanceNorm()
->> FullyConnected(neurons: 128)
->> Neuron(type: .tanh)
->> FullyConnected(neurons: 10)
->> Softmax()
// ...
完成所有层后
network.initialize()
有关更多信息,请参阅API。
要求
- Xcode 9
- iOS 11.0+(但部署目标为 iOS 10.0,因此支持 iOS 10)
参与进来
在贡献之前,请查看更多信息的CONTRIBUTING文件。
如果您在您的应用中使用了Bender,我们很乐意听到关于它的消息!在Twitter上联系我们。
示例
按照以下步骤运行示例
- 克隆Bender仓库(或下载它)。
- 在下载的文件夹中运行
carthage update --platform iOS
。 - 打开Bender工作空间并运行Example项目。
在Bender中有一个包含MobileNet模型和在CoreML中的模型的图像识别示例。它还设置为运行Inception模型,但您需要单独下载它,因为其大小约为100 MB。您可以从http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz下载,然后将它冻结并添加到“Example”Xcode项目中作为'inception_v3.pb'。
安装
CocoaPods
要安装Bender,只需将以下行添加到您的Podfile中
pod 'MetalBender', '~> 0.5'
记住,Bender为iOS 10编译。您必须在Podfile中添加
platform :ios, '10.0'
。
Carthage
Carthage 是一个简单的、去中心化的 Cocoa 依赖管理系统。
要安装 Bender,请在 Cartfile 中添加以下行
github "xmartlabs/Bender" ~> 0.5
然后运行
carthage update --platform iOS
最后,将构建的 .framework
二进制文件 MetalBender
、MetalPerformanceShadersProxy
和 SwiftProtobuf
拖到您的应用程序的 Xcode 项目中。
作者
变更日志
可以在 CHANGELOG.md 文件中找到。