91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構

發布時間:2021-12-20 10:40:48 來源:億速云 閱讀:202 作者:小新 欄目:大數據

這篇文章主要介紹了如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。


創建用于室內和室外火災檢測的定制InceptionV3和CNN架構。

 如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構

嵌入式處理技術的最新進展已使基于視覺的系統可以在監視過程中使用卷積神經網絡檢測火災。在本文中,兩個定制的CNN模型已經實現,它們擁有用于監視視頻的高成本效益的火災檢測CNN架構。第一個模型是受AlexNet架構啟發定制的基本CNN架構。我們將實現和查看其輸出和限制,并創建一個定制的InceptionV3模型。為了平衡效率和準確性,考慮到目標問題和火災數據的性質對模型進行了微調。我們將使用三個不同的數據集來訓練我們的模型。

創建定制的CNN架構

我們將使用TensorFlow API Keras構建模型。首先,我們創建用于標記數據的ImageDataGenerator。[1]和[2]數據集在這里用于訓練。最后,我們將提供980張圖像用于訓練和239張圖像用于驗證。我們也將使用數據增強。


import tensorflow as tfimport keras_preprocessingfrom keras_preprocessing import imagefrom keras_preprocessing.image import ImageDataGeneratorTRAINING_DIR = "Train"training_datagen = ImageDataGenerator(rescale = 1./255,                                  horizontal_flip=True,                                  rotation_range=30,                                  height_shift_range=0.2,                                  fill_mode='nearest')VALIDATION_DIR = "Validation"validation_datagen = ImageDataGenerator(rescale = 1./255)train_generator = training_datagen.flow_from_directory(TRAINING_DIR,                                         target_size=(224,224),                                        class_mode='categorical',                                         batch_size = 64)validation_generator = validation_datagen.flow_from_directory(                                                VALIDATION_DIR,                                           target_size=(224,224),                                          class_mode='categorical',                                           batch_size= 16)
           
在上面的代碼中應用了3種數據增強技術,它們分別是水平翻轉,旋轉和高度移位。
現在,我們將創建我們的CNN模型。該模型包含三對Conv2D-MaxPooling2D層,然后是3層密集層。為了克服過度擬合的問題,我們還將添加dropout層。最后一層是softmax層,它將為我們提供火災和非火災兩類的概率分布。通過將類數更改為1,還可以在最后一層使用‘Sigmoid’激活函數。


from tensorflow.keras.optimizers import Adammodel = tf.keras.models.Sequential([tf.keras.layers.Conv2D(96, (11,11), strides=(4,4), activation='relu', input_shape=(224, 224, 3)), tf.keras.layers.MaxPooling2D(pool_size = (3,3), strides=(2,2)),tf.keras.layers.Conv2D(256, (5,5), activation='relu'),tf.keras.layers.MaxPooling2D(pool_size = (3,3), strides=(2,2)),tf.keras.layers.Conv2D(384, (5,5), activation='relu'),tf.keras.layers.MaxPooling2D(pool_size = (3,3), strides=(2,2)),tf.keras.layers.Flatten(),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(2048, activation='relu'),tf.keras.layers.Dropout(0.25),tf.keras.layers.Dense(1024, activation='relu'),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(2, activation='softmax')])model.compile(loss='categorical_crossentropy',optimizer=Adam(lr=0.0001),metrics=['acc'])history = model.fit(train_generator,steps_per_epoch = 15,epochs = 50,validation_data = validation_generator,validation_steps = 15)
           
我們將使用Adam作為學習率為0.0001的優化器。經過50個時期的訓練,我們得到了96.83的訓練精度和94.98的驗證精度。訓練損失和驗證損失分別為0.09和0.13。
如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構
我們的訓練模型
讓我們測試模型中的所有圖像,看看它的猜測是否正確。為了進行測試,我們選擇了3張圖像,其中包括有火的圖像,沒有火的圖像以及包含火樣顏色和陰影的照片。
我們最終得到上面創建的模型在對圖像進行分類時犯了一個錯誤。  該模型52%的把握確定圖像中有火焰。  這是因為已進行訓練的數據集中幾乎沒有圖像可以說明室內火災的模型。  所以該模型僅知道室外火災情況,而當給出一張室內火樣的陰影圖像時會出現錯誤。  另一個原因是我們的模型不具備可以學習火的復雜特征。  
接下來,我們將使用標準的InceptionV3模型并對其進行自定義。復雜模型能夠從圖像中學習復雜特征。

創建定制的InceptionV3模型

這次我們將使用不同的數據集[3],其中包含室外和室內火災圖像。  我們已經在該數據集中訓練了我們之前的CNN模型,結果表明它是過擬合的,因為它無法處理這個相對較大的數據集和從圖像中學習復雜的特征。  

我們開始為自定義的InceptionV3創建ImageDataGenerator。數據集包含3個類,但對于本文,我們將僅使用2個類。它包含用于訓練的1800張圖像和用于驗證的200張圖像。另外,我添加了8張客廳圖像,以在數據集中添加一些噪點。


