移动端机器学习框架 MDL 简介与实践

news2024/11/23 9:48:09

Mobile-deep-learningMDL

MDL 是百度研发的可以部署在移动端的基于卷积神经网络实现的移动端框架,可以应用在图像识别领域。

具体应用:在手机百度 App 中,用户只需要点击自动拍开关,将手机对准物体,当手稳的时候,它会自动找到物体并进行框选,无需拍照就可以发起图像的搜索功能。

初识 MDL

运行示例程序

  1. clone 项目代码,GitHub - PaddlePaddle/Paddle-Lite: PaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎) 
  2.  IDE 中导入 example 

  1. 运行

开发要求

  1. 安装 NDK
  2. 安装 Cmake
  3. 安装 protocol buffers

使用 MDL 库

  1. 在 mac/linux 上执行测试

# mac or linux:

./build.sh mac

cd build/release/x86/build

./mdlTest

  1. 在项目中使用mdl

开发

  1. 编译MDL源码(Android

# android:

# prerequisite: install ndk from google

./build.sh android

 cd build/release/armv-v7a/build

./deploy_android.sh

adb shell

cd /data/local/tmp

./mdlTest

  1. iOS

# ios:

# prerequisite: install xcode from apple

./build.sh ios

copy ./build/release/ios/build/libmdl-static.a to your iOS project

模型转换

MDL 需要与之兼容的模型才能使用,可以使用 MDL 提供的脚本将其他深度学习工具训练的模型转换为 MDL 模型。推荐使用 PaddlePaddle 模型。

  1. 将 PaddlePaddle 模型转换成 MDL 模式

# Environmental requirements

# paddlepaddle

cd tools/python

python paddle2mdl.py

  1. 将 caffemodel 模型转换成 MDL 模式

#Convert model.prototxt and model.caffemodel to model.min.json and data.min.bin that mdl use

./build.sh mac

cd ./build/release/x86/tools/build

# copy your model.prototxt and model.caffemodel to this path

./caffe2mdl model.prototxt model.caffemodel

# the third para is optional, if you want to test the model produced by this script, provide color value array of an image as the third parameter ,like this:

./caffe2mdl model.prototxt model.caffemodel data

# the color value should in order of rgb,and transformed according to the model.

# then you will get a new data.min.bin with test data inside

# after this command, model.min.json data.min.bin will be created in current

# some difference step you need to do if you convert caffe model to iOS GPU format

# see this:

open iOS/convert/iOSConvertREADME.md

Android Sample 分析

下面以 Android 平台为例分析 MDL 在移动端平台上面的工作

  1. 在项目中导入 libmdl.so 
  2. 初始化 mdl,加载 so 库,设置线程数量

private void initMDL() {

     String assetPath = "mdl_demo";

     String sdcardPath = Environment.getExternalStorageDirectory()

             + File.separator + assetPath;

     copyFilesFromAssets(this, assetPath, sdcardPath);

     mdlSolver = new MDL();

     try {

         String jsonPath = sdcardPath + File.separator + type.name()

                 + File.separator + "model.min.json";

         String weightsPath = sdcardPath + File.separator + type.name()

                 + File.separator + "data.min.bin";

         Log.d("mdl","mdl load "+ jsonPath + "weightpath ="+weightsPath);

         mdlSolver.load(jsonPath, weightsPath);

         if (type == mobilenet) {

             mdlSolver.setThreadNum(1);

         } else {

             mdlSolver.setThreadNum(3);

         }

     } catch (MDLException e) {

         e.printStackTrace();

     }

 }

  1. 拍摄照片

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

// save pic in sdcard 

Uri imageUri = Uri.fromFile(getTempImage());

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

startActivityForResult(intent, TAKE_PHOTO_REQUEST_CODE);

  1. 图像处理,包括设置采样率图像缩放
  2. 图像预测

mdlSolver.predictImage(inputData);

  1. 在MDL库中,predictImage 方法是进行图像预测的 JNI 方法。方法声明如下:

JNIEXPORT jfloatArray JNICALL Java_com_baidu_mdl_demo_MDL_predictImage(JNIEnv *env, jclass thiz, jfloatArray buf)

这里需要传入图像的3维数组结构,真正执行预测的是 Net#predict(data) 方法,Net 模块是 MDL 网络管理模块,主要负责网络中各层 Layer 的初始化及管理工作。开发者在调用预测方法的时候,只需要调用对应 java  predictImage 方法,传入图像数据即可。

  1. 预测完成,在 demo 的界面中返回预测耗时和结果。

性能和兼容性

总结

MDL 在 Android  iOS 系统上性能表现十分出色,并且 API 设计也很简单易用,也支持其他的框架模型转换。总体来讲是一个非常优秀的移动端深度学习框架。

参考:

https://github.com/baidu/mobile-deep-learning

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1306347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二、SpringFramework 介绍

2.1 Spring 和 SpringFramework概念 https://spring.io/projects 广义的 Spring:Spring 技术栈(全家桶) 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。 经过十多年的发展,Spring 已经不再是一个单纯的应…

Linux实操——Tomcat安装

Tomcat安装 一、下载Tomcat包,并通过ftp上传到服务器二、解压安装包三、启动Tomcat四、验证是否安装完成 总结 博主最近项目上线了,终于能愉快的摸鱼了,额。。。那是不存在的,作为最勤奋的码农一份子,也是试着搭建一个…

隔离电源与非隔离式电源

开关电源 文章目录 开关电源前言一、它们之间的区别是什么?二、如何区分它们呢?三、隔离电源与非隔离电源的优缺点四、隔离电源与非隔离电源的选择总结 前言 在产品设计时,倘若没有考虑应用环境对电源隔离的要求,产品到了应用时就…

石油化工园区:安全管理工作中的挑战与措施

石油化工园区:安全管理工作中的挑战与措施 石油化工园区是一种设备设施多且结构复杂的工业园区,涉及到易燃易爆或有毒介质,同时园区内有大量的工作人员和工作车辆等动态参与要素。由于园区的特殊性质,安全管理工作显然具备较高的挑…

外网访问内网服务器使用教程

如何在任何地方都能访问自己家里的笔记本上的应用?如何让局域网的服务器可以被任何地方访问到?有很多类似的需求,我们可以统一用一个解决方案:内网穿透。内网穿透的工具及方式有很多,如Ngrok、Ssh、autossh、Natapp、F…

小学生台灯买什么样的合适?精选专业的学生台灯

随着时代的发展和进步,孩子的教育也提升了很多。但很多家长可能并不知道,其实现在的学生不管处小学还是初高中,他们的学习压力都是比我们以前大很多的。繁重的功课让他们经常用眼过度,这也是如今这么多孩子过早近视的主要原因。所…

妙手ERP特色功能来袭:上线Lazada包邮营销功能,全方位助力卖家高效引流!

包邮是线上消费者作出购买决策的重要因素,据Lazada平台调研显示:73%的受访者希望商品免费配送,有84%的消费者使用过Lazada包邮优惠券,其中75%的消费者对此感到满意。由此可见,包邮已成为打动东南亚消费者下单的主要原因…

iOS应用程序签名、重签名及安装测试优化指南

iOS应用程序的签名、重签名和安装测试 ipa编译出来后,或者ipa进行修改后,需要进行重新签名才能安装到测试手机,或者提交app store供apple 商店审核上架。ipaguard有签名和重签名功能,能在windows,mac,和li…

深度学习在人体动作识别领域的应用:开源工具、数据集资源及趋动云GPU算力不可或缺

人体动作识别检测是一种通过使用计算机视觉和深度学习技术,对人体姿态和动作进行实时监测和分析的技术。该技术旨在从图像或视频中提取有关人体姿态、动作和行为的信息,以便更深入地识别和理解人的活动。 人体动作识别检测的基本步骤包括: 数…

第六届“泰迪杯”数据分析技能赛颁奖会圆满落幕

12月8日至10日,“广东省(广州)工业与应用数学学会 2023年年会暨数学建模颁奖大会在深圳职业技术大学留仙洞校区隆重举行。本次会议由广东省(广州)工业与应用数学学会主办,深圳职业技术大学工业训练中心承办…

快速整合EasyExcel实现Excel的上传下载

1.EasyExcel 2.Excel的上传(读Excel) 3.Excel的下载(写Excel) 4.结语 1.EasyExcel 首先,这里给出EasyExcel的官方文档:https://easyexcel.opensource.alibaba.com/ alibaba.com不用我多说了吧,大…

C语言实现直接插入排序

完整代码&#xff1a; #include<stdio.h>//直接插入排序&#xff0c;从小到大 //参数&#xff1a;arr[]表示待排序数组&#xff0c;len表示该数组长度 void insert_sort(int arr[],int len){//arr[i]表示待插入的那个数//tmp保存待插入那个数的值//arr[j]用来移动数据in…

Mongdb常用复杂语句(nosql)总结

➡️ ➡️ 关于 MongoDB和MongoTemplate 嵌套数据判空查询 的讨论 ⬅️ ⬅️ 在本篇文章中小名会时常维护些来不及分类的日工作常用的复杂语句&#xff1a; 1、按照表id查询 db.getCollection(TABLE_NAME).find({"_id":ObjectId("62947c8fe2a399286a7259f7&q…

【STM32】DMA直接存储器存取

1 DMA简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 可以直接访问STM32的存储器的&#xff0c;包括运行SRAM、程序存储器Flash和寄存器等等 DMA可以提供外设寄存器和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节…

JAVA 版多商家入驻 直播带货 商城系统 B2B2C 之 鸿鹄云商B2B2C产品概述

着互联网的快速发展&#xff0c;越来越多的企业开始注重数字化转型&#xff0c;以提升自身的竞争力和运营效率。在这个背景下&#xff0c;鸿鹄云商SAAS云产品应运而生&#xff0c;为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的软件…

Python 小程序之PDF文档加解密

PDF文档的加密和解密 文章目录 PDF文档的加密和解密前言一、总体构思二、使用到的库三、PDF文档的加密1.用户输入模块2.打开并读取文档数据3.遍历保存数据到新文档4.新文档进行加密5.新文档命名生成路径6.保存新加密的文档 四、PDF文档的解密1.用户输入模块2.前提准备2.文件解密…

IDEA利用插件完成properties与yml的互相转换(mac与wins通用)

步骤一、插件安装 点击屏幕左上方的IDEA&#xff0c;然后点击Preferences(相当于wins里的settings) 进入后点击Plugins&#xff0c;在插件商城中搜索并安装 Convert YAML and Properties File 这个插件 二、使用 右键选择你需要转换的配置文件&#xff0c;选择Convert YAML …

TiDB存储引擎的初步认识

文章目录 TiDB简介分布式系统CAP 理论一致性可用性分区容错性 应用场景关系型模型事务ACID 特性原子性一致性隔离性持久性 与传统非分布式数据库架构对比TiDB 分布式数据库整体架构 TiDB简介 TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库&#xff0c;是一款同…

java开发的智能聊天机器人_超级AI_支持自动绘画功能

支持Web、Android、IOS、H5等多终端应用。它使用OpenAI的ChatGPT模型实现智能聊天机器人&#xff0c;并支持绘图自动生成Vincent图。未来还将接入国内大型AI模型&#xff0c;如文心一言、统一千问、MOSS等模型&#xff0c;并不断更新以满足用户需求。 AI大脑软件中的AI绘画功能…

音乐制作软件Studio One mac软件特点

Studio One mac是一款专业的音乐制作软件&#xff0c;由美国PreSonus公司开发。该软件提供了全面的音频编辑和混音功能&#xff0c;包括录制、编曲、合成、采样等多种工具&#xff0c;可用于制作各种类型的音乐&#xff0c;如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件…