DESIGN DECISION
离线识别 + 在线内容
摄像头帧和相册图片进入同一条 CoreML 推理链;识别结果立即展示,本地历史与异步百科请求再补齐完整信息。
独立开发基于 SwiftUI 的原生 iOS 应用,实现 YOLOv11 模型在移动端的全链路落地。自主完成数据集标注与训练,通过 CoreML 将模型部署至设备 NPU 实现低延迟实时推理,并结合异步并发请求百度百科 API 实现识别结果的即时交互,达成“识别即百科”的离线 + 在线闭环体验。
离线识别,在线百科,打造智能动物识别新体验。
ON-DEVICE AI PIPELINE
模型在本地完成识别,网络只负责补充百科内容,让核心体验不依赖云端推理。
DESIGN DECISION
摄像头帧和相册图片进入同一条 CoreML 推理链;识别结果立即展示,本地历史与异步百科请求再补齐完整信息。
CAPABILITIES
我的毕业设计是《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,我没有验证过拟合问题。
系统显示下面的图片是这个模型嵌入在我的小系统中,自动推断系统摄像头中的图像。

因为我想在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进行预览,结果如下:

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