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 分享

相关推荐
AIGC大时代2 分钟前
如何使用ChatGPT辅助文献综述,以及如何进行优化?一篇说清楚
人工智能·深度学习·chatgpt·prompt·aigc
流浪的小新7 分钟前
【AI】人工智能、LLM学习资源汇总
人工智能·学习
martian6651 小时前
【人工智能数学基础篇】——深入详解多变量微积分:在机器学习模型中优化损失函数时应用
人工智能·机器学习·微积分·数学基础
人机与认知实验室2 小时前
人、机、环境中各有其神经网络系统
人工智能·深度学习·神经网络·机器学习
黑色叉腰丶大魔王2 小时前
基于 MATLAB 的图像增强技术分享
图像处理·人工智能·计算机视觉
迅易科技5 小时前
借助腾讯云质检平台的新范式,做工业制造企业质检的“AI慧眼”
人工智能·视觉检测·制造
古希腊掌管学习的神6 小时前
[机器学习]XGBoost(3)——确定树的结构
人工智能·机器学习
ZHOU_WUYI6 小时前
4.metagpt中的软件公司智能体 (ProjectManager 角色)
人工智能·metagpt
靴子学长7 小时前
基于字节大模型的论文翻译(含免费源码)
人工智能·深度学习·nlp
AI_NEW_COME8 小时前
知识库管理系统可扩展性深度测评
人工智能