【圖像算法 - 09】基于深度學習的煙霧檢測:從算法原理到工程實現,完整實戰指南

一、項目背景與需求

視頻介紹

【圖像算法 - 09】基于深度學習的煙霧檢測:從算法原理到工程實現,完整實戰指南

今天我們使用深度學習來訓練一個煙霧明火檢測系統。這次我們使用了大概一萬五千張圖片的數據集訓練了這次的基于深度學習的煙霧明火檢測模型,然后在推理的基礎上使用PyQt設計了可視化的操作界面。

在這里插入圖片描述

二、為什么選擇深度學習?

在這里插入圖片描述

在煙火檢測領域,傳統算法與深度學習的技術路徑存在本質差異,這些差異直接影響檢測效果、適用場景和落地難度。以下從核心邏輯、技術細節、優劣勢等維度展開對比,解釋兩者的不同:

1. 核心邏輯:“人工設計” vs “自動學習”

  • 傳統算法:依賴 ”人工設計特征 + 規則判斷“
    核心邏輯是:通過人類對煙火的先驗知識(如顏色、形狀、動態特性),手動設計特征提取規則,再用簡單分類器判斷是否為煙火。
    例如:

    • 顏色特征:用 HSV 閾值篩選紅色 / 橙色區域(火焰典型色)、灰色 / 白色區域(煙霧典型色);
    • 動態特征:通過幀差法檢測區域的閃爍(火焰)或緩慢擴散(煙霧);
    • 形狀特征:用邊緣檢測判斷是否存在不規則、動態變化的輪廓(火焰)或模糊擴散的區域(煙霧)。
  • 深度學習:依賴 “數據驅動 + 自動特征學習”
    核心邏輯是:無需人工設計特征,通過神經網絡從大量標注數據中自動學習煙火的本質特征(包括人類難以描述的細微特征),端到端完成 “輸入圖像 / 視頻→輸出是否為煙火” 的判斷。
    例如:

    • 用 CNN(如 ResNet、YOLO)自動提取煙火的空間特征(紋理、梯度、高階組合特征);
    • 用 RNN/LSTM 或 3D-CNN 學習煙火的時間動態特征(如火焰的跳躍、煙霧的流動趨勢);
    • 模型通過反向傳播不斷優化,最終形成對煙火的 “抽象認知”。

2. 技術細節:從特征到泛化能力的全面差異

對比維度傳統算法深度學習
特征提取方式手工設計(顏色、形狀、運動、紋理等規則)自動學習(神經網絡從數據中挖掘深層特征)
數據依賴對數據量要求低(依賴先驗規則,無需大量樣本)強依賴大規模標注數據(數據量不足易過擬合)
魯棒性弱(受場景干擾大): - 光照變化(如夕陽誤判為火焰)、遮擋(部分遮擋即失效)、復雜背景(如紅色廣告牌誤判)會嚴重影響效果; - 對煙火形態變化(如小火苗、濃 / 淡煙霧)適應性差。強(復雜場景適應性好): - 能學習到抗干擾特征(如區分火焰與夕陽的細微紋理差異); - 對遮擋、形態變化的容忍度高(通過大量多樣本訓練實現)。
計算成本低(輕量級算法,可在 CPU / 嵌入式設備運行)高(需 GPU 加速,模型參數量大,計算耗時)
泛化能力差(規則固定,換場景需重新設計特征)強(通過遷移學習可快速適配新場景)
典型方法顏色閾值分割、幀差法、SVM 分類器、AdaBoost 等CNN(ResNet)、目標檢測模型(YOLO、Faster R-CNN)、3D-CNN(處理視頻)等

3. 適用場景:各有側重,按需選擇

  • 傳統算法:適合簡單場景、資源受限的場景
    例如:固定攝像頭監控空曠區域(如倉庫、森林),煙火形態單一、背景簡單(無復雜干擾物),且設備算力有限(如嵌入式攝像頭、低端 CPU)。

    優勢是部署成本低、實時性強(毫秒級響應),但需人工針對場景調參。

  • 深度學習:適合復雜場景、高精度需求的場景
    例如:城市街道(背景復雜,有車輛、行人干擾)、室內場所(光照多變、可能有遮擋),需要區分 “煙火” 與 “類似物”(如紅色燈籠、蒸汽)。

    優勢是檢測精度高、泛化能力強,但需 GPU 支持,部署成本較高(需服務器或邊緣計算設備)。

二、數據集

