YOLOv5是目标检测领域一种非常优秀的模型,其具有以下几个优势:
1. 高精度:YOLOv5相比于其前身YOLOv4,在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进,如更深的网络结构、更多的特征层和更高分辨率的输入图像,以提升精度。
2. 高效性能:YOLOv5在目标检测任务中具有很高的处理速度和实时性。相比于其他目标检测模型,YOLOv5采用了更少的计算量和参数数量,因此它在目标检测任务中具有更快的推理速度。
3. 简单易用:YOLOv5是一个开源项目,源代码公开,并且提供了预训练的模型权重。这使得使用YOLOv5进行目标检测变得非常方便,无需从头开始训练模型,只需进行适当的微调即可。
4. 多平台适用:YOLOv5可以在多种平台上运行,包括PC端、嵌入式设备和移动设备等。这使得YOLOv5可以在各种场景下应用,如自动驾驶、智能安防、人脸识别等。
5. 多功能:YOLOv5可以检测和分类多个不同的目标类别,包括人、车辆、动物等。此外,YOLOv5还可以检测出目标的位置和大小,并提供相应的置信度。
总之,YOLOv5具有高精度、高效性能、简单易用、多平台适用和多功能等优势,使其成为目标检测领域中的一种前沿模型。
参考:【深度学习目标检测】四、基于深度学习的抽烟识别(python,yolov8)
本文介绍了基于Yolov5的抽烟检测模型,包括训练过程和数据准备过程,同时提供了推理的代码。对准备计算机视觉相关的毕业设计的同学有着一定的帮助。
效果如下图:
检测结果如下图(检测效果有所欠缺):
一、安装YoloV5
yolov5和yolov8是同个团队开发的,官方文档:主页 - Ultralytics YOLOv8 文档
安装部分参考:官方安装教程
二、数据集准备
抽烟数据集共包含705个训练图片,78个验证图片,图片示例如下:
原始的数据格式为VOC格式,本文提供转换好的yolov5格式数据集,,可以直接放入yolov5中训练,数据集地址(yolov5和yolov8格式一致):抽烟数据集yolov5格式
三、修改yolov8配置文件
1、修改数据集配置文件
将path替换成自己的数据集路径:
# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO 2017 dataset http://cocodataset.org by Microsoft
# Example usage: yolo train data=coco.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco ← downloads here (20.1 GB)
# 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/smoke/pp_smoke-yolov8 # 更改为自己的数据集路径,建议绝对路ing
train: images/train
val: images/val
test: images/val
# Classes
names:
0: smoke
2、配置模型文件
模型配置文件如下,将nc改成1:
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv5 object detection model with P3-P5 outputs. For details see https://docs.ultralytics.com/models/yolov5
# Parameters
nc: 1 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov5n.yaml' will call yolov5.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.33, 0.25, 1024]
s: [0.33, 0.50, 1024]
m: [0.67, 0.75, 1024]
l: [1.00, 1.00, 1024]
x: [1.33, 1.25, 1024]
# YOLOv5 v6.0 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, C3, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 6, C3, [256]],
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 9, C3, [512]],
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 3, C3, [1024]],
[-1, 1, SPPF, [1024, 5]], # 9
]
# YOLOv5 v6.0 head
head:
[[-1, 1, Conv, [512, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4
[-1, 3, C3, [512, False]], # 13
[-1, 1, Conv, [256, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 3, C3, [256, False]], # 17 (P3/8-small)
[-1, 1, Conv, [256, 3, 2]],
[[-1, 14], 1, Concat, [1]], # cat head P4
[-1, 3, C3, [512, False]], # 20 (P4/16-medium)
[-1, 1, Conv, [512, 3, 2]],
[[-1, 10], 1, Concat, [1]], # cat head P5
[-1, 3, C3, [1024, False]], # 23 (P5/32-large)
[[17, 20, 23], 1, Detect, [nc]], # Detect(P3, P4, P5)
]
3、训练模型
使用如下命令开始训练(将相关路径改成自己的路径,建议改成绝对路径):
yolo detect train project=deploy name=yolov5_smoke exist_ok=True optimizer=auto val=True amp=True epochs=100 imgsz=640 model=ultralytics/ultralytics/cfg/models/v5/yolov5_smoke.yaml data=ultralytics/ultralytics/cfg/datasets/smoke.yaml
4、评估模型
使用如下命令评估:
yolo detect val imgsz=640 model=deploy/yolov5_smoke/weights/best.pt data=ultralytics/ultralytics/cfg/datasets/smoke.yaml
5、推理
推理代码如下:
from PIL import Image
from ultralytics import YOLO
# 加载预训练的YOLOv5n模型
model = YOLO('best.pt')
# 在'bus.jpg'上运行推理
image_path = 'smoke_a526.jpg'
results = model(image_path) # 结果列表
# 展示结果
for r in results:
im_array = r.plot() # 绘制包含预测结果的BGR numpy数组
im = Image.fromarray(im_array[..., ::-1]) # RGB PIL图像
im.show() # 显示图像
im.save('results.jpg') # 保存图像
四、相关资料
本文在训练好的模型和推理代码:推理代码和权重