PaddleDetection学习3——使用Paddle-Lite在 Android 上部署PicoDet模型(fp16)

使用Paddle-Lite在 Android 上运行PicoDet模型(fp16)

  • 1. 环境准备
  • 2. 部署步骤
    • 2.1 下载Paddle-Lite-Demo
    • 2.2 打开 picodet_detection_demo项目
      • 2.2.1 修改build.gradle,配置国内镜像仓库
      • 2.2.2 NDK 配置错误问题
      • 2.2.3 gradle.properties文件配置
      • 2.2.4 NDK版本选择
    • 2.3 更新预测库支持 FP16
      • 2.3.1 下载预测库
      • 2.3.2 替换java 库
      • 2.3.3 替换c++库
    • 2.4 部署模型到移动端
    • 2.5 注意事项
      • 2.5.1 算法前后处理
      • 2.5.2 后处理写入模型结构

1. 环境准备

参考前一篇在 Android 上使用Paddle-Lite实现实时的目标检测功能

2. 部署步骤

参考目标检测 C++ API Demo 使用指南

2.1 下载Paddle-Lite-Demo

下载链接
目标检测 Demo 位于 Paddle-Lite-Demo/object_detection/android/app/cxx/picodet_detection_demo 目录

2.2 打开 picodet_detection_demo项目

2.2.1 修改build.gradle,配置国内镜像仓库

将原工程build.gradle文件中的

repositories {google()jcenter()
}

全部替换成对应的国内镜像加速仓库,修改后文件如下

// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {maven { url 'https://maven.aliyun.com/repository/google/' }maven { url 'https://maven.aliyun.com/repository/jcenter/'}}dependencies {classpath 'com.android.tools.build:gradle:3.4.0'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}allprojects {repositories {maven { url 'https://maven.aliyun.com/repository/google/' }maven { url 'https://maven.aliyun.com/repository/jcenter/'}}
}task clean(type: Delete) {delete rootProject.buildDir
}

2.2.2 NDK 配置错误问题

在导入项目、编译或者运行过程中遇到 NDK 配置错误的提示,请打开 File > Project Structure > SDK Location,修改 Andriod NDK location 为本机配置的 NDK 所在路径。

(如是是通过 Andriod Studio 的 SDK Tools 下载的 NDK,可以直接点击下拉框选择默认路径。 还有一种 NDK 配置方法,可以在 yolo_detection_demo/local.properties 文件中手动完成 NDK 路径配置,如下图所示。如果以上步骤仍旧无法解决 NDK 配置错误,请尝试根据 Andriod Studio 官方文档中的更新 Android Gradle 插件章节,尝试更新Android Gradle plugin版本。)
在这里插入图片描述

2.2.3 gradle.properties文件配置

问题:Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not “opens java.io” to unnamed module
在项目的gradle.properties文件,在org.gradle.jvmargs配置进行修改:

-add-exports=java.base/sun.nio.ch=ALL-UNNAMED \--add-opens=java.base/java.lang=ALL-UNNAMED \--add-opens=java.base/java.lang.reflect=ALL-UNNAMED -\-add-opens=java.base/java.io=ALL-UNNAMED \--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED

在这里插入图片描述

2.2.4 NDK版本选择

问题:invalid local symbol '__bss_start__' in global part of symbol table
NDK版本不同导致的,我这里用的是NDK版本是26.1.10909125,改为21.1.6352462后就能编译通过了。用第三方编译好了的库文件还有版本匹配的风险。
在这里插入图片描述

2.3 更新预测库支持 FP16

2.3.1 下载预测库

点击 Run 按钮,自动编译 APP ,该过程会自动下载 Paddle Lite 预测库和模型,需要联网。
在这里插入图片描述

默认下载的是v2.11_rc版本,不支持fp16预测。需要下载文件名带fp16的预测库。
在这里插入图片描述

2.3.2 替换java 库

(1)jar包
下载的预测库解压后将inference_lite_lib.android.armv8.clang.c++_shared.with_extra.with_cv.arm82_fp16\java\jar\PaddlePredictor.jar

替换 Demo 中的 Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/picodet_detection_demo/app/PaddleLite/java/PaddlePredictor.jar
(2)Java so
inference_lite_lib.android.armv8.clang.c++_shared.with_extra.with_cv.arm82_fp16\java\so\libpaddle_lite_jni.so替换 Demo 中的 Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/picodet_detection_demo/app/PaddleLite/java/libs/arm64-v8a/libpaddle_lite_jni.so

2.3.3 替换c++库

