【ncnn】基于ncnn的iOS端深度学习算法部署及应用

ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。github 地址:Tencent/ncnn, Demo 地址:YOLOv5_NCNN

深度学习和卷积神经网络,在移动端上的测试,可以了解本文。

支持 YOLOv5s、YOLOv4-tiny、MobileNetV2-YOLOv3-nano、Simple-Pose、Yolact、ChineseOCR-lite、ENet、Landmark106、DBFace、MBNv2-FCN 与 MBNv3-Seg-small 模型,摄像头实时捕获视频流进行检测。
在这里插入图片描述

环境准备:macbook,xcode,真机或模拟器。

通过技术选型,前后尝试了Google的MLKit,mediapipe,以及腾讯的ncnn,最终完整实现了ncnn的识别性能。步骤如下。

0 下载官方 Demo

前往 YOLOv5_NCNN 下载官方 Demo,挺大的,主要是模型和算法资源文件,300m 左右。

1 转移资源文件

下载的资源文件,默认目录是在安卓目录下,转到 android_YOLOV5_NCNN\app\src\main\assets目录下,将 .param 和 .bin 文件到 “iOS_YOLOv5NCNN\YOLOv5NCNN\res” 下,重复的资源可以直接跳过。在这里插入图片描述

2 下载 ncnn.framework

ncnn官网下载.framework到工程中,
在这里插入图片描述四个版本的区别在于 iOS 默认使用的库不包含 vulkan 和 bitcode,按需索取,本次演示下载单独的7.15m 的普通版本就可。

新版本会报错:
在这里插入图片描述
将老版本的 ncnn.framework 和 openmp.framework 彻底删除,然后直接拖入下载并解压的前两者。

3 下载 OpenCV.framework

可以自行编译,也可以前往 OpenCV github 下载编译好的 SDK,直接使用。
在这里插入图片描述

NCNN github 地址:Tencent/ncnn

官方 Demo 地址:YOLOv5_NCNN

4 导入所需框架

将上述下载的 opencv, ncnn, openmp 等框架导入工程中。

5 运行

选择所需的算法进行测试。
在这里插入图片描述
运行预览如下,不同的算法对应不同的展示结果。
在这里插入图片描述

6 导入自己的模型

如果我们训练了自己的模型,可将 .bin 以及 .param 文件添加到文件中,并导入相应路径,同时导入相应的算法 SDK 等。

例如我们打包了算法 SDK humanpose
在这里插入图片描述
导入工程后,同时重复步骤 1 ,将 .bin 以及 .param 等资源文件导入工程中。

然后使用代码:

NSString *PARAM_PATH = [[NSBundle mainBundle] pathForResource:@"yourname" ofType:@"param"];
NSString *MODEL_PATH= [[NSBundle mainBundle] pathForResource:@"yourname" ofType:@"bin"];

int r1 = self.pose_detector->GetDetectorNet().load_param([DET_PARAM_PATH UTF8String]);// 0 - success
int r2 = self.pose_detector->GetDetectorNet().load_model([DET_MODEL_PATH UTF8String]);
if(r1 != 0 ||r2 != 0){
	NSLog(@"loading failed");
}

创建模型,调用的 - (void)createModel 方法。在这里插入图片描述
需要使用算法,在摄像头图片回调方法 - (void)detectImage:(UIImage *)image中对图片进行编辑。
在这里插入图片描述
这里算法返回的为 C++ 的 vector 类型的数据,类似于一些点的集合,而我们需要做的工作就是使用 OC 的绘图 API 或者 OpenCV 本身自带的绘制方法,将点的位置以及连线进行绘制。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
对于MobileUNet在NCNN部署,你可以按照以下步骤进行操作: 1. 首先,你需要获取MobileUNet的模型文件和权重参数。这些文件通常是在训练过程中生成的,你可以从相关资源库或者官方文档中获取。 2. 下载并配置NCNN库。NCNN是一个轻量级的神经网络计算库,适用于移动设备和嵌入式系统。你可以从NCNN的官方GitHub仓库下载源代码,并按照其文档进行配置和编译。 3. 在你的项目中使用NCNN库。将NCNN库导入到你的项目中,并确保你的项目能够正确地链接和使用NCNN库的功能。 4. 加载MobileUNet模型。使用NCNN提供的接口,你可以加载MobileUNet模型文件和权重参数。具体的加载代码可能会有所不同,具体取决于你选择的编程语言和平台。 5. 对输入图像进行预处理。在将图像输入到MobileUNet模型之前,你可能需要对图像进行一些预处理,例如调整大小、归一化或裁剪等操作。确保预处理过程与MobileUNet模型训练时使用的预处理过程一致。 6. 运行推理。使用NCNN提供的接口,将预处理后的图像输入MobileUNet模型,然后运行推理过程。推理过程将产生预测结果,即MobileUNet对输入图像的分割结果。 7. 后处理和可视化。根据你的需求,你可以对模型的输出进行后处理,例如阈值化、后处理滤波或对象边界框绘制等操作。最后,你可以将结果可视化或保存到文件中。 以上是MobileUNet在NCNN部署步骤的一个大致指导,具体细节可能因为你的应用场景和需求而有所不同。在实际操作中,你可能需要参考NCNN的文档和示例代码来更好地理解和应用该库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值