乐于分享
好东西不私藏

【Android】拍照后只需0.5秒实现目标检测计数,将YOLOv5模型移植到平台的一种应用

【Android】拍照后只需0.5秒实现目标检测计数,将YOLOv5模型移植到平台的一种应用
一、项目背景:
    在某些特定场景下,如果需要快速对某一类或某一种物体进行计数,数量在20以内的话还行,但是如果数量超过了20,而且无规则摆放,肉眼计数的效率极低,于是我就有了以下的摸索。
    本项目以识别回形针进行计数为例。
内容不是非常详细,有些东西需要你自己摸索,全写清楚了你就享受不到解决问题的过程了。
免责声明:以下内容仅代表个人的一种方案,不是最专业的方案,本人也不是专业研究这个方向的专家,不对过程与结果负责。
二、基于项目代码:
  1. YOLOv5-v6.0项目地址:https://github.com/ultralytics/yolov5/releases/tag/v6.0
  2. Ncnn-Android-yolov5项目地址:https://github.com/nihui/ncnn-android-yolov5
  3. 软件体验版本v1.0下载地址(只有安卓版):https://www.123pan.com/s/rhqLVv-FPRSv.html
三、配置项目环境:
  1. 下载YOLOv5-v6.0项目代码解压,建议使用6.0版本,避免参数不对应
  2. 有NVIDIA显卡的话安装显卡驱动、CUDA、cuDNN
  3. Windows端安装Anaconda或者Miniconda,创建conda环境:在cmd输入 conda create -n yolo python=3.9
  4. 进入yolo环境,并进入YOLOv5-6.0项目代码目录,执行命令安装项目依赖
四、标注训练数据:
  1. 安装Labelimg:pip install Labelimg,执行运行命令:Labelimg
  1. 尽量多标注数据,并准备一些特征相似的物品图片用来作为背景
五、训练模型:
  1. 默认基于yolov5s.pt训练,原来第一个标签是“person”,所以在训练集里加一些含“person”的图片作为背景图
  2. 修改yaml文件,关于数据集的分布
  3. 修改训练程序train.py的部分参数:默认在300个epoch之后没提升会停止训练,建议把“--patience”改到1000以上(仅供参考,所有参数请根据实际情况酌情修改)
  4. 在conda环境中运行train.py开始训练,训练完得到的best.pt就是本次训练得到的最佳模型
六、模型转换:
  1. 将模型从 .pt转换为 .bin与 .param,参考:https://blog.csdn.net/LHYlhy0825/article/details/123060624
七、将模型移植到安卓源码并打包App:
  1. 下载Ncnn-Android-yolov5项目源码:https://github.com/nihui/ncnn-android-yolov5,根据项目说明下载相关代码依赖
  2. 将项目导入AndroidStudio,替换模型
  3. 要避免修改其他代码的话,替换的文件尽量改成原有模型文件的名称
  4. 打包App
    创建签名教程:https://blog.csdn.net/Master_Cui/article/details/115736145
八、番外:
  1. 我对App的功能界面做了少量修改,更方(jia)便(guan)实(gao)际使用(左边原项目,右边我改的),修改简单,暂不开源,自己动手
  2. 有需要协助训练模型、打包定制App的请加我微信:56346596