行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)
行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)
目录
行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)
1. 前言
2. 人体检测数据集说明
3. 基于YOLOv5的人体检测模型训练
4.人体检测模型Android部署
(1) 将Pytorch模型转换ONNX模型
(2) 将ONNX模型转换为TNN模型
(3) Android端上部署模型
(4) 一些异常错误解决方法
5. 人体检测效果
6.项目源码下载
1. 前言
这是项目《行人检测(人体检测)》系列之《Android实现人体检测(含源码,可实时人体检测)》;本篇主要分享将Python训练后的YOLOv5的人体检测模型移植到Android平台。我们将开发一个简易的、可实时运行的人体检测Android Demo。
考虑到原始YOLOv5的模型计算量比较大,鄙人在YOLOv5s基础上,开发了一个非常轻量级的的人体检测模型yolov5s05_320。从效果来看,Android人体检测模型的检测效果还是可以的,高精度版本YOLOv5s平均精度平均值mAP_0.5:0.95=0.84354,而轻量化版本yolov5s05_416平均精度平均值mAP_0.5:0.95=0.76103左右。APP在普通Android手机上可以达到实时的检测识别效果,CPU(4线程)约30ms左右,GPU约25ms左右 ,基本满足业务的性能需求。
先展示一下Android Demo人体检测的效果
【Android APP体验】https://download.csdn.net/download/guyuealian/87441942
【项目源码下载】 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)
【尊重原创,转载请注明出处】https://blog.csdn.net/guyuealian/article/details/128954615
更多项目《行人检测(人体检测)》系列文章请参考:
- 行人检测(人体检测)1:人体检测数据集(含下载链接):https://blog.csdn.net/guyuealian/article/details/128821763
- 行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码):https://blog.csdn.net/guyuealian/article/details/128954588
- 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测):https://blog.csdn.net/guyuealian/article/details/128954615
- 行人检测(人体检测)4:C++实现人体检测(含源码,可实时人体检测):https://blog.csdn.net/guyuealian/article/details/128954638
如果需要进行人像分割,实现一键抠图效果,请参考文章:《一键抠图Portrait Matting人像抠图 (C++和Android源码)》
2. 人体检测数据集说明
目前收集VOC,COCO和MPII数据集,总数据量约10W左右,可用于人体(行人)检测模型算法开发。这三个数据集都标注了人体检测框,但没有人脸框,考虑到很多项目业务需求,需要同时检测人脸和人体框;故已经将这三个数据都标注了person和face两个标签,以便深度学习目标检测模型训练。
关于人体检测数据集使用说明和下载,详见另一篇博客说明:《行人检测(人体检测)1:人体检测数据集(含下载链接)》 行人检测(人体检测)1:人体检测数据集(含下载链接)_AI吃大瓜的博客-CSDN博客
3. 基于YOLOv5的人体检测模型训练
官方YOLOv5给出了YOLOv5l,YOLOv5m,YOLOv5s等模型。考虑到手机端CPU/GPU性能比较弱鸡,直接部署yolov5s运行速度十分慢。所以本人在yolov5s基础上进行模型轻量化处理,即将yolov5s的模型的channels通道数全部都减少一半,并且模型输入由原来的640×640降低到416×416或者320×320,该轻量化的模型我称之为yolov5s05。轻量化后的模型yolov5s05比yolov5s计算量减少了16倍,参数量减少了7倍。
下面是yolov5s05和yolov5s的参数量和计算量对比:
模型 | input-size | params(M) | GFLOPs |
yolov5s | 640×640 | 7.2 | 16.5 |
yolov5s05 | 416×416 | 1.7 | 1.8 |
yolov5s05 | 320×320 | 1.7 | 1.1 |
yolov5s05和yolov5s训练过程完全一直,仅仅是配置文件不一样而已;碍于篇幅,本篇博客不在赘述,详细训练过程请参考: 《行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码)》https://blog.csdn.net/guyuealian/article/details/128954588
4.人体检测模型Android部署
(1) 将Pytorch模型转换ONNX模型
训练好yolov5s05或者yolov5s模型后,你需要将模型转换为ONNX模型,并使用onnx-simplifier简化网络结构
# 转换yolov5s05模型
python export.py --weights "data/model/yolov5s05_320/weights/best.pt" --img-size 320 320
# 转换yolov5s模型
python export.py --weights "data/model/yolov5s_640/weights/best.pt" --img-size 640 640
GitHub: https://github.com/daquexian/onnx-simplifier
Install: pip3 install onnx-simplifier
(2) 将ONNX模型转换为TNN模型
目前CNN模型有多种部署方式,可以采用TNN,MNN,NCNN,以及TensorRT等部署工具,鄙人采用TNN进行Android端上部署:
TNN转换工具:
- (1)将ONNX模型转换为TNN模型,请参考TNN官方说明:TNN/onnx2tnn.md at master · Tencent/TNN · GitHub
- (2)一键转换,懒人必备:一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine (可能存在版本问题,这个工具转换的TNN模型可能不兼容,建议还是自己build源码进行转换,2022年9约25日测试可用)
(3) Android端上部署模型
项目实现了Android版本的人体检测Demo,部署框架采用TNN,支持多线程CPU和GPU加速推理,在普通手机上可以实时处理。Android源码核心算法YOLOv5部分均采用C++实现,上层通过JNI接口调用
package com.cv.tnn.model;import android.graphics.Bitmap;public class Detector {static {System.loadLibrary("tnn_wrapper");}/**** 初始化模型* @param model: TNN *.tnnmodel文件文件名(含后缀名)* @param root:模型文件的根目录,放在assets文件夹下* @param model_type:模型类型* @param num_thread:开启线程数* @param useGPU:关键点的置信度,小于值的坐标会置-1*/public static native void init(String model, String root, int model_type, int num_thread, boolean useGPU);/**** 检测* @param bitmap 图像(bitmap),ARGB_8888格式* @param score_thresh:置信度阈值* @param iou_thresh: IOU阈值* @return*/public static native FrameInfo[] detect(Bitmap bitmap, float score_thresh, float iou_thresh);
}
如果你想在这个Android Demo部署你自己训练的YOLOv5模型,你可将训练好的Pytorch模型转换ONNX ,再转换成TNN模型,然后把TNN模型代替你模型即可。
(4) 一些异常错误解决方法
TNN推理时出现:Permute param got wrong size
官方YOLOv5: GitHub - ultralytics/yolov5: YOLOv5
行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)相关推荐
- 面部表情识别3:Android实现表情识别(含源码,可实时检测)
面部表情识别3:Android实现表情识别(含源码,可实时检测) 目录 面部表情识别3:Android实现表情识别(含源码,可实时检测) 1.面部表情识别方法 2.人脸检测方法 3.面部表情识别模型训 ...
- 体验Android:个人所得税计算器 含源码
体验Android 个人所得税计算器 含源码 http://files.cnblogs.com/mobile/ptc.rar 转载于:https://www.cnblogs.com/mobile/ar ...
- 用Linux / C实现基于自动扩/减容线程池+epoll反应堆检测沉寂用户模型的服务器框架(含源码)
用Linux/ C实现基于自动扩/减容线程池+epoll反应堆模型的服务器框架 前言 服务器端源码 客户端源码 自定义库 helper.c 和 helper.h helper.c helper.h M ...
- 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)
跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 目录 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 1. 前言 2. 跌倒检测数据集说明 3. 基于Y ...
- 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测)
Android实现戴眼镜检测和识别(含源码,可实时检测) 目录 Android实现戴眼镜检测和识别(含源码,可实时检测) 1.戴眼镜检测和识别方法 2.戴眼镜人脸检测 3.戴眼镜识别模型训练 4.戴眼 ...
- Android实现红绿灯检测(含Android源码 可实时运行)
Android实现红绿灯检测(含Android源码 可实时运行) 目录 Android实现红绿灯检测(含Android源码 可实时运行) 1. 前言 2. 红绿灯检测数据集说明 3. 基于YOLOv5 ...
- DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对《我要打篮球》视频段进行实时目标检测
DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对<我要打篮球>视频段进行实时目标检测 目录 输出结果 设计思路 核心代码 相关文章 成功解决AttributeError ...
- 小程序源码:升级版手机检测微信工具
这是一款升级版检测工具 自动检测手机真伪,序列号等等 另外还可以给手机检测各项功能是否正常 由于能检测的项目太多,所以大家到时候自行研究吧 小编就不多做介绍 另外支持多做流量主模式,比如激励视频,ba ...
- 【Matlab瑕疵检测】阙值瓶盖瑕疵检测【含源码 730期】
一.代码运行视频(哔哩哔哩) [Matlab瑕疵检测]阙值瓶盖瑕疵检测[含源码 730期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLAB ...
最新文章
- ThInkPHP验证码不显示,解决方法汇总
- 不越狱换壁纸_9 款优质、免费越狱插件
- 对联一副,勉励奋斗在网络事业上的兄弟们
- MySQL和mq一致性,Mysql与Redis一致性问题
- 坎蒂雷赋权法 matlab,干货 | 利用MATLAB实现FMCW雷达中的常用角度估计方法
- 在.NET Core 中实现健康检查
- signature=a662b42175c342c2f67535627a2cf0a4,California and Nevada Railroad
- nginx反向代理配置去除前缀
- Java 实例 - 测试两个字符串区域是否相等
- W3C 宣布:WebAuthn 成为正式 Web 标准
- 排序算法之——快速排序分析
- 用 Javascript 生成二维码
- EasyUI+JavaWeb奖助学金管理系统[18]-奖助学金申请功能开发
- 推荐一个简单好用的HTML编辑器
- 五种流行虚拟化桌面优缺点PK
- Houdini 导出粒子替代物至Maya渲染
- 《股票魔法师》第6-7章读书分享
- mysql8 设置binlog的保留时间
- 深入Android系统权限和root权限
- 一战赚了2000亿,功成身退卸任字节跳动CEO:可怕的张一鸣
热门文章
- 洛谷 题解 P1828 【香甜的黄油 Sweet Butter】
- 提升 Hybrid 体验:饿了么双十一 PHA 框架技术实践
- 中国农业大规模推广使用绿色环保化肥减少环境污染
- [MDP]的案例gridworld
- 爱奇艺与厦门大学成立电影修复联合实验室:人工与AI结合探索高效、高品质的修复标准化流程...
- 高德地图实现地图打点,点击后展示小弹框
- lol手游显示服务器关闭,演员惨遭一锅端!LOL手游紧急关闭服务器,端游为啥不学?...
- selenium 刷新页面
- Unity3d C# 开发微信小游戏分享图片、朋友圈等功能实现(含源码)
- 制作一个小型双节履带底盘【内附资料下载链接】