yolov5 ncnn、torchscript端侧部署保姆级教程

yolov5

经过一个月的踩坑和整理,笔者分享一篇保姆级yolov5 目标检测模型部署到Android 端的详细教程,只要按照小编的步骤操作一定能够部署成功,这里主要教大家如何训练模型,导出模型,转换模型,部署模型(ncnn、torchscript)...,帮助移动端开发工程师自定义识别对象并部署到移动设备中。篇幅有限如果需要完整的教程和Demo可以联系我分享;

先展示示下效果

目录

资料

1、安装

  • ultralytics安装

    tex 复制代码
    pip install ultralytics
  • Clone repo and install requirements.txt in a Python>=3.8.0 environment, including PyTorch>=1.8

    text 复制代码
    git clone https://github.com/ultralytics/yolov5  # clone
    cd yolov5
    pip install -r requirements.txt  # install

项目源码:可以加笔者QQ 1641926972 分享

2、模型训练

css 复制代码
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt
  • --img 640: 指定训练时使用的输入图像尺寸为 640x640 像素。这个参数影响训练过程中图像的缩放大小。
  • --batch 16: 指定训练时使用的批量大小为 16。批量大小表示每次模型更新时同时处理的图像数量。
  • --epochs 3: 指定训练的轮数为 3 轮。每轮 epoch 表示使用训练数据集中的所有样本训练一次模型。
  • --data coco128.yaml: 指定训练时使用的数据集配置文件为 coco128.yaml。这个文件包含了数据集的相关信息,如类别数量、类别标签等。
  • --weights yolov5s.pt: 指定使用的预训练模型权重文件为 yolov5s.pt。这个文件包含了预训练模型的参数,可以加快模型收敛速度。

3、模型导出

python 复制代码
python export.py --weights yolov5s.pt  --include torchscript   

这是一个用于导出 YOLOv5 模型的命令,参数的含义如下:

  • --weights yolov5s.pt: 指定要导出的模型的权重文件为 yolov5s.pt。这个文件包含了已经训练好的模型参数。
  • --include torchscript: 指定导出模型时使用 TorchScript 格式。TorchScript 是 PyTorch 中的一种序列化和优化模型的方法,可以将模型导出为一个可以在没有 Python 环境的情况下运行的形式。

4、目标检测

bash 复制代码
python detect.py --weights yolov5s.torchscript --source data/images/bug.jpg
css 复制代码
python detect.py --weights yolov5s.torchscript --source 0
  • --weights yolov5s.torchscript:指定要使用的模型权重文件为 yolov5s.torchscript,这是导出的 TorchScript 格式的模型文件。

  • --source 0:指定输入源为摄像头。在这里,0 表示使用默认摄像头作为输入源。你也可以指定其他的输入源,比如视频文件路径或者图像文件路径。

    到此为止环境已经搭建完成,yolov5的基本操作以验证成功

接下来将说明如何训练自己的目标检测模型

5、自定义数据训练

5.1、Demo 数据集

项目源码:可以加笔者QQ 1641926972 分享

自定义剪刀数据集

官方教程:yolov5 train custom data

5.2、组建数据集

5.2.1、文件结构
yaml 复制代码
训练集
../datasets/<custom>/train/images/im0.jpg  # image
../datasets/<custom>/train/labels/im0.txt  # label
验证集
../datasets/<custom>/valid/images/im0.jpg  # image
../datasets/<custom>/valid/labels/im0.txt  # label
5.2.2、使用labelImg进行数据标注
arduino 复制代码
//安装labelimg
pip install labelImg
//打开label
labelImg

github.com/HumanSignal...

5.2.3、使用labelme进行数据标注

github.com/labelmeai/l...

labelme 标注的文件区别于yolov5的标注文件需要进行转换

使用工具 labelme2yolov5 项目源码:可以加笔者QQ 1641926972 分享

修改路径即可

5.2.4、Yaml文件

官方说明:

yaml 复制代码
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  # ...
  77: teddy bear
  78: hair drier
  79: toothbrush

自定义的数据集

yaml 复制代码
#训练集的图片路径,这里使用的是绝对路径,就不需要设置path参数了
train: /Users/hujian/WorkSpack/coding/datasets/scissor/train/images
#验证集的图片路径,这里使用的是绝对路径
val: /Users/hujian/WorkSpack/coding/datasets/scissor/valid/images

#指定了类别的数量,这里是 1,表示只有一个类别
nc: 1
# Classes
#类别名称的映射,其中 0: scissor 表示类别编号为 0 的类别名称为 "scissor"
names:
  0: scissor

5.3、模型训练

scss 复制代码
//指定yaml文件进行训练这里使用的是绝对路径
python train.py --img 640 --epochs 300 --data /Users/hujian/WorkSpack/coding/datasets/scissor/scissor.yaml --weights yolov5s.pt
  • --img 640:指定训练图片的尺寸为 640x640 像素。训练过程中会将输入图片调整为这个尺寸进行训练。
  • --epochs 50:指定训练的总轮数为 50 轮。模型会在整个训练集上反复训练这么多轮次。
  • --data /Users/hujian/WorkSpack/coding/datasets/scissor/scissor.yaml:指定数据集的配置文件为 /Users/hujian/WorkSpack/coding/datasets/scissor/scissor.yaml,这个配置文件中包含了训练集、验证集的路径以及类别信息。
  • --weights yolov5s.pt:指定模型的初始权重为 yolov5s.pt,这个文件应该是一个预训练的 YOLOv5 模型的权重文件,用于在其基础上进行微调。

这是笔者训练的模型,权重文件保存到了run/train/exp3/weights/目录下

5.4、模型训练验证

bash 复制代码
python detect.py --source  /Users/hujian/WorkSpack/yolov5-use-Guides/datasets/scissor/valid/images/image_41.jpg --weights /Users/hujian/WorkSpack/yolov5/runs/train/exp3/weights/best.pt

这里笔者数据集只有50张图片,如果需要准确识别还需要加大数据量,和循环次数

到这里已经学会如何训练自定义数据集

6、模型部署

6.1、部署到Android

详细教程和项目源码:可以加笔者QQ 1641926972 分享

相关推荐
「、皓子~7 分钟前
后台管理系统的诞生 - 利用AI 1天完成整个后台管理系统的微服务后端+前端
前端·人工智能·微服务·小程序·go·ai编程·ai写作
笑衬人心。41 分钟前
初学Spring AI 笔记
人工智能·笔记·spring
luofeiju1 小时前
RGB下的色彩变换:用线性代数解构色彩世界
图像处理·人工智能·opencv·线性代数
测试者家园1 小时前
基于DeepSeek和crewAI构建测试用例脚本生成器
人工智能·python·测试用例·智能体·智能化测试·crewai
张较瘦_1 小时前
[论文阅读] 人工智能 + 软件工程 | Call Me Maybe:用图神经网络增强JavaScript调用图构建
论文阅读·人工智能·软件工程
大模型真好玩1 小时前
准确率飙升!Graph RAG如何利用知识图谱提升RAG答案质量(四)——微软GraphRAG代码实战
人工智能·python·mcp
Baihai_IDP1 小时前
vec2text 技术已开源!一定条件下,文本嵌入向量可“近乎完美地”还原
人工智能·面试·llm
江太翁1 小时前
Pytorch torch
人工智能·pytorch·python
拓端研究室2 小时前
专题:2025即时零售与各类人群消费行为洞察报告|附400+份报告PDF、原数据表汇总下载
大数据·人工智能
网安INF2 小时前
深度学习中的逻辑回归:从原理到Python实现
人工智能·python·深度学习·算法·逻辑回归