此次訓練使用的煙霧明火數據集,有兩類,即smoke、fire。然后下面是數據集的統計分析圖。一共有10000余火焰目標、近6000的煙霧目標,標簽的中心坐標分布比較均勻,居中較多,同時都不靠近邊緣;目標,即抽煙目標的長寬同樣比較集中,屬于小目標的范圍(小于圖像長寬的0.2倍)。

在這里插入圖片描述

三、網絡選擇

這里我們選擇的是yolo11s的網絡結構,其參數如下表所示:

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# Ultralytics YOLO11 object detection model with P3/8 - P5/32 outputs# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'# [depth, width, max_channels]n: [0.50, 0.25, 1024] # summary: 181 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss: [0.50, 0.50, 1024] # summary: 181 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm: [0.50, 1.00, 512] # summary: 231 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl: [1.00, 1.00, 512] # summary: 357 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx: [1.00, 1.50, 512] # summary: 357 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 2, C3k2, [256, False, 0.25]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 2, C3k2, [512, False, 0.25]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 2, C3k2, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 2, C3k2, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 2, C2PSA, [1024]] # 10# YOLO11n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, C3k2, [512, False]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

四、模型訓練

本次訓練使用的預訓練模型是YOLO11s.pt(COCO數據集訓練所得),epochs設置為100,batch設置為16,imgsz設置為640,其他均采用默認參數,訓練時間大概4小時。

在這里插入圖片描述

五、可視化模型推理

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94434.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

間接制冷技術概念及特征

1、基本概念 (1)間接制冷技術即二次制冷技術。常規做法:二次冷卻液儲液罐增加放置于制冷系統管路,促使冷量再快捷的傳遞給載冷劑,繼而載冷劑冷量促使冷庫達到制冷效果。間接制冷技術:通過常壓的二次冷卻介質進行大循環傳送冷量,在直接制冷劑不易應用的位置或者不可運用直…

Antlr學習筆記 01、maven配置Antlr4插件案例Demo

文章目錄前言源碼插件描述pom引入插件案例:實現hello 標識符 案例1、引入Antlr4的pom運行依賴2、定義語義語法,配置.g4文件實現java代碼3、編寫完之后,執行命令實現編譯4、編寫單測測試使用參考文章資料獲取前言 博主介紹:?目前…

PostGIS面試題及詳細答案120道之 (101-110 )

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

第十七天:原碼、反碼、補碼與位運算

原碼、反碼、補碼與位運算 一、原碼、反碼、補碼 1、原碼 定義:原碼是一種簡單的機器數表示法。對于一個有符號整數,最高位為符號位, 0 表示正數, 1 表示負數,其余位表示數值的絕對值。示例:以 8 位二進制…

