问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

小区消防通道堵塞监测识别方案 YOLOX

创作时间:
作者:
@小白创作中心

小区消防通道堵塞监测识别方案 YOLOX

引用
CSDN
1.
https://blog.csdn.net/SuiJiAi/article/details/143107490

小区消防通道堵塞监测识别系统利用现场监控摄像头对消防安全通道进行实时监测。该系统基于YOLOX算法,能够准确识别出消防通道是否被车辆、杂物等占据或阻塞。一旦监测到异常情况,系统会立刻发出告警信息,通过声光报警、短信通知、APP推送等多种方式,提示相关人员及时前往现场处理、制止堵塞行为。

系统功能与优势

小区消防通道堵塞监测识别系统通过先进的图像处理技术和深度学习算法,系统能够准确识别出消防通道是否被车辆、杂物等占据或阻塞。一旦监测到异常情况,系统会立刻发出告警信息,通过声光报警、短信通知、APP推送等多种方式,提示相关人员及时前往现场处理、制止堵塞行为。

与传统的巡检方式相比,该系统具有显著的优势,能够实现24小时不间断的监控,确保消防通道始终畅通无阻。其次,系统能够自动分析识别图像,减少了人工干预的需要,降低了人工成本。

YOLOX算法技术特点

YOLOX在YOLO系列的基础上做了一系列的工作,其主要贡献在于:在YOLOv3的基础上,引入了Decoupled Head,Data Aug,Anchor Free和SimOTA样本匹配的方法,构建了一种anchor-free的端到端目标检测框架,并且达到了一流的检测水平。此外,本文提出的 YOLOX-L 模型在视频感知挑战赛(CVPR 2021年自动驾驶研讨会)上获得了第一名。作者还提供了支持ONNX、TensorRT、NCNN和Openvino的部署版本。

Yolox 将 Anchor free 的方式引入到Yolo系列中,使用anchor free方法有如下好处:降低了计算量,不涉及IoU计算,另外产生的预测框数量较少。假设feature map的尺度为80x80,anchor based方法在Feature Map上,每个单元格一般设置三个不同尺寸大小的锚框,因此产生3x80x80=19200个预测框。而使用anchor free的方法,仅产生80x80=6400个预测框,降低了计算量。缓解了正负样本不平衡问题:anchor free方法的预测框只有anchor based方法的1/3,而预测框中大部分是负样本,因此anchor free方法可以减少负样本数,进一步缓解了正负样本不平衡问题。避免了anchor的调参:anchor based方法的anchor box的尺度是一个超参数,不同的超参数设置会影响模型性能。anchor free方法避免了这一点。

实际应用效果

随着城市化进程的加快,小区居民数量不断增加,消防安全问题日益凸显。传统的消防通道监测方式依赖于人工巡检,不仅效率低下,而且难以保证24小时不间断的监控。为了解决这个问题,我们引入了基于AI人工智能机器视觉分析识别技术的消防通道堵塞监测识别系统,实现对消防通道的高效、智能监控。系统还能够对潜在的安全风险进行自动预警,帮助管理人员及时发现并处理安全隐患,提高了消防作业的效率。在实际应用中,该系统已经取得了显著的成效。

YOLOX代码实现

import torch
import torch.nn as nn
from yolov5.utils.general import check_version

class Detect(nn.Module):
    stride = None  # strides computed during build
    onnx_dynamic = False  # ONNX export parameter
    def __init__(self, nc=80, anchors=(), ch=(), inplace=True):  # detection layer
        super().__init__()
        self.nc = nc  # number of classes
        self.no = nc + 5  # number of outputs per anchor
        self.nl = len(anchors)  # number of detection layers
        self.na = len(anchors[0]) // 2  # number of anchors
        self.grid = [torch.zeros(1)] * self.nl  # init grid
        self.anchor_grid = [torch.zeros(1)] * self.nl  # init anchor grid
        self.register_buffer('anchors', torch.tensor(anchors).float().view(self.nl, -1, 2))  # shape(nl,na,2)
        self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch)  # output conv
        self.inplace = inplace  # use in-place ops (e.g. slice assignment)
    def forward(self, x):
        z = []  # inference output
        for i in range(self.nl):
            x[i] = self.m[i](x[i])  # conv
            bs, _, ny, nx = x[i].shape  # x(bs,255,20,20) to x(bs,3,20,20,85)
            x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
            if not self.training:  # inference
                if self.onnx_dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]:
                    self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)
                y = x[i].sigmoid()
                if self.inplace:
                    y[..., 0:2] = (y[..., 0:2] * 2 - 0.5 + self.grid[i]) * self.stride[i]  # xy
                    y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
                else:  # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953
                    xy = (y[..., 0:2] * 2 - 0.5 + self.grid[i]) * self.stride[i]  # xy
                    wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
                    y = torch.cat((xy, wh, y[..., 4:]), -1)
                z.append(y.view(bs, -1, self.no))
        return x if self.training else (torch.cat(z, 1), x)
    def _make_grid(self, nx=20, ny=20, i=0):
        d = self.anchors[i].device
        if check_version(torch.__version__, '1.10.0'):  # torch>=1.10.0 meshgrid workaround for torch>=0.7 compatibility
            yv, xv = torch.meshgrid([torch.arange(ny).to(d), torch.arange(nx).to(d)], indexing='ij')
        else:
            yv, xv = torch.meshgrid([torch.arange(ny).to(d), torch.arange(nx).to(d)])
        grid = torch.stack((xv, yv), 2).expand((1, self.na, ny, nx, 2)).float()
        anchor_grid = (self.anchors[i].clone() * self.stride[i]) \
            .view((1, self.na, 1, 1, 2)).expand((1, self.na, ny, nx, 2)).float()
        return grid, anchor_grid

应用效果

消防通道堵塞监测识别系统基于AI人工智能机器视觉分析识别技术,通过实时监测和自动告警,小区内的消防通道堵塞问题得到了有效解决。管理人员能够迅速响应告警信息,及时清理堵塞的车辆和杂物,确保了消防通道的畅通无阻。为小区的消防安全提供了新的解决方案。它不仅提高了监控效率,降低了人工成本,还能够实现对潜在安全风险的自动预警。这不仅提高了小区的消防安全水平,也为居民的生命财产安全提供了坚实的保障。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号