一、项目简介
本项目面向林区早期火情识别场景,使用 YOLOv8 完成火焰(Fire)与烟雾(Smoke)两类目标的检测模型训练,并以 FastAPI 构建 Web 检测平台,把模型能力封装为可直接登录使用的系统。
平台除常规的图片、批量、视频、摄像头检测外,还提供同图多权重对比、数据集浏览与标注核对、模型热切换,以及把训练搬到网页上的能力:可在浏览器配置超参数发起真实训练,训练中在线调整学习率、查看进度与动态曲线,训练完成后下载产物或直接应用到检测。

图片识别页:上传图片后由模型真实推理,输出火焰与烟雾的标注框、置信度与数量统计。
二、数据集说明
1. 数据来源与样本
数据来自真实林区与火情场景采集的图像,覆盖明火、烟柱、航空投撒、野外烧除等多种实际情形。下图为训练集中按标注类别抽取的真实样本:上排为含火焰目标的图像,下排为仅含烟雾目标的图像。

数据集原图样本:火焰(含 Fire 标注)与烟雾(仅 Smoke 标注)各三张。
2. 数据构成
标注为 YOLO 检测格式,共两类目标。训练、验证、测试三份划分独立存放,验证与测试集不参与训练。训练集共 12,009 个标注框(Fire 9,376 个、Smoke 2,633 个)。
| 划分 | 图像数量 | 标注框数量 | 用途 |
|---|---|---|---|
| 训练集 train | 6,900 | 12,009 | 模型训练与数据增强 |
| 验证集 val | 862 | 1,528 | 训练过程逐轮评估 |
| 测试集 test | 863 | 1,527 | 独立评估与演示取样 |
3. 类别定义
| 类别编号 | 英文名称 | 中文名称 | 训练集标注数 |
|---|---|---|---|
| 0 | Fire |
火焰 | 9,376 |
| 1 | Smoke |
烟雾 | 2,633 |
4. 标注分布
训练框架对训练集标注做的统计:左上为两类目标的标注框数量,右上为标注框宽高比分布,下方两张分别是标注框中心位置分布与宽高分布。

训练产物原图 labels.jpg:Fire 与 Smoke 的标注数量及尺寸、位置分布。
5. 训练时的数据增强
训练阶段启用 mosaic 等增强策略。下图为训练批次的实际输入,多张样本被拼接为一张图参与训练,并带有数据集自带的真实标注框:

训练产物原图 train_batch0.jpg:训练批次输入与真实标注。
6. 平台内的标注核对
数据集浏览页支持按划分、按类别筛选样本,并可在原图上叠加数据集自带的真实标注框,便于检查标注质量与漏标情况。

数据集浏览页:左侧为真实样本,右侧按原图比例绘制标注框并给出类别统计。
三、模型训练与结果
1. 训练配置
- 以
yolov8n.pt预训练权重为起点,采用迁移学习。 - 100 轮训练,batch 16,输入尺寸 640 × 640,优化器 SGD,初始学习率 0.01。
- 每轮执行验证并记录损失、精确率、召回率、mAP 与学习率。
2. 最终指标(第 100 轮)
| 指标 | 末轮数值 | 峰值(对应轮次) |
|---|---|---|
| mAP@0.5 | 0.8518 | 0.8522(第 98 轮) |
| mAP@0.5:0.95 | 0.6072 | 0.6075(第 96 轮) |
| Precision | 0.8117 | 0.8242(第 86 轮) |
| Recall | 0.7815 | 0.7973(第 69 轮) |
mAP50-95 达到 0.607,说明在较严格的定位标准下边界框质量同样稳定;精确率略高于召回率,误检控制较好,漏检仍可通过降低置信度阈值来权衡。

训练产物原图 metrics_detailed.png:Precision、Recall、mAP50 与 mAP50-95 随轮次的变化。

训练产物原图 loss_curves.png:训练与验证阶段的 box、cls、dfl 损失变化。

训练产物原图 training_metrics_comprehensive.png:损失、指标与学习率的综合总览。
四、功能设计
1. 登录与权限
账号分为普通用户与管理员两类:普通用户可检测、查看历史与数据集;模型切换、发起训练、调整学习率等操作仅管理员可用。密码哈希保存,会话通过 Cookie 维持。

2. 图片识别
上传图片后输出标注结果图、火焰与烟雾各自的数量与置信度,并可查看目标明细。页面同时提供示例样本,便于快速验证模型状态。
3. 批量检测
一次上传多张图片批量推理,逐张给出目标数与类别分布,并汇总整批的检测结果,可导出明细。

4. 同图模型对比
同一张图片分别用两个权重推理,并排展示各自的标注结果与指标差异,用于比较不同训练版本的实际表现。

5. 视频检测
上传视频后由后台任务逐帧处理,可控制抽帧频率,实时回显进度与累计统计,任务可随时取消。

6. 摄像头识别
调用浏览器摄像头实时采集,按间隔抽帧提交后端推理并回传标注画面,用于现场部署前的快速验证。

7. 模型管理
列出可用权重及其来源,管理员可一键切换当前生效模型,切换失败时保留原模型;支持下载权重。

8. 网页真实模型训练
在网页上配置训练轮次、批大小、输入尺寸、学习率等超参数后发起训练。训练以独立子进程真实执行,页面实时显示进度与当前学习率,支持在线调整学习率、取消任务,完成后可下载训练产物。

9. 训练指标
读取真实训练日志绘制损失、mAP、精确率/召回率曲线,并可查看训练框架导出的原始图表。

10. 检测历史
检测记录按账号保存,支持按类型筛选与关键词搜索,可查看单条记录的结果图、目标明细与参数,并导出历史 CSV。

五、技术栈
| 类别 | 技术 | 用途 |
|---|---|---|
| 编程语言 | Python、JavaScript | 后端服务与前端页面 |
| 模型与框架 | YOLOv8 / PyTorch | 目标检测训练与推理 |
| Web 服务 | FastAPI、Uvicorn | 接口服务、鉴权与任务调度 |
| Web 前端 | 原生模块化 JS、CSS | 页面与交互 |
| 图像与视频处理 | OpenCV、NumPy | 图像读取、绘制标注、逐帧处理 |
| 数据存储 | SQLite、JSON | 账号、会话、历史记录与任务状态 |
| 训练任务 | 子进程 + 状态文件 | 训练隔离执行、进度回写与取消 |
六、项目结构
text
fire-detection/
├── datasets/datasets/ # 数据集(train / val / test,含 images 与 labels)
├── runs/train/ # 原始训练产物:权重、日志与曲线
├── train_result/ # 网页训练产生的新任务目录
├── pages/ # PyQt6 桌面端页面(独立保留)
├── train_yolo.py # 训练入口
└── web/ # Web 检测平台
├── 一键启动.bat
├── run.py
├── backend/ # 配置、存储、推理、数据集、任务与接口
├── frontend/ # 页面、交互与图表
└── data/ # 运行数据:媒体、任务与数据库
七、运行说明
1. 安装依赖
text
pip install -r requirements.txt
2. 启动 Web 平台
text
双击 web/一键启动.bat
# 或在 web 目录执行
python run.py
服务仅监听本机,重复启动会提示服务已在运行,端口被其他程序占用时只提示、不结束进程。
3. 重新训练(可选)
text
python train_yolo.py
也可直接在网页的「网页真实模型训练」页配置参数发起训练。
本项目为个人原创项目,配套完整源码、模型权重与项目说明,可用于毕业设计、课程实践、简历展示及个人学习。有项目成品或定制需求,可以通过主页联系作者。