(1)inference_lite_lib.android.armv8.clang.c++_shared.with_extra.with_cv.arm82_fp16\cxx\include替换 Demo 中的 Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/picodet_detection_demo/app/PaddleLite/cxx/include
(2)inference_lite_lib.android.armv8.clang.c++_shared.with_extra.with_cv.arm82_fp16\cxx\lib\libpaddle_lite_api_shared.so 库替换 Demo 中的 Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/picodet_detection_demo/app/PaddleLite/cxx/libs/arm64-v8a/libpaddle_lite_api_shared.so

2.4 部署模型到移动端

手机连接电脑,打开 USB 调试和文件传输模式,并在 Android Studio 上连接自己的手机设备(手机需要开启允许从 USB 安装软件权限)
在这里插入图片描述
模型设置为picodet_s_320_cpu_fp16.nb
在这里插入图片描述
点击 Run 按钮,自动编译 APP安装到手机。成功后效果如下,图一:APP 安装到手机 图二: APP 打开后的效果,会自动识别图片中的物体并标记。
在这里插入图片描述
预测时间17ms。
在这里插入图片描述

2.5 注意事项

2.5.1 算法前后处理

Picodet 和 Picodet 增强版,算法的前、后处理完全相同
1.前处理:包括 Detection 常见的减均值等操作
2.后处理:包括 nms 等

2.5.2 后处理写入模型结构

(1) 该 Picodet Demo 使用PicoDet-S 320*320实现
(2)该 Demo 仅支持增强版模型替换,即将模型的后处理写入网络,具体操作方法请参考PaddleDetection导出部分。
注意:替换模型时,需要修改输入shape、类别数等。

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

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

相关文章

【Python机器学习】无监督学习(理论知识)

无监督学习包括没有已知输出、没有“老师指导”学习算法的各种机器学习。在无监督学习中,学习算法只有输入数据,并需要从这些数据中提取知识。 数据集的无监督变换是创建数据新的表示的算法,与数据的原始表示相比,新的表示可能更容…

flask分页宏增加更多参数

背景:我正在开发一个博客,核心的两个model是文章和文章类别。 现在想要实现的功能是:点击一个文章类别,以分页的形式显示这个文章类别下的所有文章,类似这种效果。 参考的书中分页宏只接受页数这一个参数,…

邦芒支招:十大秘诀助你轻松进名企

找到一份理想的工作是大学毕业生们最大的心愿,而进入那些知名的大企业更是广大毕业生的梦想。如何应付这些企业的面试成为了毕业生们最为关注的话题。 这些名企的面试往往有一定的程序,绝非草草而就。因此,一定要有所准备才能“百战不殆”。而要在面试前得到有关信息,常常采用…

iconfont矢量图标样式引入

