王勝春,陳 陽
湖南師范大學 信息科學與工程學院,長沙 410081
地面氣象測報是氣象工作的基礎項目,其中地基云狀的觀測尤為重要。連續地觀察和測定云狀的變化,對于分析天氣轉變、科學研究和氣象服務有著重要意義。但是,目前地基云狀的觀測仍然存在著許多挑戰。首先,不同云狀之間有很多相同的特征,以蔽光高層云和雨層云為例,兩種云狀非常相似,業余人員甚至無法辨認。其次,云存在著空間分布的不均勻性和隨時間變化的脈動性,按照云的高度、結構特點和外形特征,云可分為三族,十屬,二十九類,類別繁雜,變化多端。現在氣象站一般采用全天空成像儀拍攝云狀,云狀的精標主要依賴經驗豐富的觀測員。但是,人工觀測存在情緒干擾和主觀意識,且很難形成一個統一的標準。因此,地基云狀的自動化識別是氣象工作的一個重要方向,部署深度學習算法、研發自動化觀測儀器代替甚至超過人工觀測是氣象工作的一個重要目標。
地基云狀的觀測和識別作為氣象領域的一個熱點問題,有很多學者對其進行了研究,特別是應用計算機算法對地基云狀進行識別已經成為了研究趨勢。Alireza等[1]在形態的基礎上將云按照低云、中云、高云進一步做了劃分,并使用了神經網絡和支持向量機算法對全天空地面圖像進行云自動分類,但其使用的數據集圖片只有250張,模型缺乏一定的泛化能力。魯高宇等[2]使用了一種融合局部特征和全局特征的云圖特征提取算法,并設計了基于K均值算法的神經網絡模型,有效地提高了云圖識別的精度,但是其對于一張圖片中的多類別云狀識別較差。李晨溪等[3]通過提取ESS模型標度特征進行典型地基云狀識別,提取了云圖的標度指數特征,并選用了支持向量機作為分類器對5種云圖進行分類,測試樣本分類準確率達到了90%,但是其使用的分類算法不同于目標檢測算法,只能識別云狀的類別,云狀的位置、面積等關鍵因素無從得知。
目標檢測[4-6]作為深度學習的一個重要分支,發展非常迅速,熱度一直很高。目前,基于深度學習的目標檢測主要有兩類主流的算法。第一類算法準確率較高。2015年發布的Fast R-CNN[7],使用了一個卷積神經網絡作為圖像特征提取器,并使用了Smooth L1 Loss作為邊界框損失函數,但是網絡的選擇性搜索(selective search)模塊速度較慢。之后的Faster R-CNN[8]使用了區域候選網絡(RPN)生成的待檢測區域,檢測時間從2 s縮減到了10 ms,mAP也提升了3.2%。再之后的Mask R-CNN[9]是對Faster R-CNN的直接擴展,精度高于后者,而且增加了實例分割的分支。另一類算法速度較快。2015年發表的YOLOv1[10](you only look once),它將目標位置檢測與目標分類這兩個階段合二為一,速度超過了之前的算法,但由于其特征提取器與損失函數存在缺陷,所以定位不夠準確。針對YOLO的不足,Liu等[11]提出的SSD(single shot multibox detector)使用了分層特征提取器,速度依然很快且對小目標的檢測效果更好。2018年Redmon等[12]提出YOLOv3算法,進一步提升了速度和準確度,在coco數據集上速度能達到30 frame/s,它的檢測速度比Fast R-CNN快100倍。
目標檢測算法中的邊界框損失函數也一直在迭代和發展。2016年提出的IoU[13](intersection over union)將邊界框四個點的位置信息看成一個整體進行訓練與回歸,但是在預測框和目標框不相交時無法繼續優化。針對IoU的不足,Rezatofighi等[14]在2019年提出了GIoU(generalized IoU loss)具有尺度不變性,使YOLOv1準確率漲了2個百分點,但是當目標框包含預測框時無法區別兩者的位置關系。在2020年的AAAI大會上,Zheng等[15]提出了DIoU loss(distance IoU loss),優化了兩個框之間的距離,收斂更快,回歸更準確。
本文改進了目標檢測算法中的邊界框損失函數,提出了新的損失函數UIoU(unify IoU loss)。因為YOLOv3速度較快、精度較高,方便應用于工業生產,很好地迎合了云狀識別中實時性和效率高的要求,所以本文使用了UIoU-YOLOv3算法對地基云狀進行識別。訓練和測試數據集來源于攝像頭實時拍攝的高清全天空地基云圖數據,對數據進行了篩選和標注。對三組實驗進行了討論和驗證:先在原YOLOv3算法上進行實驗,再將邊界框回歸損失函數替換成DIoU,最后使用UIoUYOLOv3進行實驗。實驗結果表明,改進后的YOLOv3算法在地基云狀識別中有了明顯的提升。
YOLOv3的特征提取網絡Darknet-53使用了全卷積網絡(fully convolutional network)[16],包含大量大小為3×3和1×1的卷積核,其中,3×3的卷積增加channel,而1×1的卷積在于壓縮3×3卷積后的特征表示。其次,Darknet-53借鑒了殘差網絡ResNet[17]的思想在網絡中融入了1,2,8,8,4個殘差模塊(Residual Block),網絡結構可以更深且避免了梯度消失等問題。
另外,網絡使用了類似于特征金字塔網絡(feature pyramid netword)[18]的概念從3個不同的尺度(13×13、26×26、52×52)提取特征,將早期layer的特征與深層layer的特征融合在了一起,因此它在檢測大目標和小目標方面都有很好的性能。小尺度的特征圖感受野更大,提供了較深的語義信息,大尺度的特征圖則提供了較細粒度的目標信息。YOLOv3通過向上采樣調整了更深一層的特征圖,不同尺度的特征圖將具有相同的尺寸,并將9組anchor box(先驗框)按面積從小到大的順序分配給了三個尺度的特征圖,再對每個anchor box進行置信度回歸,最后保留大于置信度閾值的預測框。YOLOv3的網絡結構如圖1所示。

