吳珊
(西南交通大學信息科學與技術學院,成都611756)
火災是自然災害和社會災害中最具破壞性的災害之一,它嚴重影響了人類日常的生產生活,一方面威脅著人類的生命安全,造成難以挽回的經濟損失,另一方面,它造成環境污染、破壞動植物生存環境。經過長期觀察人們發現在火災發生之前往往會產生一定的煙霧,因此煙霧識別在防火工程中引起了人們的更多關注,可以用來進行早期的火災預警。傳統的煙霧識別方法采用特征提取和分類器設計等模式識別技術,其主要重點是靜態和動態特征相結合的煙霧識別。典型特征包括顏色和運動概率[1]、煙霧的LBP 直方圖序列[2]、使用小波變換和HMT 模型的動態紋理[3]、煙霧時間軌跡[4]、局部極值區域分割[5]和運動方向模型[6]等。
由于近年來人工智能深度學習發展十分迅速,深度卷積神經網絡(CNN)在許多計算機視覺任務(例如目標檢測、視頻跟蹤等)上均表現出出色的性能,與基于手動設計的傳統特征提取器的這些方法相比,一些研究人員建議將深度卷積神經網絡(CNN)應用于煙霧識別[7-8],從而可以學習到更深的特征以獲取具有較高泛化能力的模型。但是深度學習有一個令人頭疼的缺點,那就是需要大量樣本來進行訓練才能達到較好的泛化,然而據我們所知,先前煙霧識別研究中使用的數據集仍然相對較小且單調,用于訓練的可用煙霧圖像通常是從Internet 和視頻切割中獲得的,這顯然不利于深度學習。所以為了解決煙霧識別中訓練數據集不足的問題,本文使用生成對抗網絡(GANs)[9]技術來實現煙霧圖片的生成,以達到擴充煙霧數據集的作用。
生成對抗網絡(GANs)主要由生成器網絡和判別器網絡構成,生成器(Generator)網絡主要通過機器生成數據(大部分情況下是圖像),目的是騙過判別器網絡,判別器(Discriminator)網絡判斷這張圖像是真實的還是機器生成的,目的是找出生成器網絡做的假數據。隨著訓練的進行,生成器網絡能夠逐漸生成越來越逼真的圖像,甚至達到以假亂真的程度,使判別器網絡也沒辦法馬上區分它們的真假。同時,判別器網絡也在不斷提高鑒別真假的能力,與生成器網絡相互對抗,共同提升性能。最終訓練結束時可以得到一個效果非常好的生成器網絡模型,就可以用它來生成想要的圖片了。生成對抗網絡(GANs)在生活中已經有了很多有趣的應用,包括生成人臉照片、生成現實照片、生成動畫角色、圖像到圖像的轉換(將白天景觀轉化成夜晚景觀、將素描轉化成彩色圖片等)、文字到圖像的轉換、語義圖像到逼真圖片轉化、生成人體模型新體態、照片編輯、預測不同年齡的長相、提高照片分辨率、照片修復、自動生成3D 模型等。本文根據各種GANs衍生算法的特點結合煙霧圖片生成的實際需求,選擇了CycleGAN[10]進行煙霧圖片的生成,并使用該擴充煙霧數據集在VGG-16[11]、ResNet-50[12]、ResNet-101[12]等深度卷積神經網絡上進行煙霧識別對比實驗,最終取得更好的效果。
CycleGAN[10](使用一致循環生成網絡進行非配對圖像轉換)的原理就是能夠將一類圖片轉換成另一類圖片。它利用非成對數據也能進行訓練,不必滿足對應關系,所以用CycleGAN 可以做出很多有趣的應用。它可以實現畫與照片,斑馬與馬,夏天與冬天,蘋果與橘子,男人與女人,貓與狗,衛星地圖與行政地圖等圖片之間的轉換。CycleGAN 的原理圖解如圖1。

