iOS MachineLearning 系列(17)—— 几个常用的对象识别 CoreML 模型

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 上一篇文章中,我们介绍了几个官方的图片分类的模型,图片分类模型的应用场景在于将图片中最主要的事物进行识别,在已有的词库中找到最可能得事物。而对象识别则要更高级一些。再之前的文章,我们介绍过可以使用官方提供的API来进行矩形识别,文本识别,二维码识别以及人脸识别等,这类识别功能的特点是我们不仅可以将图片中的物体位置和尺寸分析出来,还可以对其进行类别的分类。

iOS MachineLearning 系列(17)—— 几个常用的对象识别 CoreML 模型

上一篇文章中,我们介绍了几个官方的图片分类的模型,图片分类模型的应用场景在于将图片中最主要的事物进行识别,在已有的词库中找到最可能得事物。而对象识别则要更高级一些。再之前的文章,我们介绍过可以使用官方提供的API来进行矩形识别,文本识别,二维码识别以及人脸识别等,这类识别功能的特点是我们不仅可以将图片中的物体位置和尺寸分析出来,还可以对其进行类别的分类。

本篇文章,我们将介绍使用官方提供的两个CoreML模型来进行对象识别,这两个模型可以很好的补充系统API的不足,助力业务场景功能的开发。

1 - TOLOv3模型

TOLOv3是一个快速识别物体的神经网络模型。关于物体识别,Vision框架提供的有VNRecognizedObjectObservation,此类即描述了识别出的结果。使用自定义的CoreML模型进行对象识别,也会使用到此类。前面我们在使用图片分类的模型时,可以直接使用Xcode帮我们生成的代码,TOLOv3模型则不再适用此方式,我们需要使用Vision框架的接口来实现功能。

其实过程也比较简单,首先加载模型:

let url = URL(fileURLWithPath: Bundle.main.path(forResource: "YOLOv3", ofType: "mlmodelc")!)
lazy var visionModel = try! VNCoreMLModel(for: MLModel(contentsOf: url))

这里需要注意,我们拖入Xcode工程中的模型名字为YOLOv3.mlmodel,但是经过Xcode的编译,实际在IPA包中的模型文件的后缀为mlmodelc,这里一定要注意不要写错。

下面创建一个图片分析请求的处理类:

// 图像分析请求处理类
lazy var imageRequestHandler = VNImageRequestHandler(cgImage: image.cgImage!,
                                                    orientation: .up,
                                                    options: [:])

这一步我们应该相当熟悉了,前面文章介绍Vision框架时,几乎每个示例都会使用到这个类。之后来创建识别请求:

let objectRecognition = VNCoreMLRequest(model: visionModel, completionHandler: {
   
    (request, error) in
    DispatchQueue.main.async(execute: {
   
   
        // perform all the UI updates on the main queue
        if let results = request.results {
   
   
            self.handleOutPut(outPut: results as! [VNRecognizedObjectObservation])
        }
    })
})

这里使用了Vision框架中的VNCoreMLRequest类,这个类通过CoreML模型来创建请求。最后发起请求即可:

try? imageRequestHandler.perform([objectRecognition])

关于请求的结果的处理,其实就是对VNRecognizedObjectObservation数据的处理,示例如下:

func handleOutPut(outPut: [VNRecognizedObjectObservation]) {
   
   
    for objectObservation in outPut {
   
   
        // 获取可信度最高的结果
        let topLabelObservation = objectObservation.labels[0]
        // 获取位置和尺寸
        var box = objectObservation.boundingBox
        box.origin.y = 1 - box.origin.y - box.size.height
        let size = imageView.frame.size
        let v = UIView()
        v.frame = CGRect(x: box.origin.x * size.width, y: box.origin.y * size.height, width: box.size.width * size.width, height: box.size.height * size.height)
        v.backgroundColor = .clear
        v.layer.borderColor = UIColor.red.cgColor
        v.layer.borderWidth = 2
        imageView.addSubview(v)

        let label = UILabel()
        label.font = .boldSystemFont(ofSize: 18)
        label.text = "\(topLabelObservation.identifier):" + String(format: "%0.2f", topLabelObservation.confidence)
        label.frame = CGRect(x: v.frame.origin.x, y: v.frame.origin.y - 18, width: 200, height: 18)
        label.textColor = .red
        imageView.addSubview(label)
    }
}

代码运行效果如下图所示:

可以看到,这个识别模型对交通工具和信号灯的识别度很高,其用来做辅助驾驶或导航会非常好用。

2 - TOLOv3Tiny模型

TOLOv3模型很好用,但其尺寸也很大,32位的模型大小为248.4MB,最算最小的8位模型也要62.2MB。更多时候将这么大的一个模型引入应用中是要付出成本的,最直观的成本就是应用的包体积会增大,增加用户的下载难度。TOLOv3还提供了一个精简版的模型TOLOv3Tiny,从功能上来说,其与TOLOv3所能支持的识别的词库一样,但其只有35.4MB,并且最小的8位模型只有8.9MB。其用法与TOLOv3一样,对同一张图片,其识别效果如下:

可以看到,相比起来,精简版的模型对物体的边界分析能力要略差一些。识别的精度也更低一些。

这两个模型都可以在如下地址下载:

https://developer.apple.com/machine-learning/models/

示例代码可在此Demo中查看:

https://github.com/ZYHshao/MachineLearnDemo

目录
相关文章
|
6月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
165 0
|
机器学习/深度学习 人工智能 自然语言处理
iOS MachineLearning 系列(22)——将其他三方模型转换成CoreML模型
本篇文章将是本系列文章的最后一篇。本专题将iOS中有关Machine Learning的相关内容做了整体梳理。下面是专题中的其他文章地址,希望如果你有需要,本专题可以帮助到你。
342 0
|
数据可视化 数据挖掘 iOS开发
iOS MachineLearning 系列(21)——CoreML模型的更多训练模板
前面文章中,有介绍如何训练生成定制化需求的 CoreML 模型,以图像分类为例做了演示.
209 0
|
人工智能 数据挖掘 API
iOS MachineLearning 系列(20)—— 训练生成CoreML模型
本系列前面的文章详细的介绍了在iOS中与AI能力相关的API的使用,也介绍了如何使用训练好的CoreML模型来实现更强大的AI能力。然而,无论是成熟的API提供的能力,还是各种各样的三方模型,有时候都并不能满足某一领域内的定制化需求。当我们拥有很多的课训练数据,且需要定制化的AI能力时,其实就可以自己训练生成CoreML模型,将此定制化的模型应用到工程中去。
406 0
iOS MachineLearning 系列(20)—— 训练生成CoreML模型
|
数据处理 iOS开发 编译器
iOS开发UI篇—字典转模型
iOS开发UI篇—字典转模型 一、能完成功能的“问题代码” 1.从plist中加载的数据 2.实现的代码 1 // 2 // LFViewController.m 3 // 03-应用管理 4 // 5 // Created by apple on 14-5-22.
686 0
|
22天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
82 1
|
28天前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
29天前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
52 1
|
2月前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
2月前
|
开发框架 数据可视化 Java
iOS开发-SwiftUI简介
iOS开发-SwiftUI简介