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

相关推荐
2301_7875528740 分钟前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
layneyao1 小时前
AI与自然语言处理(NLP):从BERT到GPT的演进
人工智能·自然语言处理·bert
jndingxin2 小时前
OpenCV 的 CUDA 模块中用于将多个单通道的 GpuMat 图像合并成一个多通道的图像 函数cv::cuda::merge
人工智能·opencv·计算机视觉
格林威2 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
灬0灬灬0灬3 小时前
深度学习---常用优化器
人工智能·深度学习
_Itachi__3 小时前
Model.eval() 与 torch.no_grad() PyTorch 中的区别与应用
人工智能·pytorch·python
白光白光3 小时前
大语言模型训练的两个阶段
人工智能·机器学习·语言模型
巷9554 小时前
OpenCV图像金字塔详解:原理、实现与应用
人工智能·opencv·计算机视觉
科技小E4 小时前
WebRTC实时音视频通话技术EasyRTC嵌入式音视频通信SDK,助力智慧物流打造实时高效的物流管理体系
人工智能·音视频
BioRunYiXue4 小时前
一文了解氨基酸的分类、代谢和应用
人工智能·深度学习·算法·机器学习·分类·数据挖掘·代谢组学