安卓端使用ncnn部署yolov5(v6.0)

2023-05-16

ncnn是腾讯公司开源的一个专为手机端极致优化的高性能神经网络前向计算框架。ncnn从设计之初,就深刻考虑手机端的部署和使用,无需第三方依赖,跨平台,手机端cpu的速度快于目前所有已知的开源框架。基于ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能APP,将AI带到你的指尖。

ncnn部署yolov5的整体步骤可以分为如下:

  1. 训练.pt,把.pt模型转为.onnx模型
  2. 把.onnx模型转换为ncnn模型(.bin和.param)
  3. Android Studio编译工程成.apk

注意整个流程的版本要求很严格,如果对于ncnn不熟的话,会踩很多坑,本人用yolov5(v6.0)版本的yolov5s.pt模型实验成功。简单列举下我的环境:

  • python==3.6
  • torch==1.10.0+cu111
  • onnx==1.7.0
  • onnx-simplifier==0.4.10
  • onnxruntime==1.10.0

 一、转换.pt到.onnx

github上下载yolov5的6.0版本,下载yolov5s.pt预训练文件,然后调用export.py进行模型转换

python export.py --weights yolov5s.pt --include onnx --img 640 --train --simplify

 --include用来指明转换为什么格式的模型

--train是为了去除后处理,即不直接输出一个分类结果output,而是将三个特征图作为输出

--simplify是简化模型,这里一步完成,不再需要onnxsim进行单独简化。

二、转换onnx到ncnn

ncnn格式的模型包含两个文件,分别是.bin和.param。这里的转换模型可以编译ncnn生成转换工具进行转换,当然,简单粗暴的,我们也可以用现成的工具。

一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine

转换成功后,把生成的yolov5s-sim-opt.bin和yolov5s-sim-opt.param下载下来即可。这两个文件后续要放在ncnn的AS工程里。

三、Android Studio编译yolov5生成.apk

在github上下载工程 

https://github.com/nihui/ncnn-android-yolov5

然后把此工程用Android Studio打开。注意下载AS时,可以不下载JDK,使用AS自带的JDK就行,然后下载必要的SDK后就可以进行开发了。具体AS下载过程这里不再赘述。

然后来到ncnn的版本发布页,下载编译好的包Releases · Tencent/ncnn · GitHub

 

 下载好后提取到 app/src/main/jni里。

然后把yolov5s-sim-opt.bin和yolov5s-sim-opt.param放在文件夹ncnn-andorid-yolov5/app/src/main/assets里。

此时文件基本准备好了,但需要修改几个地方:

3.1. CMakeLists.txt修改

这个文件定义了工程的名字,编译规则等信息。主要注意下ncnn_DIR的变量修改,要指向刚才下载的ncnn-andoroid-vulkan

3.2. param修改

打开yolov5s-sim-opt.param,找到Reshape行,把0=6400    0=1600    0=400全部修改为0=-1

3.3. yolov5ncnn_jni.cpp修改