圖1 YOLOv3網絡結構Fig.1 Network structure of YOLOv3
YOLOv3的損失函數由三部分組成:置信度損失項、分類損失項和邊界框坐標損失項。其中,置信度損失公式如下:

公式包括兩部分:預測框內有目標物和沒有目標物。公式中融入了交叉熵,表示預測框內含有真實目標的概率值,表示真實值,λnoobj是一個權重值,用來控制沒有物體時損失的貢獻量。
分類損失公式如下:

坐標(coord)損失公式如下:

公式(3)為中心坐標損失,公式(4)為寬高坐標損失。λcoord表示坐標損失權重,用來協調不同尺度的先驗框對損失的貢獻值。整個損失函數表示:第[i][j]個先驗框負責檢測某一個目標,以這個先驗框為基準回歸進行尺度變換,然后產生bounding box,使用均方誤差(MSE)將bounding box與標注框比較計算得到中心和寬高坐標誤差。但以MSE誤差作為損失函數存在以下缺點:誤差越小并不代表兩個框的重合度越高;損失對目標框尺度太敏感,沒有一個可以衡量其尺度的參數,不具有尺度不變性。公式(4)中的開平方處理就是為了緩解目標框尺度對損失產生的影響。
目標定位是目標檢測的一個關鍵任務,邊界框回歸損失函數是目標定位的一個關鍵因素,直接影響到回歸的準確率。目前最常使用的邊界框損失函數是IoU Loss,公式如下:

其中,B代表預測框,Bgt代表目標框。從公式來看,如果B和Bgt沒有交集,分子為0,損失函數一直等于1。所以IoU損失僅在邊界框有重疊的情況下起作用。DIoU解決了這一問題,DIoU的圖像如圖2所示,DIoU的計算見公式(6):

圖2 DIoUFig.2 DIoU

式中,bgt表示目標框中心點,b表示預測框中心點,ρ表示兩點之間的距離,灰色虛線框代表覆蓋目標框與預測框的最小框,c表示最小框的對角線長度。在兩個框的中心點距離不斷縮減的過程中,能夠使得邊界框的收斂速度更快。當兩個框不重疊的時候,預測框會不斷往目標框的方向靠近,直到兩個框的中心點重合;在兩個框存在包含關系的情況下邊界框回歸速度也很快。
但是DIoU沒有考慮到預測框的長寬比和目標框之間長寬比的一致性,容易出現“偽對齊”的情況。基于這一點,本文提出了新的邊界框回歸損失函數UIoU(Unify IoU Loss):

