大数跨境

CVPR2026 SOTA|FireWatch烟火检测实战!早期烟雾火焰秒级预警、小目标不遗漏、端侧实时消防SOTA

CVPR2026 SOTA|FireWatch烟火检测实战!早期烟雾火焰秒级预警、小目标不遗漏、端侧实时消防SOTA AI与计算机视觉
2026-10-27
3
导读:仓库着火了、森林冒烟了、厨房起火了——等你看见明火的时候,可能已经烧大了。真正有用的消防预警,是在烟雾刚冒出来、还没有明火的时候就能报警。

仓库着火了、森林冒烟了、厨房起火了——等你看见明火的时候,可能已经烧大了。真正有用的消防预警,是在烟雾刚冒出来、还没有明火的时候就能报警。

今天分享的这篇 CVPR2026 论文 FireWatch,提出了一个轻量烟火检测框架:专门针对早期烟雾和小火苗做优化,小目标也不漏,端侧实时跑。在 FASAD 和 DFS 两个烟火数据集上刷新了 SOTA,模型只有 5.2M 参数,摄像头内置就能跑。

一、烟火检测为什么这么难

烟火检测听起来就是"找火和烟",但真实场景下这个问题比想象中棘手得多。

1.1 早期烟雾太淡,和背景混在一起

火灾早期的烟雾很淡——薄薄一层,颜色和雾气、灰尘、蒸汽差不多。模型很难区分"这是火灾烟雾"还是"那是厨房蒸汽"。等烟雾浓到一眼就能看出来,火可能已经不小了。

1.2 火焰形状多变,没有固定模式

火焰不是一个固定形状的物体——它一直在跳、一直在变。你不能像检测人或者车那样,用一个固定的框去框火焰。而且火焰颜色从蓝色到黄色到红色都有,和灯光、霓虹灯很容易混淆。

1.3 误报率高是最大痛点

这是烟火检测落地时最头疼的问题。仓库里有人抽烟,报不报?车间里焊花四溅,报不报?后厨炒个菜冒点火,报不报?误报多了,保安就麻木了——真着火了反而不当回事。

1.4 小目标和远距离问题

监控摄像头装得高、看得远,远处的火苗可能只有十几个像素大小。而且烟雾是半透明的,远处看几乎和背景融为一体。小目标检测本来就难,烟火这种"没有固定形状"的小目标就更难了。

二、FireWatch 的三个核心设计

FireWatch 的整体思路:不是简单把烟火当成"一类目标"来检测,而是利用烟火的动态特性——它一直在变化,和静止的背景不一样。

2.1 时序动态特征建模

单帧图像里,烟雾和背景很难区分;但如果看连续几帧,烟雾是一直在飘动、扩散的——这个动态特性是烟火独有的。

FireWatch 专门设计了一个时序模块:

•连续采样多帧,不只是看单帧。

•计算帧间变化:烟雾飘动、火焰跳动的区域,帧间变化大;静止的背景变化小。

•动态区域 + 静态特征联合判断:光有动态不够(人也在动),光有静态不够(灯光也像火),两个结合起来才准。

消融实验显示,只看单帧的时候误报率很高;加上时序动态特征后,误报率降了 40%——这就是"动态"的价值。

2.2 颜色 + 纹理双流检测

烟火的两个视觉特性:颜色和纹理。

•颜色流:火焰有特定的颜色范围(橙红、明黄),烟雾有特定的灰度范围。用颜色先粗筛一遍可疑区域。

•纹理流:烟雾是模糊、弥散的纹理,火焰是闪烁、不规则的纹理。用纹理特征做精细判断。

两个流结合起来:颜色先圈出可疑区域,纹理再确认是不是真的烟火。这样可以把"长得像火但其实不是"的东西(比如红色的灯光、红色的衣服)过滤掉。

2.3 小目标增强检测

远处的小火苗、淡烟雾太小了,常规检测很容易漏。FireWatch 做了两个针对性设计:

•高分辨率输入:backbone 下采样到 1/8 就停了,不像常规模型下采样到 1/32——保留更多细节。

•小目标损失加权:训练的时候,小目标漏检的惩罚更大,让模型更重视远处的小火苗。

在 FASAD 数据集的小目标子集上,召回率提升了 6.8 个点——这对于早期火灾预警非常关键,你不能等火烧大了才报警。

三、技术架构拆解

FireWatch 的整体 pipeline 分四个模块:

模块

做什么

关键设计

时空特征提取

同时提取空间和时间特征

轻量 CNN backbone + 3D 时序卷积

颜色纹理双流

分别从颜色和纹理角度判断

两个独立分支,最后融合判断

烟火检测头

输出烟雾和火焰的位置和置信度

锚框设计专门针对烟火形状调整

误报过滤层

过滤常见误报源

灯光、焊花、蒸汽等常见误报模式识别

几个工程上的亮点:

•参数量:5.2M,摄像头内置 NPU 就能跑。

•推理速度:1080P 视频在边缘设备上 20fps,完全实时。

•告警分级:不是只有"有火/没火",而是分等级——疑似烟雾、确认烟雾、确认火焰,方便运营分级响应。

四、和主流方法的横向对比

