基于yolov11的汽车损伤检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
【算法介绍】
基于YOLOv11的汽车损伤检测系统是一种先进的计算机视觉技术,旨在快速准确地识别汽车的各种损伤类型。该系统利用YOLOv11模型的强大性能,实现了对车辆损伤的精确检测与分类。
该系统能够识别的损伤类型包括裂纹(crack)、凹陷(dent)、玻璃破碎(glass shatter)、车灯损坏(lamp broken)、划痕(scratch)以及轮胎漏气或扁平(tire flat)。这些损伤类型涵盖了车辆常见的各种损坏情况,能够满足不同场景下的检测需求。
在检测过程中,系统会对输入的车辆图像进行智能分析,自动标出损伤部位,并提供详细的损伤报告。这不仅大大缩短了定损时间,还提高了定损的准确性和公正性。
此外,基于YOLOv11的汽车损伤检测系统还具有广泛的应用前景。它不仅可以用于保险理赔过程中的车辆定损,还可以应用于车辆维修、二手车交易以及智能交通系统等领域。通过实时监测车辆的损伤状态,系统可以为驾驶员提供及时的预警信息,帮助驾驶员预防潜在的交通事故,从而提高道路安全性。
总之,基于YOLOv11的汽车损伤检测系统是一种高效、准确的汽车损伤检测工具,具有广泛的应用价值和市场前景。
【效果展示】

【测试环境】
windows10
anaconda3+python3.8
torch==2.3.0
ultralytics==8.3.81
onnxruntime==1.16.3
【模型可以检测出6类别】
裂纹(crack)、凹陷(dent)、玻璃破碎(glass shatter)、车灯损坏(lamp broken)、划痕(scratch)以及轮胎漏气或扁平(tire flat)
【训练数据集介绍】
数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)
图片数量(jpg文件个数):4000
标注数量(xml文件个数):4000
标注数量(txt文件个数):4000
标注类别数:6
标注类别名称(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准):["crack","dent","glass shatter","lamp broken","scratch","tire flat"]
每个类别标注的框数:
crack 框数 = 898
dent 框数 = 2543
glass shatter 框数 = 681
lamp broken 框数 = 704
scratch 框数 = 3595
tire flat 框数 = 319
总框数:8740
使用标注工具:labelImg
标注规则:对类别进行画矩形框
重要说明:暂无
特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注
图片预览:

标注例子:

