yolov5安卓(鸿蒙)手机部署

Posted 爱吃肉的鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yolov5安卓(鸿蒙)手机部署相关的知识,希望对你有一定的参考价值。

本篇文章主要是针对yolov5s在安卓(鸿蒙)手机部署过程进行记录。

有关YOLOv5其他资料可以参考我以下文章进行学习:

C++版tensorrt YOLOv5推理

如何通过YAML文件修改YOLOv5网络

YOLOv5通道剪枝

YOLOv5图像分割代码详解1

YOLOv5图像分割之NMS

YOLOv5+霍夫变换之车道线检测

YOLOv5损失函数详解

YOLOV5+reid[支持跨视频识别]


以上内容可以帮助大家更好的学习yolov5。

好了,废话不多说,开始今天的正题。

先说一下我的开发环境:

windows 10

pytorch 1.7

android Studio 4.1.3

Android Pytorch library 1.7.0
yolov5  6.0版本

我的手机:华为mate 40(鸿蒙3.0.0.205)

安卓手机也是可以的。

需要注意Android torch版本需要与你pytorch版本对应

下载6.0代码:

 git clone --branch v6.0 https://github.com/ultralytics/yolov5

 打开yolov5项目代码,修改export.py文件,修改内容如下:

@try_export
def export_torchscript(model, im, file, optimize, prefix=colorstr('TorchScript:')):
    # YOLOv5 TorchScript model export
    LOGGER.info(f'\\nprefix starting export with torch torch.__version__...')
    f = file.with_suffix('.torchscript')
    fl = file.with_suffix('.torchscript.pt')  # 修改1
    ts = torch.jit.trace(model, im, strict=False)
    d = "shape": im.shape, "stride": int(max(model.stride)), "names": model.names
    extra_files = 'config.txt': json.dumps(d)  # torch._C.ExtraFilesMap()
    if optimize:  # https://pytorch.org/tutorials/recipes/mobile_interpreter.html
        optimize_for_mobile(ts)._save_for_lite_interpreter(str(f), _extra_files=extra_files)
    else:
        ts.save(str(f), _extra_files=extra_files)
    (optimize_for_mobile(ts) if optimize else ts)._save_for_lite_interpreter(str(fl)) # 修改2
    return f, None

在终端输入以下命令:

python export.py --weights yolov5s.pt --optimize --device cpu --include torchscript

此时会在你项目路径下生成yolov5s.torchscript.pt文件(在optimize下仅支持cpu,如果用gpu会报错).


下载pytorch官方android demo代码。

git clone https://github.com/pytorch/android-demo-app.git

现在这个代码官网github更新的为pytorch1.10的。

下载后用Android Studio打开android-demo-app/ObjectDectection项目。

然后打开app/build.gradle文件,注意修改这个地方(我的是pytorch1.7):

implementation 'org.pytorch:pytorch_android:1.7.0'
implementation 'org.pytorch:pytorch_android_torchvision:1.7.0'

如果你的pytorch是1.10的,那么是下面的:

implementation 'org.pytorch:pytorch_android_lite:1.10.0'
implementation 'org.pytorch:pytorch_android_torchvision_lite:1.10.0'

 所以一定要注意自己的版本。

如果是你自己的权重,需要修改src/main/java/org/pytorch/demo/objectdetection/MainActivity.java文件,修改以下内容为自己的类和类txt文件。

try 
            mModule = PyTorchAndroid.loadModuleFromAsset(getAssets(), "yolov5s.torchscript.pt");
            BufferedReader br = new BufferedReader(new InputStreamReader(getAssets().open("classes.txt")));

然后是将前面说到的yolov5s.torchscript.pt文件放在ObjectDetection/app/src/main/assets/下即可.

此时assets内容如下:

