深度学习图像识别项目(下):如何将训练好的Kreas模型布置到...
作者头像
  • 科技驱动
  • 2018-07-24 16:15:37 2

如何使用Keras训练卷积神经网络并在iPhone上部署

在这一系列文章中,我们将探讨如何使用Keras训练卷积神经网络,并将模型部署到iPhone上。本文将重点介绍如何使用Apple的CoreML框架实现这一目标。

1. 背景介绍

我们将讨论CoreML的基本概念及其用途。CoreML是一个由苹果公司开发的机器学习框架,旨在简化机器学习模型在iOS设备上的部署。

2. 使用CoreML将Keras模型转换为iOS兼容格式

我们将详细介绍如何使用coremltools库将训练好的Keras模型转换为CoreML模型。以下是转换步骤:

  1. 安装coremltoolsbash pip install coremltools

  2. 准备转换脚本: 编写一个Python脚本来加载Keras模型,并使用coremltools将其转换为CoreML模型。以下是示例脚本的一部分:

    ```python

    导入必要的包

    from keras.models import load_model import coremltools import argparse import pickle

    解析命令行参数

    ap = argparse.ArgumentParser() ap.addargument("-m", "--model", required=True, help="path to trained model model") ap.addargument("-l", "--labelbin", required=True, help="path to label binarizer") args = vars(ap.parse_args())

    加载类标签和Keras模型

    with open(args["labelbin"], "rb") as f: classlabels = pickle.load(f) model = loadmodel(args["model"])

    调用coremltools转换函数

    coremlmodel = coremltools.converters.keras.convert( model, inputnames="image", imageinputnames="image", imagescale=1 / 255.0, classlabels=classlabels, isbgr=True )

    保存转换后的CoreML模型

    outputpath = args["model"].replace(".h5", ".mlmodel") coremlmodel.save(output_path) ```

  3. 转换后的模型: 转换后的模型将具有与iPhone和iOS兼容的格式。你可以看到转换后的模型文件比原始的Keras模型文件更小。

3. 创建Swift + CoreML项目

接下来,我们将介绍如何在Xcode中创建一个Swift项目,并将CoreML模型集成到项目中。

  1. 准备开发环境: 确保你的Mac上安装了最新版本的Xcode(建议至少9.0版本)。

  2. 创建Xcode项目: 创建一个Single View App,并删除默认的Storyboard文件。

  3. 添加CoreML模型: 将转换后的CoreML模型文件拖放到Xcode项目中。Xcode会自动生成相应的Swift类。

  4. 配置项目的权限: 在项目的Info.plist文件中添加权限描述,允许应用访问相机。

  5. 编写视图控制器代码: 编写Swift代码,使用CoreML模型对摄像头捕获的图像进行分类。以下是一个示例代码片段:

    ```swift func setupCaptureSession() { let captureSession = AVCaptureSession()

    // 查找可用的相机
    let availableDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices
    do {
        if let captureDevice = availableDevices.first {
            captureSession.addInput(try AVCaptureDeviceInput(device: captureDevice))
        }
    } catch {
        print(error.localizedDescription)
    }
    
    // 设置视频输出
    let captureOutput = AVCaptureVideoDataOutput()
    captureSession.addOutput(captureOutput)
    let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
    previewLayer.frame = view.frame
    view.layer.addSublayer(previewLayer)
    
    // 启动会话
    captureOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
    captureSession.startRunning()
    

    }

    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { guard let model = try? VNCoreMLModel(for: Pokedex().model) else { return }

    let request = VNCoreMLRequest(model: model) { (finishedRequest, error) in
        guard let results = finishedRequest.results as? [VNClassificationObservation] else { return }
        guard let observation = results.first else { return }
    
        let predClass = "(observation.identifier)"
        let predConfidence = String(format: "%.02f%%", observation.confidence * 100)
    
        DispatchQueue.main.async {
            self.label.text = "(predClass) (predConfidence)"
        }
    }
    
    guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
    try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
    

    } ```

4. 测试和部署

  1. 注册Apple开发者计划: 注册Apple开发者计划,以便将应用部署到iPhone上。

  2. 连接iPhone并测试应用: 使用USB线将iPhone连接到Mac,并在Xcode中选择设备进行构建和运行。确保在iPhone上接受信任证书。

  3. 测试应用: 应用将在iPhone上安装并运行。你可以测试应用是否能正确识别神奇宝贝或其他对象。

5. 总结

通过以上步骤,我们可以将训练好的Keras模型转换为CoreML模型,并将其部署到iPhone上。CoreML框架极大地简化了这一过程,使得机器学习模型能够在iOS设备上高效运行。希望这篇文章对你有所帮助!

如果你有兴趣进一步探索,可以尝试添加更多的功能,例如摄像头拍摄按钮,以增强用户体验。

    本文来源:图灵汇
责任编辑: : 科技驱动
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
布置深度识别模型图像训练项目如何学习Kreas
    下一篇