- APP神圣官网 > 计划生活 > 正文
应用程序机器学习iOS(模型应用程序图像机器学习)「应用程序模型有哪几种?」
CoreML:有经验学习什么是机器学习?机器学习是人工智能的一个分支,我们通过向机器学习算法提供充足、准确和相关的数据来创建和训练模型。模型创建过程然后,我们使用测试数据集评估创建的模型,并检查预测和准确性水平。我们不断重复这个过程,直到我们以可接受的准确性获得正确的预测。想出最终的成功模型需要大量的时间和精力。苹果通过在Apple Developer网站上提供许多成功训练的模型和框架(CoreML)来使用它们,为我们节省了上述工作量。什么是CoreML?CoreML是苹果提供的机器学习框架,用于将机器学习模型集成到iOS应用程序中。它是苹果提供的所有特定领域ML框架和功能的基础框架。分析图像的愿景。用于处理文本的自然语言用于将音频转换为文本的语音。声音分析用于识别音频中的声音。CoreML是如何工作的?CoreML使用特定的模型格式(.mlmodel)在苹果设备上运行机器学习模型。因此,为了与CoreML合作,机器学习模型必须与CoreML兼容。TensorFlow、Caffe、ONNX等第三方模型必须使用coremltools转换为.mlmodel,以使其与CoreML兼容。如何将第三方模型转换为CoreML模型(.mlmodel)步骤#1在这里安装苹果提供的CoreML python工具。# https://apple.github.io/coremltools/docs-guides/source/installing-coremltools.htmlpip安装coremltools
步骤#2下载并转换第三方模型。请参考评论中提供的链接,以防出现任何错误。#示例#1# ----将TensorFlow“模型”转换为CoreML模型# https://apple.github.io/coremltools/docs-guides/source/convert-tensorflow.html将coremltools导入为ctcoreml_model = ct.convert(tensor_flow_model)coreml_model.save(“core_ml_model.mlmodel”)
#示例#2# ---将Caffe“模型”转换为CoreML模型# https://www.wwt.com/article/convert-a-caffe-model-to-core-ml-format将coremltools导入为ct# 您可能需要.prototxt和class_labels.py,具体取决于模型#你正在转换的。coreml_model = ct.converters.caffe.convert('<path_to_.caffemodel>', '<path_to_.prototxt>')coreml_model.save(“core_ml_model.mlmodel”)
现在,让我们看看CoreML在行动让我们创建一个简单的应用程序来演示CoreML的工作。我们将尝试使用苹果提供的MobileNetV2(图像分类)模型来检测图像中的对象。图像分类应用程序步骤1:创建一个新的iOS项目,并将其命名为WhatsThat。步骤2:从这里下载MobileNetV2,并将其拖动到您的iOS项目中。将模型拖到Xcode项目后不久,它会自动生成一个包装类来使用该模型。转到您的Xcode项目,然后选择刚刚拖动的模型以查看包装类的详细信息。在大多数情况下,我们使用这个包装类来获取观察结果。然而,在某些情况下,当需要访问底层MLModel接口时,只需使用包装类的模型属性。步骤#3:每个模型都有预定义的输入和输出来使用它。例如,MobileNetV2有以下输入和输出MobileNetV2输入和输出我们可以自己直接使用MobileNetV2包装器类并处理输入/输出格式(例如将图像大小调整为224 x 224或将UIImage转换为CVPixelBuffer等),或者只是使用Vision框架,该框架将图像分类模型作为输入,并向我们提供观察(VNClassificationObservation)。在这个例子中,我使用Vision框架在屏幕上显示前两个观察结果。让我强调一下与Vision框架合作的4个主要步骤,该框架与CoreML内部交互以进行观察。在处理任何其他图像分类框架时也使用了相同的步骤。以下代码也可以在苹果提供的示例代码中找到。我只是把它复制粘贴到我的示例项目中,并根据我的需要进行了小更改。步骤#1:通过提供模型包装类MobileNetV2的实例来初始化Vision核心模型VNCoreMLModel。私有静态让imageClassifier = createImageClassifier()/// - 标签:名称静态 func createImageClassifier() -> VNCoreMLModel { // 使用默认模型配置。 让默认配置 = MLModelConfiguration() // 创建图像分类器包装器类的实例。 让imageClassifierWrapper = 尝试?MobileNetV2(配置:默认配置) guard let imageClassifier = imageClassifierWrapper else { fatalError(“应用程序无法创建图像分类器模型实例。”)} // 获取底层模型实例。 让 imageClassifierModel = imageClassifier.model // 使用图像分类器的模型实例创建Vision实例。 guard let imageClassifierVisionModel = 尝试?VNCoreMLModel(用于:imageClassifierModel)其他{ fatalError(“应用程序未能创建`VNCoreMLModel`实例。”)} 返回imageClassifierVisionModel}
步骤#2:使用步骤1中创建的Vision Core模型创建Vision图像请求VNImageBasedRequest(VNRequest的子类)。/// 生成一个新的请求实例,该实例使用图像预测器的图像分类器模型。private func createImageClassificationRequest() -> VNImageBasedRequest { // 使用图像分类器模型创建图像分类请求。 let imageClassificationRequest = VNCoreMLRequest(模型:ImagePredictor.imageClassifier,completionHandler:visionRequestCompletionHandler)imageClassificationRequest.imageCropAndScaleOption = .centerCrop 返回imageClassificationRequest}
步骤#3:创建视觉请求处理程序VNImageRequestHandler并执行在步骤2中创建的请求。让imageClassificationRequest = createImageClassificationRequest()// 创建视觉请求处理程序let handler = VNImageRequestHandler(cgImage:photoImage,方向:方向)让请求:[VNRequest] = [imageClassificationRequest]// 启动图像分类请求。尝试handler.perform(请求)
步骤#4:请求完成后,将调用visionRequestCompletionHandler,我们使用映射函数将观测映射到预测结构,最终将传递给视图以处理显示。// 将请求的结果转换为“VNClassificationObservation”数组。守卫让观察=请求。结果作为?[VNClassificationObservation] else { // 图像分类器,如MobileNet,只产生分类观测。 // 然而,其他Core ML模型类型可以产生其他观测。 // 例如,样式传输模型生成“VNPixelBufferObservation”实例。 print("VNRequest produces the wrong result type: \(type(of: request.results)).") 退货}// 从观测中创建一个预测数组。预测 = observations.map {观察 // 将每个观察结果转换为`ImagePredictor.Prediction`实例。 预测(分类:观察。标识符,信心百分比:观察。信心百分比字符串)}
就是这样。
很简单,不是吗?在这里查看完整的源代码,并进行一些实验。尝试将模型从MobileNetV2更改为任何其他图像分类模型,如InceptionV3或EfficientNet,并比较结果和性能。现在,让我们看看使用CoreML的一些好处和局限性CoreML的好处离线支持:由于模型是亲自使用的设备,因此不需要网络来执行预测。数据隐私:由于没有数据离开应用程序,因此个人的数据是完全私密的。优化性能:通过利用CPU、GPU和神经引擎,同时最大限度地减少其内存占用和功耗,适用于iOS设备。CoreML的缺点增加应用程序大小:一些模型的大小可能非常大,这最终会增加应用程序的下载大小,并降低较低型号的iOS设备上的应用程序性能。过时的模型可能需要更新应用程序:CoreML对设备端模型培训的支持有限。它支持仅更新某些类型的模型。因此,可能需要更新应用程序来更新模型。有限的第三方模型支持:到目前为止,CoreML仅支持从数量有限的模型格式 Life TensorFlow、Caffe、Keras等转换。替代方案是什么?因此,如果我们由于其局限性或我们的特殊用例而无法使用CoreML怎么办。我们可以根据自己的需要选择以下选项。[On-Device] TensorFlow Lite:是TensorFlow的轻量级版本,专为移动和嵌入式设备设计。[设备端] ONNX Runtime:(Open Neural Network Exchange)Runtime是Open Neural Network Exchange(ONNX)模型的跨平台高性能评分引擎。[服务器上]Firebase ML Kit:Firebase ML Kit为常见的机器学习任务提供现成的API,并支持自定义模型部署。从这里去哪里?我想在这篇文章中提供一些额外的配料,您可以尝试使用苹果提供的CreateML工具从头开始创建和训练模型。Pre-requisite:1.MacOS Mojave和Xcode 10我想我们大多数人现在都已经有几天了。2.数据集:训练和评估图像分类模型。对于图像数据集,您可以使用ImageNet。3.使用苹果提供的CreateML工具来创建和训练您的模型。我希望这篇文章能让您很好地体验在iOS应用程序中集成机器学习模型,并可能帮助您开始创建基于ML的创新iOS应用程序的旅程。
联系我们
在线咨询:
0 评论