行人检测(人体检测)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. 行人检测(人体检测)1:人体检测数据集(含下载链接):https://blog.csdn.net/guyuealian/article/details/128821763
  2. 行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码):https://blog.csdn.net/guyuealian/article/details/128954588
  3. 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测):https://blog.csdn.net/guyuealian/article/details/128954615
  4. 行人检测(人体检测)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实现人体检测(含源码,可实时人体检测)相关推荐

  1. 面部表情识别3:Android实现表情识别(含源码,可实时检测)

    面部表情识别3:Android实现表情识别(含源码,可实时检测) 目录 面部表情识别3:Android实现表情识别(含源码,可实时检测) 1.面部表情识别方法 2.人脸检测方法 3.面部表情识别模型训 ...

  2. 体验Android:个人所得税计算器 含源码

    体验Android 个人所得税计算器 含源码 http://files.cnblogs.com/mobile/ptc.rar 转载于:https://www.cnblogs.com/mobile/ar ...

  3. 用Linux / C实现基于自动扩/减容线程池+epoll反应堆检测沉寂用户模型的服务器框架(含源码)

    用Linux/ C实现基于自动扩/减容线程池+epoll反应堆模型的服务器框架 前言 服务器端源码 客户端源码 自定义库 helper.c 和 helper.h helper.c helper.h M ...

  4. 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)

    跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 目录 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 1. 前言 2. 跌倒检测数据集说明 3. 基于Y ...

  5. 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测)

    Android实现戴眼镜检测和识别(含源码,可实时检测) 目录 Android实现戴眼镜检测和识别(含源码,可实时检测) 1.戴眼镜检测和识别方法 2.戴眼镜人脸检测 3.戴眼镜识别模型训练 4.戴眼 ...

  6. Android实现红绿灯检测(含Android源码 可实时运行)

    Android实现红绿灯检测(含Android源码 可实时运行) 目录 Android实现红绿灯检测(含Android源码 可实时运行) 1. 前言 2. 红绿灯检测数据集说明 3. 基于YOLOv5 ...

  7. DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对《我要打篮球》视频段进行实时目标检测

    DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对<我要打篮球>视频段进行实时目标检测 目录 输出结果 设计思路 核心代码 相关文章 成功解决AttributeError ...

  8. 小程序源码:升级版手机检测微信工具

    这是一款升级版检测工具 自动检测手机真伪,序列号等等 另外还可以给手机检测各项功能是否正常 由于能检测的项目太多,所以大家到时候自行研究吧 小编就不多做介绍 另外支持多做流量主模式,比如激励视频,ba ...

  9. 【Matlab瑕疵检测】阙值瓶盖瑕疵检测【含源码 730期】

    一.代码运行视频(哔哩哔哩) [Matlab瑕疵检测]阙值瓶盖瑕疵检测[含源码 730期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLAB ...

最新文章

  1. ThInkPHP验证码不显示,解决方法汇总
  2. 不越狱换壁纸_9 款优质、免费越狱插件
  3. 对联一副,勉励奋斗在网络事业上的兄弟们
  4. MySQL和mq一致性,Mysql与Redis一致性问题
  5. 坎蒂雷赋权法 matlab,干货 | 利用MATLAB实现FMCW雷达中的常用角度估计方法
  6. 在.NET Core 中实现健康检查
  7. signature=a662b42175c342c2f67535627a2cf0a4,California and Nevada Railroad
  8. nginx反向代理配置去除前缀
  9. Java 实例 - 测试两个字符串区域是否相等
  10. W3C 宣布:WebAuthn 成为正式 Web 标准
  11. 排序算法之——快速排序分析
  12. 用 Javascript 生成二维码
  13. EasyUI+JavaWeb奖助学金管理系统[18]-奖助学金申请功能开发
  14. 推荐一个简单好用的HTML编辑器
  15. 五种流行虚拟化桌面优缺点PK
  16. Houdini 导出粒子替代物至Maya渲染
  17. 《股票魔法师》第6-7章读书分享
  18. mysql8 设置binlog的保留时间
  19. 深入Android系统权限和root权限
  20. 一战赚了2000亿,功成身退卸任字节跳动CEO:可怕的张一鸣

热门文章

  1. 洛谷 题解 P1828 【香甜的黄油 Sweet Butter】
  2. 提升 Hybrid 体验:饿了么双十一 PHA 框架技术实践
  3. 中国农业大规模推广使用绿色环保化肥减少环境污染
  4. [MDP]的案例gridworld
  5. 爱奇艺与厦门大学成立电影修复联合实验室:人工与AI结合探索高效、高品质的修复标准化流程...
  6. 高德地图实现地图打点,点击后展示小弹框
  7. lol手游显示服务器关闭,演员惨遭一锅端!LOL手游紧急关闭服务器,端游为啥不学?...
  8. selenium 刷新页面
  9. Unity3d C# 开发微信小游戏分享图片、朋友圈等功能实现(含源码)
  10. 制作一个小型双节履带底盘【内附资料下载链接】