【算法介绍】
基于YOLOv8的建筑墙面损伤等级检测系统是一款高效、精准的建筑墙面损伤检测工具。该系统采用YOLOv8深度学习算法,通过训练大量建筑墙面损伤图片,实现了对墙面损伤的自动检测与分类。
该系统能够识别四种不同的损伤程度,包括严重损伤、轻微损伤、中度损伤和无损伤。用户可以通过上传图片、视频或实时摄像头捕捉的方式,对墙面进行检测。系统会自动标注出损伤的位置和类别,并生成详细的检测报告,便于用户进行后续的处理和维修。
该系统具有界面简洁、操作便捷的特点,用户无需具备专业的图像处理知识,即可轻松上手。同时,系统还支持批量检测,大大提高了检测效率。
此外,基于YOLOv8的建筑墙面损伤等级检测系统还具备高度的可扩展性和灵活性。用户可以根据自己的需求,对系统进行定制和优化,以适应不同的检测场景和需求。
总的来说,基于YOLOv8的建筑墙面损伤等级检测系统是一款功能强大、易于操作的建筑墙面损伤检测工具。它的应用将大大提高建筑墙面损伤检测的效率和准确性,为建筑维护和安全管理提供有力的支持。如需更多信息,建议咨询专业开发人员。
【效果展示】
【测试环境】
windows10
anaconda3+python3.8
torch==1.9.0+cu111
ultralytics==8.3.21
【模型可以检测出类别】
Undamage
Moderate Damage
Heavy Damage
Minor Damage
【训练数据集】
[数据集][目标检测]墙面墙体损伤等级检测数据集VOC+YOLO格式4629张4类别-博客
【训练信息】
参数 | 值 |
训练集图片数 | 4166 |
验证集图片数 | 463 |
训练map | 66.4% |
训练精度(Precision) | 67.7% |
训练召回率(Recall) | 58.0% |
验证集测试精度信息
Class | Images | Instances | Box(P | R | mAP50 | mAP50-95 |
all | 463 | 1323 | 0.677 | 0.58 | 0.664 | 0.551 |
Undamage | 67 | 78 | 0.644 | 0.551 | 0.692 | 0.659 |
Moderate Damage | 275 | 415 | 0.661 | 0.564 | 0.618 | 0.461 |
Heavy Damage | 148 | 189 | 0.758 | 0.696 | 0.778 | 0.677 |
Minor Damage | 334 | 641 | 0.644 | 0.51 | 0.57 | 0.408 |
【项目编号】mbd.pub/o/bread/Z5WXlJpv
【部分实现源码】
class Ui_MainWindow(QtWidgets.QMainWindow):
signal = QtCore.pyqtSignal(str, str)
def setupUi(self):
self.setObjectName("MainWindow")
self.resize(1280, 728)
self.centralwidget = QtWidgets.QWidget(self)
self.centralwidget.setObjectName("centralwidget")
self.weights_dir = './weights'
self.picture = QtWidgets.QLabel(self.centralwidget)
self.picture.setGeometry(QtCore.QRect(260, 10, 1010, 630))
self.picture.setStyleSheet("background:black")
self.picture.setObjectName("picture")
self.picture.setScaledContents(True)
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(10, 10, 81, 21))
self.label_2.setObjectName("label_2")
self.cb_weights = QtWidgets.QComboBox(self.centralwidget)
self.cb_weights.setGeometry(QtCore.QRect(10, 40, 241, 21))
self.cb_weights.setObjectName("cb_weights")
self.cb_weights.currentIndexChanged.connect(self.cb_weights_changed)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(10, 70, 72, 21))
self.label_3.setObjectName("label_3")
self.hs_conf = QtWidgets.QSlider(self.centralwidget)
self.hs_conf.setGeometry(QtCore.QRect(10, 100, 181, 22))
self.hs_conf.setProperty("value", 25)
self.hs_conf.setOrientation(QtCore.Qt.Horizontal)
self.hs_conf.setObjectName("hs_conf")
self.hs_conf.valueChanged.connect(self.conf_change)
self.dsb_conf = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.dsb_conf.setGeometry(QtCore.QRect(200, 100, 51, 22))
self.dsb_conf.setMaximum(1.0)
self.dsb_conf.setSingleStep(0.01)
self.dsb_conf.setProperty("value", 0.25)
self.dsb_conf.setObjectName("dsb_conf")
self.dsb_conf.valueChanged.connect(self.dsb_conf_change)
self.dsb_iou = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.dsb_iou.setGeometry(QtCore.QRect(200, 160, 51, 22))
self.dsb_iou.setMaximum(1.0)
self.dsb_iou.setSingleStep(0.01)
self.dsb_iou.setProperty("value", 0.45)
self.dsb_iou.setObjectName("dsb_iou")
self.dsb_iou.valueChanged.connect(self.dsb_iou_change)
self.hs_iou = QtWidgets.QSlider(self.centralwidget)
self.hs_iou.setGeometry(QtCore.QRect(10, 160, 181, 22))
self.hs_iou.setProperty("value", 45)
self.hs_iou.setOrientation(QtCore.Qt.Horizontal)
self.hs_iou.setObjectName("hs_iou")
self.hs_iou.valueChanged.connect(self.iou_change)
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(10, 130, 72, 21))
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(10, 210, 72, 21))
self.label_5.setObjectName("label_5")
self.le_res = QtWidgets.QTextEdit(self.centralwidget)
self.le_res.setGeometry(QtCore.QRect(10, 240, 241, 400))
self.le_res.setObjectName("le_res")
self.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(self)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1110, 30))
self.menubar.setObjectName("menubar")
self.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(self)
self.statusbar.setObjectName("statusbar")
self.setStatusBar(self.statusbar)
self.toolBar = QtWidgets.QToolBar(self)
self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolBar.setObjectName("toolBar")
self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.actionopenpic = QtWidgets.QAction(self)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/images/1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionopenpic.setIcon(icon)
self.actionopenpic.setObjectName("actionopenpic")
self.actionopenpic.triggered.connect(self.open_image)
self.action = QtWidgets.QAction(self)
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(":/images/2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action.setIcon(icon1)
self.action.setObjectName("action")
self.action.triggered.connect(self.open_video)
self.action_2 = QtWidgets.QAction(self)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(":/images/3.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action_2.setIcon(icon2)
self.action_2.setObjectName("action_2")
self.action_2.triggered.connect(self.open_camera)
self.actionexit = QtWidgets.QAction(self)
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(":/images/4.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionexit.setIcon(icon3)
self.actionexit.setObjectName("actionexit")
self.actionexit.triggered.connect(self.exit)
self.toolBar.addAction(self.actionopenpic)
self.toolBar.addAction(self.action)
self.toolBar.addAction(self.action_2)
self.toolBar.addAction(self.actionexit)
self.retranslateUi()
QtCore.QMetaObject.connectSlotsByName(self)
self.init_all()
【训练步骤】
使用YOLOv8训练自己的数据集需要遵循一些基本的步骤。YOLOv8是YOLO系列模型的一个版本,它在前代基础上做了许多改进,包括但不限于更高效的训练流程和更高的精度。以下是训练自己YOLO格式数据集的详细步骤:
一、 准备环境
1. 安装必要的软件:确保你的计算机上安装了Python(推荐3.6或更高版本),以及CUDA和cuDNN(如果你打算使用GPU进行加速)。
2. 安装YOLOv8库:你可以通过GitHub克隆YOLOv8的仓库或者直接通过pip安装YOLOv8。例如:
pip install ultralytics
二、数据准备
3. 组织数据结构:按照YOLO的要求组织你的数据文件夹。通常,你需要一个包含图像和标签文件的目录结构,如:
dataset/
├── images/
│ ├── train/
│ └── val/
├── labels/
│ ├── train/
│ └── val/
其中,train和val分别代表训练集和验证集。且images文件夹和labels文件夹名字不能随便改写或者写错,否则会在训练时候找不到数据集。
4. 标注数据:使用合适的工具对图像进行标注,生成YOLO格式的标签文件。每个标签文件应该是一个.txt文件,每行表示一个边界框,格式为:
<类别ID> <中心点x> <中心点y> <宽度> <高度>
这些值都是相对于图像尺寸的归一化值。
5. 创建数据配置文件:创建一个.yaml文件来定义你的数据集,包括路径、类别列表等信息。例如:
yaml
# dataset.yaml
path: ./dataset # 数据集根目录
train: images/train # 训练图片相对路径
val: images/val # 验证图片相对路径
nc: 2 # 类别数
names: ['class1', 'class2'] # 类别名称
三、模型训练
6. 加载预训练模型:可以使用官方提供的预训练模型作为起点,以加快训练速度并提高性能。
7. 配置训练参数:根据需要调整训练参数,如批量大小、学习率、训练轮次等。这通常可以通过命令行参数或配置文件完成。
8. 开始训练:使用YOLOv8提供的命令行接口开始训练过程。例如:
yolo train data=dataset.yaml model=yolov8n.yaml epochs=100 imgsz=640
更多参数如下:
参数 | 默认值 | 描述 |
|
| Specifies the model file for training. Accepts a path to either a |
|
| Path to the dataset configuration file (e.g., |
|
| Total number of training epochs. Each epoch represents a full pass over the entire dataset. Adjusting this value can affect training duration and model performance. |
|
| Maximum training time in hours. If set, this overrides the |
|
| Number of epochs to wait without improvement in validation metrics before early stopping the training. Helps prevent overfitting by stopping training when performance plateaus. |
|
| Batch size, with three modes: set as an integer (e.g., |
|
| Target image size for training. All images are resized to this dimension before being fed into the model. Affects model accuracy and computational complexity. |
|
| Enables saving of training checkpoints and final model weights. Useful for resuming training ormodel deployment. |
|
| Frequency of saving model checkpoints, specified in epochs. A value of -1 disables this feature. Useful for saving interim models during long training sessions. |
|
| Enables caching of dataset images in memory ( |
|
| Specifies the computational device(s) for training: a single GPU ( |
|
| Number of worker threads for data loading (per |
|
| Name of the project directory where training outputs are saved. Allows for organized storage of different experiments. |
|
| Name of the training run. Used for creating a subdirectory within the project folder, where training logs and outputs are stored. |
|
| If True, allows overwriting of an existing project/name directory. Useful for iterative experimentation without needing to manually clear previous outputs. |
|
| Determines whether to start training from a pretrained model. Can be a boolean value or a string path to a specific model from which to load weights. Enhances training efficiency and model performance. |
|
| Choice of optimizer for training. Options include |
|
| Enables verbose output during training, providing detailed logs and progress updates. Useful for debugging and closely monitoring the training process. |
|
| Sets the random seed for training, ensuring reproducibility of results across runs with the same configurations. |
|
| Forces deterministic algorithm use, ensuring reproducibility but may affect performance and speed due to the restriction on non-deterministic algorithms. |
|
| Treats all classes in multi-class datasets as a single class during training. Useful for binary classification tasks or when focusing on object presence rather than classification. |
|
| Enables rectangular training, optimizing batch composition for minimal padding. Can improve efficiency and speed but may affect model accuracy. |
|
| Utilizes a cosine learning rate scheduler, adjusting the learning rate following a cosine curve over epochs. Helps in managing learning rate for better convergence. |
|
| Disables mosaic data augmentation in the last N epochs to stabilize training before completion. Setting to 0 disables this feature. |
|
| Resumes training from the last saved checkpoint. Automatically loads model weights, optimizer state, and epoch count, continuing training seamlessly. |
|
| Enables AutomaticMixed Precision (AMP) training, reducing memory usage and possibly speeding up training with minimal impact on accuracy. |
|
| Specifies the fraction of the dataset to use for training. Allows for training on a subset of the full dataset, useful for experiments or when resources are limited. |
|
| Enables profiling of ONNX and TensorRT speeds during training, useful for optimizing model deployment. |
|
| Freezes the first N layers of the model or specified layers by index, reducing the number of trainable parameters. Useful for fine-tuning or transfer learning . |
|
| Initial learning rate (i.e. |
|
| Final learning rate as a fraction of the initial rate = ( |
|
| Momentum factor for SGD or beta1 for Adam optimizers, influencing the incorporation of past gradients in the current update. |
|
| L2 regularization term, penalizing large weights to prevent overfitting. |
|
| Number of epochs for learning rate warmup, gradually increasing the learning rate from a low value to the initial learning rate to stabilize training early on. |
|
| Initial momentum for warmup phase, gradually adjusting to the set momentum over the warmup period. |
|
| Learning rate for bias parameters during the warmup phase, helping stabilize model training in the initial epochs. |
|
| Weight of the box loss component in the loss_function, influencing how much emphasis is placed on accurately predicting bouding box coordinates. |
|
| Weight of the classification loss in the total loss function, affecting the importance of correct class prediction relative to other components. |
|
| Weight of the distribution focal loss, used in certain YOLO versions for fine-grained classification. |
|
| Weight of the pose loss in models trained for pose estimation, influencing the emphasis on accurately predicting pose keypoints. |
|
| Weight of the keypoint objectness loss in pose estimation models, balancing detection confidence with pose accuracy. |
|
| Applies label smoothing, softening hard labels to a mix of the target label and a uniform distribution over labels, can improve generalization. |
|
| Nominal batch size for normalization of loss. |
|
| Determines whether object masks should be merged into a single mask for training, or kept separate for each object. In case of overlap, the smaller mask is overlayed on top of the larger mask during merge. |
|
| Downsample ratio for segmentation masks, affecting the resolution of masks used during training. |
|
| Dropout rate for regularization in classification tasks, preventing overfitting by randomly omitting units during training. |
|
| Enables validation during training, allowing for periodic evaluation of model performance on a separate dataset. |
|
| Generates and saves plots of training and validation metrics, as well as prediction examples, providing visual insights into model performance and learning progression. |
这里,data参数指向你的数据配置文件,model参数指定使用的模型架构,epochs设置训练轮次,imgsz设置输入图像的大小。
四、监控与评估
9. 监控训练过程:观察损失函数的变化,确保模型能够正常学习。
10. 评估模型:训练完成后,在验证集上评估模型的性能,查看mAP(平均精确度均值)等指标。
11. 调整超参数:如果模型的表现不佳,可能需要调整超参数,比如增加训练轮次、改变学习率等,并重新训练模型。
五、使用模型
12. 导出模型:训练完成后,可以将模型导出为ONNX或其他格式,以便于部署到不同的平台。比如将pytorch转成onnx模型可以输入指令
yolo export model=best.pt format=onnx
这样就会在pt模块同目录下面多一个同名的onnx模型best.onnx
下表详细说明了可用于将YOLO模型导出为不同格式的配置和选项。这些设置对于优化导出模型的性能、大小和跨各种平台和环境的兼容性至关重要。正确的配置可确保模型已准备好以最佳效率部署在预期的应用程序中。
参数 | 类型 | 默认值 | 描述 |
|
|
| Target format for the exported model, such as |
|
|
| Desired image size for the model input. Can be an integer for square images or a tuple |
|
|
| Enables export to Keras format for Tensorflow SavedModel, providing compatibility with TensorFlow serving and APIs. |
|
|
| Applies optimization for mobile devices when exporting to TorchScript, potentially reducing model size and improving performance. |
|
|
| Enables FP16 (half-precision) quantization, reducing model size and potentially speeding up inference on supported hardware. |
|
|
| Activates INT8 quantization, further compressing the model and speeding up inference with minimal accuracy loss, primarily for edge devices. |
|
|
| Allows dynamic input sizes for ONNX, TensorRT and OpenVINO exports, enhancing flexibility in handling varying image dimensions. |
|
|
| Simplifies the model graph for ONNX exports with |
|
|
| Specifies the ONNX opset version for compatibility with different ONNX parsers and runtimes. If not set, uses the latest supported version. |
|
|
| Sets the maximum workspace size in GiB for TensorRT optimizations, balancing memory usage and performance. |
|
|
| Adds Non-Maximum Suppression (NMS) to the CoreML export, essential for accurate and efficient detection post-processing. |
|
|
| Specifies export model batch inference size or the max number of images the exported model will process concurrently in |
|
|
| Specifies the device for exporting: GPU ( |
调整这些参数可以定制导出过程,以满足特定要求,如部署环境、硬件约束和性能目标。选择适当的格式和设置对于实现模型大小、速度和精度之间的最佳平衡至关重要。
导出格式:
可用的YOLO8导出格式如下表所示。您可以使用format参数导出为任何格式,即format='onnx'或format='engine'。您可以直接在导出的模型上进行预测或验证,即yolo predict model=yolov8n.onnx。导出完成后,将显示您的模型的使用示例。
导出格式 | 格式参数 | 模型 | 属性 | 参数 |
pytorch | - |
| ✅ | - |
torchscript |
|
| ✅ |
|
onnx |
|
| ✅ |
|
|
|
| ✅ |
|
tensorrt |
|
| ✅ |
|
CoreML |
|
| ✅ |
|
TF SaveModel |
|
| ✅ |
|
TF GraphDef |
|
| ❌ |
|
TF Lite |
|
| ✅ |
|
TF Edge TPU |
|
| ✅ |
|
TF.js |
|
| ✅ |
|
PaddlePaddle |
|
| ✅ |
|
MNN |
|
| ✅ |
|
NCNN |
|
| ✅ |
|
13. 测试模型:在新的数据上测试模型,确保其泛化能力良好。
以上就是使用YOLOv8训练自己数据集的基本步骤。请根据实际情况调整这些步骤中的具体细节。希望这些信息对你有所帮助!
【常用评估参数介绍】
在目标检测任务中,评估模型的性能是至关重要的。你提到的几个术语是评估模型性能的常用指标。下面是对这些术语的详细解释:
- Class:
- 这通常指的是模型被设计用来检测的目标类别。例如,一个模型可能被训练来检测车辆、行人或动物等不同类别的对象。
- Images:
- 表示验证集中的图片数量。验证集是用来评估模型性能的数据集,与训练集分开,以确保评估结果的公正性。
- Instances:
- 在所有图片中目标对象的总数。这包括了所有类别对象的总和,例如,如果验证集包含100张图片,每张图片平均有5个目标对象,则Instances为500。
- P(精确度Precision):
- 精确度是模型预测为正样本的实例中,真正为正样本的比例。计算公式为:Precision = TP / (TP + FP),其中TP表示真正例(True Positives),FP表示假正例(False Positives)。
- R(召回率Recall):
- 召回率是所有真正的正样本中被模型正确预测为正样本的比例。计算公式为:Recall = TP / (TP + FN),其中FN表示假负例(False Negatives)。
- mAP50:
- 表示在IoU(交并比)阈值为0.5时的平均精度(mean Average Precision)。IoU是衡量预测框和真实框重叠程度的指标。mAP是一个综合指标,考虑了精确度和召回率,用于评估模型在不同召回率水平上的性能。在IoU=0.5时,如果预测框与真实框的重叠程度达到或超过50%,则认为该预测是正确的。
- mAP50-95:
- 表示在IoU从0.5到0.95(间隔0.05)的范围内,模型的平均精度。这是一个更严格的评估标准,要求预测框与真实框的重叠程度更高。在目标检测任务中,更高的IoU阈值意味着模型需要更准确地定位目标对象。mAP50-95的计算考虑了从宽松到严格的多个IoU阈值,因此能够更全面地评估模型的性能。
这些指标共同构成了评估目标检测模型性能的重要框架。通过比较不同模型在这些指标上的表现,可以判断哪个模型在实际应用中可能更有效。
【使用步骤】
使用步骤:
(1)首先根据官方框架ultralytics安装教程安装好yolov8环境,并安装好pyqt5
(2)切换到自己安装的yolov8环境后,并切换到源码目录,执行python main.py即可运行启动界面,进行相应的操作即可
【提供文件】
python源码
yolov8n.onnx模型(不提供pytorch模型)
训练的map,P,R曲线图(在weights\results.png)
测试图片(在test_img文件夹下面)