UIoU比DIoU多了兩個參數和α和v,其中α是用來平衡比例的系數,v將預測框和目標框的長寬比融入sigmoid函數的變量中,一方面可以對值閾值化以防過度震蕩,另一方面用來衡量兩個框之間長寬比的一致性。因為增加了這個懲罰項,預測框會不斷地變換長寬比,盡可能與目標框一致,然后往目標框的方向移動。α和v的公式如下:

其中,w1、w代表目標框和預測框的長,h1、h代表目標框和預測框的寬。UIoU求導公式如下:

預測框在不同位置下三個損失函數的數值及其變化情況如圖3所示。

圖3 IoU、DIoU與UIoU數值變化Fig.3 Variation of IoU,DIoU and UIoU
圖3中黑色框代表預測框,紅色框代表真實框。圖3(a),當兩個框沒有重疊時,IoU損失為0,因為DIoU和UIoU分別增加了中心點距離和長寬比的懲罰項,所以兩者損失不為0。圖3(b)和圖3(c),真實框完全包含預測框導致IoU沒有變化。圖3(d),兩個框的中心點重合,DIoU退化成IoU,因為兩個框的長寬比不一致,UIoU可以繼續發揮作用,其收斂的精度更高。
先驗框的大小直接影響算法的回歸速度和準確率。YOLOv3根據coco數據集設定了9種先驗框的尺寸,但是考慮到地基云狀數據集的目標尺寸和coco數據集差異較大,需要重新設計先驗框尺寸。不同于依賴人的先驗知識設定尺寸,通過使用K-means[19-20]聚類算法對地基云狀數據集中所有的目標框進行聚類,產生不同數量的先驗框,可以使錨框與目標邊界框更加匹配,從而提高檢測速度與精度。不同聚類數目對應的平均交并比和歸一化后的先驗框尺寸分布如圖4和圖5所示。

圖4 聚類數目與平均交并比Fig.4 Number of clustering and average IoU

圖5 先驗框尺寸分布Fig.5 Distribution of anchor box
考慮到計算效率與準確率的平衡,同時為了使產生的先驗錨框平均分配到3個預測尺度,選擇產生9個先驗錨框。在圖5中,紅色三角形為聚類尺寸,將歸一化數值進行還原,最終確定的先驗錨框尺寸有以下9組:(16,32)、(32,20)、(23,60)、(52,39)、(40,67)、(55,113)、(116,143)、(245,262)、(105,55)。
本文使用的數據集來自高清攝像頭實時拍攝的1 254張地基云狀魚眼圖,按照1比9的比例劃分測試集和訓練集。數據集的類別是3種云狀,分別是Cidens(密卷云)、Cuhum(淡積云)、Actra(透光高積云)。圖6為云狀數據集樣例。

圖6 云狀數據集樣例Fig.6 Sample of nephogram datasets
數據集采用labelImg標注并制作成VOC格式方便訓練。標注工作由人工執行,如圖7所示。使用labelImg將魚眼圖中的云框出來并打上對應的云狀標簽,保存之后就可以在路徑中生成對應的xml文件,文件中包含標注框的類別、具體坐標、圖片名稱等信息。

圖7 labelImg標注Fig.7 Using labelImg to annotate
本文中,模型訓練與測試在Ubuntu18.04環境下進行,使用NVIDIA GeForce GTX 1080Ti顯卡。采用Darknet[21]框架進行訓練,網絡的訓練參數設置如下:采用Multistep學習策略,初始學習率為0.001,max_batchs設為12 000,decay為0.000 5,訓練時batch size為64,使用SGD優化算法,momentum為0.9。實驗采用AP50和mAP50作為評價指標,指標的計算需要用到準確率Precision和召回率Recall兩個概念:

TP(true positives):數據集中實際被檢測到的目標個數。
FP(false positives):檢測模型誤檢測的目標個數。
FN(false negatives):檢測模型漏檢測的目標個數。
以Recall為橫軸、Precision為縱軸構建P-R圖,AP50的計算公式如下:
即AP50表示IoU閾值為0.5時P-R曲線與坐標軸所圍成的面積。同時,將全部類別目標的平均精度mAP50表示為:

