火焰監護人:基於深度學習的火災檢測系統
介紹
想像一下,在確保家人的安全時,要醒來煙味,心跳加速。早期檢測至關重要,並且是一個深層學習驅動的火災探測系統的“火焰監護人”,旨在使挽救生命的差異。本文指導您使用CNN和TensorFlow創建此技術,從數據收集和增強到模型構建和微調。無論您是技術愛好者還是專業人士,都可以發現如何利用尖端技術來保護生活和財產。
學習成果
- 獲得準備,組織和增強圖像數據集的技能,以優化模型性能。
- 了解如何構建和微調卷積神經網絡以進行有效的圖像分類任務。
- 使用指標和可視化來評估和解釋模型性能的能力。
- 了解如何為實用應用部署和調整DL(深度學習)模型,以證明其在消防檢測等現實世界中的實用性。
本文作為數據科學博客馬拉鬆的一部分發表。
目錄
- 深度學習中的革命檢測
- 火災檢測中的挑戰
- 數據集概述
- 設置環境
- 數據準備
- 可視化圖像的分佈
- 展示火和非火圖像
- 通過增強技術增強培訓數據
- 構建火災檢測模型
- 模型擬合:培訓卷積神經網絡
- 評估模型
- 示例用法:預測新圖像中的火
- 常見問題
深度學習中的革命檢測
最近,Thedeep Learning徹底改變了從醫療保健到金融的色彩豐富的領域,現在,它在安全和災難運營方面取得了長足的進步。深度學習的一個特別激烈的操作是火災發現領域。隨著全球範圍反射的增加頻率和僵化性,開發有效且可靠的火災發現系統比以往任何時候都更加關鍵。在這個全面的伴侶中,我們將引導您完成使用卷積神經網絡(CNN)和TensorFlow創建重要的火災發現系統的過程。該系統恰當地命名為“火焰監護人”。
火災,無論是野火還是結構性火災對生命,財產和環境構成重大威脅。早期發現對於減輕火災的毀滅性影響至關重要。基於深度學習的火災檢測系統可以快速,準確地分析大量數據,在升級之前識別火災事件。
火災檢測中的挑戰
使用深度學習檢測火提出了一些挑戰:
- 數據可變性:火影圖像在顏色,強度和周圍環境方面可能有很大差異。強大的檢測系統必須能夠處理此變異性。
- 誤報:將假陽性(錯誤地識別為火災)最小化以避免不必要的恐慌和資源部署至關重要。
- 實時處理:為了實際使用,系統應能夠實時處理圖像,並提供及時的警報。
- 可伸縮性:系統應可擴展以處理大型數據集並在不同的情況下工作。
數據集概述
用於火焰監護人火災檢測系統的數據集包括分為兩個類:“火”和“非火力”的圖像。該數據集的主要目的是訓練卷積神經網絡(CNN)模型,以準確區分包含火的圖像和那些沒有火災的圖像。
火和非火圖像的組成
- 火災圖像:這些圖像包含存在火災的各種情況。該數據集包括野火,結構火和受控燒傷的圖像。這些圖像中的火可能在大小,強度和存在的環境上有所不同。這種多樣性有助於模型學習火的不同視覺特徵。
- 非火圖像:這些圖像不包含任何火。它們包括各種場景,例如景觀,建築物,森林以及其他自然和城市環境,而沒有任何火災。包含多種非火圖像可確保模型不能在非火災情況下錯誤地識別火災。
您可以從這裡下載數據集。
設置環境
首先,我們需要使用必要的庫和工具來建立自己的地形。我們將使用Google協作進行此設計,因為它為GPU支持提供了一個可訪問的平台。我們以前已經下載了數據集並將其上傳到驅動器上。
#mount驅動器 從Google.Colab Import Drive drive.mount('/content/drive') #Importing必要的庫 導入numpy作為NP 導入大熊貓作為pd 導入matplotlib.pyplot作為PLT 進口海洋作為SNS 導入plotly.extress為px 導入plotly.graph_objects作為go 從plotly.subplots導入make_subplots 導入操作系統 導入TensorFlow作為TF 來自Tensorflow.keras.preprocessing導入圖像 來自tensorflow.keras.preprocessing.image導入成像的Atagenerator #setting樣式網格 sns.set_style('darkgrid')
數據準備
我們需要一個帶有火和非火語腳本圖片的數據集,以訓練我們的算法。將創建一個空白的數據幀和一個函數來添加Google驅動器中的圖像。
#創建一個空數據框 df = pd.dataframe(columns = ['path','label']) #功能將圖像添加到數據框 def add_images_to_df(目錄,標籤): 對於dirname,_,在OS.Walk(目錄)中的文件名: 用於文件名中的文件名: df.loc [len(df)] = [os.path.join(dirname,filename),標籤] #添加火圖像 add_images_to_df('/content/drive/mydrive/fire/fire_dataset/fire_images','fire') #添加非火圖像 add_images_to_df('/content/drive/mydrive/fire/fire_dataset/non_fire_images','non_fire') #洗牌數據集 df = df.sample(frac = 1).Reset_index(drop = true)
可視化圖像的分佈
可視化火災和非火力圖像的分佈有助於我們更好地了解數據集。我們將繪圖用於交互式圖。
創建圖像發行的餅圖
現在讓我們創建一個用於圖像分佈的餅圖。
#創建散點圖 無花果= px.scatter( data_frame = df, x = df.index, y ='label', 顏色='label', title =“火和非火圖像的分佈” ) #更新標記大小 圖.update_traces(Marker_Size = 2) 圖.add_trace(go.pie(values = df ['label']。value_counts()。
展示火和非火圖像
現在讓我們編寫用於顯示火和非火圖像的代碼。
Def Visualize_images(標籤,標題): data = df [df ['label'] ==標籤] 圖片= 6#設置圖片的數量 圖,ax = plt.subplots(int(pics // 2),2,無花果=(15,15)) plt.suptitle(標題) ax = ax.ravel() 對於範圍((圖片// 2) * 2)的i 路徑= data.sample(1).loc [:,'path']。 to_numpy()[0] img = image.load_img(路徑) img = image.img_to_array(img) / 255 ax [i] .imshow(img) ax [i] .axes.xaxis.set_visible(false) ax [i] .axes.yaxis.set_visible(false) visualize_images('fire','帶火的圖像') visualize_images('non_fire',“無火的圖像”)
通過顯示一些來自火災和非火災類別的示例圖像,我們將了解我們的模型將使用的內容。
通過增強技術增強培訓數據
我們將採用圖像添加方法來改善我們的培訓數據。應用任意圖像適應(類似於迴旋,無人機和剪切)被稱為加法。通過生成更健壯和不同的數據集,此過程增強了模型概括為新圖像的能力。
來自tensorflow.keras.models導入順序 來自tensorflow.keras.layers導入conv2d,maxpool2d,扁平,密集 Generator = Imagedatagenerator( rotation_range = 20, width_shift_range = 0.1, height_shift_range = 0.1, shear_range = 2, zoom_range = 0.2, recale = 1/255, 驗證_split = 0.2, ) train_gen = generator.flow_from_dataframe(df,x_col ='path',y_col ='label',images_size =(256,256),class_mode ='binary',subset ='訓練') val_gen = generator.flow_from_dataframe(df,x_col ='path',y_col ='label',images_size =(256,256),class_mode ='binary',subset ='驗證') class_indices = {} 對於train_gen.class_indices.keys()中的鍵: class_indices [train_gen.class_indices [鍵]] =鍵 打印(class_indices)
可視化增強圖像
我們可以可視化訓練集產生的一些增強圖像。
sns.set_style('dark') 圖片= 6#設置圖片的數量 圖,ax = plt.subplots(int(pics // 2),2,無花果=(15,15)) plt.suptitle(“訓練集中生成的圖像”) ax = ax.ravel() 對於範圍((圖片// 2) * 2)的i ax [i] .imshow(train_gen [0] [0] [i]) ax [i] .axes.xaxis.set_visible(false) ax [i] .axes.yaxis.set_visible(false)
構建火災檢測模型
我們的模型將對應幾個卷積層,每個卷積層隨後是最大池子播種機。卷積層是CNN的核心結構塊,使模型可以從圖像中學習特徵的空間尺度。最大池層有助於降低點圖的維度,從而使模型更有效。我們還將在模型末端添加完全連接的(厚)。這些層有助於結合卷積層學到的功能,並做出最終的括號決定。該事件子播種將具有具有Sigmoid激活函數的單個神經元,該神經元的概率得分錶明圖像是否包含火。定義模型電樞後,我們將發布一個摘要,以查看每個子播種機中的結構和參數數量。此步驟對於確保正確配置模型很重要。
來自tensorflow.keras.models導入順序 來自tensorflow.keras.layers導入conv2d,maxpool2d,扁平,密集 型號=順序() model.Add(conv2d(過濾器= 32,kernel_size =(2,2),activation ='relu',input_shape =(256,256,3))))))))) model.Add(maxpool2d()) model.Add(conv2d(filters = 64,kernel_size =(2,2),activation ='relu')) model.Add(maxpool2d()) model.Add(conv2d(filters = 128,kernel_size =(2,2),activation ='relu')) model.Add(maxpool2d()) 模型add(Flatten()) ADD(密集(64,激活='relu')) ADD(密集(32,激活='relu')) ADD(密集(1,激活='Sigmoid')) model.summary()
用優化器和損失功能編譯模型
接下來,我們將使用ADAM優化器和二進制交叉滲透損失函數進行編譯。 Adam Optimizer的效率和自適應學習率廣泛用於深度學習。二進制跨凝結適用於我們的二元分類問題(火與非火災)。
我們還將指定其他指標,例如曲線(AUC)下的準確性,召回和區域,以評估模型在訓練和驗證過程中的性能。
添加回調以進行最佳培訓
回調是TensorFlow中的一個強大功能,使我們能夠監視和控制訓練過程。我們將使用兩個重要的回調:
- 早期踩踏:當驗證損失停止改善,防止過度擬合時,停止訓練。
- REDUCELRONPLATEAU:降低驗證損失高原時的學習率,幫助模型收斂到更好的解決方案。
#compiling模型 來自Tensorflow.keras.metrics導入召回,AUC 來自tensorflow.keras.utils導入plot_model model.compile(優化器='adam',loss ='binary_crossentropy',metrics = ['fecuctiacy',召回(),auc()),) #定義回調 從tensorflow.keras.callbacks進口早期踩踏,還原 早期_Stoppping =早期踩踏(Monitor ='Val_loss',耐心= 5,Restore_best_weights = true) redy_lr_on_plateau = reducelronplateau(Monitor ='val_loss',因子= 0.1,耐心= 5)
模型擬合:培訓卷積神經網絡
模型擬合是指訓練數據集上的機器學習模型的過程。在此過程中,該模型通過調整其參數(權重和偏見)以最大程度地減少損耗函數來了解數據中的基本模式。在深度學習的背景下,這涉及到訓練數據的幾個時代和後退傳球。
model.fit(x = train_gen,batch_size = 32,epochs = 15,validation_data = val_gen,callbacks = [forath_stopppping,redion_lr_on_plateau])
評估模型
訓練後,我們將在驗證集上評估模型的性能。此步驟有助於我們了解模型對新數據的推廣程度。我們還將可視化培訓歷史,以了解損失和指標如何隨著時間的流逝而發展。
eval_list = model.evaluate(val_gen,return_dict = true) 對於eval_list.keys()中的公制: 打印(公制F”:{eval_list [metric] :. 2f}”) eval_list = model.evaluate(val_gen,return_dict = true) 對於eval_list.keys()中的公制: 打印(公制F”:{eval_list [metric] :. 2f}”)
示例用法:預測新圖像中的火
最後,我們將演示如何使用訓練有素的模型來預測新圖像是否包含火。此步驟涉及加載圖像,預處理以匹配模型的輸入要求,並使用模型進行預測。
下載和加載圖像
我們將從Internet下載示例圖像,並使用TensorFlow的圖像處理功能加載它。此步驟涉及調整圖像並標準化其像素值。
做出預測
使用訓練有素的模型,我們將對已加載的圖像進行預測。該模型將輸出概率分數,我們將進行四捨五入以獲得二進制分類(火災或非火災)。我們還將使用類索引將預測映射到其相應的標籤。
#下載圖像 ! #加載圖像 img = image.load_img('preadive.jpg') IMG img = image.img_to_array(img)/255 img = tf.image.resize(img,(256,256)) img = tf.expand_dims(img,axis = 0) 打印(“圖像形狀”,img.shape) 預測= int(tf.Round(model.predict(x = img))。numpy()[0] [0]) 打印(“預測值是:”,預測”,預測標籤為:
結論
開發基於深度學習的火災探測系統,例如“火焰監護人”,體現了深度學習在應對現實世界挑戰時的變革潛力。通過精心遵循每個步驟,從數據準備和可視化到模型構建,培訓和評估,我們創建了一個可靠的框架來檢測圖像中的火災。該項目不僅強調了技術複雜性涉及深度學習,而且還強調了利用技術對安全和災難預防的重要性。
正如我們得出的那樣,很明顯,DL模型可以顯著增強火災檢測系統,從而使其更高效,可靠和可擴展。儘管傳統方法具有其優點,但深度學習的融合卻引入了新的精緻和準確性。開發“火焰監護人”的旅程既具有啟發性和有意義,展現了現代技術的巨大能力。
關鍵要點
- 了解數據處理和可視化技術。
- 理解適當的數據收集和增強確保有效的模型培訓和概括。
- 實施模型構建和模型評估。
- 理解諸如早期和還原的回調,以優化培訓並防止過度擬合。
- 學習的建築卷積神經網絡使用CNN進行火災檢測。
常見問題
Q1。什麼是“火焰監護人”?答:“火焰監護人”是一種使用卷積神經網絡(CNN)和Tensorflow的火災檢測系統,以高精度識別圖像中的火災。
Q2。為什麼早期火災檢測很重要?答:早期的火災檢測對於防止廣泛損害,挽救生命並減少火災的環境影響至關重要。快速反應可以顯著減輕野火和結構火的毀滅性影響。
Q3。使用深度學習構建火災檢測系統涉及哪些挑戰?A.挑戰包括處理數據可變性(顏色,強度和環境的差異),最大程度地減少誤報,確保實時處理能力以及可伸縮性處理大型數據集。
Q4。圖像增強如何有助於訓練模型?A.圖像增強通過應用旋轉,變焦和剪切等隨機轉換來增強訓練數據集。這可以通過將其暴露於各種場景,改善其穩健性來更好地推廣模型。
Q5。哪些指標用於評估模型的性能?答:使用準確性,回憶和曲線下的面積(AUC)等指標評估該模型。這些指標有助於評估模型如何區分火災和非火圖像及其整體可靠性。
本文所示的媒體不由Analytics Vidhya擁有,並由作者酌情使用。
以上是火焰監護人:基於深度學習的火災檢測系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Meta的Llama 3.2:多模式和移動AI的飛躍 Meta最近公佈了Llama 3.2,這是AI的重大進步,具有強大的視覺功能和針對移動設備優化的輕量級文本模型。 以成功為基礎