论文在 FASAD(火焰检测)和 DFS(烟雾检测)两个基准上做了对比:

方法

FASAD mAP↑

DFS mAP↑

参数量(M)

FPS(边缘设备)

YOLOv5s

78.5

72.3

7.2

30

Faster R-CNN

82.1

76.5

42

8

Video Smoke Det

85.3

81.2

15

15

FireWatch

88.6

85.7

5.2

45

可以看到,FireWatch 的 mAP 比专门做视频烟雾检测的方法还高了 4 个点,而且参数量更小、速度更快。这得益于时序动态特征建模和颜色纹理双流设计——烟火检测不是单纯的目标检测,它需要利用烟火的动态特性和多模态视觉特征。

五、快速上手:推理核心代码

下面是 FireWatch 的推理框架,帮大家理解整体流程:

python
FireWatch 烟火检测核心逻辑
import torch
import torch.nn as nn

class FireWatch(nn.Module):
    def __init__(self):
        super().__init__()
        self.spatiotemporal_backbone = SpatioTemporalBackbone()  # 时空特征提取
        self.color_branch = ColorBranch()                         # 颜色流
        self.texture_branch = TextureBranch()                    # 纹理流
        self.det_head = FireSmokeDetHead()                        # 检测头

    def forward(self, frame_buffer):
        # frame_buffer: 连续5帧 [B, 5, 3, H, W]

        # 1. 提取时空特征(同时看空间和时间)
        spatio_temporal_feat = self.spatiotemporal_backbone(frame_buffer)

        # 2. 颜色流判断:有没有可疑的颜色区域
        color_score = self.color_branch(spatio_temporal_feat)

        # 3. 纹理流判断:有没有可疑的纹理模式
        texture_score = self.texture_branch(spatio_temporal_feat)

        # 4. 融合两个分支,输出烟雾和火焰检测框
        detections = self.det_head(spatio_temporal_feat, color_score, texture_score)

        return detections  # [[x1,y1,x2,y2,conf,class], ...]

# 使用示例
model = FireWatch()
model.load_state_dict(torch.load("firewatch_fasad.pth"))
model.eval()

# 视频流检测
cap = cv2.VideoCapture("仓库监控.mp4")
frame_buffer = []

while True:
    ret, frame = cap.read()
    frame_buffer.append(preprocess(frame))

    if len(frame_buffer) >= 5:
        with torch.no_grad():
            detections = model(torch.stack(frame_buffer).unsqueeze(0))

            for det in detections:
                x1, y1, x2, y2, conf, cls = det
                if conf > 0.7:
                    class_name = "火焰" if cls == 1 else "烟雾"
                    print(f"告警:检测到{class_name},置信度{conf:.2f}")
                    draw_box(frame, det, color=(0,0,255))

        frame_buffer.pop(0)  # 滑动窗口:去掉最早的一帧

    cv2.imshow("消防监控", frame)
    cv2.waitKey(1)

实际部署的时候,告警分级很重要:烟雾置信度 0.5~0.7 算"疑似",先通知保安看一眼;超过 0.8 算"确认",直接联动消防系统。这样可以减少误报带来的不必要响应。

六、毕设/竞赛拓展方向

烟火检测这个方向做毕设有个好处——Demo 效果非常直观,拿一段着火的视频跑一下,检测框直接出来。分享几个有价值的拓展点:

6.1 森林火灾监测

森林防火是一个很大的应用场景——山区监控摄像头检测远处的烟雾。专门针对远距离、小目标烟雾做优化,做一个森林火灾早期预警系统。这个方向有实际的社会价值。

6.2 工厂园区消防联动

不只是检测到火就报警,还要联动整个消防系统——报警的同时自动打开喷淋、关闭通风、通知消防部门。做一个完整的园区消防预警方案,工程完整性很强。

6.3 火焰大小估算

不只是"有没有火",还要估算"火有多大"——是小火苗还是大火?需要派多少人?结合深度信息或者参考物尺寸,做火焰大小估算,给消防指挥提供决策参考。

6.4 多传感器融合检测

只用摄像头有局限——大雾天、晚上看不见。如果加上温度传感器、气体传感器,多模态融合判断,准确率会高很多。这个方向在工业安全里很有价值。

七、写在最后

烟火检测这个方向,技术上不是最难的,但落地价值非常高。一个漏报可能就是一场火灾、几条人命;一个误报可能就是保安白跑一趟。这个 trade-off 比大多数视觉任务都要严肃。

FireWatch 给我的启发是:不要把所有视觉任务都套"目标检测"的框架。烟火有它独特的动态特性——一直在变、一直在动——利用好这个特性,比单纯堆检测精度更有效。很多时候,问题解不好,不是因为模型不够大,而是因为你没利用好这个任务本身的先验知识。

做毕设的同学如果选这个方向,我建议先拿 YOLO 在烟火数据集上跑通 baseline,然后重点解决误报问题——误报降不下来,这个系统就没人敢用。

大家如果有复现上的问题或者想聊具体的消防场景,欢迎评论区交流。

【声明】内容源于网络
0
0
AI与计算机视觉
专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
内容 139
粉丝 0
AI与计算机视觉 专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
总阅读2.8k
粉丝0
内容139