
简介目标检测是计算机视觉的核心任务之一旨在识别图像中的物体并定位其位置。其原理通常基于深度学习模型通过卷积神经网络提取特征并预测边界框和类别。这项技术的价值在于能够自动化、高精度地完成视觉感知极大地提升了安防、工业质检等领域的效率。在众多应用场景中火灾预警是一个典型且重要的方向它要求模型具备实时性和高可靠性。本文聚焦于使用YOLOv5这一流行的目标检测框架结合一个包含4000多张图片的火焰数据集详细阐述了从环境搭建、数据标注、模型训练调优到最终部署的完整工程实践路径为开发者构建类似的实时检测系统提供了可复用的解决方案。1. 项目概述与核心价值最近在做一个安防相关的项目其中有一个核心需求是实时识别监控画面中的火焰。这听起来像是计算机视觉里一个经典的应用场景但真上手做你会发现从数据准备到模型部署每一步都有不少门道。我最终选择了YOLOv5这个目前工业界和学术界都挺火的算法框架并且自己整理标注了一个包含4000多张图片的火焰数据集。整个过程走下来感觉收获颇丰也踩了不少坑今天就把这个“火焰识别检测”项目的完整实现路径、技术细节和实操心得系统地梳理一下希望能给想做类似目标检测项目的朋友一些参考。这个项目本质上是一个特定场景下的目标检测任务。它的核心价值在于能够自动化、高精度地识别图像或视频流中的火焰区域并给出其位置边界框。这比传统基于温度或烟雾的传感器方案更直观、更前置尤其适用于大范围、开放空间的早期火灾预警比如森林防火、仓库监控、厨房安全等。YOLOv5以其在精度和速度上的优秀平衡以及极其友好的工程化实现成为了完成这个任务的首选工具。而一个高质量、针对性的数据集则是模型能否“学好”的关键。我准备的这4000多张火焰图片涵盖了室内、室外、白天、夜晚、近景、远景、大火苗、小火星等多种场景就是为了让模型具备强大的泛化能力。2. 火焰检测项目的整体设计思路做任何一个AI项目动手写代码之前理清整体思路至关重要。火焰检测不是一个新课题但要想做得好、用得稳需要综合考虑多个维度。2.1 为什么选择YOLOv5市面上目标检测的算法很多从两阶段的Faster R-CNN到一阶段的SSD、YOLO系列各有优劣。我选择YOLOv5主要基于以下几点考量速度与精度的平衡YOLOYou Only Look Once系列的核心思想就是“单次前向传播”完成检测速度天生有优势。YOLOv5在YOLOv4的基础上进一步优化了网络结构和训练策略在保持高速度的同时精度mAP也有不错的表现。对于火焰检测这种可能需要部署在边缘设备如NVIDIA Jetson、RK3568等进行实时分析的应用推理速度是硬指标。工程化友好程度极高这是YOLOv5最吸引人的地方。它的代码库GitHub - ultralytics/yolov5结构清晰文档相对完善提供了从环境安装、数据准备、模型训练、验证到导出的全套脚本。对于大多数开发者来说几乎可以“开箱即用”大大降低了入门和部署的难度。模型尺寸灵活YOLOv5提供了从轻量级到高性能的多个预训练模型n, s, m, l, x你可以根据你的硬件算力和精度要求灵活选择。例如在算力受限的嵌入式平台如RV1106上可以选择YOLOv5n或YOLOv5s在服务器端追求极致精度则可以选择YOLOv5l或x。活跃的社区与生态YOLOv5有非常庞大的用户社区这意味着你在实践中遇到的大部分问题很可能已经有人遇到过并给出了解决方案。丰富的教程、博客和衍生工具如标注工具、部署工具也构成了强大的生态支持。2.2 数据集项目的基石与挑战“垃圾进垃圾出”Garbage in, garbage out在机器学习领域是铁律。对于目标检测数据集的质量直接决定了模型性能的上限。数据来源与采集我的4000多张火焰图像主要来自几个渠道公开数据集如Fire Detection Dataset、网络爬取需注意版权、以及部分实地拍摄和模拟实验。关键是要保证多样性不同环境森林、街道、房间、厂房、不同光照条件强光、逆光、夜晚、不同火焰形态明火、烟雾中的火、小火苗、爆燃瞬间、不同尺度占画面大部分的特写火焰和远处的小火点都要尽可能覆盖。数据标注规范我使用LabelImg、CVAT或Roboflow这类工具进行标注。标注时统一使用fire作为类别名。边界框Bounding Box要尽可能紧密地贴合火焰区域包括摇曳的火苗尖端。对于被部分遮挡的火焰也需要根据可见部分进行标注。一个常见的坑是标注不一致比如有时包含烟雾有时不包含这会让模型产生混淆。我们团队内部会先制定详细的标注规范文档并让所有标注人员统一培训。数据格式YOLOv5要求特定的数据格式。每张图片对应一个同名的.txt标注文件。文件内容为多行每行代表一个目标格式为class_id x_center y_center width height。这里的坐标是归一化后的即除以图片宽高取值在0到1之间。例如0 0.5 0.5 0.2 0.3表示类别0火焰的一个目标其中心点位于图片(50% 50%)位置宽度和高度分别为图片宽高的20%和30%。数据集划分我将4000多张数据按大约8:1:1的比例划分为训练集train、验证集val和测试集test。验证集用于训练过程中监控模型表现、调整超参数和进行早停Early Stopping测试集则是在模型训练完成后用于最终评估其泛化性能在整个训练过程中绝对不参与。2.3 技术栈与工具选型一个顺畅的项目流程离不开合适的工具。以下是本项目核心的技术栈深度学习框架PyTorch。YOLOv5基于PyTorch实现这是目前最主流的框架之一灵活且生态丰富。算法框架Ultralytics YOLOv5。我们直接克隆其官方GitHub仓库。开发环境Python 3.8 CUDA如果使用NVIDIA GPU。建议使用Anaconda或Miniconda创建独立的虚拟环境避免包依赖冲突。标注工具LabelImg本地开源、Roboflow在线平台提供数据增强、格式转换等增值服务。版本控制Git。用于管理代码、配置文件和数据集清单。实验管理可选WBWeights Biases或TensorBoard。用于可视化训练过程中的损失曲线、精度指标等对于调参和Debug非常有用。3. 环境搭建与YOLOv5部署万事开头难一个干净、稳定的环境是成功的第一步。这里我详细记录下从零开始的部署过程。3.1 基础环境配置我强烈推荐使用Conda来管理环境它能很好地解决不同项目间Python版本和包版本的冲突问题。# 1. 创建并激活一个新的conda环境命名为yolov5指定Python版本 conda create -n yolov5 python3.8 conda activate yolov5 # 2. 安装PyTorch。请务必去PyTorch官网https://pytorch.org/get-started/locally/ # 根据你的CUDA版本通过 nvidia-smi 查看选择正确的安装命令。 # 例如对于CUDA 11.3 pip install torch1.12.1cu113 torchvision0.13.1cu113 torchaudio0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113 # 如果没有GPU或CUDA则安装CPU版本 # pip install torch torchvision torchaudio注意PyTorch版本与CUDA版本的匹配是关键。版本不匹配会导致无法调用GPU甚至报错。如果安装后运行python -c “import torch; print(torch.cuda.is_available())”返回False大概率是版本问题。3.2 克隆与安装YOLOv5YOLOv5的官方仓库更新比较活跃建议克隆后切换到某个稳定发布版本Release Tag而不是直接使用主分支main以避免潜在的API变动。# 克隆仓库 git clone https://github.com/ultralytics/yolov5.git cd yolov5 # 查看可用版本标签建议选择最新的稳定版例如 v7.0 git tag # git checkout v7.0 # 切换到指定版本 # 安装项目依赖 pip install -r requirements.txtrequirements.txt文件包含了所有必要的依赖如opencv-python, pandas, seaborn等。安装过程如果遇到某些包版本问题可以尝试单独安装或稍微调整版本号。3.3 验证安装安装完成后运行一个简单的测试脚本来验证环境是否正常并快速体验YOLOv5的检测效果。python detect.py --source data/images/bus.jpg --weights yolov5s.pt --conf 0.25这条命令的含义是使用预训练的yolov5s.pt权重文件对data/images/bus.jpg这张示例图片进行推理只显示置信度大于0.25的检测结果。首次运行会自动下载yolov5s.pt模型文件。运行成功后会在runs/detect/exp目录下生成带检测框的结果图片。如果能看到巴士被正确检测出来说明基础环境搭建成功。4. 数据集准备与预处理环境好了接下来就是重头戏——准备我们自己的火焰数据集。这是整个项目中最耗时但也最关键的环节。4.1 数据集目录结构YOLOv5对数据集的目录结构有明确要求。我建议按照以下方式组织清晰且便于管理fire_dataset/ ├── images/ │ ├── train/ # 训练集图片约3200张 │ ├── val/ # 验证集图片约400张 │ └── test/ # 测试集图片约400张 └── labels/ ├── train/ # 训练集标注文件与images/train/一一对应 ├── val/ # 验证集标注文件 └── test/ # 测试集标注文件关键点images和labels下的子目录名称train, val, test必须严格对应且其中的文件名不含后缀要一一匹配。例如images/train/fire_001.jpg对应的标注文件必须是labels/train/fire_001.txt。4.2 创建数据集配置文件我们需要创建一个YAML配置文件例如fire_data.yaml告诉YOLOv5我们的数据集在哪里、有多少个类别、类别名是什么。# fire_data.yaml path: /path/to/your/fire_dataset # 数据集的根目录绝对路径 train: images/train # 训练集路径相对于path val: images/val # 验证集路径相对于path test: images/test # 测试集路径相对于path可选用于最终测试 # 类别数量 nc: 1 # 类别名称列表 names: [fire] # 可选下载地址/说明 # download: https://your-dataset-url.com将这个文件放在YOLOv5项目目录下例如data/文件夹内。路径中的/path/to/your/fire_dataset一定要替换成你本地的实际绝对路径。4.3 数据增强策略YOLOv5在训练时内置了强大的数据增强Data Augmentation功能这能有效提升模型的鲁棒性和泛化能力。我们可以在训练命令中通过参数进行控制但理解其原理有助于我们调整。Mosaic增强将四张训练图片随机拼接成一张让模型学习在不同背景、不同尺度下识别目标。这是YOLOv4/v5带来性能提升的关键技术之一。随机仿射变换包括缩放、平移、旋转、剪切。模拟摄像头视角变化、物体远近变化。色彩空间扰动调整图像的色调Hue、饱和度Saturation、明度Value。这对于火焰检测特别重要因为火焰的颜色红、黄、橙和亮度在不同场景下差异很大增强后能让模型不依赖于固定的颜色特征。随机水平翻转简单的几何翻转能有效扩充数据。在data/hyps/hyp.scratch-low.yaml等超参数文件中可以找到控制这些增强强度的参数如hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear等。对于火焰检测我通常会适度增强色彩扰动hsv_h, hsv_s, hsv_v因为火焰颜色是核心特征之一但也要防止扰动过大导致模型学偏。5. 模型训练与超参数调优数据就绪就可以开始“炼丹”训练模型了。这个过程是自动的但我们需要理解每个步骤和关键参数。5.1 启动训练最基本的训练命令如下python train.py --img 640 --batch 16 --epochs 100 --data data/fire_data.yaml --weights yolov5s.pt --project runs/train --name fire_exp1让我逐一解释这些参数--img 640: 输入图片会被自动缩放到640x640像素进行训练。这是YOLOv5的默认尺寸平衡了速度和精度。你也可以尝试更大的尺寸如1280以获得更高精度但会显著增加显存消耗和训练时间。--batch 16: 批次大小Batch Size。一次迭代送入模型的数据量。越大训练越稳定速度越快但需要更多显存。如果出现“CUDA out of memory”错误就需要减小batch值或减小--img尺寸。--epochs 100: 训练轮数。整个数据集被完整遍历一次称为一个Epoch。100是一个常见的起始值具体需要根据验证集损失是否收敛来决定。--data data/fire_data.yaml: 指定我们刚才创建的数据集配置文件路径。--weights yolov5s.pt: 指定预训练权重。这里使用在COCO数据集上预训练的yolov5s.pt。这是迁移学习的关键能极大加速收敛并提升最终性能。从零开始训练--weights ‘’通常效果差且慢。--project runs/train --name fire_exp1: 指定训练日志、权重文件、可视化结果等的保存目录。所有输出会保存在runs/train/fire_exp1/下。5.2 训练过程监控训练开始后终端会打印每个epoch的损失box_loss, obj_loss, cls_loss和评估指标precision, recall, mAP0.5, mAP0.5:0.95。更重要的是YOLOv5会自动在runs/train/fire_exp1/目录下生成一系列有用的文件weights/best.pt: 训练过程中在验证集上表现最好的模型权重。weights/last.pt: 最后一个epoch的模型权重。results.png/results.csv: 训练过程中各项指标的变化曲线图和数据表。这是调参的核心依据。confusion_matrix.png: 混淆矩阵查看模型在各类别上的分类错误情况。val_batchX_labels.jpg/val_batchX_pred.jpg: 验证集批次的实际标签和模型预测结果可视化对比。实操心得训练时一定要盯着results.png中的损失曲线。理想的曲线应该是训练损失和验证损失都平稳下降并最终趋于平缓。如果验证损失在中间开始上升而训练损失继续下降这就是过拟合的典型信号需要采取早停、增加数据增强、使用更简单的模型或添加正则化如权重衰减等措施。5.3 关键超参数解析与调优YOLOv5的超参数配置文件位于data/hyps/包含了大量可调参数。对于新手我建议先使用默认的hyp.scratch-low.yaml针对小数据集或hyp.scratch-med.yaml。在有一定经验后可以针对火焰检测任务进行微调。几个最值得关注的超参数学习率lr0这是最重要的超参数之一。它控制模型参数更新的步长。太大容易震荡不收敛太小则收敛慢。YOLOv5使用了带热启动warmup和余弦退火cosine annealing的学习率调度器通常默认值0.01是个不错的起点。如果训练不稳定损失值NaN或剧烈波动尝试将其调小如0.001。权重衰减weight_decay一种正则化手段防止模型过拟合。默认值0.0005通常适用。如果怀疑过拟合可以尝试稍微增大如0.001。数据增强强度如前所述在hyp文件中调整hsv_h,degrees,scale等参数。对于火焰我可能会把hsv_h色调扰动调低一点因为火焰的色调范围相对固定红黄而过度的色调变化可能生成不真实的“紫色火焰”图片干扰学习。锚框AnchorsYOLOv5会针对你的数据集自动计算新的锚框尺寸在训练开始时输出“AutoAnchor: Done”信息。这是一个非常实用的功能意味着你通常不需要手动调整锚框。它会根据你数据集中目标框的宽高分布聚类生成9组更适合的初始锚框。调优建议不要一次性改动多个参数。采用“控制变量法”每次只调整一个你认为最重要的参数观察results.png的变化特别是验证集mAP的提升。使用TensorBoard或WB可以更方便地进行超参数搜索和实验对比。6. 模型评估与性能分析训练完成后我们不能只看训练日志里的数字必须对模型进行系统性的评估了解其真实性能。6.1 使用验证集进行评估YOLOv5在训练过程中已经会在验证集上计算指标。训练结束后我们可以用保存的最佳模型best.pt专门在验证集上跑一次评估生成更全面的可视化结果。python val.py --weights runs/train/fire_exp1/weights/best.pt --data data/fire_data.yaml --img 640 --task val --save-txt --save-conf--save-txt: 将预测的边界框保存为txt文件YOLO格式便于后续分析。--save-conf: 在保存的txt文件中同时保存置信度。运行后会在runs/val/exp目录下生成评估结果。重点关注以下几个文件confusion_matrix_normalized.png: 归一化混淆矩阵。对于单类别任务主要看背景被误检为火焰假阳性和火焰被漏检假阴性的比例。F1_curve.png: F1分数随置信度阈值变化的曲线。F1是精确率Precision和召回率Recall的调和平均帮助我们选择一个平衡的置信度阈值。P_curve.png/R_curve.png: 精确率和召回率曲线。PR_curve.png: 精确率-召回率曲线曲线下的面积就是APAverage Precision。mAP0.5就是IoU阈值为0.5时的AP值是目标检测的核心指标。6.2 核心指标解读对于火焰检测这样的安全应用我们需要在多个指标间权衡精确率Precision模型预测为“火焰”的框中有多少真的是火焰。高精确率意味着误报少不会总是“狼来了”。对于避免不必要的恐慌和资源调动很重要。召回率Recall所有真实的火焰框中有多少被模型找出来了。高召回率意味着漏报少不会错过真正的火灾隐患。这是安全系统的底线。mAP0.5mean Average Precision在IoU交并比阈值为0.5时对所有类别这里就一类计算的平均精度。这是综合衡量检测性能的核心指标。我的火焰数据集上一个训练良好的YOLOv5s模型mAP0.5通常能达到85%以上。推理速度FPS在特定硬件上模型每秒能处理多少帧图像。这决定了能否满足实时性要求。可以用python detect.py --weights best.pt --source 0调用摄像头并观察终端输出的FPS来粗略评估。经验之谈在实际部署中我们往往通过调整检测时的--conf-thres置信度阈值来在精确率和召回率之间做取舍。如果部署环境对误报容忍度低如家庭监控就调高阈值如0.5如果对漏报容忍度低如化工厂高危区域就调低阈值如0.25。这个阈值的选择需要结合PR曲线和实际业务需求来决定。6.3 在测试集上进行最终“考试”验证集参与了训练过程中的模型选择选best.pt因此其指标可能过于乐观。我们需要用完全没参与过任何训练环节的测试集来做最终的性能评估这最能反映模型在真实未知数据上的表现。python val.py --weights runs/train/fire_exp1/weights/best.pt --data data/fire_data.yaml --img 640 --task test命令和验证时类似只是将--task参数改为test。YOLOv5会根据fire_data.yaml中的test路径找到测试集。分析测试集的结果如果与验证集结果差距不大例如mAP下降不超过3-5个百分点说明模型泛化能力良好如果差距很大则很可能存在过拟合需要回头检查数据划分、数据增强或模型复杂度。7. 模型推理与部署应用模型训练评估完毕接下来就是让它“干活”的时候了。YOLOv5的detect.py脚本提供了极其方便的推理接口。7.1 对图片、视频、流进行推理# 1. 检测单张图片 python detect.py --weights runs/train/fire_exp1/weights/best.pt --source path/to/your/test_image.jpg --conf 0.4 # 2. 检测一个文件夹下的所有图片 python detect.py --weights best.pt --source path/to/image_folder/ --conf 0.4 # 3. 检测视频文件 python detect.py --weights best.pt --source path/to/video.mp4 --conf 0.4 # 4. 调用本地摄像头实时检测 python detect.py --weights best.pt --source 0 --conf 0.4 # 5. 检测网络流如RTSP python detect.py --weights best.pt --source rtsp://username:passwordip:port/stream --conf 0.4--conf 0.4: 设置置信度阈值。高于此值的检测框才会被显示和保存。你可以根据之前评估的结果调整这个值。检测结果默认保存在runs/detect/exp目录下每次运行会新建一个递增的文件夹exp, exp2, exp3...。7.2 将模型集成到你的应用中detect.py脚本适合快速测试和演示。在实际项目中我们通常需要将训练好的模型集成到自己的Python应用程序或服务中。YOLOv5提供了简洁的Python API。import torch import cv2 from pathlib import Path # 加载自定义训练好的模型 model torch.hub.load(ultralytics/yolov5, custom, pathruns/train/fire_exp1/weights/best.pt, force_reloadTrue) # 或者直接使用本地仓库中的模型 # model torch.hub.load(./yolov5, custom, pathruns/train/fire_exp1/weights/best.pt, sourcelocal) # 设置模型参数 model.conf 0.4 # 置信度阈值 model.iou 0.45 # NMS的IoU阈值 # 准备图像支持多种输入格式路径URLPILOpenCVnumpy等 img path/to/test.jpg # 或 cv2.imread(path/to/test.jpg)[:,:,::-1] # 进行推理 results model(img) # 解析结果 predictions results.pandas().xyxy[0] # 返回一个Pandas DataFrame # DataFrame列包括: xmin, ymin, xmax, ymax, confidence, class, name for index, row in predictions.iterrows(): x1, y1, x2, y2 int(row[xmin]), int(row[ymin]), int(row[xmax]), int(row[ymax]) conf row[confidence] label row[name] print(f检测到 {label}, 置信度 {conf:.2f}, 位置 [{x1}, {y1}, {x2}, {y2}]) # 可视化结果带检测框的图片 results.imgs # 原始图像列表 results.render() # 对图像进行渲染添加检测框 for img in results.imgs: cv2.imshow(YOLOv5 Detection, img) cv2.waitKey(0) cv2.destroyAllWindows() # 也可以直接保存结果图片 results.save(save_diroutput/)这段代码展示了加载模型、推理和解析结果的基本流程。你可以将其嵌入到Flask/Django Web服务、桌面应用或视频流处理循环中。7.3 模型导出与优化为了在不同平台部署我们可能需要将PyTorch模型.pt转换成其他格式。导出为TorchScript适用于PyTorch生态内的C部署或移动端。python export.py --weights best.pt --include torchscript导出为ONNX一种开放的模型交换格式被TensorRT, OpenVINO, ONNX Runtime等多种推理引擎支持。python export.py --weights best.pt --include onnx导出为TensorRT如果部署在NVIDIA GPU上TensorRT能提供极致的推理加速。python export.py --weights best.pt --include engine --device 0注意TensorRT导出需要先安装TensorRT并且过程相对复杂涉及精度校准FP16/INT8等步骤。部署考量在资源受限的边缘设备如树莓派、RK3568、RV1106上部署时需要选择最小的模型如YOLOv5n并可能需要进行模型量化将FP32权重转换为INT8来进一步减小模型体积、提升推理速度。这通常会带来轻微的精度损失需要在速度和精度之间做权衡。8. 常见问题、避坑指南与进阶技巧在完成这个项目的过程中我遇到了不少典型问题也总结了一些提升效果的小技巧。8.1 训练阶段常见问题CUDA内存不足Out of Memory现象训练开始不久就报错RuntimeError: CUDA out of memory。原因批次大小--batch或图像尺寸--img设置过大超出了GPU显存容量。解决首先减小--batch如从16降到8或4。其次减小--img如从640降到416或320。检查是否有其他程序占用了大量显存。在train.py中尝试使用--adam优化器替代默认的SGD因为Adam对批次大小不那么敏感。损失值为NaN或无限大现象训练过程中损失突然变成NaN或inf。原因学习率lr0设置过高数据中存在损坏的图片或标注如坐标超出0-1范围梯度爆炸。解决大幅降低学习率如从0.01降到0.001。使用python -c “from utils.general import check_dataset; check_dataset(‘data/fire_data.yaml’)”命令检查数据集格式和图片路径是否正确。在超参数文件中增加梯度裁剪grad_clip的值。验证集mAP不升反降过拟合明显现象训练损失持续下降但验证集损失在某个epoch后开始上升验证集mAP停滞甚至下降。原因模型过于复杂如用了YOLOv5l/x但数据量只有几千张训练轮数过多数据增强不够数据多样性不足。解决使用更小的模型从YOLOv5l切换到YOLOv5s或n。启用早停--patience参数如设置--patience 50当验证集损失连续50轮不下降时停止训练。增强数据多样性或使用更激进的数据增强适度增加hsv_h,scale,flipud等参数。在超参数中增加权重衰减weight_decay。8.2 推理阶段常见问题误检False Positive高现象模型将红色衣物、夕阳、车灯等误认为是火焰。原因训练数据中缺乏此类“负样本”看起来像火焰但不是火焰的样本。解决在数据集中主动加入一些易混淆的负样本图片并在标注时不标注任何框即生成一个空的.txt文件。这样模型会学习到这些区域“没有火焰”。这被称为“困难负样本挖掘”对降低误报率非常有效。小目标火焰漏检现象远处的、在画面中占比很小的火焰检测不到。原因YOLOv5默认的锚框和特征图可能对小目标不敏感训练数据中小目标样本不足。解决在数据集中增加更多包含小火焰的图片。尝试使用更大的输入图像尺寸进行训练和推理如--img 1280这会增加特征图分辨率有利于小目标检测。可以修改模型结构但门槛较高。一个更简单的方法是使用YOLOv5的P6模型如yolov5s6.pt它专为更高分辨率输入设计。推理速度慢现象在目标设备上FPS达不到实时要求如10 FPS。解决换用更小的模型YOLOv5n s m l x。降低推理图像尺寸--img 416。使用TensorRT、OpenVINO或ONNX Runtime等优化后的推理引擎。对于视频流可以尝试跳帧处理每N帧处理一帧。8.3 提升模型性能的进阶技巧模型集成Ensemble训练多个不同初始化或不同数据子集的YOLOv5模型在推理时综合它们的预测结果。这几乎总能提升几个点的mAP但代价是推理速度成倍下降。适用于对精度要求极高、对速度不敏感的场景。python detect.py --weights best.pt second_best.pt --source test.jpg --augment测试时增强Test Time Augmentation, TTA在推理时对输入图像进行多种变换如翻转、缩放将多个预测结果合并。这能提升精度但也会增加计算量。在detect.py或val.py中加入--augment参数即可启用。python detect.py --weights best.pt --source test.jpg --augment利用预训练权重进行微调如果你有更多的数据或者想从一个更好的起点开始可以使用在更大数据集如COCO上预训练的权重而不是默认的yolov5s.pt。有时官方会发布在特定任务上如车辆检测预训练的权重用它们初始化可能收敛更快、效果更好。关注数据质量永远不要低估数据清洗和标注质量的重要性。定期复查和修正标注错误剔除模糊、不相关的图片其带来的性能提升可能比调参更显著。可以考虑使用模型预测结果对未标注数据进行“预标注”再由人工审核修正能极大提升数据标注效率。这个从零到一的火焰识别项目涵盖了数据准备、模型训练、评估调优和部署应用的完整链路。最关键的两点体会是第一数据决定上限算法逼近上限在数据上多花一分功夫效果提升立竿见影第二理解原理比跑通代码更重要明白每个参数、每个步骤背后的“为什么”才能在遇到问题时快速定位在调优时有的放矢。希望这份详尽的记录能帮你绕过我踩过的那些坑更快地构建出属于你自己的、稳定可靠的火焰检测系统。本文还有配套的精品资源点击获取