圖1 CycleGAN原理圖解
CycleGAN 的創新點在于能夠在源域和目標域之間,不用建立訓練數據間一對一的映射,就能夠實現這種遷移。圖1(a)中X、Y 對應兩個領域,現在想要將X領域中的圖片轉換成Y 領域中的圖片;G、F 分別對應正向和逆向GAN 中的兩個生成器,即G 將X 領域中的圖片x 轉換成Y 領域中的圖片G(x),然后用判別器DY判別是否屬于Y 領域的圖片,由此構成生成對抗網絡的基本結構。圖1(b)和圖1(a)相比增加了一些結構,即要求G(x)再經過逆向GAN 中的生成器F 生成F(G(x)),使之與原輸入x 盡可能接近,即cycle-consistency loss 盡量小,這樣就能解決GAN 無法針對性地輸出對應圖片的問題。圖1(b)過程x->G(x)->F(G(x))≈x,稱為forward cycle consistency。為了提高訓練效果,類似地,又訓練從Y 領域到X 領域的轉換,如圖1(c)過程y->F(y)->G(F(y))≈y,稱為backward cycle consistency。
VGGNet[11]通過重復堆疊若干個3×3 卷積內核和2×2 的最大池化層,成功構建出16~19 層的深度卷積神經網絡。實驗證明了卷積神經網絡的深度增加和小卷積核的使用能夠有效提升網絡的最終分類識別效果,錯誤率大大降低,可擴展性非常強,并且遷移到其他圖像樣本時也表現出良好的魯棒性。
VGG 網絡中使用多個3×3 的卷積核來模擬大卷積核對樣本的局部感知,該操作最突出的優點在于可以大規模減少參數,例如9×9 的卷積核需要81 個權重參數,而3×3 的卷積核只需要9 個權重參數。參數減少,運算時間也會成比例減少。圖2 為VGGNet 的網絡結構。

圖2 VGGNet的網絡結構
ResNet[12]分類網絡是當前應用最為廣泛的CNN 特征提取網絡,傳統的卷積網絡或者全連接網絡在信息傳遞的時候不可避免的會存在信息丟失、損耗,或者由于網絡結構自身的問題如梯度消失、梯度爆炸或者其他因素造成性能下降,導致較深的網絡無法訓練等問題。 而 深 度 殘 差 網 絡(Residual Neural Network,ResNet)通過直接將輸入信息傳遞給輸出來保護特征信息的完整性,這樣的設計既解決了梯度問題,也使得網絡的性能得到了提升,并且使用殘差網絡結構還能夠加快網絡的訓練速度,使網絡更快收斂。
在ResNet 網絡結構中用到兩種殘差模塊,圖3 中展示了它們的詳細結構設計。其中,圖3(a)是以兩個3×3 的卷積網絡串接在一起作為一個殘差模塊,圖3(b)使用串聯的1×1、3×3、1×1 的三個卷積網絡作為殘差模塊。

圖3 ResNet基本結構
由于網絡下載的大部分煙火視頻煙霧片段都比較短,多數為火焰場景,所以視頻切幀濾除相似圖片以后數據量也比較小,加上直接在網絡上下載的其他可用煙霧圖片,經過手動裁剪調整圖像大小后標記為煙霧或是非煙霧樣本,建立了煙霧圖像數據集SMOKEGENERATION,最終用于生成訓練的煙霧數據smoke共1000 張圖片,對應的無煙數據nosmoke 共1000 張圖片,模型訓練完成后使用其他2000 張無煙數據進行煙霧圖片的生成。表1 中羅列出了數據集的具體信息。

表1 SMOKE-GENERATION 數據集
使用CycleGAN 訓練時將輸入網絡的煙霧圖片resize 為256×256 大小,使用腳本將圖片轉換為tfrecords格式,使用工具為PyCharm、Python3.6、TensorFlow,優化器選擇Adam,學習率初始化為0.0002,對于前100個周期,保持相同的學習速率0.0002,然后在接下來的100 個周期內線性衰減到0,batch_size 大小為1,設置迭代40000 次。最終使用TensorFlow 內置的可視化工具TensorBoard 繪制loss 曲線如圖4 所示。

圖4 CycleGAN損失曲線
訓練完成后使用模型文件來測試將無煙數據生成有煙數據,部分實驗生成結果如圖5 所示。

