楊 朔,陳麗芳,石 瑀,毛一鳴
(江南大學數(shù)字媒體學院,江蘇無錫214122)
(*通信作者電子郵箱404314023@qq.com)
近年來,人口增長和工業(yè)的快速發(fā)展造成水體富營養(yǎng)化加劇,導致藻類大量繁殖并聚集成為水華,大量爆發(fā)的藻類破壞了水體的生態(tài)結構并威脅到人類的生存環(huán)境。研究表明,淡水藻類的大部分門類都能形成有害水華,尤其藍藻的范圍最廣,對生態(tài)環(huán)境的危害最大。
現(xiàn)有的治藻方法包括:1)利用二氧化氯(ClO2)、臭氧(O3)、高錳酸鉀(KMnO4)等氧化劑,通過將藍藻氧化達到快速殺藻目的的化學法;2)利用微生物防治、水生植物抑制的生物法,以及人工打撈等物理法等。受限于治理速度和成本的要求,人工打撈仍是最有效、應用最廣的方法。
人工打撈需要精準地定位藍藻的爆發(fā)位置和爆發(fā)程度,一般通過視頻監(jiān)控平臺實現(xiàn)。即監(jiān)控人員通過視頻監(jiān)控平臺尋找藍藻爆發(fā)的地點,再根據(jù)爆發(fā)程度決定是否需要打撈。這一流程存在幾個問題:一是信息的滯后性,面對眾多的監(jiān)控地點,監(jiān)控人員很難在第一時間發(fā)現(xiàn)藍藻爆發(fā),從而耽誤了打撈時機;二是很難進行定量分析,不同人對藍藻爆發(fā)程度的理解不同,對需要打撈的狀態(tài)的理解也不同,會造成決策的差異,并且打撈前后的變化也受到主觀因素的影響,缺乏定量分析,很難描述打撈的效果,所以需要能夠定性的描述,比如藍藻覆蓋率達到70%時需要打撈,打撈完成后覆蓋率降低至20%,那么我們就可以定量地分析這次打撈的成果。
現(xiàn)有關于藍藻圖像的研究多為遙感圖像。林怡等[1]利用遙感影像數(shù)據(jù),分析藍藻和其他典型地物影像光譜曲線及其特征,構建了歸一化藍藻指數(shù)(Normalized Difference Index of Cyanobacteria Bloom,NDI_CB),有效地從渾濁水體中提取藍藻信息。陳云等[2]以2007年遙感圖像為基礎,以歸一化差異植被指數(shù)(Normalized Difference Vegetation Index,NDVI)為測試變量,運用分類回歸樹(Classification And Regression Tree,CART)算法確定分割閾值,通過構建決策樹的方法識別出藍藻水華信息,取得了較好的效果。李亞春等[3]以太湖2003—2013年的遙感圖像為基礎,手工劃分出藍藻區(qū)域,并根據(jù)劃分結果討論了藍藻爆發(fā)情況與溫度的關系,據(jù)此計算出藍藻爆發(fā)階段的時間節(jié)點,為防控提供了依據(jù)。
利用遙感圖像劃分藍藻有幾個好處:一是遙感包含多方面的信息,RGB值、光的吸收波段以及熱成像結果等信息可以很好地將藍藻與水體區(qū)分開來;二是遙感的覆蓋面積廣,往往可以覆蓋整個湖面,劃分結果比較具有統(tǒng)計意義,便于分析藍藻生長的規(guī)律;所以很多學者借助遙感信息分析了藍藻生長與溫度、適度、風向以及諸多其他因素的關系。但這些研究更適合探索藍藻生長的規(guī)律,而不適合輔助人工打撈等物理法除藻。因為人工打撈需要精準的定位藍藻爆發(fā)的位置,才能最大限度地減少人力和時間的浪費,而遙感信息更注重全局的表達,缺乏局部的細節(jié)定位;并且遙感信息的周期比較長,來源有限,顯然無法滿足打撈的時效性。
直接處理視頻監(jiān)控平臺的藍藻圖像可以解決這些問題,即從監(jiān)控視頻中實時獲取藍藻圖像,將圖像中的藍藻分割出來,然后計算藍藻(像素點)的覆蓋率或覆蓋面積,為實時預警或決策提供定量指標。那么需要將藍藻從圖像中分割出來,由于藍藻具有鮮明的顏色信息,本文首先嘗試了基于RGB通道的閾值分割算法,分割結果不理想;然后又復現(xiàn)了FCNNet[4]和Deeplab[5]等基于深度神經(jīng)網(wǎng)絡(Deep Neural Network,DNN)的圖像分割算法,分割準確率仍不夠高。并且由于受到算法本身的限制,F(xiàn)CNNet的分割結果缺乏輪廓細節(jié)(使用了高倍雙線性插值),不適合分割藍藻這種輪廓曲折且多變的目標;Deeplab通過引入條件隨機場(Conditional Random Field,CRF)提高了準確率并修飾了輪廓細節(jié),但出現(xiàn)了大面積藍藻錯分的情況。對抗式生成網(wǎng)絡(Generative Adversarial Net,GAN)[6]已經(jīng)被證明可以有效地提升網(wǎng)絡性能,故本文借助GAN的思想,設計了深度生成式對抗網(wǎng)絡(Deep GAN,DGAN)模型用于生成藍藻圖像的精準分割結果。在3075張藍藻圖像數(shù)據(jù)集上的實驗表明,DGAN在準確率、召回率以及F1分數(shù)(F1score,F(xiàn)1)等指標上比傳統(tǒng)圖像分割算法(閾值分割算法)有很大的提升,比FCNNet、Deeplab等基于DNN的分割算法的提升也均超過了4個百分點,并且分割結果更具輪廓細節(jié),更少孔洞,也更少出現(xiàn)大面積錯識漏識的情況。
傳統(tǒng)的圖像分割算法大致分為兩個步驟:首先根據(jù)目標的特點設計特征,然后根據(jù)特征對像素點進行分類或聚類。這就要求目標有比較明顯的特征信息,包括顏色特征、輪廓特征或者紋理特征等。比如閾值分割算法會根據(jù)目標的顏色特征找到RGB通道的合理閾值區(qū)間,然后根據(jù)這個區(qū)間進行逐像素點的分類。但藍藻缺乏明顯的特征信息,使得設計有效特征變得非常困難。
首先,藍藻缺乏明顯的顏色特征。藍藻在不同的生長階段具有不同的顏色,生長期的藍藻呈青綠色,但成熟期的藍藻會偏黃色;并且藍藻的顏色與濃度有關,一般來說,濃度大時顏色偏深,濃度小時顏色偏淺。其次,藍藻缺乏明顯的輪廓特征:藍藻不具有特定的輪廓,無法像人體或汽車那樣靠輪廓分割。最后,水中混雜著大量的水草,岸邊會出現(xiàn)樹的倒影,這些都給分割增加了難度。
藍藻存在的上述問題使得很難設計出有效的特征,傳統(tǒng)分割算法的結果不好。神經(jīng)網(wǎng)絡由于可以自主學習特征,是藍藻分割問題更好的解決方案。目前主流的深度神經(jīng)網(wǎng)絡分割算法是FCNNet和Deeplab算法。
1.2.1 網(wǎng)絡結構
深度神經(jīng)網(wǎng)絡的興起得益于卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)在圖像分類上的高準確率。卷積神經(jīng)網(wǎng)絡主要是由多層特征提取階段和分類器組成的單一尺度結構,即輸入經(jīng)過逐層提取特征學習到更高層的特征后輸入到分類器中進行分類[7]。特征提取階段主要包括卷積層和下采樣層,之后會連接一到兩層的全連接層。以Lecun等[8]提出的Lenet-5網(wǎng)絡為例,如圖1所示,其輸入像素大小為32×32的圖像樣本,經(jīng)過卷積核個數(shù)分別為6和16的兩層卷積層以及兩層下采樣層后,提取到16個像素大小為5×5的特征,然后通過全連階層輸出分類結果。
CNN具有非常重要的兩個性質(zhì),即局部感受野和權值共享。局部感受野指特征提取過程中的某一神經(jīng)元只與局部關聯(lián),這一局部范圍稱為感受野;權值共享是由于圖像高維特征帶來的大量參數(shù)的產(chǎn)物,用于減少學習參數(shù),其在CNN模型中最直接的應用是卷積層和下采樣層。
圖1 Lenet的網(wǎng)絡結構Fig.1 Lenet network structure
1.2.2 卷積層
卷積層是卷積神經(jīng)網(wǎng)絡的核心組成部分,其主要目的是學習和提取有效特征,其具有局部連接和權值共享特征,這也是CNN可以處理大像素尺寸圖像樣本的原因;此外,其提取特征的方式還具有平移和旋轉不變性。Lenet中的C1和C3層為卷積層,其計算形式可表示為:
i作表示卷積核;是偏置項。運算方式如圖2所示。
圖2 卷積層操作Fig.2 Convolution layer operation
1.2.3 下采樣層
下采樣層又稱池化層(Pool),Lenet中的S2和S4層為下采樣層,其主要目的是通過降低分辨率來減少訓練參數(shù),并且獲得更抽象的特征以提高網(wǎng)絡的魯棒性。其操作方式有多種,最常見的有均值池化和最大值池化,這里以均值池化為例表示其計算形式:
1.2.4 全連接層
如果把卷積層和下采樣層當作特征提取階段,那么全連接層在CNN中起到分類器的作用。即將前面學習得到的“分布式特征表示”映射到樣本標記空間。全連接層會與前一層的所有神經(jīng)元連接,最后一層全連接層的神經(jīng)元個數(shù)等于類別數(shù),即會輸出一個長度為類別數(shù)的向量,每個值表示將目標圖像分類為該類別的得分,最高值即為該圖像的分類結果。
圖3 池化層操作Fig.3 Pool layer operation
之后經(jīng)過學者的不斷研究與發(fā)展,許多更深的、準確率更高的網(wǎng)絡被設計出來,包括 VGGNet[9]和 GoogLeNet[10]等都取得了非常好的分類效果。許多網(wǎng)絡通過加入特定功能的層的方式解決了CNN存在的幾個問題,比如Srivastava等[11]加入dropout層通過隨機使某些神經(jīng)元失效的方式防止過擬合,VGGNet[9]使用更小的卷積核以減少訓練參數(shù)和提高訓練速度,Ioffe等[12]在每層數(shù)據(jù)輸出后加入局部歸一化層(Batch Normalization,BN)使得分類曲面可以更好地落到數(shù)據(jù)中心從而防止陷入局部最優(yōu),He等[13]通過加入殘差以解決梯度消失問題等,但這些研究仍局限在圖像分類領域。
語義分割指對圖像進行語義級別的分割,即不僅要分割出前景和背景,還要明確分割出的是什么目標,其本質(zhì)上是對像素點的分類。最初CNN只能用于圖像分類,其進行圖像分割時采用逐像素點分類的方式,即以每個像素點為中心,以固定長度(像素點數(shù)量)截取圖像輸入CNN進行分類,圖像的分類結果即為該像素點的分類結果,待所有的像素點分類完成后,也就獲得了分割結果。這個做法產(chǎn)生了非常嚴重的冗余問題,相鄰像素點分類時截取的圖像存在大量的重疊,重疊區(qū)域進行了多次特征提取,導致分割速度非常慢。如圖4所示,對像素點1和2分類存在大量的重疊區(qū)域。
Shelhamer等[4]設計了一個新的網(wǎng)絡解決了冗余問題,完成了端到端的圖像語義分割,這個網(wǎng)絡稱為全卷積神經(jīng)網(wǎng)絡(Fully Convolutional neural Network,F(xiàn)CN)。由于在后續(xù)的發(fā)展中,F(xiàn)CN逐漸發(fā)展成一種網(wǎng)絡結構的統(tǒng)稱,即形似文獻[4]中的網(wǎng)絡結構的神經(jīng)網(wǎng)絡都可以被稱為是FCN。本文為了加以區(qū)分,將文獻[4]中使用的網(wǎng)絡結構稱為FCNNet,并作為本文的對比算法。
圖5描述了FCNNet作圖像分割的過程。網(wǎng)絡分為兩個階段:第一階段與傳統(tǒng)CNN一致,經(jīng)過不斷的卷積和下采樣操作獲得了小尺寸的特征,其不同于CNN的地方在于其獲得特征后不輸入全連接層,而是用1×1的卷積核模擬了全連接層的實現(xiàn),這樣網(wǎng)絡可以輸入不同尺寸的圖像,經(jīng)過模擬的全連接層后,獲得了n×n×c的分類結果(傳統(tǒng)CNN的輸出結果是1×1×c,n表示像素點尺寸,受輸入圖像的大小影響,c表示類別數(shù)),n×n中每個像素點的分類結果即為該像素點對應的感受野圖像的分類結果,這樣一次就完成了對所有像素點的分類,解決了CNN作語義分割時的冗余問題。由于第一階段進行了大量的卷積和下采樣操作,其分割結果的像素尺寸遠小于輸入圖像,稱之為熱圖。第二階段通過上采樣操作(本文中使用的upsampled為雙線性差值),使熱圖恢復到與原圖相同的像素尺寸,也就獲得了分割結果。
FCNNet實現(xiàn)了利用神經(jīng)網(wǎng)絡對圖像語義分割,然而它存在幾個問題:一是由于其模型的設計基于VGG16網(wǎng)絡,而VGG16是用于作圖像分類的,VGG16為了減少最后全連接層的參數(shù),使用多層卷積、池化操作將特征圖的尺寸減小到很小的尺寸,這也就丟失掉了很多信息。但FCNNet需要將這些特征上采樣回原圖大小的分割結果,這是非常困難的,故FCNNet為了能獲得較大尺寸的特征圖,在特征提取操作前會對特征進行100個像素點填充,這無疑加大了計算量。二是FCNNet最后使用了高倍上采樣(雙線性插值,F(xiàn)CNNet提供了三種版本:單層8倍、單層16倍和單層32倍上采樣),導致其分割結果不精細,缺乏輪廓細節(jié)。并且每個像素點的分類過程獨立于周圍像素點,在進行高倍上采樣后容易產(chǎn)生孔洞。這些設計在分割人體、車輛等具有明顯輪廓的目標時影響不大,但藍藻沒有固定的輪廓,且輪廓不平滑,直接使用高倍雙線性插值必然導致分割結果不精細,從而影響了準確率。另外,藍藻中存在許多局部區(qū)域的濃度明顯低于周圍,這容易使FCNNet將該區(qū)域錯分為非藍藻,從而在高倍上采樣后產(chǎn)生大量孔洞。
圖4 CNN作語義分割Fig.4 CNN for semantic segmentation
圖5 FCNNet結構Fig.5 FCNNet structure
Deeplab[5]的目的是提高 FCNNet的分割準確率,其在FCNNet后加入了條件隨機場用于修正分割結果,提升了分割精度,并且獲得了更加細致的輪廓(CRF引入了空間位置關系,可以對分割邊緣進行修正)。另外還設計了孔洞卷積使特征提取過程中不至于獲得尺寸太小的特征,不需要像FCNNet那樣作大尺寸的像素填充,同時有效地保證了感受野。Deeplab曾在2016年在PASCAL VOC Challenge中獲得了最高的圖像分割準確率,是現(xiàn)有的最好分割算法之一,具體操作可參考文獻[12]。但CRF對像素點分類時過度借助周圍像素點的分類結果,導致其無法正確分割出小面積的目標,并且其容易出現(xiàn)大面積的分割錯誤(任意像素點分類錯誤都會影響到周圍像素點的最終分類結果,當藍藻內(nèi)的孔洞過多時,會導致Deeplab將整片區(qū)域都錯分為非藍藻)。
生成式對抗網(wǎng)絡由 Goodfellow等[6]在2014年提出,解決了非監(jiān)督學習中的一個著名問題:給定一批樣本,通過訓練使得網(wǎng)絡能夠生成與這批樣本類似的新樣本。
GAN的思想來源于博弈論,其提出了一種思想,即設計兩個不同的網(wǎng)絡,其中一個網(wǎng)絡作為生成網(wǎng)絡(Generator,G),用于學習真實的數(shù)據(jù)分布,從而可以生成具有特定意義的目標圖像;另一個網(wǎng)絡作為判別網(wǎng)絡(Discriminator,D)用于判定輸入的圖像是生成網(wǎng)絡生成的圖像(用Fake表示)還是實際采集的圖像(用Label表示)。這樣兩個網(wǎng)絡就產(chǎn)生了對抗式的訓練。判別網(wǎng)絡是一個二分類網(wǎng)絡:如果輸入圖像是真實圖像(Label),其輸出為1;如果是生成網(wǎng)絡生成的目標圖像(Fake),其輸出為0。在訓練中,生成網(wǎng)絡不斷地調(diào)整參數(shù)使其生成的Fake盡可能地與真實分割結果相似,從而導致判別網(wǎng)絡無法正確地區(qū)分Fake和Label,而判別網(wǎng)絡的任務就很明確,盡可能地區(qū)分出Fake和Label。這樣,在經(jīng)過長時間的訓練后,GAN最終達到了納什均衡的狀態(tài),生成網(wǎng)絡生成的結果可以達到以假亂真的效果,我們就認為網(wǎng)絡完成了訓練。生成網(wǎng)絡生成的目標圖像(比如分割結果、填色結果等)就可以作為正確的結果使用。
由于本文構建的G和D均為深度神經(jīng)網(wǎng)絡,故本文將構建的對抗網(wǎng)絡結構稱為深度生成式對抗網(wǎng)絡。
DGAN由生成網(wǎng)絡(G)和判別網(wǎng)絡(D)構成,G和D在對抗式訓練中得到增強。數(shù)據(jù)集中每張藍藻圖像(Image)都有一張手工標注的分割結果(Label),這兩張圖像組成的樣本對稱為正樣本對。對應每張Image輸入生成網(wǎng)絡(G)會生成一張分割結果(Fake),Image與Fake組成的樣本對稱為負樣本對。正負樣本對輸入D完成判別,則DGAN的構成可以描述為圖6的形式。
G訓練的目的是捕捉樣本分布,使通過Image生成的Fake盡可能與Label相似,從而使D無法正確地區(qū)分正負樣本。D訓練的目的即正確地區(qū)分出正負樣本。由此G和D便形成了對抗式的訓練,可以構建如式(3)的損失函數(shù):
D的訓練過程是最大化準確率,即最小化損失函數(shù)的過程,其對正樣本的輸出D(Image,Label)趨向1,對負樣本的輸出D(Image,F(xiàn)ake)趨向0,這樣D的整體損失就會趨向0,而G訓練的目的是最小化D的準確率,即使D(Image,F(xiàn)ake)趨向1。
圖6 藍藻分割的DGAN結構Fig.6 DGAN structure for blue-green algae segmentation
為鼓勵G生成的分割結果盡可能地與真實分割結果相同,本文在損失函數(shù)中加入L1形式的正則項:
則最終的損失函數(shù)如式(5):
G和D會進行對抗式的訓練,首先固定G訓練D,然后固定D訓練G,再繼續(xù)循環(huán)訓練,G的D的能力都得到增強,最終G生成的分割結果能夠以假亂真,此時訓練就結束了,當有新的圖像輸入時,G生成的Fake就可以作為正確的藍藻分割結果使用。
生成網(wǎng)絡的目的是捕捉樣本分布的規(guī)律,生成具有特定意義的目標圖像。在藍藻問題中即輸入包含藍藻的圖像,生成藍藻區(qū)域和非藍藻區(qū)域具有明確劃分的圖像。本文仿照U-Net網(wǎng)絡[14]設計了一個全卷積神經(jīng)網(wǎng)絡用于生成分割結果,網(wǎng)絡的構造如圖7所示。
網(wǎng)絡主要分為兩部分:
第一部分為Conv1~Conv6,作用是生成較小尺寸的特征圖像,每層卷積核的尺寸均為4×4,步長為2,不同的是卷積核的個數(shù)逐漸增多,由64個逐漸增加到256個。為了防止梯度消失對訓練結果造成的影響,本文選用了Relu作為激活函數(shù),同時在每個激活函數(shù)后面加入局部歸一化層來提高訓練速度和避免局部最優(yōu)。為了防止最終獲得的特征像素尺寸太小,本文在每個卷積層前會對輸入圖像添加2個像素點的填充,這樣在經(jīng)過6個卷積層操作后,網(wǎng)絡獲得了256個大小為原圖1/64的特征。
第二部分為Deconv6~Deconv1,通過反卷積操作使前一階段獲得的特征逐漸恢復到原圖大小,作為生成分割結果。同樣在Deconv(反卷積)操作間加入Relu和BN,注意最后一層Deconv的神經(jīng)元個數(shù)等于類別數(shù)(藍藻分割問題為2,藍藻區(qū)域或非藍藻區(qū)域),取最大值即為像素點的分類結果。
本文按照FCN的思想設計了生成網(wǎng)絡,但在網(wǎng)絡的細節(jié)方面與FCNNet并不完全一致,而是借鑒了U-Net網(wǎng)絡[14]的部分思路。主要區(qū)別是將FCNNet的單層高倍上采樣設計為多層低倍上采樣(如FCNNet-32s中進行了單層32倍上采樣,本文將其分解成5層2倍上采樣,即網(wǎng)絡的第二部分),并更改了上采樣的方式,用U-Net中可學習的反卷積層替代了FCNNet中簡單的雙線性插值,這樣做是為了得到了更細致、更具輪廓細節(jié)的分割結果,并減少孔洞的出現(xiàn)。
Deeplab通過在FCNNet后銜接CRF的方式提高了分割準確率,但也因此帶來了無法分割小目標、容易大面積分割錯誤和增加分割時間的問題,不適合用于藍藻分割。本文舍棄了這種方式,借助GAN思想設計DGAN提高分割準確率。
圖7 生成網(wǎng)絡的網(wǎng)絡結構Fig.7 Network structure of generator
由于本文采用了4×4的卷積核,且卷積操作的滑動步長為2個像素點,故本文首先將攝像機抓取的藍藻圖像(1920×1080和1280×720分辨率)處理為512×512的像素尺寸,再將其輸入生成網(wǎng)絡。同樣的,生成的分割結果的像素尺寸也是512×512,需用雙線性插值的方式將其還原為原圖尺寸。
相對生成網(wǎng)絡,判別網(wǎng)絡較為簡單,判別網(wǎng)絡的目的是區(qū)分正負樣本對。在藍藻問題中即判斷輸入的樣本對屬于生成網(wǎng)絡的生成結果或真實分割結果,是一個二分類問題。網(wǎng)絡的構造如圖8所示。
判別網(wǎng)絡的本質(zhì)是個分類器,其與生成網(wǎng)絡的第一部分相似,通過不斷的卷積操作來獲得更小尺寸的特征,最后加一個Sigmod函數(shù)將輸出數(shù)據(jù)歸一化到0和1,然后根據(jù)閾值輸 出0或1作為判別結果。
圖8 判別網(wǎng)絡的網(wǎng)絡結構Fig.8 Network structure of discriminator
3.1.1 數(shù)據(jù)集
為了提高分割結果的準確率,借助視頻平臺抓取了3075張藍藻圖像制作了數(shù)據(jù)集。數(shù)據(jù)集分為3部分,包括訓練集、驗證集和測試集。訓練集用于訓練網(wǎng)絡模型,是最主要的組成部分,占數(shù)據(jù)集的80%,共2 460張;驗證集用于訓練階段測試網(wǎng)絡當前的準確率,以監(jiān)督網(wǎng)絡的訓練過程并決定是否要終止訓練,占10%,共307張。測試集用于對訓練結果進行評估,占10%,共308張。數(shù)據(jù)集中的每一張圖像都對應有一張手工標注的Label,圖像中的白色區(qū)域?qū){藻部分,黑色區(qū)域?qū)撬{藻部分。
圖9 藍藻圖像與手工標注的分割結果Fig.9 Segmentation results of blue-green alga image and manual annotation
3.1.2 評價指標
圖像語義分割即對圖像進行像素級的分類。本文選取的評價指標借鑒自文件檢索,即以每個像素點為基本單位,計算像素點分類結果的準確率、召回率和F1分數(shù)(F1),這也是大多數(shù)圖像分割算法引用的指標。按前文表述,每張藍藻圖像對應一張真值分割結果(Label),以及一張G生成的分割結果(Fake),若以數(shù)字1表示該像素點為藍藻,數(shù)字0表示為非藍藻,則任意像素點必屬于圖10中四種情況之一。
圖10 像素點所屬類別示意圖Fig.10 Schematic diagram of category of pixels
精確率(Precision,P)如式(6)所示,表示分割結果中被正確分類為藍藻的像素點數(shù)占所有被分類為藍藻的像素點數(shù)的比例:
召回率(Recall,R)如式(7)所示,表示分割結果中被正確分類為藍藻的像素點數(shù)占總藍藻像素點數(shù)的比例,即有多少藍藻像素點被找到并正確分類:
由于精確率和召回率是互相影響的,理想情況下肯定是希望兩者都高,但是一般情況下精確率高、召回率就低,精確率低、召回率就高。為更好地比較網(wǎng)絡性能,引入F1:
其中:F1是精確率和召回率的調(diào)和均值,兼顧了精確率和召回率的查全和查準的作用,相當于精確率和召回率的綜合評價指標。
本文基于谷歌公司的TensorFlow深度學習框架實現(xiàn)了第2章構造的DGAN。
L1(G)表明了生成樣本Fake與真實樣本Label的區(qū)別程度,L1(G)越低表示Fake與Label越相似。深度生成式對抗網(wǎng)絡的訓練也就是最小化L1(G)的過程,訓練過程遵循以下策略(注意G和D共同構成DGAN,固定G(D)指BP訓練時G(D)僅進行前向傳播,不進行后向傳播,也就是不會更新參數(shù)):
1)固定G,用Label訓練D,訓練n個epoch(訓練樣本集的每個樣本訓練一次);
2)用G生成Fake,用Fake訓練D,訓練n個epoch;
3)固定D,用D的輸出作為圖像的Label,用D的損失訓練 G,訓練n個epoch;
4)重復1)~3),直到G可以生成以假亂真的目標圖像。
本文選取 Adam(Adaptive Moment Estimation)[15]的梯度下降方式來尋求最優(yōu)解,參照文中結論和神經(jīng)網(wǎng)絡的取值方法,初始學習率(Learning Rate,LR)取值0.0002,動量項取值0.5。在初始賦值方面(即待訓練的參數(shù)賦初始值),卷積層和反卷積層的賦值滿足均值為0、標準差為0.01的正態(tài)分布。
由攝像頭采集到的藍藻圖像的像素尺寸為1 920×1 080和1080×720,但DGAN中卷積層的卷積核的長寬一致,且步長為2,即要求輸入特征的像素尺寸可以被2整除,故藍藻圖像在輸入網(wǎng)絡前會被預處理為像素尺寸為512×512的圖像,再經(jīng)過減均值等操作獲得滿足網(wǎng)絡輸入要求的圖像樣本。受到圖形處理器(Graphics Processing Unit,GPU)顯存的限制,每次輸入一張藍藻圖像,即batch設為1,在經(jīng)過200個epoch的訓練后,網(wǎng)絡的L1(G)如圖11所示。圖11中縱坐標為L1(G)的計算結果,值越低表示生成的Fake與Label越相似。
由式(4)可知,L1(G)描述了分割結果與真實結果的差距。由于藍藻分割是二分類問題(1表示藍藻,0表示非藍藻),則當所有的像素點分類錯誤時L1(G)=1,因此L1(G)可以被理解為像素點的分類錯誤率。由圖11可知,L1(G)在經(jīng)過訓練后逐漸穩(wěn)定并小于0.1,說明整體錯誤率已經(jīng)小于10%,生成的分割結果與真實分割結果已經(jīng)非常相似,故本文認為此次的訓練結果是有效的。
基于迭代的閾值分割算法是非常經(jīng)典的傳統(tǒng)圖像分割算法;FCNNet作為深度神經(jīng)網(wǎng)絡完成圖像語義分割的開山之作,具有里程碑式的意義(現(xiàn)有的絕大多數(shù)神經(jīng)網(wǎng)絡分割算法都是基于FCN的結構,Deeplab是,本文設計的DGAN中的生成網(wǎng)絡G也是,所以作為對比算法);Deeplab在2016年獲得過PASCAL VOC Challenge在語義分割領域的最好成績,是現(xiàn)有最好的語義分割算法之一(Deeplab可以被理解為FCNNet的加強版)。本文設計的DGAN可以被理解為結合了GAN思想的FCN,故本文選取這3種算法作為對比算法。
本文將上述3種對比算法應用到藍藻分割領域,本文設計的DGAN與對比算法在測試集上的結果比較如表1所示。
圖11 訓練過程中的L1(G)Fig.11 L1(G)in the course of training
表1 不同算法的評價指標比較Tab.1 Evaluation index comparison of different algorithms
從表1中可以看出,在精確率、召回率和F1上,本文設計的DGAN均大幅領先于基于迭代的閾值分割算法。相比FCNNet和Deeplab,DGAN的精確率分別提升了6.3個百分點和3.89個百分點,召回率分別提升了9.49個百分點和4.78個百分點,F(xiàn)1分別提升了0.0793和0.0433。提升效果非常明顯,取得了更好的分割結果。
由于藍藻監(jiān)控需要實時性,即需要盡可能快地分割出藍藻,故分割速度也是一個重要指標。本文實驗所用機器配置為英特爾 i7CPU,64 GB內(nèi)存以及 Nvidia GTX TITAN X顯卡(12 GB顯存),基于TensorFlow平臺復現(xiàn)了以上算法,并使用GPU加速(cuda版本8.0),各算法分割速度的比較如表2所示(分割速度受計算機性能影響,若使用性能較低的顯卡或只使用CPU會使分割速度變慢,但各算法所需時間的比例不變)。
表2 不同算法分割速度比較Tab.2 Segmentation speed comparison of different algorithms
由表2可知,由于FCNNet的網(wǎng)絡結構最簡單(沒有反卷積層),故其處理速度最快,Deeplab在FCNNet的基礎上加入了CRF進行二次判斷,導致其分割速度慢了很多。DGAN的分割速度略慢于FCNNet,遠快于Deeplab,但本文的分割結果在各項指標上均優(yōu)于FCNNet,提升了超過6個百分點。綜合來看,本文算法更具有實際優(yōu)勢。
本文設計的DGAN除了在精確率、召回率和F1等指標上有所提升外,還避免了FCNNet和Deeplab由于自身網(wǎng)絡結構造成的缺乏輪廓細節(jié)、存在大量孔洞和容易大面積錯識、漏識的問題。本文選取了部分測試集上的分割結果,從分割細節(jié)上與3.3節(jié)描述的三種對比算法進行比較與分析。
比較圖12中不同算法的分割結果:基于迭代的閾值分割算法在3幅圖中均得到了最差的分割結果,其只是簡單地根據(jù)圖像的顏色信息作分割,不適合藍藻這種顏色隨濃度和時間變化的目標(濃度越大,顏色越深;生長期的藍藻呈綠色,成熟后開始偏黃;閾值分割算法為了適應這些問題,迭代得到的閾值范圍很大,導致其無法獲得準確的分割結果)。
圖12 不同算法分割結果的比較Fig.12 Segmentation result comparison of different algorithms
相比閾值分割算法,基于深度神經(jīng)網(wǎng)絡的FCNNet和Deeplab明顯取得了更好的分割結果,但也存在各自的問題:從圖12中的第一張圖中可以看出FCNNet的分割結果缺乏輪廓細節(jié),Deeplab存在局部區(qū)域的錯分問題;第二張圖中FCNNet的分割結果存在大量的孔洞,而Deeplab的孔洞明顯較少,取得了較好的分割結果;第三張圖中FCNNet的分割結果較好,但Deeplab出現(xiàn)了大面積的錯分,并且在3張圖中Deeplab均未有效分割出時間戳和地址戳。
本文借助GAN思想設計的DGAN很好地解決了上述幾個問題:在提升精確率、召回率和F1指標的基礎上,有效地避免了FCNNet缺乏輪廓細節(jié),以及存在大量孔洞的問題,同時避免了Deeplab由于借助周圍像素點而導致無法對小面積目標正確分割的問題。從圖12可以看出,DGAN的分割結果具有更清晰的輪廓細節(jié),同時很好地分割出了時間戳和地址戳這些影響因素,沒有出現(xiàn)大面積的分割錯誤,得到了更準確、更穩(wěn)定的分割結果,尤其適合于分割藍藻這樣的沒有固定輪廓并且濃度分布不均勻(導致內(nèi)部顏色差異比較大)的目標。
本文基于生成式對抗網(wǎng)絡的思想設計了一個新的網(wǎng)絡結構完成了基于RGB圖像的藍藻語義分割,稱為深度生成式對抗網(wǎng)絡(DGAN)。相比閾值分割算法與FCNNet、Deeplab等其他基于深度神經(jīng)網(wǎng)絡的圖像分割算法,DGAN獲得了更加精準的分割結果,在準確率、召回率及F1等指標上均有一定程度的提升,分割結果具有更清晰的輪廓感和細節(jié)表現(xiàn),更少孔洞,更不容易出現(xiàn)大面積分割錯誤等優(yōu)點。
礙于藍藻災情監(jiān)控問題對分割速度的要求,也為了更加公平地與FCNNet(16層)和Deeplab(16層FCNNet+CRF)作比較,本文構建的DGAN的深度也大致相同,其中生成網(wǎng)絡(G)12層,判別網(wǎng)絡(D)5層(一定范圍內(nèi),深度神經(jīng)網(wǎng)絡的準確率與層數(shù)呈正相關,分割速度與層數(shù)呈負相關)。殘差網(wǎng)絡將網(wǎng)絡深度擴展到152層,并取得了更高的準確率,以殘差網(wǎng)絡為基礎的全卷積神經(jīng)網(wǎng)絡也取得了比FCNNet更高的分割準確率。在后續(xù)的研究中,將使用更深的基礎網(wǎng)絡如GooLenet[10](22 層)和 ResNet[13](152 層)等構建 DGAN,以探究網(wǎng)絡深度對DGAN的影響程度。