yolov5
经过一个月的踩坑和整理,笔者分享一篇保姆级yolov5 目标检测模型部署到Android 端的详细教程,只要按照小编的步骤操作一定能够部署成功,这里主要教大家如何训练模型,导出模型,转换模型,部署模型(ncnn、torchscript)...,帮助移动端开发工程师自定义识别对象并部署到移动设备中。篇幅有限如果需要完整的教程和Demo可以联系我分享;
先展示示下效果
目录
资料
1、安装
-
ultralytics安装
texpip install ultralytics
-
Clone repo and install requirements.txt in a Python>=3.8.0 environment, including PyTorch>=1.8
textgit 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 分享
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
5.2.3、使用labelme进行数据标注
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 分享