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

相关推荐
喝拿铁写前端6 小时前
前端开发者使用 AI 的能力层级——从表面使用到工程化能力的真正分水岭
前端·人工智能·程序员
goodfat6 小时前
Win11如何关闭自动更新 Win11暂停系统更新的设置方法【教程】
人工智能·禁止windows更新·win11优化工具
北京领雁科技6 小时前
领雁科技反洗钱案例白皮书暨人工智能在反洗钱系统中的深度应用
人工智能·科技·安全
落叶,听雪6 小时前
河南建站系统哪个好
大数据·人工智能·python
清月电子6 小时前
杰理AC109N系列AC1082 AC1074 AC1090 芯片停产替代及资料说明
人工智能·单片机·嵌入式硬件·物联网
Dev7z6 小时前
非线性MPC在自动驾驶路径跟踪与避障控制中的应用及Matlab实现
人工智能·matlab·自动驾驶
七月shi人7 小时前
AI浪潮下,前端路在何方
前端·人工智能·ai编程
橙汁味的风7 小时前
1隐马尔科夫模型HMM与条件随机场CRF
人工智能·深度学习·机器学习
itwangyang5207 小时前
AIDD-人工智能药物设计-AI 制药编码之战:预测癌症反应,选对方法是关键
人工智能
蓝桉~MLGT7 小时前
Ai-Agent学习历程—— 阶段1——环境的选择、Pydantic基座、Jupyter Notebook的使用
人工智能·学习·jupyter