圖5 CycleGAN生成結果圖
從圖4 CycleGAN 的損失曲線可以看出,在訓練開始時,判別器D_X 和D_Y 損失曲線逐步下降,與兩個生成器震蕩的方向相反,二者相互對抗,而隨著網絡迭代次數增加,生成器與判別器的“博弈”加劇,生成器生成的樣本越來越逼近真實樣本,最終生成器G、F 和判別器D_X、D_Y 的損失曲線逐漸趨于平和,兩個判別器損失總體呈現下降趨勢,直至模型收斂,在訓練過程中實際出現了多次損失震蕩現象,也是二者“博弈”的體現。CycleGAN 網絡需要保證生成的圖像必須保留有原始圖像的特性,所以如果我們使用生成器G 生成一張假圖像,那么要能夠使用另外一個生成器F 來努力恢復成原始圖像,這個過程必須滿足循環一致性,Cycle Consistency loss 保證原始圖像和循環圖像之間的差異應該盡可能小,保證生成器G 和F 不僅能滿足各自的判別器,還能應用于其他圖片。從圖4 CycleGAN 的損失曲線可以看出Cycle Consistency loss 越來越小,最后趨于平穩。
圖5 展示了CycleGAN 生成的部分結果圖,整體看來圖像的分辨率較高,多樣性很強。實驗證明Cycle-GAN 能在無煙圖片上比較自然的添加煙霧生成煙霧數據,人眼難以分辨出其中的差別。
第一次基于深度卷積神經網絡的煙霧識別對比實驗通過調整SMOKE-GENERATION 數據集,建立了煙霧識別圖像數據集SMOKE-RECOGNITION,分為訓練集train,驗證集val,測試集test,其中訓練集數據包含1200 張圖片,驗證集數據包含400 張圖片,測試集數據包含400 張圖片。表2 中羅列出了詳細的數據分布。

表2 SMOKE-RECOGNITION 數據集
第二次基于深度卷積神經網絡的煙霧識別對比實驗通過調整SMOKE-GENERATION 數據集,以及添加生成對抗網絡生成的煙霧數據,建立了擴充煙霧識別圖像數據集AUG-SMOKE-RECOGNITION,詳細的數據分布參見表3,其中訓練集樣本數量增加了4000 張,測試集和驗證集中的數據分布不變。

表3 AUG-SMOKE-RECOGNITION 數據集
進行基于深度卷積神經網絡的煙霧識別對比實驗,首先需要配置PyTorch 訓練環境,包括Python3.6、PyTorch1.1、CUDA9.0 等,然后使用VGG-16、ResNet-50、ResNet-101 網絡,以及pytorch_classifier 代碼在自制煙霧數據集上進行訓練。訓練具體參數設置見表4,部分參數不同是根據不同模型進行了調整,以便使各個網絡均能充分收斂。

表4 煙霧識別對比實驗參數設置
使用SMOKE-RECOGNITION 數據集分別在VGG-16、ResNet-50、ResNet-101 網絡上訓練后在測試集上的精度如表5 所示。

表5 SMOKE-RECOGNITION 數據集煙霧識別對比實驗結果
使用AUG-SMOKE-RECOGNITION 數據集分別在VGG-16、ResNet-50、ResNet-101 網絡上訓練后在測試集上的精度如表6 所示。

表6 AUG-SMOKE-RECOGNITION 數據集煙霧識別對比實驗結果
對比分析表5 和表6 中的結果可以發現,在這幾個網絡模型上均是煙霧數據的識別準確率要高于非煙霧數據,ResNet 網絡模型的識別準確率要高于VGG 網絡模型,且卷積神經網絡越深效果越好,VGG-16、ResNet-50、ResNet-101 網絡模型均在擴充數據集AUG-SMOKE-RECOGNITION 上獲得了不同程度的提高,其中VGG-16 網絡模型總體準確率提升了1.5%,在非煙霧數據的識別上提升了1%,在煙霧數據的識別上提升了2%,ResNet-50 網絡模型總體準確率提升了2%,在非煙霧數據的識別上提升了3%,在煙霧數據的識別上提升了1%,ResNet-101 網絡模型總體準確率提升了1.5%,在非煙霧數據的識別上提升了2%,在煙霧數據的識別上提升了1%,最后實驗充分證明了Cycle-GAN 數據仿真的可行性,能夠在一定程度上解決實際應用中煙霧訓練數據集不足的問題。
在深度學習人工智能如此火爆的如今,對數據集的要求也越來越大,本文通過使用循環生成對抗網絡CycleGAN 進行煙霧圖片的生成,從一定程度上解決了實際訓練中煙霧數據集不足的問題,并在VGG-16、ResNet-50、ResNet-101 網絡模型上進行煙霧識別對比實驗,最后充分證明了CycleGAN 數據仿真的可行性及擴充數據集對煙霧識別效果提升的重要性。