这个文件是网络推理的主要文件,需要修改读取ncnn模型的路径,如果是自己训练的模型还要修改class_name的列表, 另外还需修改stride16和stride32的输出

 stride16和stride32的修改根据.param文件里的Permute后的数字进行修改,如下:

  修改完成后,运行程序,就可以愉快的玩耍了。可以直接数据线连接手机进行调试,效果图如下:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安卓端使用ncnn部署yolov5(v6.0) 的相关文章

  • RTP分析

    参考 RTP xff08 A Transport Protocol for Real Time Applications 实时传输协议 xff0c rfc3550 xff09 RTP Payload Format for H 264 Vid
  • VS链接器工具错误 LNK2019:无法解析的外部符号

    常见的问题 以下是一些导致 LNK2019 的常见问题 xff1a 未链接的对象文件或包含符号定义的库 在 Visual Studio 中 xff0c 验证包含定义源代码文件是生成 xff0c 分别链接为项目的一部分 在命令行中 xff0c
  • FFmpeg合并视频流与音频流

    mux h ifndef MUX H define MUX H ifdef cplusplus extern 34 C 34 endif include 34 common h 34 include 34 encode h 34 typed
  • 解决电脑同时使用有线网上内网,无线网上外网的冲突

    由于内网有网络限制 xff08 限制娱乐等 xff09 xff0c 所以肯定要用外网 xff08 无线网卡 xff09 但是有的网站只能用内网访问 xff0c 比如gitlab xff0c oa等 我电脑刚开始连接了wifi后上不了gitl
  • Python斗鱼直播间自动发弹幕脚本

    工具 xff1a Python xff0c Chrome浏览器 因为不会用短信验证码登录 xff0c 所以使用QQ帐号登录 xff0c 必须要斗鱼帐号绑定QQ号 难点主要是帧的切换 查找元素可以通过chrome浏览器鼠标指向该元素 xff0
  • Qt+FFmpeg录屏录音

    欢迎加QQ群309798848交流C C 43 43 linux Qt 音视频 OpenCV 源码 xff1a Qt 43 FFmpeg录屏录音 NanaRecorder 之前的录屏项目ScreenCapture存在音视频同步问题 xff0
  • Qt源码分析(一)

    欢迎加QQ群309798848交流C C 43 43 linux Qt 音视频 OpenCV 源码面前 xff0c 了无秘密 阅读源码能帮助我们理解实现原理 xff0c 然后更灵活的运用 接下来我用VS2015调试Qt5 9源码 首先提一下
  • python实现批量提取图片中文字的小工具

    要实现批量提取图片中的文字 xff0c 我们可以使用Python的pytesseract和Pillow库 pytesseract是一个OCR xff08 Optical Character Recognition xff0c 光学字符识别
  • 在虚拟机与wsl中编译内核,并启用kasan

    linux内核编译 虚拟机编译自己的内核WSL编译自己的内核测试kasan 想学习一下kasan的相关配置 xff0c 但kasan是内核中的相关配置 xff0c 开启得编译内核 xff0c 本文使用虚拟机与wsl两种方式来编译内核启动ka
  • mac时间机器删除旧备份

    查 span class token function sudo span tmutil listlocalsnapshots 删除 span class token function sudo span tmutil deleteloca
  • Linux的ssh服务

    Linux中真机与虚拟机的连接 1 先修改虚拟机的IP xff0c 在虚拟机中输入命令 xff1a nm connection editor 2 选中已存在的System eth0 xff0c 选择Delete 然后点击Add xff0c
  • 51单片机——控制步进电机加速、减速及反转

    加速 xff1a include lt reg52 h gt define uchar unsigned char define uint unsigned int define MotorData P1 uchar phasecw 4 6
  • 【安装教程】——Linux安装opencv

    安装教程 Linux安装opencv 一 安装相关软件包二 获取Source三 安装OpenCV 未完待续 一 安装相关软件包 安装相关软件包 打开终端 xff0c 安装以下软件包 sudo apt install build span c
  • 请教:linux下的/opt目录是做什么用的?

    请教 linux下的 opt目录是做什么用的 蛋疼YMG 浏览 4934 次 发布于2014 10 24 13 35 荒漠探险 答题闯关 好礼连连 最佳答案 opt 主机额外安装软件所摆放的目录 默认是空的 一般安装软件的时候 xff0c
  • kali里装java

    1 下载最新的JAVA JDK jdk 8u91 linux x64 2 解压缩文件并移动至 opt tar xzvf jdk 8u91 linux x64 tar gz mv jdk1 8 0 91 opt cd opt jdk1 8 0
  • ffmpeg--tcp

    TCP代码分析 xff1a include 34 avformat h 34 include 34 libavutil avassert h 34 include 34 libavutil parseutils h 34 include 3
  • GO调用ffmpeg动态库

    package main cgo CFLAGS I usr local ffmpeg include cgo LDFLAGS L usr local ffmpeg lib lavformat include 34 libavformat a
  • ftp上传文件时出现 550 Permission denied,不是用户权限问题

    查了半天 xff0c 发现是因为服务器已经有同名的文件了 xff0c 所以无法上传 xff0c 上传文件名改成不重复的就可以了
  • Ubuntu16.04解决登录闪退问题

    Ubuntu16 04解决登录闪退问题 夏哈哈 64 64 2020 07 21 08 42 46 637 收藏 1 分类专栏 xff1a 程序开发 Ubuntu装机 文章标签 xff1a 深度学习 版权 问题 xff1a Ubuntu16
  • syntax error at or near “.“

    SQL select t id t name t sex t age t address t phone from user where id 61 1 Cause org postgresql util PSQLException ERR

