公司法
当前位置: 首页 法律大全

knn算法如何训练(使用ncnn将深度学习模型快速部署到移动端)

时间:2023-06-02 作者: 小编 阅读量: 1 栏目名: 法律大全

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

正式开始之前插播一条硬广:

字节跳动2020届校园招聘已经正式开启,涉及研发、产品、设计、市场、销售、职能/支持、运营七大类,工作地点分布北京、上海、深圳、成都、厦门、南京、杭州、武汉、广州等热门城市,要求很简单,只要你是2020年毕业的高校学生,都可以积极参与,直接到到官网:https://job.bytedance.com/campus/position 查找自己感兴趣的职位,投递简历并填写专属内推码:GCHFTGZ 即可成功申请并享受优先处理福利。PS:1. 投递简历时填写内推码可以享受简历优先筛选、优先安排面试等一系列福利,而且根据每年的招聘经验,越早投递简历的同学拿到offer的概率越大哦~快快投起来简历吧~2. 社招以及日常实习生也一直有岗位哦,具体岗位见:https://job.bytedance.com/campus/position,内推码同样可用哦

写在前面

随着深度学习和移动互联网的不断发展,如何将深度学习和移动应用紧密结合起来成为了一个热门的研究话题,nncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。

关于ncnn有两篇文章(一篇介绍pc端使用,一篇介绍android端使用),会详细介绍ncnn从源码编译到最终在Android端的应用流程,第一篇一文带你入门腾讯出品的史上最快移动端深度学习框架ncnn主要介绍了如何基于ncnn在pc端编写相关代码,本文是ncnn系列的第二篇文章,主要介绍如何在Android上基于ncnn进行深度学习模型的部署,本文目录如下:

环境说明

系统:Ubuntu16.04

软件:Android Studio

前期准备之ndk安装

在正式开始前我们需要先下载安装ndk,这里介绍一种简单高效的方式,打开Android Studio,然后依次点击File->Settings->Appearance&Behavior->System Settings->Android SDK,然后在SDK Tools下找到ndk,然后选中,点击apply就可以自动下载安装了,如图:

完成之后在你的sdk目录下会多出一个ndk-bundle的包,这就是你ndk的路径,类似下图:

至此,ndk已经安装完毕了,下一步是配置ndk的环境变量:

首先打开profile:sudo vim /etc/profile

打开后在profile文件的末尾加上:

export NDK_HOME=sdkroot/ndk-bundlePATH=$NDK_HOME:$PATH

sdkroot是你的sdk目录,每个人的不一样,视情况而定,下面是我的配置截图:

添加完成后保存退出,使用以下命令使配置的环境变量生效:

source /etc/profile

验证ndk是否配置成功:

ndk-build -v

出现类似以下输出即说明ndk配置成功:

编译ncnn sdk

我们需要将ncnn打包,这样我们才能在android ndk的代码中使用include将ncnn的相关库依赖进来:

mkdir build-androidcd build-androidcmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \-DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON \-DANDROID_PLATFORM=android-14 ..makemake install

参数说明:

ANDROID_ABI 是架构名字,"armeabi-v7a" 支持绝大部分手机硬件ANDROID_ARM_NEON 是否使用 NEON 指令集,设为 ON 支持绝大部分手机硬件ANDROID_PLATFORM 指定最低系统版本,"android-14" 就是 android-4.0

你可以根据自己的需要设置自己的参数,具体的可以参考ncnn的官方介绍:https://github.com/Tencent/ncnn/wiki/cmake-打包-android-sdk

完成后你就可以在ncnn/build-android下找到install了,大概如图:

install下有include和lib两个文件夹,这两个文件夹下的东西后面会用到。

进行ndk开发

Android可以通过ndk-build和cmake两种方式来编译c,而且官方比较推荐的是cmake的方式,但是我用cmake试了好长时间一直报各种诡异的错误,应该是我还没有学到ncnn in ndk with cmake的正确打开方式,所以这里介绍一下使用ndk-build这种方式编译c,步骤如下:

我这里新建了一个android 的demo项目,项目结构如下:

主要是assets文件夹下放置你的bin和param文件,jni文件夹下放置你的cpp和两个mk文件,具体内容下面会介绍(可以直接在对应位置新建这两个文件夹),然后要修改你的app

gradle文件:

对应的内容你可以根据自己的情况修改,然后配置两个mk文件:

  • Android.mk
  • Application.mk

这两个.mk文件我的建议是复制粘贴到你的项目里,只改动必要的文件路径,其余的参数别动,除非你知道你改的意思是什么~

因为ndk的原理是使用java接口调用c代码,所以我们需要进行java接口的编写,给出一个示例代码:

一共两个方法,一个是初始化,一个是执行预测,需要注意的是初始化方法调用的时候需要传入一个二进制文件路径的参数,大概思路是把bin和param文件拷贝到手机上然后让c代码读取,这里给出模板代码:

直接在你需要的地方调用IniteNcnn()就可以了,需要注意的是要 进行内存卡读取权限的申请

然后将你一文带你入门腾讯出品的史上最快移动端深度学习框架ncnn写的demo.cpp放在jni目录下,对里面的代码进行必要的修改,主要需要实现模型的初始化和执行预测两个函数,初始化这里给出一个模板,至于执行预测的函数直接写一个对应函数然后调用你之前写好的c代码就可以了:

