035.移动端部署探索:将YOLO模型部署到Android/iOS的可行性分析
上周在客户现场调试,遇到一个典型场景:客户拿着台旧款Android手机,要求实时跑我们训练的YOLOv5检测模型,帧率不能低于15fps。现场导出模型、转换格式、集成进Demo,一跑起来——内存直接飙到800MB,帧率不到5帧。客户眉头一皱:“你们这模型不是轻量化的吗?” 那一刻我就知道,移动端部署这潭水,比想象中深得多。
一、移动端部署的本质矛盾
移动端部署的核心矛盾在于:模型的计算复杂度与移动设备的有限资源之间的对抗。YOLO系列虽然相对轻量,但即便是YOLOv5s,参数量也有7.2M,算力需求约2.7G FLOPs(以640x640输入计)。这放在服务器上不算什么,但在手机上就是另一回事了。
内存占用是第一个拦路虎。很多工程师只关注模型文件大小,却忽略了运行时内存。模型加载后,中间激活值、特征图缓存、预处理后的图像张量,这些才是吃内存的大户。我见过有人直接把原始YOLO模型用ONNX Runtime跑在iOS上,512MB的图片输入,中间层一展开,内存直接爆掉——这里踩过坑,移动端推理必须严格控制中间张量的生命周期。
二、平台差异:Android与iOS的生态隔阂
Android和iOS的推理生态几乎是两个世界。
Android这边,选项多但碎片化严重。你可以用TFLite(Google亲儿子),也可以用NCNN(腾讯开源),或者MNN(阿里出品)。TFLite对TensorFlow系模型友好,但自定义算子支持有时候让人头疼。NCNN的ARM汇编优化做得狠,实测在麒麟芯片上比TFLite快20%,但文档你得硬啃。