import tensorflow as tfimport keras_preprocessingfrom keras_preprocessing import imagefrom keras_preprocessing.image import ImageDataGeneratorTRAINING_DIR = "Train"training_datagen = ImageDataGenerator(rescale=1./255,zoom_range=0.15,horizontal_flip=True,fill_mode='nearest')VALIDATION_DIR = "/content/FIRE-SMOKE-DATASET/Test"validation_datagen = ImageDataGenerator(rescale = 1./255)train_generator = training_datagen.flow_from_directory(TRAINING_DIR,target_size=(224,224),shuffle = True,class_mode='categorical',batch_size = 128)validation_generator = validation_datagen.flow_from_directory(VALIDATION_DIR,target_size=(224,224),class_mode='categorical',shuffle = True,batch_size= 14)
           
為了使訓練更加準確,我們可以使用數據增強技術。在上面的代碼中應用了2種數據增強技術-水平翻轉和縮放。
讓我們從Keras API導入InceptionV3模型。我們將在InceptionV3模型的頂部添加圖層,如下所示。我們將添加一個全局空間平均池化層,然后是2個密集層和2個dropout層,以確保我們的模型不會過擬合。最后,我們將為2個類別添加一個softmax激活的密集層。
接下來,我們將首先僅訓練我們添加并隨機初始化的圖層。我們將在這里使用RMSprop作為優化器。


from tensorflow.keras.applications.inception_v3 import InceptionV3from tensorflow.keras.preprocessing import imagefrom tensorflow.keras.models import Modelfrom tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Input, Dropoutinput_tensor = Input(shape=(224, 224, 3))base_model = InceptionV3(input_tensor=input_tensor, weights='imagenet', include_top=False)x = base_model.outputx = GlobalAveragePooling2D()(x)x = Dense(2048, activation='relu')(x)x = Dropout(0.25)(x)x = Dense(1024, activation='relu')(x)x = Dropout(0.2)(x)predictions = Dense(2, activation='softmax')(x)model = Model(inputs=base_model.input, outputs=predictions)for layer in base_model.layers:  layer.trainable = Falsemodel.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc'])history = model.fit(train_generator,steps_per_epoch = 14,epochs = 20,validation_data = validation_generator,validation_steps = 14)
           
在訓練了頂層20個周期之后,我們將凍結模型的前249層,并訓練其余的層(即頂層2個初始塊)。在這里,我們將使用SGD作為優化器,學習率為0.0001。


#To train the top 2 inception blocks, freeze the first 249 layers and unfreeze the rest.for layer in model.layers[:249]:  layer.trainable = Falsefor layer in model.layers[249:]:  layer.trainable = True#Recompile the model for these modifications to take effectfrom tensorflow.keras.optimizers import SGDmodel.compile(optimizer=SGD(lr=0.0001, momentum=0.9), loss='categorical_crossentropy', metrics=['acc'])history = model.fit(train_generator,steps_per_epoch = 14,epochs = 10,validation_data = validation_generator,validation_steps = 14)
           
經過10個周期的訓練,我們獲得了98.04的訓練準確度和96.43的驗證準確度。訓練損失和驗證損失分別為0.063和0.118。
如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構
以上10個時期的訓練過程
我們用相同的圖像測試我們的模型,看看是否它可以正確猜出。
這次我們的模型可以使所有三個預測正確。  96%的把握可以確定圖像中沒有任何火。  我用于測試的其他兩個圖像如下:  
如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構     如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構
來自下面引用的數據集中的非火災圖像

實時測試

現在,我們的模型已準備好在實際場景中進行測試。  以下是使用OpenCV訪問我們的網絡攝像頭并預測每幀圖像中是否包含火的示例代碼。  如果框架中包含火焰,我們希望將該框架的顏色更改為B&W。  


import cv2import numpy as npfrom PIL import Imageimport tensorflow as tffrom keras.preprocessing import image#Load the saved modelmodel = tf.keras.models.load_model('InceptionV3.h6')video = cv2.VideoCapture(0)while True:        _, frame = video.read()#Convert the captured frame into RGB        im = Image.fromarray(frame, 'RGB')#Resizing into 224x224 because we trained the model with this image size.        im = im.resize((224,224))        img_array = image.img_to_array(im)        img_array = np.expand_dims(img_array, axis=0) / 255        probabilities = model.predict(img_array)[0]        #Calling the predict method on model to predict 'fire' on the image        prediction = np.argmax(probabilities)        #if prediction is 0, which means there is fire in the frame.        if prediction == 0:                frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)                print(probabilities[prediction])cv2.imshow("Capturing", frame)        key=cv2.waitKey(1)        if key == ord('q'):                breakvideo.release()cv2.destroyAllWindows()
           
這個項目的Github鏈接在這里:https://github.com/DeepQuestAI/Fire-Smoke-Dataset。可以從那里找到數據集和上面的所有代碼。
如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何創建用于室內和室外火災檢測的定制InceptionV3和CNN架構”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

藁城市| 荣成市| 山阴县| 嘉禾县| 马山县| 松原市| 河北省| 尼木县| 肇庆市| 崇义县| 蓝田县| 望江县| 武宣县| 萨嘎县| 张家口市| 乳山市| 宜兰市| 象山县| 蒙山县| 靖边县| 合水县| 辽阳县| 绍兴县| 霍山县| 淮安市| 保德县| 鹤岗市| 和龙市| 江西省| 仙居县| 泽州县| 保山市| 普格县| 江永县| 灵石县| 永仁县| 永嘉县| 久治县| 淮安市| 贡嘎县| 南宫市|