【训练信息】
| 参数 | 值 |
| 训练集图片数 | 2400 |
| 验证集图片数 | 800 |
| 训练map | 69.6% |
| 训练精度(Precision) | 78.1% |
| 训练召回率(Recall) | 65.4% |
验证集测试精度信息
| 类别 | map0.5 |
| all | 70 |
| crack | 31 |
| dent | 56 |
| glass shatter | 98 |
| lamp broken | 85 |
| scratch | 53 |
| tire flat | 96 |
【界面设计】
import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QFileDialog, QLabel, QApplication
import image_rc
import threading
import cv2
import numpy as np
import time
from Yolo11Detector import *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.detector=Noneself.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.3)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()
【训练步骤】
使用YOLO11训练自己的数据集需要遵循一些基本的步骤。YOLO11是YOLO系列模型的一个版本,它在前代基础上做了许多改进,包括但不限于更高效的训练流程和更高的精度。以下是训练自己YOLO格式数据集的详细步骤:
一、 准备环境
1. 安装必要的软件:确保你的计算机上安装了Python(推荐3.6或更高版本),以及CUDA和cuDNN(如果你打算使用GPU进行加速)。
2. 安装YOLO11库:你可以通过GitHub克隆YOLOv8的仓库或者直接通过pip安装YOLO11。例如:
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. 开始训练:使用YOLO11提供的命令行接口开始训练过程。例如:
yolo train data=dataset.yaml model=yolo11n.yaml epochs=100 imgsz=640
更多参数如下:
| 参数 | 默认值 | 描述 |
|---|---|---|
model | None | Specifies the model file for training. Accepts a path to either a .pt pretrained model or a .yaml configuration file. Essential for defining the model structure or initializing weights. |
data | None | Path to the dataset configuration file (e.g., coco8.yaml). This file contains dataset-specific parameters, including paths to training and validation data , class names, and number of classes. |
epochs | 100 | 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. |
time | None | Maximum training time in hours. If set, this overrides the epochs argument, allowing training to automatically stop after the specified duration. Useful for time-constrained training scenarios. |
patience | 100 | 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 | 16 | Batch size, with three modes: set as an integer (e.g., batch=16), auto mode for 60% GPU memory utilization (batch=-1), or auto mode with specified utilization fraction (batch=0.70). |
imgsz | 640 | Target image size for training. All images are resized to this dimension before being fed into the model. Affects model accuracy and computational complexity. |
save | True | Enables saving of training checkpoints and final model weights. Useful for resuming training ormodel deployment. |
save_period | -1 | Frequency of saving model checkpoints, specified in epochs. A value of -1 disables this feature. Useful for saving interim models during long training sessions. |
cache | False | Enables caching of dataset images in memory (True/ram), on disk (disk), or disables it (False). Improves training speed by reducing disk I/O at the cost of increased memory usage. |
device | None | Specifies the computational device(s) for training: a single GPU (device=0), multiple GPUs (device=0,1), CPU (device=cpu), or MPS for Apple silicon (device=mps). |
workers | 8 | Number of worker threads for data loading (per RANK if Multi-GPU training). Influences the speed of data preprocessing and feeding into the model, especially useful in multi-GPU setups. |
project | None | Name of the project directory where training outputs are saved. Allows for organized storage of different experiments. |
name | None | Name of the training run. Used for creating a subdirectory within the project folder, where training logs and outputs are stored. |
exist_ok | False | If True, allows overwriting of an existing project/name directory. Useful for iterative experimentation without needing to manually clear previous outputs. |
pretrained | True | 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. |
optimizer | 'auto' | Choice of optimizer for training. Options include SGD, Adam, AdamW, NAdam, RAdam, RMSProp etc., or auto for automatic selection based on model configuration. Affects convergence speed and stability. |
verbose | False | Enables verbose output during training, providing detailed logs and progress updates. Useful for debugging and closely monitoring the training process. |
seed | 0 | Sets the random seed for training, ensuring reproducibility of results across runs with the same configurations. |
deterministic | True | Forces deterministic algorithm use, ensuring reproducibility but may affect performance and speed due to the restriction on non-deterministic algorithms. |
single_cls | False | 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. |
rect | False | Enables rectangular training, optimizing batch composition for minimal padding. Can improve efficiency and speed but may affect model accuracy. |
cos_lr | False | Utilizes a cosine learning rate scheduler, adjusting the learning rate following a cosine curve over epochs. Helps in managing learning rate for better convergence. |
close_mosaic | 10 | Disables mosaic data augmentation in the last N epochs to stabilize training before completion. Setting to 0 disables this feature. |
resume | False | Resumes training from the last saved checkpoint. Automatically loads model weights, optimizer state, and epoch count, continuing training seamlessly. |
amp | True | Enables AutomaticMixed Precision (AMP) training, reducing memory usage and possibly speeding up training with minimal impact on accuracy. |
fraction | 1.0 | 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. |
profile | False | Enables profiling of ONNX and TensorRT speeds during training, useful for optimizing model deployment. |
freeze | None | 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 . |
lr0 | 0.01 | Initial learning rate (i.e. SGD=1E-2, Adam=1E-3) . Adjusting this value is crucial for the optimization process, influencing how rapidly model weights are updated. |
lrf | 0.01 | Final learning rate as a fraction of the initial rate = (lr0 * lrf), used in conjunction with schedulers to adjust the learning rate over time. |
momentum | 0.937 | Momentum factor for SGD or beta1 for Adam optimizers, influencing the incorporation of past gradients in the current update. |
weight_decay | 0.0005 | L2 regularization term, penalizing large weights to prevent overfitting. |
warmup_epochs | 3.0 | 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. |
warmup_momentum | 0.8 | Initial momentum for warmup phase, gradually adjusting to the set momentum over the warmup period. |
warmup_bias_lr | 0.1 | Learning rate for bias parameters during the warmup phase, helping stabilize model training in the initial epochs. |
box | 7.5 | Weight of the box loss component in the loss_function, influencing how much emphasis is placed on accurately predicting bouding box coordinates. |
cls | 0.5 | Weight of the classification loss in the total loss function, affecting the importance of correct class prediction relative to other components. |
dfl | 1.5 | Weight of the distribution focal loss, used in certain YOLO versions for fine-grained classification. |
pose | 12.0 | Weight of the pose loss in models trained for pose estimation, influencing the emphasis on accurately predicting pose keypoints. |
kobj | 2.0 | Weight of the keypoint objectness loss in pose estimation models, balancing detection confidence with pose accuracy. |
label_smoothing | 0.0 | Applies label smoothing, softening hard labels to a mix of the target label and a uniform distribution over labels, can improve generalization. |
nbs | 64 | Nominal batch size for normalization of loss. |
overlap_mask | True | 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. |
mask_ratio | 4 | Downsample ratio for segmentation masks, affecting the resolution of masks used during training. |
dropout | 0.0 | Dropout rate for regularization in classification tasks, preventing overfitting by randomly omitting units during training. |
val | True | Enables validation during training, allowing for periodic evaluation of model performance on a separate dataset. |
plots | False | 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模型导出为不同格式的配置和选项。这些设置对于优化导出模型的性能、大小和跨各种平台和环境的兼容性至关重要。正确的配置可确保模型已准备好以最佳效率部署在预期的应用程序中。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
format | str | 'torchscript' | Target format for the exported model, such as 'onnx', 'torchscript', 'tensorflow', or others, defining compatibility with various deployment environments. |
imgsz | int or tuple | 640 | Desired image size for the model input. Can be an integer for square images or a tuple (height, width) for specific dimensions. |
keras | bool | False | Enables export to Keras format for Tensorflow SavedModel, providing compatibility with TensorFlow serving and APIs. |
optimize | bool | False | Applies optimization for mobile devices when exporting to TorchScript, potentially reducing model size and improving performance. |
half | bool | False | Enables FP16 (half-precision) quantization, reducing model size and potentially speeding up inference on supported hardware. |
int8 | bool | False | Activates INT8 quantization, further compressing the model and speeding up inference with minimal accuracy loss, primarily for edge devices. |
dynamic | bool | False | Allows dynamic input sizes for ONNX, TensorRT and OpenVINO exports, enhancing flexibility in handling varying image dimensions. |
simplify | bool | True | Simplifies the model graph for ONNX exports with onnxslim, potentially improving performance and compatibility. |
opset | int | None | Specifies the ONNX opset version for compatibility with different ONNX parsers and runtimes. If not set, uses the latest supported version. |
workspace | float | 4.0 | Sets the maximum workspace size in GiB for TensorRT optimizations, balancing memory usage and performance. |
nms | bool | False | Adds Non-Maximum Suppression (NMS) to the CoreML export, essential for accurate and efficient detection post-processing. |
batch | int | 1 | Specifies export model batch inference size or the max number of images the exported model will process concurrently in predict mode. |
device | str | None | Specifies the device for exporting: GPU (device=0), CPU (device=cpu), MPS for Apple silicon (device=mps) or DLA for NVIDIA Jetson (device=dla:0 or device=dla:1). |
调整这些参数可以定制导出过程,以满足特定要求,如部署环境、硬件约束和性能目标。选择适当的格式和设置对于实现模型大小、速度和精度之间的最佳平衡至关重要。
导出格式:
可用的YOLO11导出格式如下表所示。您可以使用format参数导出为任何格式,即format='onnx'或format='engine'。您可以直接在导出的模型上进行预测或验证,即yolo predict model=yolo11n.onnx。导出完成后,将显示您的模型的使用示例。
| 导出格式 | 格式参数 | 模型 | 属性 | 参数 |
|---|---|---|---|---|
| pytorch | - | yolo11n.pt | ✅ | - |
| torchscript | torchscript | yolo11n.torchscript | ✅ | imgsz, optimize, batch |
| onnx | onnx | yolo11n.onnx | ✅ | imgsz, half, dynamic, simplify, opset, batch |
openvino | openvino | yolo11n_openvino_model/ | ✅ | imgsz, half, int8, batch |
| tensorrt | engine | yolo11n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, batch |
| CoreML | coreml | yolo11n.mlpackage | ✅ | imgsz, half, int8, nms, batch |
| TF SaveModel | saved_model | yolo11n_saved_model/ | ✅ | imgsz, keras, int8, batch |
| TF GraphDef | pb | yolo11n.pb | ❌ | imgsz, batch |
| TF Lite | tflite | yolo11n.tflite | ✅ | imgsz, half, int8, batch |
| TF Edge TPU | edgetpu | yolo11n_edgetpu.tflite | ✅ | imgsz |
| TF.js | tfjs | yolo11n_web_model/ | ✅ | imgsz, half, int8, batch |
| PaddlePaddle | paddle | yolo11n_paddle_model/ | ✅ | imgsz, batch |
| MNN | mnn | yolo11n.mnn | ✅ | imgsz, batch, int8, half |
| NCNN | ncnn | yolo11n_ncnn_model/ | ✅ | imgsz, half, batch |
13. 测试模型:在新的数据上测试模型,确保其泛化能力良好。
以上就是使用YOLO11训练自己数据集的基本步骤。请根据实际情况调整这些步骤中的具体细节。希望这些信息对你有所帮助!
【常用评估参数介绍】
在目标检测任务中,评估模型的性能是至关重要的。你提到的几个术语是评估模型性能的常用指标。下面是对这些术语的详细解释:
- 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安装教程安装好yolov11环境,并安装好pyqt5
(2)切换到自己安装的yolo11环境后,并切换到源码目录,执行python main.py即可运行启动界面,进行相应的操作即可
【提供文件】
python源码
yolo11n.onnx模型(不提供pytorch模型)
训练的map,P,R曲线图(在weights\results.png)
测试图片(在test_img文件夹下面)
注意提供数据集
相关文章:
基于yolov11的汽车损伤检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
【算法介绍】 基于YOLOv11的汽车损伤检测系统是一种先进的计算机视觉技术,旨在快速准确地识别汽车的各种损伤类型。该系统利用YOLOv11模型的强大性能,实现了对车辆损伤的精确检测与分类。 该系统能够识别的损伤类型包括裂纹(crackÿ…...
OpenCV 图形API(2)为什么需要图形API?
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 G-API背后的动机 G-API模块为OpenCV带来了基于图的执行模型。本章简要描述了这种新模型如何在两个方面帮助软件开发者:优化和移植图像处理算法…...
基于Spring Boot的平面设计课程在线学习平台系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
esp32 idf中的外部组件
通常外部组件都定义在“main/idf_component.yml”里面。 例如小智智能语音的外部组件: ## IDF Component Manager Manifest File dependencies:waveshare/esp_lcd_sh8601: "1.0.2"espressif/esp_lcd_ili9341: "1.2.0"espressif/esp_lcd_gc9a01…...
【JavaEE】MyBatis - Plus
目录 一、快速使用二、CRUD简单使用三、常见注解3.1 TableName3.2 TableFiled3.3 TableId 四、条件构造器4.1 QueryWrapper4.2 UpdateWrapper4.3 LambdaQueryWrapper4.4 LambdaUpdateWrapper 五、自定义SQL 一、快速使用 MyBatis Plus官方文档:MyBatis Plus官方文档…...
经典卷积神经网络LeNet实现(pytorch版)
LeNet卷积神经网络 一、理论部分1.1 核心理论1.2 LeNet-5 网络结构1.3 关键细节1.4 后期改进1.6 意义与局限性二、代码实现2.1 导包2.1 数据加载和处理2.3 网络构建2.4 训练和测试函数2.4.1 训练函数2.4.2 测试函数2.5 训练和保存模型2.6 模型加载和预测一、理论部分 LeNet是一…...
【2】数据结构的单链表章
目录标题 单链表的定义单链表的初始化单链表的建立头插法创建尾插法创建 查找操作按序号查找按内容查找 插入操作删除操作合并操作 单链表总代码与调试 单链表的定义 结点(Node)的定义:数据域(data)和指针域ÿ…...
Linux(十一)fork实例练习、文件操作示例及相关面试题目分享
一、fork实例练习 1、思考下面这段代码的打印结果是什么? #include<stdio.h> #include<unistd.h> #include<assert.h> #include<stdlib.h>int main(){int i0;for(;i<2;i){fork();printf("A\n");} exit(0); }所以一共打印6…...
android Fragment使用
在 Android Fragment 中,导入 id(findViewById)并给控件赋值的逻辑通常应该写在 onViewCreated() 方法中,而不是 onCreateView()。 Fragment 生命周期 & 适合的位置 方法作用适合的操作onCreateView()创建并返回 Fragment 的…...
open3d教程 (三)点云的显示
官方文档位置: Visualization - Open3D 0.19.0 documentationhttps://www.open3d.org/docs/release/tutorial/visualization/visualization.html核心方法: o3d.visualization.draw_geometries([几何对象列表]) import open3d as o3dprint("Load …...
根据模板将 Excel 明细数据生成 Txt 文档|邮件合并
在日常办公中,我们常常会遇到需要批量生成文档的任务。以往,若要将 Excel 中的每一条数据都转化为单独的文档,且文档部分内容依据 Excel 数据动态变化,手动操作不仅繁琐,还容易出错。现在,有一种便捷的方法…...
【学Rust写CAD】22 双圆径向渐变的结构体(two_circle_radial_gradient.rs)
源码 //two_circle_radial_gradient.rs //! 定义双圆径向渐变的结构体和相关功能/// 表示一个双圆径向渐变的源 /// /// 该结构体描述了两个圆之间的渐变,支持矩阵变换和颜色查找表优化 #[derive(Debug, Clone, PartialEq)] pub struct TwoCircleRadialGradientSou…...
LVGL Dropdown和Calendar详解
LVGL Dropdown和Calendar详解 一、Dropdown详解创建和初始化设置下拉框选项获取选项获取选中项文本:获取选中项索引:设置选中项: 事件处理其他功能和样式设置设置下拉按钮样式:设置下拉框方向:设置最大高度:…...
AISEO (GEO )中的知识图谱
一、知识图谱在AI SEO中的概念与结构 1. 知识图谱是什么? 定义:知识图谱(Knowledge Graph)是一种以图结构组织的语义网络,由实体(Entity)、**关系(Relation)和属性&…...
Vulnhub-zico2靶机打靶记录
本篇文章旨在为网络安全渗透测试靶机教学。通过阅读本文,读者将能够对渗透Vulnhub系列zico2靶机有一定的了解 一、信息收集阶段 靶机下载地址:https://download.vulnhub.com/zico/zico2.ova 因为靶机为本地部署虚拟机网段,查看dhcp地址池设…...
(041)05-01-自考数据结构(20331)树与二叉树大题总结
实际考试中,计算题约占40%,推理题约占30%,算法设计题约占30%。建议重点练习遍历序列相关的递归分治解法, 知识拓扑 知识点介绍 一、计算题类型与解法 1. 结点数量计算 题型示例: 已知一棵完全二叉树的第6层有8个叶子结点,求该二叉树最多有多少个结点? 解法步骤: 完…...
Python----机器学习(KNN:使用数学方法实现KNN)
一、原理 以下是K最近邻(K-Nearest Neighbors,简称KNN)算法的基本流程,用于对给定点进行分类预测。 1. 获得要预测的点 point_predict 。 2. 计算训练点集 point_set_train 中各点到要预测的点 表 l ist_L2_distance 。 3. 对 poi…...
网络攻防快速入门笔记pwn | 02 栈溢出题型 | 2.2 ret2libc
上一篇:网络攻防快速入门笔记pwn | 02 栈溢出题型 | 2.1 ret2text和ret2shellcode 下一篇:网络攻防快速入门笔记pwn | 02 栈溢出题型 | 2.3 ret2syscall 欢迎关注~ ret2libc 一、 什么是ret2libc(一)ret2lib的概念(…...
Edge浏览器快速开启IE模式
一些老旧的网站,仅支持Internet Explorer(IE)浏览器访问。 然而,出于安全性的考虑,可能会遇到限制IE浏览器使用的情况。 Microsoft Edge浏览器提供了兼容性配置,可以通过IE模式访问这些网站。 以下是两种…...
技术长期主义:用本分思维重构JavaScript逆向知识体系(一)Babel、AST、ES6+、ES5、浏览器环境、Node.js环境的关系和处理流程
基础不牢,地动山摇,逆向越久,越发现基础的重要性,本系列,回顾js逆向基础,让自己的知识体系更加系统化。 以下是 Babel、AST、ES6、ES5、浏览器环境、Node.js环境 的关系和流程的详细说明及图表:…...
Oracle 数据库系统全面详解
Oracle 数据库是全球领先的关系型数据库管理系统(RDBMS),由 Oracle 公司开发。它为企业级应用提供了高性能、高可用性、安全性和可扩展性的数据管理解决方案。 目录 一、Oracle 数据库体系结构 1. 物理存储结构 主要组件: 存储层次: 2. …...
LeetCode 解题思路 29(Hot 100)
解题思路: 映射关系建立:创建一个哈希表存储数字到字母的映射。递归参数: 给定字符串 digits、结果集 result、当前路径 path、当前位置 start。递归过程: 当当前位置 start 等于 digits 长度时,说明已经遍历完 digi…...
使用Python解析PPT文件并生成JSON结构详解
引言 PowerPoint(PPT)文件的自动化处理是办公自动化和数据提取的常见需求。本文将介绍如何通过Python的python-pptx库,将PPT文件的样式、结构、文本内容等信息解析为标准化的JSON格式,为后续的自动化处理、数据迁移或样式复用提供…...
LabVIEW永磁同步电机性能测试系统
开发了一种基于LabVIEW的永磁同步电机(PMSM)性能测试系统的设计及应用。该系统针对新能源汽车使用的电机进行稳态性能测试,解决了传统测试方法成本高、效率低的问题,实现了测试自动化,提高了数据的准确性和客观性。 …...
MTK Camera 照片切视频Systrace拆解分析
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Systrace 拆解概览二、Systrace 阶段拆解详解 一、Systrace 拆解概览 MTK Camera 照片切换视频trace 拆解(非切换摄像头类) 照片切换视频模块trace…...
某合约任意提取BNB漏洞
1背景描述 合约是一个在满足特定条件时在区块链上执行代码的程序,各方以数字签署合同的方式准许并维护它的其运行。这些代码可以是向朋友汇款、买卖 NFT 虚拟商品等一系列复杂的内容。 存在漏洞的目标合约是一个结合Meme文化病毒式传播与去中心化金融(D…...
Linux_3.2
今天继续学习shell语法 shell类似一个面向过程的语言,要区分好面向过程和面向对象的语言的区别。 循环语句 for循环 for i in a 2 cc doecho $i done #输出a 2 ccfor file in `ls` doecho $file done #输出ls命令的输出for i in $(seq 1 10) doecho $i done #输出1-10,seq…...
插件实现:分别通过winform和WPF界面输入操作CAD——CAD c#二次开发
效果如下图所示: 主程序 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Windows…...
【学Rust写CAD】20 平铺模式结构体(spread.rs)
这个 Spread。rs文件定义了渐变超出定义区域时的扩展方式,通常用于处理渐变在边界之外的行为。 源码 //color/spread.rs #[derive(Debug, Clone, Copy)] pub struct Pad; // 空结构体,表示 Pad 模式#[derive(Debug, Clone, Copy)] pub struct Reflect…...
maya调整全局关节显示大小
请按以下步骤操作: 在 Maya 主菜单栏中,找到 Display (显示) 菜单。 在 Display 菜单下,找到 Animation (动画) 子菜单。 在 Animation 子菜单中,点击 Joint Size... (关节大小...)。 这时会弹出一个小窗口或者直接在界面上出现…...
