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

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有一个基础的认识,便于将其应用到自己的实际场景中。

    推荐阅读
  • 怎么在vim编辑模式下为什么数字会变红色警告 代表什么意思

    此刻,别做其他的了。直接卸载,然后重新安装。

  • 熊出没设定熊二为什么变笨了(初版熊大总是对熊二很粗鲁)

    大概意思就是差不多的,而在《熊出没》里能够把这两句话贯彻的人就是熊大熊二两兄弟,他们两个总是携手对付光头强,保卫森林。随后熊二满足地离开,而光头强则是准备砍树建造自己的房子。果园的果子被偷了,熊二反而庆幸不用爬树了作为动物的熊大熊二,一天中最重要的事情就是进食,初版熊大拥有一个果园,狗熊岭的动物虽然多,可是这个果园的归属确实他们两兄弟的。熊大熊二到来之后,发现树上的果树全部都没有了。

  • 假期旅游地方推荐情侣(可以去这几个艳遇之地)

    恰好五一小长假就要来临,去吧,去路上与大自然来一场艳遇,找回最好的自己。丽江最幽静,最原生态的纳西村落是白沙古镇。贵州镇远古城有“东方威尼斯”之称的舞阳河河水穿城而过,形成了一个完美的倒“S”型,它把镇远城一分为二,形成了“九山抱一水,一水分两城”、天人合一的太极图古城风貌。当然稻城亚丁从来不缺少爱情,说不定在那里会有一场命中注定的艳遇。五一小长假去看看青岛的万国建筑,喝一喝芬芳四溢的青岛啤酒。

  • 点播是什么意思(点播具体是什么意思)

    点播是什么意思点播的基本意思一般有两种,一种是播种的意思,指的是按一定距离进行开穴,每穴播入数米种子,随即进行覆土或覆盖。另一种是指定节目请广播电台播送的意思。顾名思义,就是根据观众的要求播放节目的视频点播系统,把用户所点击或选择的视频内容,传输给所请求的用户。视频点播业务是近年来新兴的传媒方式,是计算机技术、网络通信技术、多媒体技术、电视技术和数字压缩技术等多领域融合的产物。

  • 闲鱼号被永久封号还能解除吗(闲鱼违规永封怎么办)

    但是群里的小伙伴是一个违规记录满满几页的狠人,所以条件5的记录应该主要是指淘宝的不良记录,闲鱼不在范围内需要90天内没有发布或编辑过二手商品;这点相对坑,也就意味着你这个号费了以后,至少放3个月才可以提交注销申请。账户需要是正常使用中且没有过一些限制账号的记录。这意味着你可以重新注册一个淘宝号,同时新的闲鱼号也就有了。

  • 关于说的词语(关于说的词语50个)

    1、关于说的词语有:奉劝、劝告、说话、谈话、讲话、叙述、陈述、复述、申述、说明、声明、讲明。

  • 吃玉米有减肥的功效吗(吃玉米能减肥吗)

    下面内容希望能帮助到你,我们来一起看看吧!玉米含有丰富的钙、磷、硒和卵磷脂、维生素E等,均具有降低血清胆固醇的作用。印第安人几乎没有高血压、冠心病,这主要是得益于他们以玉米为主食。玉米中含有较多的粗纤维,比精米、精面高4-10倍。玉米中还含有大量镁,镁可加强肠壁蠕动,促进机体废物的排泄。吃玉米还能让人有饱足感,从而减少饭量。玉米上述的成份与功能,对于减肥非常有利。

  • 红楼梦诗词全集文库(红楼梦诗词大全170卷)

    秾歌艳舞不成欢,列阵挽戈为自得。明年流寇走山东,强吞虎豹势如蜂。王率天兵思剿灭,一战再战不成功。青山寂寂水澌澌,正是恒王战死时。雨淋白骨血染草,月冷黄沙鬼守尸。胜负自然难预定,誓盟生死报前王。贼势猖獗不可敌,柳折花残实可伤。这是令人怀疑的,但值得进一步深入研究。

  • 汽车水箱加什么水(汽车水箱里加的是什么样的水)

    下面希望有你要的答案,我们一起来看看吧!汽车发动机冷却液又名防冻液,冷却液的全称应该叫防冻冷却液,意为有防冻功能的冷却液。在车辆的保养手册里,厂家会对冷却液的更换周期做出说明。冷却液也有保质期,长期停放的车辆在恢复使用前最好将车上“五油三水”统统检查、更换一遍。

  • 牡丹亭简介(牡丹亭简介讲解)

    牡丹亭简介柳梦梅与杜丽娘爱情故事。两人牡丹亭幽会之后杜丽娘便一病不起,柳梦梅掘墓开棺,杜丽娘起死回生,两人结为夫妻,经历一番挫折,最后终成眷属。南安太守杜宝之女杜丽娘,从老塾师陈最良读书。她在弥留之际,要求母亲把她葬在花园的梅树下,嘱咐丫环春香将其自画像藏在太湖石下。梦梅根据丽娘的嘱咐掘墓开棺,丽娘起死回生。丽娘遇见在外避难的母亲和春香,解除了父亲对梦梅的误会,全剧以大团圆结局。