ObjectDetection/app/src/main/assets/
|-- classes.txt
|-- test1.png
|-- test2.jpg
|-- test3.png
`-- yolov5s.torchscript.pt

以上工作准备完毕,下载android虚拟机。

在你Android Studio界面的右上角,有一个下图的标值按钮(AVD Manager)。

 点击创建虚拟机,然后选择以下选项。我这里选的是Nexus 5X,我试过Nexus 6,但生成的APP在虚拟机和我手机端总是闪退,不知道原因。

 点击next以后,选择x86 images,找到下面的选项。点击前面的Download(由于我已经下载过了,所以前面显示的是R)

等待下载成功后,界面如下(我下载的时候网络不行,所以用的科学上网工具,即便你没有下载成功,也会显示以下内容,但你点运行的时候会提示你虚拟机起不来):

 接下来就是Build,生成你的APK文件。

 

 成功以后会在你的app/build/outputs/apk/debug下生成一个app-debug.apk.目录形式如下:

ObjectDetection/app/build/outputs/apk/
`-- debug
    |-- app-debug.apk
    `-- output-metadata.json

 此可你就可以点击运行来试试你的apk是否成功(会自动开启虚拟机)

app界面如下。

此时会有4个按钮。

Detect:检测

Test Image:测试图片,这个图片你可以在MainActivity.java文件修改,但前提是你要把你的测试图片放在assets中。

Select:是你可以从你相册中获取一张图片进行检测。

Live:是实时视频检测【不过我测了一下,会有卡顿,我觉得不是我手机的锅,因为我以前试过tensorflow lite部署的目标检测和关键点检测,速度都很快】

 

 

 


以上就是yolov5s移动端部署的全部过程了。

也可以直接下载我torch1.7对应的android demo代码。

GitHub - YINYIPENG-EN/pytorch1.7_yolov5s_android: Pytorch1.7 android environment deployment yolov5s

提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析

8 月 9 日,华为开发者大会鸿蒙OS正式发布,这是基于微内核的全场景分布式OS。 能实现模块化解耦,对应不同设备(智慧屏、穿戴设备、车机、智能音箱、手机)可弹性部署。 华为消费者业务 CEO 余承东描述了华为鸿蒙 OS 的方方面面。
余承东称,华为方舟编译器,会通过多终端 IDE 开发环境来支撑当前的鸿蒙 OS。 目前方舟编译器支撑鸿蒙内核,“方舟编译器能提升60%的编译性能”,将来鸿蒙微内核能按需扩展,并希望用一个鸿蒙微内核代替全部内核。
今天,我们就聚焦华为的新贵——方舟编译器,这个一发布就引起巨大响动的底层核心技术。 方舟编译器究竟是什么? 它为什么能够做到“青出于蓝而胜于蓝”,下面就让我们带着疑问去解读。
01 编译器是什么?
首先讲讲编译器是什么东西吧? 其实绝大多数用户都不清楚这是什么。 程序员们在写好应用的代码之后,在变成我们手机上安装的应用之前,还差最后一步就是编译。
简单来说,编译器就是把编程人员开发的高级语言程序,翻译成机器可执行的机器指令,这就是编译器。 它就像一位翻译官,是连接程序员与机器的桥梁。
由此来看,方舟编译器面向的是开发者的,但最终受益的还是消费者。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
打个比方,说计算机是汽车,那么软件就像汽车的操控系统一样。 编译器则是汽车发动机里最核心的汽油燃烧技术,将软件变成计算机的动力,其编译的效率,直接决定了用户的使用体验。 所以了解方舟编译器之前,我们必须得首先了解 Android 操作系统中的编译器的运行机制。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
安卓系统从2008年1.0到9.0,截至目前安卓系统大小版本超过15个。 十年发展安卓手机的体验已经今非昔比。 可生活中还有很多人诟病安卓手机没有iPhone流畅,那么安卓系统的程序是怎样运行的? 下面我们来阐述一下
Java的虚拟机的故事
Android 1.0刚发布的时候,使用的是一个叫Dalvik的虚拟机(Virtual Machine,简称 VM)里面集成了一个解释器,每次用户在安卓手机上运行APP时,就会唤醒解释器,来给安卓的硬件解释APP接下来要干什么。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
这个问题严重拖了安卓手机的后腿,所以Android2.2版本引入了JIT机制。 JIT比较聪明,当用户在安卓手机运行APP时,会同时将用户经常使用的功能编译为机器能直接执行的机器码,不用一句一句去翻译。 当出现不常用的功能时,再唤醒解释器翻译。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
但是每次启动APP都要重新编译一次,加上Dalvik虚拟机性能比较落后,所以谷歌在Android 5.0版本将虚拟机从Dalvik替代成ART,同时把JIT的编译器替代成AOT 。 AOT相比JIT的好处,就是不用每次打开APP都需要先编译一遍。 但是,坏处是安装应用慢和占用内存空间。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
在 Android 5.0 正式采用 ART 之前,Android 采用的是解释执行+JIT 的方式执行 Java 代码。 在这个阶段的系统是“边解释边执行”模式,代码效率比较低下,当时Android给人的感觉就是卡。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
目前的Android采用的是解释执行+JIT+AOT 的模式,但并没有摆脱一个前提,即应用在被打包成APK的时候,采用的还是Java代码。
JNI接口调度占用额外资源
现在大部分应用都是使用Java和C/C++等多种语言混合开发而成。 Java和C/C++属于两种不同架构的语言,为了使APP正常运行,它俩之间需要互通的接口——JNI。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
这就意味着手机硬件资源要分配一部分给JNI去做调度。 不仅占用了硬件资源,而且这种机制本身就效率较低。
安卓内存回收机制容易造成卡顿
当手机内存资源不够用的时候,安卓虚拟机就会召唤GC(Garbage Collection),让所有手机运行的Java线程全部暂停,GC机制,无法精确控制内存回收,所以性能较差的手机间歇的出现“抽搐般”的卡顿现象。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
以上这几个问题,一直影响着安卓手机的体验。 其中最主要的是Java 高级语言转换机器能懂的语言,这一转换过程直接导致了Android的卡顿。 反观iOS系统,直接使用Clang/LLVM来编译出机器码,就没有安卓还要一个中间层,也因为如此,我们感觉iOS系统一般更流畅。
02 方舟编译器牛在哪?"干掉"虚拟机
方舟编译器做的就是,将Java的所有语句统统翻译成机器码,最后打包成APK安装文件。 方舟编译器最大的优势在于它绕过了虚拟机。 简单来说,方舟编译器可以将高级语言(Java)直接变成机器码,无需再通过 Android 系统中内置的编译器。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
华为Mate 20 RS保时捷版(全网通)
京东商城
12999元
进入购买
总之,方舟编译器是完全替代了语言虚拟机的静态编译器,从此不再需要解释器。 相比现有的编译机制有以下明显优势:
1、方舟编译器是一种静态的编译方式,而现有的安卓系统,运行一个应用程序首先启动虚拟机,然后读入应用代码逐条解释执行,无法做到100%做到摆脱虚拟机,这也是当前安卓阵营面临的问题。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
简单一句话,只要是经过编译器编译的应用,在应用市场上架以后,用户下载的APK 就是编译好的了,方舟编译的应用在开发阶段就已完成了。
2、华为方舟编译器的静态编译方式可将语言里的动态特性直接翻译成机器码,手机安装应用程序后可全速运行程序,彻底干掉了虚拟机,极大提升了系统运行效率。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
方舟编译器对于系统在这方面的提升,官方曾这样描述:
一、EMUI 9.1对系统主要服务System Server进行静态编译化,带来了系统流畅度提升24%,系统响应性能提升44%以上的收益。
二、微博极速版实现了静态化编译后,流畅度提升高达60%。 通过上方演示视频来看,经过方舟编译优化的APP,在流畅度度方面的提升很明显。
03 新的内存垃圾回收机制
此外,方舟编译器还带来了新的系统垃圾回收机制。 以往安卓的垃圾回收机制是集中回收,由于Java虚拟机的特点,系统会不停的地自动回收内存垃圾,保证内存不会溢出。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
更要命的是,当内存低于某个标准值后,它就会自动杀掉优先级低的进程。 系统会集中关闭被标记的多余进程,这就造成了随机性的卡顿。 相信大家遇到过这种情况,启动游戏时,点按应用瞬间进入前会感觉莫名的卡顿,界面像是迟钝了一下。
提速安卓支撑鸿蒙?“大杀器”方舟编译器深度解析
而方舟编译器在这方面有什么不同,它的内存回收机制是随用随回收,回收时不需要暂停应用,而是直接回收内存垃圾,这大大提高了系统运行速度和效率。
小结:方舟编译器的优势,可以简单总结为以下五个方面:
1.安卓程序编译效果更好
2.安卓应用安装速度更快
3.APP运行速度更快
4.系统内存垃圾随用随清,对手机硬件的要求降低
5.省电
04 十年造方舟,为安卓提速为真,支撑鸿蒙也为实
十年磨一剑,没错,华为方舟编译器准备了十年之久。 2009年,华为启动5G基础技术研究的同时,开始创建编译组,第一批海内外研究人员加入。
2013年,华为推出面向基站领域的自研编译器HCC,并正式提出编译器框架构想。
2014年,众多海内外专家加入华为,方舟项目正式启动。 同时,编译器领域的顶级大佬,周志德(Fred Chow)的加入大大增强了研发实力
2016年,成立编译器与编程语言实验室。 2019年,华为方舟编译器正式面世!
方舟编译器既能统一适配安卓机器语言,自然也能适配成自家系统的机器语言——鸿蒙OS,方舟编译器为“安卓提速”为真,但能“支撑鸿蒙”也为实,它完全可称为让开发者从安卓到鸿蒙过渡的"诺亚方舟"。
05对外开源 构建生态
据悉,方舟编译器也将开放给第三方合作伙伴。 其后续会在 2019 年 11 月的绿盟开发者大会实现完整方舟编译器代码开源,让广大的应用开发者、手机厂商参与,共同构建开发者生态,使安卓体系变得更加完整强大。
未来方舟编译器是否能成功,还要看后续完整生态的搭建。 希望开发者积极参与进来,最终给消费者带来更为极致的体验。
总结:
从方舟编译器我们就能看出华为对研发的投入,以及对未来生态搭建的规划,或许,想要做一个操作系统并不难,比如阿里云OS,但难的是未来完整生态的构建。
无论怎么看待华为,目前,在国内也只有它有实力去干这件事情,并不只是说说而已,华为的终极目标很明显,就是在未来搭建全方位的生态。 我们期待这项技术能够普及开来,促进Android体系更加强大,也希望华为能在未来带给我们更多惊喜。


来源中关村在线



以上是关于yolov5安卓(鸿蒙)手机部署的主要内容,如果未能解决你的问题,请参考以下文章

中奖了!中奖了!HarmonyOS开启新时代,鸿蒙来了!安卓:“那我走?”

鸿蒙系统和安卓有哪些区别?鸿蒙会取代安卓吗?

一文看懂鸿蒙手机操作系统。和安卓iOS 有何区别?

怎么退回安卓系统?

华为手机2.0.0版本相当于安卓几

鸿蒙来了!能否与安卓iOS三足鼎立?