随机推荐

  • ubuntu编译安装opencv4.5.1(C++)

    1 在https github com opencv opencv上下载opencv源码 包括opencv4 5 1和opencv contrib4 5 1 也可以不用 xff0c 其中opencv是主体 xff0c opencv cont
  • Pytorch自定义CNN网络实现猫狗分类

    数据集下载地址 xff1a https www microsoft com en us download confirmation aspx id 61 54765 Dogs vs Cats 猫狗大战 来源Kaggle上的一个竞赛题 xff
  • yolov5训练自己的数据集

    yolo系列在目标检测领域的地位就不用说了 xff0c github上有pytorch实现的训练yolov5的代码 xff0c 本文将用自己的数据去训练一个yolov5的模型 参考代码地址 https github com ultralyt
  • pytorch用自己数据训练VGG16

    一 VGG16的介绍 VGG16是一个很经典的特征提取网络 xff0c 原来的模型是在1000个类别中的训练出来的 xff0c 所以一般都直接拿来把最后的分类数量改掉 xff0c 只训练最后的分类层去适应自己的任务 xff08 又叫迁移学习
  • mmdetection v2.x模型训练与测试

    因为工作关系 xff0c 接触到了mmdetection 它是商汤科技和香港中文大学开源的一款基于pytorch底层的目标检测工具箱 xff0c 隶属于mmlab项目 mmdetection 2 7文件结构 其中configs文件夹下为网络
  • Pytorch用自己的数据训练ResNet

    一 ResNet算法介绍 残差神经网络 ResNet 是由微软研究院的何恺明等人提出的 ResNet 在2015 年的ILSVRC中取得了冠军 通过实验 xff0c ResNet随着网络层不断的加深 xff0c 模型的准确率先是不断的提高
  • 新装Ubuntu系统基本环境安装配置(conda)

    Ubuntu系统用conda来配置深度学习环境 1 配置显卡驱动 查看显卡驱动 nvidia smi 如果是这个命令没有反应 xff0c 就是没有显卡驱动 xff0c 这个时候要先安装显卡驱动 然后再安装cuda xff0c 在这个图中 x
  • Python源码加密与Pytorch模型加密

    0 前言 深度学习领域 xff0c 常常用python写代码 xff0c 而且是建立在一些开源框架之上 xff0c 如pytorch 在实际的项目部署中 xff0c 也有用conda环境和python代码去部署服务器 xff0c 在这个时候
  • Paddle-Lite终端部署深度学习模型流程

    Paddle Lite是飞桨基于Paddle Mobile全新升级推出的端侧推理引擎 xff0c 在多硬件 多平台以及硬件混合调度的支持上更加完备 xff0c 为包括手机在内的端侧场景的AI应用提供高效轻量的推理能力 xff0c 有效解决手
  • nohup: failed to run command `java': No such file or directory

    问题描述 xff1a 平台研发项目 xff0c ActiveQM做消息队列 xff0c zookeeper做集群 xff0c zkui做可视化服务管理 xff0c skynet是引擎服务 xff0c skynet下面有一个xmanager是
  • 【原理篇】一文读懂Faster RCNN

    0 Faster RCNN概述 论文地址 xff1a https arxiv org pdf 1506 01497 pdf Faster R CNN源自2016年发表在cs CV上的论文 Faster R CNN Towards Real
  • 【原理篇】一文读懂Mask RCNN

    Mask RCNN 何凯明大神的经典论文之一 xff0c 是一个实例分割算法 xff0c 正如文中所说 xff0c Mask RCNN是一个简单 灵活 通用的框架 xff0c 该框架主要作用是实例分割 xff0c 目标检测 xff0c 以及
  • 【原理篇】一文读懂FPN(Feature Pyramid Networks)

    论文 xff1a feature pyramid networks for object detection 论文链接 xff1a https arxiv org abs 1612 03144 这篇论文是CVPR2017年的文章 xff0c
  • pytorch用voc分割数据集训练FCN

    语义分割是对图像中的每一个像素进行分类 xff0c 从而完成图像分割的过程 分割主要用于医学图像领域和无人驾驶领域 和其他算法一样 xff0c 图像分割发展过程也经历了传统算法到深度学习算法的转变 xff0c 传统的分割算法包括阈值分割 分
  • 【学习笔记】语义分割综述

    语义分割就是图像分割 xff0c 是图像像素级的分类 xff0c 即给图像的每一个像素点分类 与之临近的一个概念叫实例分割 xff0c 实例分割就是语义分割 43 目标检测 语义分割只能分割出所有同类的像素 xff0c 目标检测把不同的个体
  • pytorch用自己数据集训练Unet

    在图像分割这个问题上 xff0c 主要有两个流派 xff1a Encoder Decoder和Dialated Conv 本文介绍的是编解码网络中最为经典的U Net 随着骨干网路的进化 xff0c 很多相应衍生出来的网络大多都是对于Une
  • 【史上最全】重装ubuntu20.04系统基本环境配置

    最近新买电脑重装ubuntu玩深度学习 xff0c 踩了两天坑总结处下列流程 一 重装系统 xff08 U盘方式 xff09 ubuntu20 04镜像文件下载地址 Ubuntu 20 04 4 Desktop 64 bit 在ubuntu
  • PaddleDetection2.x训练、部署自己的模型

    PaddleDetection是百度Paddle家族的一个目标检测开发套件 个人感觉Paddle的优点是模型比较丰富 xff0c 支持的部署方式较多 xff08 python C 43 43 移动端等 xff09 xff0c 缺点是坑比较多
  • TensorRT(C++)部署 Pytorch模型

    众所周知 xff0c python训练pytorch模型得到 pt模型 但在实际项目应用中 xff0c 特别是嵌入式端部署时 xff0c 受限于语言 硬件算力等因素 xff0c 往往需要优化部署 xff0c 而tensorRT是最常用的一种
  • 安卓端使用ncnn部署yolov5(v6.0)

    ncnn是腾讯公司开源的一个专为手机端极致优化的高性能神经网络前向计算框架 ncnn从设计之初 xff0c 就深刻考虑手机端的部署和使用 xff0c 无需第三方依赖 xff0c 跨平台 xff0c 手机端cpu的速度快于目前所有已知的开源框