其中,N表示目標類別數,AP50i表示IoU閾值為0.5時每個目標類別的平均精度。
YOLOv3和UIoU-YOLOv3的Avg IOU對比曲線如圖8所示,地基云狀數據集訓練過程中UIoU-YOLOv3的損失變化曲線如圖9所示。

圖8 云狀數據集Avg IOU曲線對比Fig.8 Avg IOU curve comparison of nephogram datasets

圖9 云狀數據集UIoU-YOLOv3損失變化曲線Fig.9 UIoU-YOLOv3 loss curve of nephogram datasets
PASCAL VOC數據集作為標準數據集,不僅能衡量目標檢測算法的分類識別能力,而且促進了目標檢測相關領域的發展。為驗證本文模型的準確性,在VOC2007上對模型進行了訓練和評估,其中訓練集和測試集分別包含7 172和1 794張圖片。與云狀實驗在同一實驗環境下進行訓練與測試,因為數據集較大,所以max_batchs修改為50 200。Avg IOU對比曲線和損失變化曲線如圖10、11所示。

圖10 VOC數據集Avg IOU曲線對比Fig.10 Avg IOU curve comparison of VOC datasets
3種模型在云狀數據集和VOC數據集上的AP50和mAP50數值分別見表1和表2。
如表1所示,UIoU-YOLOv3在云狀數據集上的mAP50數值分別較YOLOv3和DIoU-YOLOv3提升了2.56個百分點和1.25個百分點。如表2所示,在VOC2007數據集上,提升數值為3.4個百分點和2.08個百分點。圖9和圖11是UIoU-YOLOv3在兩個數據集上的訓練損失曲線,整體上呈下降趨勢,最后趨于穩定,說明神經網絡訓練效果較好。Avg IOU表示訓練過程中預測框與標注框的平均交并比,可以很好地反映預測框的回歸準確率,它的期望數值為1。通過分析圖9和圖11兩個數據集上的Avg IOU對比曲線可知:UIoU-YOLOv3相比于YOLOv3在訓練時的Avg IOU曲線震蕩范圍更小、上升得更快更穩定,最后回歸的數值也更高。因此,UIoU-YOLOv3訓練時預測框與目標框的重合度更高,邊界框回歸更加準確。綜上所述,在地基云狀數據集和VOC數據集上,本文提出的UIoU邊界框損失函數是一種有效提升模型性能的方案。

圖11 VOC數據集UIoU-YOLOv3損失變化曲線Fig.11 UIoU-YOLOv3 loss curve of VOC datasets

表1 云狀數據集各類別AP50和mAP50Table 1 AP50 and mAP50 of nephogram datasets%

表2 VOC數據集mAP50Table 2 mAP50 of VOC datasets
此外,為了更加直觀地感受不同算法之間的檢測區別,本文選取了一些檢測圖像進行對比分析,如圖12。

圖12 YOLOv3和UIoU-YOLOv3檢測結果對比圖Fig.12 Comparison diagram of YOLOv3 and UIoU-YOLOv3 detection results
對于圖12(a)、(b)中大面積的云狀,YOLOv3僅回歸出了一個檢測框,容易出現漏檢的錯誤,而UIoUYOLOv3回歸出了多個分類準確的檢測框,框出的目標物范圍更大更準確;對于圖12(c)、(d)中小塊的云狀,UIoU-YOLOv3可以識別出YOLOv3識別不出的目標物,檢測效果更佳。
本文在DIoU的基礎上提出了新的邊界框回歸損失函數UIoU,并將其應用于YOLOv3上,代替原算法的邊界框MSE損失;使用K-means聚類算法對云狀數據集中所有已標注過的目標邊界框進行聚類,重新設計了先驗框尺寸。經過實驗驗證,改進后的YOLOv3算法在精度上相比于原算法確有提升,而且比較穩定。
本文提出的UIoU損失函數只在YOLOv3上進行了可行性實驗驗證,下一步將在其他目標檢測算法上進行應用與分析。此外,對模型結構進行探索與調整也是本文的下一步研究方向。