带你读《2022技术人的百宝黑皮书》——MNN 2.0 发布 ——移动端推理引擎到通用深度学习引擎(11) https://developer.aliyun.com/article/1248025?groupCode=taobaotech
易用性
MNN在针对端侧开发的特点,在具有高性能与轻量性的同时还具有针对算法人员非常友好的易用性。MNN提供的Python部分接口不仅具备MNN模型推理的基础能力,同时还提供了算法开发人员在前后处理中使用频率最高的基础库numpy与opencv的能力,用户在移动端仅使用MNN便可以完成全套算法的迁移与部署。
MNN移动端Python
MNN的Python接口提供的能力如下:
1. MNN:提供模型加载,推理能力;
2. MNN.expr:提供MNN的基础计算能力,动态构图能力;
3. MNN.numpy:提供与numpy用法一致的部分numpy函数;
4. MNN.opencv:提供与cv2用法一致的部分opencv函数;
5. 其中MNN与MNN.expr为MNN的核心能力;MNN.numpy和MNN.opencv是基于MNN的核心能力进行的扩展功能,在用法上更加贴近算法常用库,在实现上复用MNN核心功能;低成本(200K内)大幅降低算法部署难度。
算法部署实例
使用以上能力可以将服务端代码便捷的迁移到移动端而不依赖其他Python库,代码如下:
import MNN import MNN.cv as cv2 import MNN.numpy as np def inference(model_path, img_path): net = MNN.nn.load_module_from_file(model_path, ["data"], ["prob"]) image = cv2.imread(img_path) image = image[..., ::-1] image = cv2.resize(image, (224, 224)) image = image - (103.94, 116.78, 123.68) image = image * (0.017, 0.017, 0.017) image = image.astype(np.float32) input_var = MNN.expr.convert(image, MNN.expr.NC4HW4) output_var = net.forward(input_var) output_var = MNN.expr.convert(output_var, MNN.expr.NHWC) print("output belong to class: {}".format(np.argmax(output_var)))
在移动端能够仅使用MNN便可以无缝部署服务端的算法,Python化部署对于算法工程师具有非常高的易用性,同时还具有更好的动态性,方便算法的热更新,热修复等;降低了端侧算法部署门坎,提升了端侧算法部署的效率。
带你读《2022技术人的百宝黑皮书》——MNN 2.0 发布 ——移动端推理引擎到通用深度学习引擎(13) https://developer.aliyun.com/article/1248023?groupCode=taobaotech