1、YOLOV8算法

YOLOv8 是当前效果较好的目标检测 算法,它的核心网络来源于 DarkNet-53,该网络初次在 YOLOv3中被引入,并深受 ResNet[12] 的影响。DarkNet-53 使用了残差机制,并连续添加了卷积模块来加强其功能性。 这 53 层的构造使其在性能上与 ResNet-152 相当, 但其处理速度加快了一倍。基于 DarkNet-53 ,YOLOv8 做了进一步的调整, 融入了 C2f 组件,从而进一步加强了性能并减少了模型的大小。本文 选用轻量级的YOLOv8n 。YOLOv8n是从YOLOv8 算法派生的轻量级参数结构。它包括骨干网、颈网和预测输出头。骨干网络利用卷积操作从 RGB 图像中提取各种尺度的特征。同时, 颈部网络的作 用是合并骨干网络提取的特征。特征金字塔结构(特征金字塔网络,FPN)通常被实现以将低级特征聚合成高级表示。头部层负 责预测目标类别,并利用三组不同大小的检测检测器来选择和检测图像内容。

2、数据集与训练

高质量太阳能光伏电池板可见光图像数据集,标签包含鸟粪,清洁,脏污,电气损坏,物理损坏,积雪覆盖六类。用于目标检测,缺陷检测,异物检测。 训练集有大量数据增强图片,包含14478张图片,14478个yolo格式的标签。 nc: 6 names: [‘bird-drop’, ‘clean’, ‘dusty’, ‘electrical-damage’, ‘physical-damage’, ‘snow-covered’] 已分为测试集训练集验证集,可直接训练。

---------【模型训练】---------

将文件【datasets//data.yaml】中train,val数据集的绝对路径改为自己项目数据集的绝对路径

train: E:\MyCVProgram\FireSmokeDetection\datasets\train

val: E:\MyCVProgram\FireSmokeDetection\datasets\valid

test: E:\MyCVProgram\FireSmokeDetection\datasets\test

然后运行train.py文件即可开始进行模型训练,训练结果会默认保存在runs目录中。

注:train与val后面表示需要训练图片的路径,建议直接写自己文件的绝对路径。 数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:

# 加载模型

model = YOLO("yolov8n.pt") # 加载预训练模型

# Use the model

if __name__ == '__main__':

# Use the model

results = model.train(data=r"D:\Solar_panel_detection_system\ultralytics-main\datasets\datanew\data.yaml", epochs=300,imgsz=640, batch=4) # 训练模型

# 将模型转为onnx格式

# success = model.export(format='onnx')

3、训练效果展示

4、训练结果评估

在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况。YOLOv8在训练时主要包含三个方面的损失:定位损失(box_loss)、分类损失(cls_loss)和动态特征损失(dfl_loss),在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示: 各损失函数作用说明:定位损失box_loss:预测框与标定框之间的误差(GIoU),越小定位得越准;分类损失cls_loss:计算锚框与对应的标定分类是否正确,越小分类得越准;动态特征损失(dfl_loss):DFLLoss是一种用于回归预测框与目标框之间距离的损失函数。在计算损失时,目标框需要缩放到特征图尺度,即除以相应的stride,并与预测的边界框计算Ciou Loss,同时与预测的anchors中心点到各边的距离计算回归DFLLoss。这个过程是YOLOv8训练流程中的一部分,通过计算DFLLoss可以更准确地调整预测框的位置,提高目标检测的准确性。本文训练结果如下: 我们通常用PR曲线来体现精确率和召回率的关系,本文训练结果的PR曲线如下。mAP表示Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值。mAP@.5:表示阈值大于0.5的平均mAP,可以看到本文模型两类目标检测的mAP@0.5已经达到了0.87以上,平均值为0.89,结果还是很不错的。

5、软件基本界面如下图所示

可进行6种状态的目标检测;支持图片、视频及摄像头进行检测,同时支持图片的批量检测;界面可实时显示目标位置、目标总数、置信度、用时等信息;支持图片或者视频的检测结果保存;

6、检测结果识别

模型训练完成后,我们可以得到一个最佳的训练结果模型best.pt文件,在runs/trian/weights目录下。我们可以使用该文件进行后续的推理检测。图片检测代码如下:

所需加载的模型目录

path = 'models/best.pt'

# 需要检测的图片地址

img_path = "TestFiles/27cad783f34b8f9f162d91a0c5776350.jpg"

# 加载预训练模型

# conf 0.25 object confidence threshold for detection

# iou 0.7 intersection over union (IoU) threshold for NMS

model = YOLO(path, task='detect')

# model = YOLO(path, task='detect',conf=0.5)

# 检测图片

results = model(img_path)

res = results[0].plot()

cv2.imshow("YOLOv8 Detection", res)

cv2.waitKey(0)

7、增量学习

1、增量学习是一种机器学习方法,其主要思想是在不断接收新数据的情况下逐步改进模型。与传统的批量学习不同,增量学习允许模型在运行过程中接收和处理新的数据,然后通过不断更新参数或模型结构来适应这些新数据,从而提高模型的性能和准确度 2、对于YOLOv8这样的目标检测模型,增量学习可以包括数据集的增量和重新训练模型。一种常见的增量学习方法是不断将新数据加入到现有数据集中,然后使用这个扩展后的数据集重新训练模型。这样做的目的是让模型能够逐步适应新的数据和场景,提高检测的准确性

8、结束语

以上便是博主开发的基于YOLOV8+Pyqt5光伏太阳能电池板目标检测系统的部分内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正。关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: