Work

2024年09月01日 至 2025年04月01日
iOS
Swift
SwiftUI
CoreML
YOLOv11

独立开发基于 SwiftUI 的原生 iOS 应用,实现 YOLOv11 模型在移动端的全链路落地。自主完成数据集标注与训练,通过 CoreML 将模型部署至设备 NPU 实现低延迟实时推理,并结合异步并发请求百度百科 API 实现识别结果的即时交互,达成“识别即百科”的离线 + 在线闭环体验。

iOS本地动物识别App项目的图片

离线识别,在线百科,打造智能动物识别新体验。

背景

我的毕业设计是《Development of an AI-Powered Mobile Application for Animal Identification and Information》,开发一个可以识别动物的移动软件,在跟导师沟通后打算用Yolo作为深度学习识别模型,移动端软件使用原生的iOS开发,即在XCode上使用Swift+SwiftUI进行iOS开发,原本就一直对iOS开发很感兴趣,借这次机会好好学习一下原生的iOS开发。

开发

技术路线

模型训练

数据集是Open Images V7 Animals YOLO,包含11类动物的50,000张图片。

我选择这个数据集的原因是它有yolo格式的标签,但是直到我完成训练,我发现数据集不是很好,它非常不平衡,如下图所示,近27000张“狗”的图片,但其他平均只有2000张,但我还是尝试训练模型,看看结果。

我使用YOLO11m训练模型,这是最新版本的YOLO,我使用默认参数进行训练,将epochs设置为200,我没有验证过拟合问题。

模型训练

.pt模型性能

系统显示下面的图片是这个模型嵌入在我的小系统中,自动推断系统摄像头中的图像。

.pt模型性能

CoreML模型导出

因为我想在iOS上部署模型,所以我需要将模型导出为CoreML格式,我按照官方教程中的命令导出模型:

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolov11m.pt")

# Export the model to CoreML format
model.export(format="coreml", nms=True)  # creates 'yolo11n.mlpackage'

成功导出后,生成了一个名为yolo11m.mlpackage的文件,接下来就可以嵌入到我的iOS项目中,在XCode中可以对mlpackage进行预览,结果如下:

CoreML模型预览

iOS App开发

iOS App端功能展示

App的主要功能包括实时动物识别、拍照识别和百科信息查询。

入口主页 入口主页
识别历史列表 识别历史列表
识别结果 识别结果

实时动物识别

实时动物识别