font-face {font-family: "iconfont"; /* Project id 2848128 */src: url(//at.alicdn.com/t/font_2848128_mchidofoxgo.woff2?t1643706746390) format(woff2),url(//at.alicdn.com/t/font_2848128_mchidofoxgo.woff?t1643706746390) format(woff),url(//at.alicdn…

Keil5 MDK的安装

【STM32入门教程-2023版 细致讲解 中文字幕】 https://www.bilibili.com/video/BV1th411z7sn/?p3&share_sourcecopy_web&vd_source9e3e013d351349501787efa88d17f2e4 1.下载Keil5 MDK软件,双击打开 2.在D盘新建文件 3.安装 4.选择支持包(离线安…

easyui渲染隐藏域<input type=“hidden“ />为textbox可作为分割条使用

最近在修改前端代码的时候&#xff0c;偶然发现使用javascript代码渲染的方式将<input type"hidden" />渲染为textbox时&#xff0c;会显示一个神奇的效果&#xff0c;这个textbox输入框并不会隐藏&#xff0c;而是显示未一个细条&#xff0c;博主发现非常适合…

数据结构【DS】Ch6 图

文章目录 图的基本概念图的存储及基本操作图的遍历图的应用图的连通性问题最小生成树最短路径问题拓扑序列关键路径 图的基本概念 图的存储及基本操作 图的遍历 图的应用 图的连通性问题 最小生成树 最短路径问题 拓扑序列 关键路径

判断自守数

数学的世界有很多很漂亮的数字或者数字集合&#xff0c;比如梅森数&#xff0c;哥德巴赫猜想&#xff0c;水仙花数&#xff0c;完全数&#xff0c;自守数。今天我们就一起来探究一下自守数。自守数是指一个数的平方的尾数等于该数自身的自然数。例如&#xff1a;25^2 625&…

MySQL主从复制原理与实践:从配置到故障监控

文章目录 前言主从复制原理复制源主节点的工作从节点的工作复制流程的设计 主从复制环境搭建一、主从节点配置二、从节点开启复制步骤1、备份主节点的数据2、将数据同步到从节点3、从节点复制参数配置 三、验证复制环境 主从复制故障监控监控主从复制状态监控主从复制延迟 总结…

FastSpeech2——TTS论文阅读

笔记地址&#xff1a;https://flowus.cn/share/1683b50b-1469-4d57-bef0-7631d39ac8f0 【FlowUs 息流】FastSpeech2 论文地址&#xff1a;lFastSpeech 2: Fast and High-Quality End-to-End Text to Speechhttps://arxiv.org/abs/2006.04558 Abstract&#xff1a; tacotron→…

获取mac地址,内网ip,当前ip位置信息

import json import socket import time import requests from urllib.parse import quoteclass Home_Url():def get_mac(self):from psutil import net_if_addrsmac info net_if_addrs()for k, v in info.items():if k not in [以太网, en0] and 以太网 not in str(k):conti…

从0开始python算法工程师(一):安装conda

1.为什么要安装conda 主要是为了在命令行使用conda命令管理虚拟环境。 2.两种conda Windows用户&#xff0c;一般建议初学者都安装anaconda&#xff08;省事&#xff09;&#xff1b;Windows用户&#xff0c;熟练的安装者则安装miniconda&#xff08;省存储空间&#xff09;…

Microchip Studio修改工程名

打开工程后&#xff0c;右键选择重命名 右键工程重命名 关闭后回到工程下的文件夹 再次打开工程软件会显示加载失败&#xff0c;此时是找不到路径了 菜单栏打开工程 选择修改文件夹名字的路径下的cproj文件 然后点击关闭&#xff0c;会显示保存新的atsln文件&#xff0c;此时将…

安全基础~攻防特性3

文章目录 SSTI(模板注入)1. 简介2. 成因3. 常见框架存在注入4. 判断存在SSTI SSTI(模板注入) 1. 简介 (Server-Side Template Injection) 服务端模板注入 1、使用框架&#xff08;MVC的模式&#xff09;&#xff0c;如python的flask&#xff0c;php的tp&#xff0c;java的sp…

实战内网穿透NPS搭建过程

前提条件 首先你要有个公网IP的服务器&#xff0c;既然是内网穿透&#xff0c;那必然是通过公网IP或者域名访问本地服务。 官网下载地址 https://github.com/ehang-io/nps/releases 服务端 选择linux_amd64_server.tar.gz 客户端 选择windows_amd64_client.tar.gz 服…

Centos 7 单机部署 consul

一、下载安装 参考官网文档 Install | Consul | HashiCorp Developer 进入Centos 执行下面命令 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo yum -y install consul 这种方法安装完成…

Spring MVC精解:技术内幕与最佳实践

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Spring MVC&#xff0c;它是Spring的一个模块&#xff0c;专门用来构建Web应用程序。提供了一种轻量级的方式来构建动态网页。就像小黑我刚开始接触Java时候一样&#xff0c;可能对这些听起来很高…

梁山泊国潮风礼盒,传承经典,贺礼新春

在春节来临之际&#xff0c;梁山泊隆重推出新年中国红礼盒酒&#xff0c;为您传递新年的祝福与关爱。这款酒以其独特的魅力&#xff0c;为您带来美好的祝愿和愉悦的享受。中国风国潮礼盒采用中国传统红色为主色调&#xff0c;象征着吉祥、喜庆和繁荣。红色的背景上&#xff0c;…

前端-云点播技术

一、简介 云点播&#xff08;Cloud Video On Demand&#xff09;是一种基于云计算平台提供的视频点播服务。这种服务允许用户在需要的时候按需观看视频内容&#xff0c;而无需等待下载完成。以下是一些关于云点播技术的常见特征和要点&#xff1a; 存储和管理&#xff1a; 云存…

安科瑞Acrel-2000Z型电力监控系统在常州恒生工业园光伏项目上的的设计与应用——安科瑞赵嘉敏

概述 针对用户屋顶光伏发电电力监测&#xff0c;通过微机保护装置、开关柜综合测控装置、电气接点无线测温产品、电能质量在线监测装置、配电室环境监设备、弧光保护装置等设备组成综合自动化的综合监控系统&#xff0c;实现了变电、配电、用电的安全运行和管理。监控范围包括…