初始化

这个函数是通用的,建议全部复制粘贴,具体对应的java接口代码后面会介绍

至此所有代码已经编写完毕,然后就可以build了,步骤如下:

  • cd到src/main/jni目录下
  • 执行ndk-build,然后就会生成.so文件
  • 然后你就可以根据自己模型的实际情况进行模型的调用了
总结

本文主要介绍了如何基于ncnn将深度学习模型部署在移动(Android)端,希望大家可以通过这篇和本篇文章对ncnn有一个基础的认识,便于将其应用到自己的实际场景中。

    推荐阅读
  • 怎样烧红烧肉(家常红烧肉的做法)

    怎样烧红烧肉原料:精品五花肉、炖肉料包、葱、冰糖、茶叶。五花肉切条放入凉水中撇去血沫。焯水定型;捞出后晾凉切一样大的方块。锅中放少许油倒入白砂糖炒糖色。糖色的气泡由大变小迅速关火,倒入开水。加少许绍酒,加开水烧,熟得快,加入茶叶水,可以去腥味。改回炒锅大火,放冰糖,使汁粘稠即可出锅,香葱段点缀。

  • 2022杭州径山茶圣节时间、地点、活动一览

    最终集齐所有铜币的游客可至“大宋钱庄”兑换神秘礼物。今来茶韵生活01、陆羽说论坛为进一步挖掘径山茶宴有关历史文化,本届茶圣节特邀请茶学专家交流讨论如何更好保护和传承国家非物质文化遗产。为打造文化传播年,第二十一届中国茶圣节以春迎、夏凉、秋韵、冬福四大主题贯穿全年。

  • 《重生之门》给罗队发短信的人身份

    但是通过前文,不难推测应该是庄文杰发给罗队的短信,只是没有暴露自己的身份。罗坚来到青檀假日酒店排查,没有发现任何异常,庄文杰和许正清乔装改扮随后赶来,他们一出现就被人盯上,庄文杰和许正清来到地下停车场,庄文杰巧妙引开那些人,混进游客中进入酒店。这件事情把十二年前的洛神案串联起来了。

  • 爱情名著哪个好看(随侃名著佳作第6期)

    言下之意,他主动向周晓白提出分手。钟跃民成为一个军人,上了战场,并且是在战斗中受伤,被送到战地医疗帐篷内救治。而周晓白和钟跃民在时隔十多年后的相遇一刻,也是被编剧以及导演,安排得相当的特别,并不是那种悲情欲绝又或者是感动无比的相遇时刻。

  • 板栗可以保存多久 板栗怎么能保存时间长

    如果是晒干的板栗可以存放3-4个月,生板栗在常温下合理贮存可以存放1-2个月,煮熟的栗子大概可以放一周,熟板栗放冰箱冷冻能保存30天左右,熟板栗放冰箱冷藏保存可以存放5天。

  • 贾宝玉与红楼梦的关系(贾宝玉的春梦到底在暗示什么)

    贾宝玉与红楼梦的关系?要知道,贾琏这个人极其好色,而且好的就是熟女,那么从这个曲折的描述中,我们可以推断出,秦可卿应该是那种熟女中的极品。这个问题在书中得不到直接的答案,因为在后面的文章中,秦可卿一共只出现三个镜头:介绍弟弟秦钟与贾宝玉相见,秦可卿病后王熙凤带贾宝玉去探病,秦可卿临死前在梦里向王熙凤交代后事。

  • 简单又好看的剪纸适合儿童(孩子能学会的幼儿简单剪纸教程)

    接下来我们就一起去研究一下吧!简单又好看的剪纸适合儿童幼儿园的孩子经常要做各种各样的手工,通过做手工,提高孩子的审美能力,锻炼孩子的动手能力,培养孩子的专注力和耐心,让孩子更聪明。用蓝天白云绿色的草地,太阳、小兔子和小蘑菇,可以贴出一幅画,也可以用这个画面编出一个小故事,带孩子度过愉快的亲子时光。欢迎关注,学习更多幼儿小手工。

  • 摩尔庄园钓鲤鱼的最佳方法(摩尔庄园钓鲤鱼的有什么最佳方法)

    以下内容希望对你有帮助!摩尔庄园钓鲤鱼的最佳方法工具/原料:华为手机、安卓系统、摩尔庄园游戏。进入游戏后操纵游戏角色进行移动了。去商店购买钓鱼的诱饵。来到池塘边进行的钓鱼。等待的水面出现波动即可钓到鲤鱼了。

  • 国外的懒人产品(歪国产品咖在用哪些可爱的小工具)

    quotes=trueUsabilityHub我通常使用UsabilityHub来帮助确定设计方案。

  • 一年四季水果时间表(一年四季的时令水果是什么)

    3月(春季):枇杷、红香蕉、樱桃、杨桃、番荔枝、青枣、甘果蔗、草莓、番石榴、牛奶蕉、柑桔、观赏南瓜、果桑、鹤首瓜。12月(冬季):樱桃、番茄、红香蕉、鸡蛋果、木瓜、草莓、百香果、杨桃、无花果、番石榴、牛奶蕉、鹤首瓜、观赏南瓜、果蔗、台湾青枣、黑提子、人心果、柠檬、菠萝、油梨、柑橘、橙子。