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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 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?如何在应用中集成机器学习模型?
178 0
|
机器学习/深度学习 人工智能 自然语言处理
iOS MachineLearning 系列(22)——将其他三方模型转换成CoreML模型
本篇文章将是本系列文章的最后一篇。本专题将iOS中有关Machine Learning的相关内容做了整体梳理。下面是专题中的其他文章地址,希望如果你有需要,本专题可以帮助到你。
355 0
|
数据可视化 数据挖掘 iOS开发
iOS MachineLearning 系列(21)——CoreML模型的更多训练模板
前面文章中,有介绍如何训练生成定制化需求的 CoreML 模型,以图像分类为例做了演示.
214 0
|
人工智能 数据挖掘 API
iOS MachineLearning 系列(20)—— 训练生成CoreML模型
本系列前面的文章详细的介绍了在iOS中与AI能力相关的API的使用,也介绍了如何使用训练好的CoreML模型来实现更强大的AI能力。然而,无论是成熟的API提供的能力,还是各种各样的三方模型,有时候都并不能满足某一领域内的定制化需求。当我们拥有很多的课训练数据,且需要定制化的AI能力时,其实就可以自己训练生成CoreML模型,将此定制化的模型应用到工程中去。
420 0
iOS MachineLearning 系列(20)—— 训练生成CoreML模型
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
111 1
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
1月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
63 1
|
10天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
30 9
|
9天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
7天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。

热门文章

最新文章