基于 YOLO11 的低空空域反无人机预警系统:红外热成像 + Streamlit 全流程实战
发布时间:2026/9/26 2:51:53来源:尧图网络
基于 YOLO11 的低空空域反无人机预警系统红外热成像 Streamlit 全流程实战关键词YOLO11、反无人机、红外检测、低空安防、Streamlit、目标检测、机场净空一、背景1.1 行业痛点近年来消费级与行业级无人机数量急速攀升低慢小目标对低空空域安全的威胁已经成为机场净空、边境监控、军事禁飞区、重大活动安保等场景里绕不过去的课题可见光摄像头夜间瞎眼黑夜、雾天、远距传统 RGB 相机几乎拍不到无人机雷达成本高低空小型无人机的雷达回波弱专业雷达造价昂贵且部署复杂人工值守不可持续让安保人员盯着监控屏几小时不眨眼错检漏检不可避免。把红外热成像 轻量级 YOLO接入到现有监控系统可以用一个不到 6 MB 的小模型把夜间黑乎乎一片的画面里的无人机点状热信号高效圈出来并产生结构化的告警事件对接给安保调度系统。本项目就是这条路线下的一个完整落点基于 YOLO11n 49,400 红外训练样本做低空小目标无人机识别并提供一个开箱即用的 Streamlit 可视化界面。视频演示与源码 下载https://www.bilibili.com/video/BV1uihE6JEtR包含 完整项目源码 预训练模型权重️ 数据集数据集1.2 项目运行效果1.3 项目介绍核心创新点维度设计数据样态全部基于红外热成像数据训练专攻夜视 / 雾天 / 远距探测模型选型YOLO11n参数量约 2.6 M模型 6 MB可部署在边缘盒子 / 工控机部署形态Streamlit 单页应用 本地 best.pt零依赖中间件支持离线部署输入兼容图片 / 批量图片 / 视频 / 摄像头 4 种输入复用同一推理引擎视觉风格UI 主色用警戒红 琥珀黄符合反无人机指挥控制场景的人因工程要求功能概览单图检测上传红外画面 → 实时返回带框图 无人机标签 置信度批量检测单次最多 200 张输出汇总表 类别分布图 zip 下载视频检测mp4 / avi / mov / mkv 通通可读逐帧推理后落盘新视频摄像头实时检测可对接红外热成像枪机的 RTSP 流做实时低空预警类别单类——无人机UAV / drone。典型部署场景机场净空、边境监控、军事禁飞区、重大活动安保。技术栈层选型模型框架Ultralytics 8.3 PyTorch视觉算法YOLO11nAnchor-FreeC2f BackboneDecoupled Head DFLWeb 前端Streamlit 1.35 自定义 HTML 主题警戒红 琥珀黄视频 / 图像OpenCV、imageio-ffmpeg数据可视化Plotly / Streamlit 原生 chart配置管理单一configs/project.yaml行业话术 / UI / 推理阈值统一收口二、设计框架2.1 系统架构┌──────────────────────────────────────────┐ │ Streamlit Web 前端单页 SPA │ │ · 指挥控制台 / 单图 / 批量 / 视频 / 摄像头 │ │ · 侧栏 · 阈值 · 模型缓存 · 警戒态势提示 │ └────────────────────┬─────────────────────┘ │ Python 调用 ▼ ┌──────────────────────────────────────────┐ │ 推理服务层infer_image_path 等 │ │ · bytes / Path / frame → tensor │ │ · 推理结果 → 标注图 DataFrame │ └────────────────────┬─────────────────────┘ │ ▼ ┌──────────────────────────────────────────┐ │ YOLO11n 推理引擎model/best.pt │ │ Backbone (C2fSPPF) → Neck (FPN/PAN) │ │ → Decoupled HeadDFL cls │ └──────────────────────────────────────────┘ │ ▼ 可对接报警弹窗 / 短信 / 安防总线 / GIS2.2 YOLO11 网络结构输入 640×640×3红外伪彩色 / 灰度三通道 │ ▼ [Backbone] Conv → C2f → Conv → C2f → Conv → C2f → Conv → C2f → SPPF 多尺度卷积 跨阶段特征融合对小目标更友好 │ ▼ [Neck] FPN 上采样 PAN 下采样P3 / P4 / P5 三级金字塔 小目标无人机主要在 P3 特征层被检出 │ ▼ [Head] Decoupled Headcls 头 / reg 头解耦 回归头采用 DFLDistribution Focal Loss Anchor-Free输出 (cx, cy, w, h, cls × 1) │ ▼ [NMS] iou0.7, conf0.30 → 最终检测框2.3 检测流程红外摄像头帧 / 单张图片 │ ▼ Letterbox 640×640 │ ▼ YOLO11n forward │ ▼ Detect Head 输出 │ ▼ conf 过滤 NMS │ ▼ result.plot() 画框 无人机 0.88 │ ▼ Streamlit 双列展示 DataFrame 时间线视频/摄像头 │ ▼ 可扩展联动报警 / 写入安防数据库三、代码结构核心 50 行 解析项目目录红外监控无人机目标检测/ ├── app/streamlit_app.py # Web 入口 ├── configs/project.yaml # 行业话术 / UI / 训练 / 推理参数 ├── model/best.pt # 训练好的 YOLO11n 红外权重 ├── scripts/ # train / validate / export 等 ├── data/dataset/ # 训练 / 验证 / 测试集 └── 红外监控无人机目标检测YOLO数据集/ # 原始数据集最核心的 50 行——模型加载 单图推理 Streamlit 单图 Tab# 1. 模型加载带 streamlit 资源缓存避免每次刷新重载st.cache_resource(show_spinnerFalse)defload_model(model_path:str)-YOLO:returnYOLO(model_path)# 2. 单图推理路径 → 标注图 检测明细 DataFrame definfer_image_path(model:YOLO,image_path:Path,conf:float):resultmodel.predict(str(image_path),confconf,verboseFalse)[0]annotatedresult.plot()# BGR ndarray已画框rows[]ifresult.boxesisnotNone:forboxinresult.boxes:cls_idint(box.cls.item())x1,y1,x2,y2[float(v)forvinbox.xyxy[0].tolist()]rows.append({class_id:cls_id,class_name:result.names[cls_id],# 无人机confidence:round(float(box.conf.item()),4),x1:round(x1,1),y1:round(y1,1),x2:round(x2,1),y2:round(y2,1),})# BGR → RGB 给 Streamlitrows 转 DataFrame 给表格组件returnannotated[:,:,::-1],pd.DataFrame(rows)# 3. bytes → 临时文件 → 复用同一函数 defrun_image_inference(model:YOLO,image_bytes:bytes,conf:float,suffix.jpg):withtempfile.NamedTemporaryFile(deleteFalse,suffixsuffix)asf:f.write(image_bytes);tmpPath(f.name)try:returninfer_image_path(model,tmp,conf)finally:tmp.unlink(missing_okTrue)# 4. Streamlit 单图 Tab上传 → 推理 → 双列展示 modelload_model(str(MODEL_PATH))uploadedst.file_uploader(上传红外图像,typeIMAGE_UPLOAD_TYPES)confst.sidebar.slider(置信度阈值,0.05,0.95,DEFAULT_CONF,0.01)ifuploadedisnotNone:annotated,dfrun_image_inference(model,uploaded.getvalue(),conf,suffixPath(uploaded.name).suffix)col1,col2st.columns(2)col1.image(uploaded,caption原图)col2.image(annotated,caption检测结果高亮无人机)st.dataframe(detections_to_display(df))render_detection_analysis(df)5 段解析st.cache_resource把YOLO(model_path)的耗时锁在第一次访问避免每次切换 Tab 都重载——对 7×24 长时间值守的指挥屏尤其重要。result.plot()直接返回带颜色框 类别 置信度的BGR ndarray无人机这种小目标在红外画面里通常只有十几像素见方框 标签的可视化对值班人员复核非常友好。把每个box的cls / conf / xyxy拍成dict再拼成DataFrame——后续表格、CSV 下载、检测时间线全部复用同一份结构方便对接到上游安防告警系统。run_image_inference走临时文件而非 numpy 数组是为了让 Ultralytics 内部的 EXIF / orientation 处理逻辑生效对热成像枪机不同摆放姿态的输入都更稳。Streamlit 的cache_resource file_uploader dataframe组合让一个产品级反无人机预警页面只需 11 行代码——这就是 Streamlit 在安防 AI 场景能快速出活的核心原因。四、训练效果模型在 49,400 红外训练样本上训练 200 epochYOLO11n、640 输入、batch 16最优一轮指标如下指标数值Precision0.9678Recall0.9692mAP0.50.9906mAP0.5:0.950.7110从训练曲线看box / cls / dfl 三路 loss 在前 30 epoch 就快速收敛mAP0.5 最终稳定在 0.99 上下归一化混淆矩阵中无人机类对角线接近 1.0PR 曲线在召回率 0.95 之前几乎一直保持精确率 1.0说明模型在严格 IoU0.5 下对该类小目标有非常强的判别能力。mAP0.5:0.95 落在 0.71 是合理的——红外里无人机往往只有十几像素IoU 阈值越高对回归框中心的微小偏差越敏感这也是后续可以通过更高分辨率训练如 imgsz960 / 1280继续推升的方向。五、项目总结做对了什么选 YOLO11n 而不是 v8s/v8m模型 6 MB、CPU 单图 50 ms 内完成推理便于部署在机场塔台、边境哨所的工控机或边缘盒子全程基于红外热成像数据训练与传统可见光检测器形成互补覆盖了夜视 / 雾天 / 远距等真实业务场景用一份project.yaml把行业话术 / UI 主题色 / 训练超参 / 推理阈值全部收口迁移到反鸟群反低空目标等场景只需替换数据集与少量配置。还能怎么做把 imgsz 从 640 提升到 960 / 1280 微调进一步提升 mAP0.5:0.95 与远距小目标召回接入 ByteTrack 等多目标跟踪给每架无人机赋一个稳定 ID 飞行轨迹从单帧检测升级为持续目标跟踪把检测结果通过 MQTT / Kafka 推送给指挥调度系统触发短信报警、声光告警、对接反制设备电子干扰 / 拦截网枪等。
网站建设高端定制企业官网