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

相关推荐
热爱跑步的恒川34 分钟前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
阡之尘埃3 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
孙同学要努力5 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20215 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
其实吧36 小时前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
丕羽6 小时前
【Pytorch】基本语法
人工智能·pytorch·python
ctrey_6 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习
SongYuLong的博客6 小时前
Air780E基于LuatOS编程开发
人工智能
Jina AI6 小时前
RAG 系统的分块难题:小型语言模型如何找到最佳断点?
人工智能·语言模型·自然语言处理
-派神-6 小时前
大语言模型(LLM)量化基础知识(一)
人工智能·语言模型·自然语言处理