楊 俊
(國能大渡河枕頭壩發(fā)電有限公司,四川 樂山 614000)
枕頭壩一級(jí)水電站為枕頭壩公司兩級(jí)堤壩式開發(fā)的第一級(jí),壩址位于大沙壩到月兒壩河段,庫區(qū)涉及金口河區(qū)、漢源縣、甘洛縣,距成都市約260 km。電站安裝有4臺(tái)180 MW的軸流轉(zhuǎn)槳式水輪發(fā)電機(jī)組機(jī),總裝機(jī)容量720 MW。電站利用高效的圖像處理算法對(duì)廠區(qū)內(nèi)復(fù)雜圖像、高效的彩色圖像、視頻動(dòng)態(tài)目標(biāo)的處理,建立基于視頻序列的動(dòng)態(tài)目標(biāo)識(shí)別火焰識(shí)別模型,以適應(yīng)水電復(fù)雜環(huán)境。
由于在電站實(shí)際運(yùn)行過程中,發(fā)生火焰事故的頻率很低,同樣存在數(shù)據(jù)不足的情況,但室外火焰的數(shù)據(jù)樣本較多,基于此,收集室外的各種火焰數(shù)據(jù)集,并人工標(biāo)注,利用深度神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)火焰本身的特征,建模實(shí)現(xiàn)不限場(chǎng)景的(包括室內(nèi)室外)火焰的識(shí)別。
枕頭壩廠區(qū)真實(shí)火焰發(fā)生概率極小,但一旦發(fā)生必須檢測(cè)到;廠區(qū)內(nèi)人員走動(dòng),安全帽、偏紅色衣服等容易造成檢測(cè)干擾。針對(duì)枕頭壩廠區(qū)實(shí)際的場(chǎng)景需求,火焰識(shí)別準(zhǔn)確度需要非常高,不能漏檢,同時(shí)誤檢也要很低,故采用簡(jiǎn)潔、速度快的PyTorch框架,利用背景建模、運(yùn)動(dòng)目標(biāo)檢測(cè)、圖片分類的模型算法實(shí)現(xiàn)對(duì)枕頭壩廠區(qū)內(nèi)火焰識(shí)別。
枕頭壩廠區(qū)火焰識(shí)別采用改進(jìn)的PyTorch1.6.0版本,其包括一些新的api、用于性能改進(jìn)的工具以及對(duì)基于分布式數(shù)據(jù)并行(DDP)和遠(yuǎn)程過程調(diào)用(RPC)的分布式更新,其中自動(dòng)混合精度(AMP)訓(xùn)練本地支持更加穩(wěn)定,AMP允許用戶輕松啟用自動(dòng)混合精度訓(xùn)練,有更高性能,在核心gpu上的內(nèi)存節(jié)省高達(dá)50%;使用torch.cuda.amp API,amp提供方便的混合精度方法,使有些操作如線性層和卷積比float16要快很多。改進(jìn)的PyTorch版本能加快模型的訓(xùn)練和推斷速度,減少識(shí)別任務(wù)中g(shù)pu的內(nèi)存開銷,提高了火焰識(shí)別的速度,滿足了枕頭壩廠區(qū)火焰識(shí)別的實(shí)時(shí)性要求。
為提高火焰識(shí)別模型的準(zhǔn)確率和內(nèi)存使用效率,改進(jìn)深度網(wǎng)絡(luò)MobileNetv2基于倒置殘差結(jié)構(gòu)[1]。普通模型架構(gòu)使用標(biāo)準(zhǔn)卷積將空間和通道信息一起映射到下一層,參數(shù)和計(jì)算量會(huì)比較大;深度可分離卷積,將標(biāo)準(zhǔn)卷積拆分為深度卷積和逐點(diǎn)卷積,深度卷積負(fù)責(zé)逐通道的過濾空間信息,逐點(diǎn)卷積負(fù)責(zé)映射通道,將空間和通道分開;可分離線性瓶頸和擴(kuò)展層的瓶頸是倒置殘差結(jié)構(gòu),同樣是將標(biāo)準(zhǔn)卷積拆分為深度卷積和逐點(diǎn)卷積,在逐點(diǎn)卷積后使用了接1×1卷積,該卷積使用線性變換,其作用是將輸入映射回低維空間。采用倒置殘差結(jié)構(gòu)后,相比與之前的殘差模塊,中間的深度卷積較寬,除了開始的升維的1×1卷積,做shortcut的1×1卷積通道數(shù)較少,呈現(xiàn)的是倒立狀態(tài),故稱為倒置殘差。改進(jìn)的倒置殘差結(jié)構(gòu)使得模型更加高效,更好的魯棒性,識(shí)別速度更快,滿足枕頭壩廠區(qū)火焰識(shí)別的需求。
考慮準(zhǔn)確性、實(shí)時(shí)性以及實(shí)際情況,在發(fā)生火焰的時(shí)候,能第一時(shí)間準(zhǔn)確地識(shí)別到火焰并報(bào)警,因此,模型不必保證識(shí)別到著火區(qū)域的全部,但需保證識(shí)別到至少一片著火區(qū)域。所以結(jié)合現(xiàn)有數(shù)據(jù)集的情況,采用基于超像素深度學(xué)習(xí)方法,即SLIC+分類網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)火焰的識(shí)別。該方法的優(yōu)點(diǎn)是,不依靠時(shí)空信息即可實(shí)現(xiàn)實(shí)時(shí)檢測(cè),簡(jiǎn)化的網(wǎng)絡(luò)結(jié)構(gòu),基于超像素定位識(shí)別火焰,準(zhǔn)確率在90%以上。
3.1.1 SLIC算法
SLIC(sample linear iterative clustering),即簡(jiǎn)單線性迭代聚類,本質(zhì)上是采用K均值聚類來減小空間維數(shù),以提高效率[2]。利用圖片的五個(gè)維度信息(顏色和平面空間)聚集像素,生成緊湊的幾乎均勻的超像素。五個(gè)維度分別是CIELAB顏色空間的L,A,B值和像素坐標(biāo)x,y。L代表亮度,值域?yàn)?(黑)到100(白);a表示從洋紅色至綠色的范圍,值域?yàn)?128(綠色)到128(品紅);b表示從黃色至藍(lán)色的范圍,值域?yàn)?128(藍(lán)色)到128(黃色)。之所以采用Lab顏色空間的原因是:Lab顏色空間接近人類生理視覺,它致力于感知均勻性,它的L分量密切匹配人類亮度感知;Lab描述的是顏色的顯示方式,而不是設(shè)備(如顯示器、打印機(jī)或數(shù)碼相機(jī))生成顏色所需的特定色料的數(shù)量,所以Lab被視為與設(shè)備無關(guān)的顏色模型;Lab色域?qū)掗?人的肉眼能感知的色彩,都能通過Lab模型表現(xiàn)出來。
3.1.2 SLIC具體實(shí)現(xiàn)步驟
1)初始化種子點(diǎn)(聚類中心)。按照設(shè)定的超像素個(gè)數(shù),在圖像內(nèi)均勻的分配種子點(diǎn)。假設(shè)圖片總共有N個(gè)像素點(diǎn),預(yù)分割為K個(gè)相同尺寸的超像素,那么每個(gè)超像素的大小為N/K,則相鄰種子點(diǎn)的距離(步長)近似為S=sqrt(N/K)。
2)在種子點(diǎn)的n×n鄰域內(nèi)重新選擇種子點(diǎn)(一般取n=3)。具體方法為:計(jì)算該鄰域內(nèi)所有像素點(diǎn)的梯度值,將種子點(diǎn)移到該鄰域內(nèi)梯度最小的地方。這樣做的目的是為了避免種子點(diǎn)落在梯度較大的輪廓邊界上,以免影響后續(xù)聚類效果。
3)在每個(gè)種子點(diǎn)周圍的鄰域內(nèi)為每個(gè)像素點(diǎn)分配類標(biāo)簽(即屬于哪個(gè)聚類中心)。和標(biāo)準(zhǔn)的k-means在整張圖中搜索不同,SLIC的搜索范圍限制為2S×2S,可以加速算法收斂。
4)距離度量。對(duì)于每個(gè)搜索到的像素點(diǎn),分別計(jì)算它和該種子點(diǎn)的距離,距離計(jì)算方法如下
式中:dlab為顏色距離;dxy為空間距離;S=sqrt(N/K);m為固定常數(shù),用于調(diào)整超像素緊密度,取值范圍[1,40],一般取10;Ds為最終距離。
5)迭代上述步驟直到誤差收斂(每個(gè)像素點(diǎn)聚類中心不在發(fā)生變化)。
3.1.3 Inception V1-OnFire分類
經(jīng)在多個(gè)主流分類模型如VGGNet、GoogLeNet、Inception系列等上訓(xùn)練和測(cè)試,結(jié)合模型的速度和準(zhǔn)確性,最終采用優(yōu)化型的Inception V1網(wǎng)絡(luò)模型進(jìn)行分類[3]。相較于標(biāo)準(zhǔn)Inception V1網(wǎng)絡(luò)的多個(gè)Inception模塊,我們將其優(yōu)化減小為3個(gè)Inception模塊,稱為Inception V1-OnFire,使得在保證火焰分類識(shí)別準(zhǔn)確率的基礎(chǔ)上,大大減小了模型復(fù)雜度,提升了識(shí)別速度。基于以上SLIC+Inception V1-OnFire模型算法,利用標(biāo)注的數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練和測(cè)試。
采用基于視頻流的火焰智能識(shí)別方法,首先對(duì)接入的視頻流進(jìn)行初篩,利用KNN背景建模實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)檢測(cè),然后提取運(yùn)動(dòng)區(qū)域,最后利用深度學(xué)習(xí)建立的圖片分類模型對(duì)運(yùn)動(dòng)區(qū)域進(jìn)行圖片分類,判斷該區(qū)域是否是火焰[4]。具體檢測(cè)流程及原理如下。
1)運(yùn)動(dòng)目標(biāo)檢測(cè)。利用KNN進(jìn)行背景建模,并實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)檢測(cè),其流程大概如下。①讀取視頻:實(shí)時(shí)拉取廠區(qū)內(nèi)各個(gè)攝像頭的視頻流。②背景建模,計(jì)算前景掩碼:利用KNN背景建模,KNN全稱是K Nearest Neighbors,是一種分類算法。具體采用cv2的createBackgroundSubtractorKNN函數(shù),通過設(shè)置訓(xùn)練的幀數(shù),陰影檢測(cè)等獲得背景,然后利用背景獲得當(dāng)前圖片的前景掩碼。KNN訓(xùn)練的幀數(shù)可設(shè)置為20幀。③前景區(qū)域二值化:將非白色(0~244)的非前景區(qū)域(包含背景及陰影)均設(shè)為0,前景的白色(244~255)設(shè)置為255。④形態(tài)學(xué)處理:對(duì)二值化后的前景區(qū)域進(jìn)行圖像形態(tài)上的處理,通過腐蝕、膨脹操作,消除噪聲。⑤獲得輪廓坐標(biāo):對(duì)二值化后的圖片,利用cv2.findContours獲得矩形輪廓坐標(biāo),獲得的矩形輪廓對(duì)象即為圖片中的運(yùn)動(dòng)目標(biāo)。⑥輪廓區(qū)域處理,生成矩陣:根據(jù)矩形輪廓坐標(biāo)從原圖中提取對(duì)應(yīng)矩形區(qū)域,該區(qū)域是一張圖片,為保證圖片縮放不變型,先根據(jù)該圖片的寬高對(duì)圖片周圍進(jìn)行填充,使用像素值0即黑色進(jìn)行填充,然后將其縮放為224×224大小尺寸,生成新的區(qū)域圖片,圖片以矩陣形式存儲(chǔ),用于后續(xù)深度學(xué)習(xí)火焰分類。
2)火焰分類模型。提取的運(yùn)動(dòng)目標(biāo)區(qū)域,我們是知道其在原圖中的位置的,對(duì)提取的目標(biāo)區(qū)域做圖像處理縮放后,輸入火焰分類模型,判斷其是否為火焰。分類模型采用深度學(xué)習(xí)的方法,此方法效果好的原因是:輸入的運(yùn)動(dòng)區(qū)域是原圖中的一部分,尺寸較小,不需要專門水電廠內(nèi)的火焰數(shù)據(jù)集,任何環(huán)境下的火焰數(shù)據(jù)集都有效,因此數(shù)據(jù)集更容易收集,同時(shí)相較于傳統(tǒng)基于特征的火焰分類方法,深度學(xué)習(xí)能更好的提取火焰特征,識(shí)別精度高。采用RestNet50模型進(jìn)行火焰分類檢測(cè),RestNet是一種殘差網(wǎng)絡(luò),通過子網(wǎng)絡(luò)的堆疊可以構(gòu)成一個(gè)很深的網(wǎng)絡(luò),簡(jiǎn)化的子網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 子網(wǎng)絡(luò)結(jié)構(gòu)圖
存在誤檢和較多漏檢,比如人員的走動(dòng)(穿帶紅色的衣服或安全帽)會(huì)識(shí)別為火焰。
火焰分類模型采用MobileNetV2網(wǎng)絡(luò),相較于上版本的RestNet50網(wǎng)絡(luò),MobileNetV2檢測(cè)速度比ResNet50網(wǎng)絡(luò)的速度提升一倍,實(shí)時(shí)性效果更好。MobileNetv2架構(gòu)是基于倒置殘差結(jié)構(gòu)(inverted residual structure),原本的殘差結(jié)構(gòu)的主分支是有三個(gè)卷積,兩個(gè)逐點(diǎn)卷積通道數(shù)較多,而倒置的殘差結(jié)構(gòu)剛好相反,中間的卷積通道數(shù)(依舊使用深度分離卷積結(jié)構(gòu))較多,旁邊的較小。該網(wǎng)絡(luò)是一種輕量級(jí)網(wǎng)絡(luò),采用了h-swish(hard version of swish)激活函數(shù),能有效提高網(wǎng)絡(luò)的精度[5],其公式如下:
搭建MobileNetV3網(wǎng)絡(luò)進(jìn)行訓(xùn)練,其損失函數(shù)采用交叉熵?fù)p失函數(shù),公式如下:
式中:p表示真實(shí)值,是one-hot形式;q是預(yù)測(cè)值并且q是經(jīng)過softmax后的值。
添加訓(xùn)練集樣本。添加人員走動(dòng)、人員戴安全帽的圖片作為負(fù)樣本。同樣會(huì)存在一些誤檢,紅色指示燈的閃爍有可能檢測(cè)為火焰。
繼續(xù)增加人員走動(dòng)、人員戴安全帽、紅色指示燈等負(fù)樣本數(shù)據(jù)集;增加火焰的正樣本數(shù)據(jù)集;采用數(shù)據(jù)增強(qiáng)算法,如幾何變換、翻轉(zhuǎn)旋轉(zhuǎn)、噪聲注入等方法擴(kuò)展數(shù)據(jù)集,提升模型泛化能力,提高模型檢測(cè)精度。
枕頭壩廠區(qū)火焰識(shí)別模型采用面向視頻序列的動(dòng)態(tài)目標(biāo)識(shí)別技術(shù)。由于廠區(qū)環(huán)境復(fù)雜,光照、亮度變化、人員走動(dòng)等影響較大,同時(shí)異物多種多樣,如果僅僅基于單張圖片進(jìn)行目標(biāo)檢測(cè),模型會(huì)極大的依賴廠區(qū)異物樣本,在異物樣本有限且多樣的情況下,考慮基于視頻序列的動(dòng)態(tài)目標(biāo)識(shí)別方法,增加采用LSTM網(wǎng)絡(luò)模塊,提取并記錄視頻幀前后時(shí)序特征,完成對(duì)異物的識(shí)別。檢測(cè)階段模型共收集火焰19匯620張圖片,非火焰41 060張圖片。模型指標(biāo):精確率達(dá)到96%,召回率為93%,準(zhǔn)確率94%。