一次完整的 Docker 啟動失敗排錯之旅:從 `start-limit` 到 `network not found

一次完整的 Docker 啟動失敗排錯之旅:從 start-limit 到 network not found 你是否也曾自信地敲下 sudo systemctl start docker,卻只得到一個冰冷的 failed?這是一個開發者和運維工程師都可能遇到的場景。本文將通過一個真實的排錯案例&…

Tdengine 時序庫年月日小時分組匯總問題

年月分組select to_char(collection_time ,"yyyy-mm") AS date, cast(SUM(a.stage_value)as DOUBLE) as stage_value from TABLE GROUP BY date年月日分組select to_char(collection_time ,"yyyy-mm-dd") AS date, SUM(a.stage_value)as DOUBLE) as stage_…

數據結構(01)—— 數據結構的基本概念

408前置學習C語言基礎也可以看如下專欄:打怪升級之路——C語言之路_ankleless的博客-CSDN博客 目錄 1. 基本概念 1.1 數據 1.2 數據元素 1.3 數據項 1.4 組合項 1.5 數據對象 1.6 數據類型 2. 數據結構 2.1 邏輯結構 2.2 存儲結構 2.3 數據的運算 在學…

什么是模型并行?

模型并行c 簡單來說,就是把一個模型拆開來放到多個 GPU 上,一起訓練,從而化解“顯存塞不下模型”的問題!更多專業課程內容可以聽取工信部電子標準院《人工智能大模型應用工程師》課程獲得詳解!

跑yolov5的train.py時,ImportError: Failed to initialize: Bad git executable.

遇到的問題&#xff1a; Traceback (most recent call last):File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 296, in <module>refresh()File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 287…

TCP如何實現可靠傳輸?實現細節?

TCP如何實現可靠傳輸&#xff1f;實現細節&#xff1f;如何實現可靠傳輸&#xff1f;擁塞控制的主要機制TCP流量控制怎么實現的&#xff1f;如何實現可靠傳輸&#xff1f; TCP通過自身的序列號、確認應答、數據效驗、超時重傳、流量控制、擁塞避免&#xff0c;確保了數據傳輸的…

Linux 服務器性能監控、分析與優化全指南

Linux 服務器性能監控、分析與優化在現代 IT 架構中&#xff0c;Linux 服務器作為承載業務系統的核心載體&#xff0c;其性能表現直接決定了服務的穩定性、響應速度與用戶體驗。無論是高并發的 Web 服務、數據密集型的數據庫集群&#xff0c;還是承載虛擬化平臺的宿主機&#x…

基于wenet和模型做企業直播敏感語音屏蔽技術

本文介紹了基于Wenet語音識別工具包的實時敏感詞屏蔽技術方案。該方案通過客戶端緩存25秒直播內容&#xff0c;利用Wenet的流式識別和斷句檢測功能&#xff0c;實時檢測講師語音中的敏感詞&#xff0c;并將對應位置的語音替換為"嗶"聲。文章詳細闡述了Wenet的兩種識別…

42.MySQL視圖

1.一個需求emp 表的列信息很多&#xff0c;有些信息是個人重要信息 (比如 sal, comm, mgr, hiredate)&#xff0c;如果我們希望某個用戶只能查詢 emp 表的 (empno、ename, job 和 deptno ) 信息&#xff0c;有什么辦法&#xff1f;表的數據&#xff1a;想讓用戶查詢到的&#x…

MinIO01-入門

零、文章目錄 MinIO01-入門 1、介紹 &#xff08;1&#xff09;介紹 MinIO 是一款基于 Apache License v2.0 的開源對象存儲系統&#xff0c;專為海量非結構化數據&#xff08;如圖片、視頻、日志文件等&#xff09;設計&#xff0c;兼容 Amazon S3 API&#xff0c;支持高性…

*Docker數據卷(Volume)核心機制剖析:持久化與共享的終極解決方案

根本問題當容器被刪除時&#xff0c;其內部產生的所有文件&#xff08;包括配置文件、數據庫、日志&#xff09;都會不可逆丟失。數據卷&#xff08;Volume&#xff09;通過外置存儲方案徹底解決此痛點。一、數據卷與普通容器存儲對比實驗 場景1&#xff1a;無卷模式下的寫入悲…

原型模式在C++中的實現與面向對象設計原則

引言 在軟件開發中&#xff0c;原型模式是一種常用的設計模式&#xff0c;主要用于創建對象的克隆。通過原型模式&#xff0c;我們可以避免復雜的對象創建過程&#xff0c;尤其是當對象的初始化需要大量資源或復雜操作時。本文將通過一個具體的例子&#xff0c;詳細介紹如何在C…

SpringCloud學習------Gateway詳解

在微服務架構中&#xff0c;隨著服務數量的激增&#xff0c;如何統一管理服務入口、實現請求路由、保障服務安全等問題日益突出。SpringCloud Gateway 作為 Spring 官方推出的網關組件&#xff0c;憑借其強大的功Gateway 是 Spring 官方基于 Spring、SpringBoot 和 Project Rea…

計算機網絡:子網掩碼在路由轉發中的關鍵作用

在路由表中,子網掩碼是一個不可或缺的組成部分,其核心作用是精確界定IP地址中“網絡位”和“主機位”的邊界,從而實現路由器對數據包的準確轉發。以下從多個角度詳細解釋其必要性: 1. 區分網絡位與主機位,定位目標網絡 IP地址由“網絡標識”(網絡位)和“主機標識”(主…

14.Home-新鮮好物和人氣推薦實現

新鮮好物實現1.準備模板<script setup>import HomePanel from ./HomePanel.vue</script><template><homePanel></HomePanel><!-- 下面是插槽主體內容模版<ul class"goods-list"><li v-for"item in newList" :ke…

Linux 系統重置用戶密碼指南

Linux 系統重置用戶密碼指南 在 Linux 系統運維中&#xff0c;重置用戶密碼&#xff08;尤其是 root 密碼&#xff09;是一項核心技能。當您忘記密碼時&#xff0c;可以通過進入單用戶模式或恢復模式來修改密碼。此方法適用于大多數 Linux 發行版&#xff0c;如 RHEL/CentOS、D…