嘿,編碼忍者!您當天計劃哪些與編碼有關的任務?在您進一步研究此博客之前,我希望您考慮所有與編碼相關的困境,這是將其列出的。 完畢? - 讓&#8217

本週的AI景觀:進步,道德考慮和監管辯論的旋風。 OpenAI,Google,Meta和Microsoft等主要參與者已經釋放了一系列更新,從開創性的新車型到LE的關鍵轉變

Shopify首席執行官TobiLütke最近的備忘錄大膽地宣布AI對每位員工的基本期望是公司內部的重大文化轉變。 這不是短暫的趨勢。這是整合到P中的新操作範式

介紹 Openai已根據備受期待的“草莓”建築發布了其新模型。這種稱為O1的創新模型增強了推理能力,使其可以通過問題進行思考

介紹 想像一下,穿過美術館,周圍是生動的繪畫和雕塑。現在,如果您可以向每一部分提出一個問題並獲得有意義的答案,該怎麼辦?您可能會問:“您在講什麼故事?

對於那些可能是我專欄新手的人,我廣泛探討了AI的最新進展,包括體現AI,AI推理,AI中的高科技突破,及時的工程,AI培訓,AI,AI RE RE等主題

SQL的Alter表語句:動態地將列添加到數據庫 在數據管理中,SQL的適應性至關重要。 需要即時調整數據庫結構嗎? Alter表語句是您的解決方案。本指南的詳細信息添加了Colu
