王榆鋒,李大海
江西理工大學 信息工程學院,江西 贛州 341000
血細胞檢測是一種通過專業儀器對血液中細胞成分進行分析的技術。在醫學上將在血液中循環的細胞分為三類:即白細胞、紅細胞和血小板[1]。當這三類細胞計數結果出現異常提高或降低時,人體可能已經罹患某些疾病。對于這三類細胞的準確高效的識別可以提供病人總體健康狀況的概覽[2],因此血細胞檢測已經成為醫學領域中最為常見的血液檢驗項目之一。目前血細胞檢測主要分為兩類:早期主要通過傳統的圖像處理技術,最經典的莫過于先手工制片染色,再通過顯微鏡進行人工觀察分類[3],該方法要求檢驗人員具備關于細胞形態學大量的基礎知識,并通過不斷學習和反復鍛煉,熟練掌握對形態的觀察和辨別能力。由于顯微圖像數據量巨大并且血細胞形態的多樣性,導致傳統的血細胞檢測方法越來越無法滿足檢測人員在血細胞分析中遇到的各種復雜問題。近年來,隨著諸多基于深度學習的高效目標檢測算法被陸續提出,其也被廣泛地應用于血細胞檢測任務。目前基于深度學習的目標檢測算法大致可分為兩大類。一是使用候選區域網絡(RPN)來提取候選目標信息的二階段(two-stage)檢測算法如R-CNN[4]、Faster-R-CNN[5]、Mask-R-CNN[6]等。另一類是YOLO系列[7-9]、SSD[10]和RetinaNet[11]等單階段(one-stage)目標檢測算法。
二階段目標檢測算法主要包含骨干網、區域建議網絡和檢測頭三部分[12]。其中區域建議網絡用于生成包含感興趣對象的大量候選區域建議,并判斷屬于前景或背景,接著使用邊界框回歸函數修正錨點位置以獲得精確的區域建議。最接近上述技術中,劉樹杰等[13]提出使用Faster R-CNN對紅細胞進行檢測和計數,該方法可以對孤立的紅細胞進行有效的識別和精準定位。但由于Faster R-CNN使用區域候選網絡(RPN)來提取感興趣目標的信息,導致檢測器需要消耗大量計算資源,檢測速率低下。同時,該方法對圖像中出現重疊度及密度較高的區域的漏檢率極高,使整體的平均檢測準確率不高。
單階段(one-stage)目標檢測算法能夠通過對輸入圖像進行直接應用,并獲取相對于預定錨點框的輸出類別和相應的邊界框定位,直接將目標檢測視作回歸問題求解。而YOLO系列作為近幾年實用性較強的單階段算法,主要由用于特征提取的骨干網絡(Backbone)、用于特征融合的頸部(Neck)和進行分類和回歸操作的檢測頭(Head)三部分組成[14]。其中YOLOv4[15]作為代表性單階段算法,其在YOLOv3的基礎上,在骨干網絡中融合CSPNet[16]算法,提高檢測速率的同時保證檢測精度,在其頸部改用路徑聚合網絡PANet[17]改善淺層特征信息丟失的問題。最接近上述技術中,張冬冬等[18]提出一種基于YOLOv3和密度估計的細胞計數法,通過對YOLOv3的骨干網絡進行修改,使用單個網絡完成整個檢測的方法。然而上述現有的YOLO系列算法雖能有效提高目標檢測的速率,但整體網絡層次簡單,骨干網絡(Backbone)部分仍存在特征提取能力不足;另外頸部(Neck)均采用卷積與上采樣的方式結合,不能有效融合高質量上下文特征信息,導致整體的檢測準確率不高。
為解決上述各類目標檢測方法應用于血細胞檢測的實時性不足和精度偏低的問題,本文提出一種基于YOLO框架的高效血細胞檢測算法,在傳統的YOLO算法“Backbone+Neck+Head”框架結構的基礎上,本文所提方法的創新點在于:
(1)為骨干網絡Backbone部分構建多尺度殘差模塊(MRM),用于提高對網絡的特征信息利用率,同時解決骨干網絡中較深層網絡丟失淺層存在的邊緣與細節信息的問題。
(2)為頸部Neck設計了一種名為Attention Reseau的注意力結構嵌入模型,用于融合更多高質量的上下層語義特征信息,以大幅度提高檢測準確率。
(3)針對小目標檢測能力的不足,采用了focal-loss損失函數代替YOLO系列中原有的損失交叉熵函數,通過給正負樣本加上權重值,用于控制正負樣本對總損失函數值的共享權重,使得模型在訓練過程中更專注于難分的樣本,進而解決樣本類別不均衡的問題。
空間金字塔模塊是一種融合深淺層特征信息做復雜任務的有效模塊,其利用空間金字塔池化捕獲多尺度語義信息。目前,各類基于空間金字塔的改進模塊已被廣泛應用于如目標檢測、語義分割等各類計算機視覺任務[19]。Zhao等人[20]提出PSPNet網絡,運用空間金字塔池化代替簡單卷積層堆積的策略,通過聚合不同區域的上下文語義信息,來提高獲取不同子區域全局信息的能力。Chen等人[21]基于DeepLab網絡提出DeepLab-V2,采用擴張卷積與空間金字塔池化相結合的方式,在不增加參數的同時擴大了感受野。由于金字塔池化作為一種下采樣操作仍存在一定缺陷,容易丟失小型目標的特征信息,因此文獻[22]提出DeepLab-V3網絡,舍棄池化操作,以并行的方式將4個不同擴張率的擴張卷積并聯,可以有效獲取多尺度上下文圖像信息,提高模型性能。但DeepLab-V3使用的擴張卷積的擴張率過大,直接遷移應用容易導致卷積嚴重稀疏化,提取到的特征缺少邊緣與細節信息。基于以上分析,本文設計一種多尺度殘差模塊(MRM)嵌入YOLO框架的骨干網絡中,該模塊將多尺度擴張卷積與殘差塊相加混合,先通過并聯多個合適擴張率的擴張卷積,用于獲取上下文信息的同時減小擴張卷積稀疏化,再與殘差模塊相加融合,避免丟失淺層網絡的細節信息。
注意力門控機制通常用于圖像分析、機器翻譯等分類任務。最初注意力門控機制的工作是通過輸入圖像的梯度來解釋輸出類的權重分布進而探索注意力圖。目前,可訓練的注意力模塊分為硬注意力和軟注意力。其中某些硬注意力機制[23]包括了迭代區域建議和剪切區域,通常是不可微的,并依賴使用強化學習方法進行參數更新,這導致這類模型訓練非常困難。相反,軟注意力是概率性的,使用的是標準的反向傳播方法進行參數更新。最近嵌入了軟注意力模塊的網絡模型,通常用于目標檢測與圖像分類。如Hu等人[24]提出SE-Net網絡,以通道強調方式聚集更多重要特征維度信息,該方法在2017年的ILSVRC圖像分類挑戰中獲得了最佳表現。Jetley等人[25]提出自我注意力(self-attention)技術用來消除對外部門控信息的依賴,進而通過類專用池化,使得圖像分類性能更加準確,同時提高魯棒性。蔣镕圻等人[14]通過研究注意力模塊嵌入位置,證明了在目標檢測任務,嵌入注意力模塊同樣能取得良好的性能提升。本文以文獻[25]的自我注意力結構為基礎對注意力門控結構進行改進,添加了一種網格技術(Reseau)進一步加強模型自適應特征學習的能力。
本文提出了一種基于YOLO框架的新網絡結構(命名為YOLO-Att),結構如圖1所示。該網絡的Backbone采用Darknet-53[26]+MRM,圖中Res1、Res2、Res8、Res8和Res4是Darknet-53里面的5個殘差網絡塊,但一系列的殘差模塊中的多次卷積操作可能導致深層網絡的目標細節與邊緣信息消失,進而影響目標定位,因此本文為后三個殘差模塊增加多尺度殘差模塊(MRM),能夠加強特征的多尺度表達,提高網絡對血細胞的檢測敏感度;再者,在頸部(Neck)上設計Attention Reseau結構用于獲取更多上下層高效的語義特征信息,以提高目標檢測算法的準確率。同時采用Focal loss損失函數改進原有的損失函數,通過提高正負樣本的權重值,解決樣本類別不均衡的同時加快模型收斂。模型最終獲得三種不同尺度的檢測輸出,分別為y1(13×13×255)、y2(26×26×255)、y3(52×52×255)。

圖1 YOLO-Att結構圖Fig.1 YOLO-Att structure
在目標識別領域中,識別物體存在大小多樣性,若使用單一尺寸卷積進行圖像特征提取,隨著網絡層數增加,可能導致高層網絡中的小尺寸物體或不顯著物體的特征數量極少,語義信息不夠豐富,進而影響整體識別精度。空間金字塔結構通過多個不同感受野大小的擴張卷積將任意尺寸的特征映射進行多個尺度的卷積操作,再拼接成一個固定大小的特征向量,進而識別不同大小的物體。
基于以上分析,本文設計一種多尺度殘差模塊嵌入Backbone部分,該模塊通過將三個不同擴張率的擴張卷積添加到殘差模塊后以獲得更多有效的特征信息,結構如圖2所示。輸入特征先將1×1的普通卷積與三個不同擴張率(2,3,6)的擴張卷積并聯,其中普通卷積主要用于提取小尺寸細胞的特征信息,擴張卷積負責提取大型與中型尺寸細胞的特征信息。接著將經所有卷積操作輸出的特征映射進行拼接處理,以獲取多尺度特征信息,所有拼接操作的卷積運算必須保證通道數相同。最后在與殘差模塊進行融合,用于提升語義表達能力的同時加速梯度反向傳播[19]。圖3為普通卷積與不同尺度擴張卷積用于捕獲圖片中的不同尺寸細胞的特征信息,可以看出不同卷積操作能夠有效提取圖像中不同尺寸的細胞,并將提取的多尺度特征信息聚合。與此同時,該模塊在聚合多尺度信息時不容易喪失分辨率,保證檢測速度的同時提高對各個尺度細胞的檢測精度,尤其是小尺寸血小板的檢測精度。

圖2 多尺度殘差模塊(MRM)Fig.2 Multi-scale residuals module(MRM)

圖3 不同卷積率效果圖Fig.3 Renderings of different convolution rates
YOLO系列的頸部(Neck)通過采用簡單卷積與上采樣操作結合,用于捕獲足夠大的接受域,進而獲得語義上下文信息[27]。然而,對圖像中顯示出形狀變化的細胞,簡單卷積與上采樣操作不能有效減少其假陽性預測,導致整體檢測準確率不高。本文設計了一種嵌入式注意力門控機制(命名為Attention Reseau)來提高目標檢測的準確率。該注意力門控機制能通過自適應特征學習提高獲取上下文語義信息的質量,對相關特征屬性進行強調,同時能夠逐步抑制無關背景區域的特征響應,進而提高檢測準確性[27]。Attention Reseau的結構如圖4所示。

圖4 Attention Reseau結構圖Fig.4 Structure of Attention Reseau
Attention Reseau模塊的輸入為上層特征映射xl∈RFl(其中Fl表示對應于第l層特征映射的數量)與下層特征映射gj∈RFg,輸出為輸入的特征映射與注意力系數的元素級乘法Xl=xl?aj,其中特征注意力系數ai∈[0,1],用于識別顯著的圖像區域和特征響應,只保留與特定任務相關的激活特征,如圖中特征映射被染色部分所示。受文獻[28]啟發,在多個語義類的情況下,本文使用多維注意系數來設計學習模塊,使得整個Attention Reseau學會了專注于目標結構的某個子集。下層特征映射gj用于每個像素點i來確定焦點區域,該特征映射包含大量上下文信息用于修剪較低級別的特征響應,進而使Attention Reseau在圖像分類中取得良好的表現。完整的注意力公式如下:

傳統的YOLO系列應用的損失函數是由位置損失、置信度損失以及分類損失三個函數相加而成,其中分類和置信度預測中,采用二元交叉熵損失函數進行分類和置信度的預測,同時使用獨立logistic替換softmax分類[30]。在目標檢測任務中,一張圖片會生成大量的候選區域,但是通常只有很少的部分是包含檢測目標,此種現象容易導致樣本類別不均衡,即負樣本數量過多,占總的損失值的大部分,而且這些樣本大多都是屬于易分類的,因此造成模型的優化方向偏離。Focal loss損失函數[31]是基于標準交叉熵損失函數改進得到的,該損失函數通過降低易分類樣本的權重,使模型在訓練時更專注于難分類的樣本。因此本文采用Focal loss損失函數代替原損失函數中分類與置信度的二元交叉熵損失函數。二元交叉熵損失函數如式(4)所示:

其中,Pt為預測樣本屬于true的概率,y表示label取值為(+1,-1)。而Focal loss是在標準交叉熵中添加一種調制系數(1-Pt)r,這么做既能調整正負樣本權重值,同時減少易分類樣本的權重,從而使得模型在訓練中更加專注于難分類的樣本。Focal loss損失函數如式(5)所示:

當某個樣本錯誤分類時(即Pt很小),那么調制因子(1-Pt)趨近于1,損失不受影響;而當Pt趨于1時,因子(1-Pt)接近0,則劃分好的樣本權重值被降低了,對于總loss值的貢獻非常小。另一方面當r=0,α=1時,Focal loss就轉化為傳統的交叉熵函數,當r增加時,調制系數(1-Pt)r也會增加,參數r可用于調節易分類樣本權重的比值。在文獻[31]中通過實驗證明當α=0.25,r=2時Focal loss對于模型訓練的效果最佳,在該數值下,一個易分類樣本(假設Pt>0.9)loss降為標準交叉熵loss的1/100,但對于難分類樣本(假設Pt<0.5),其loss最多降為標準交叉熵的1/4。這就使得難分類樣本的權重值相對提升了很多,也就增加了那些錯誤分類樣本的重要性。因此改進后的損失函數如下所示:


Lxywh為中心點坐標與寬高誤差之和,其中λcoord為坐標系數。Lconf為有物體與無物體的置信度誤差之和,c?i表示真實值,取值為是否為預測對象,若是,那么c?i=1,否則c?i=0。Lclass表示目標分類損失函數,Iobjij為第i個網格的第j個錨框的匹配情況。圖5是在血細胞數據集BCCD上采用原損失函數與改進的損失函數在相同模型YOLOv-Att下損失值變化的對比效果圖。藍色表示采用原損失值變化情況,橙色表示采用改進損失值變化情況,橫坐標是訓練次數Epoch,縱坐標表總損失值Loss,可以看出,采用改進損失函數,其初始損失值明顯小于采用原損失函數的初始損失值;在訓練次數達到100次后采用改進損失函數的模型開始收斂,而采用原損失函數的模型當epoch達到120次左右時才開始收斂,最終訓練達到150次后,采用原損失函數的模型,其損失值收斂至116,而采用改進損失函數的模型的損失值可收斂至53左右。綜上所述,當模型采用改進的損失函數時,獲得的總Loss值更小,收斂更快。

圖5 不同損失函數曲線對比圖Fig.5 Comparison of different loss function curves
本文的實驗環境是在CPUi7-9750H,2.60 GHz;內存16 GB;顯卡NVIDIA GTX 1660Ti;OS Window10,64位操作系統;開發環境Python3.6下進行,使用深度學習框架keras;底層Tensorflow2.0.0。GPU加速軟件CUDA10.0和CUDNN7.6。
本文使用血細胞檢測的公開數據集BCCD,該數據集共有364幅帶注釋的血細胞圖片,但它存在一定的缺陷。數據集中有一個注釋文件不包含任何紅細胞(RBC),但圖像卻有RBC。此外,還有三個注釋文件顯示遠低于實際數量的紅細胞(RBC),因此對數據進行重新篩選并刪除這4張標簽和特征不對應的圖片,最終數據集包括360張圖像,每幅分辨率大小為640×480。根據血細胞類型將數據標注為3類:白細胞(WBC)、紅細胞(RBC)、血小板(Platelets),其中血小板(Platelets)作為小目標檢測具有一定的挑戰性。
實驗前先對血細胞數據集進行處理,對數據圖像進行統一的編號使用Python腳本將標注好的數據集編寫為適合YOLO網絡的TXT文件格式。隨機抽取300張圖片作為訓練集與驗證集,剩余的60張圖片作為測試集,訓練集與測試集之比為5∶1;仿照PASCAL VOC格式將標注好的信息進行歸一化處理。
實驗采用Keras深度學習框架搭建算法模型。在訓練圖像輸入模型前,圖像尺寸都被縮放為416×416,并對其進行隨機數據增強,由于BCCD屬于小型數據集,因此本文采用Mosaic數據增強,即隨機讀取3張圖片,進行圖像翻轉、扭曲、旋轉等操作后,按一定比例組合成一張全新圖片,不僅加大了訓練數量,還能有效降低模型對識別物體的位置依賴,進而提高模型的泛化能力。在訓練時,應用遷移學習的方法來加速訓練,將在Imagenet數據集中訓練好的Darknet-53的前35層卷積層權重導入模型。首先凍結前35層,訓練35層之后的網絡,初始學習率設置為0.001,每50次epochs學習率衰減為原來的0.1倍,動量為0.9,衰減系數為0.000 5,批量大小為8。在迭代50次之后解除凍結,接著訓練,該階段初始學習率設置為0.000 1,進行同樣學習率衰減策略,批量大小設置為4。最終訓練至150次epochs損失收斂停止訓練。
本實驗采用準確率(precision,P)、召回率(recall,R)與mAP(mean average precision,即平均AP值)作為評價指標來評估網絡的性能[32]。其中平均精度均值(mAP)是目標檢測中最常用的評估識別準確率的指標之一。具體公式分別表示為:

式中,TP、FP、FN分別表示每個測試集場景中的正確檢測出、錯誤檢測出以及沒有檢測出的目標總數;n表示分類數,AP為單個目標類別的平均精度,近似等于P/R曲線下面積(area under curve,AUC),定義為:另外本文還計算了測試實驗的時間,用于比較模型的檢測速度。
3.4.1 錨框優化實驗
在one-stage目標檢測網絡中,錨框設置的合理性對于最終模型的性能至關重要,如果錨框的尺寸與檢測物體的尺寸差距過大,那么錨框的正樣本數會非常少,導致大量的錯漏現象。與常見的檢測目標不同,血細胞的真實邊界框縱橫比接近1∶1,通用的錨點框參數并不適用于該數據集。因此,本文采用K-means++聚類算法在BCCD訓練集上生成更適合的錨點框,同時與使用通用的錨點框進行對比實驗。分別在YOLO-Att對數據集訓練150個epoch,而后對測試集進行對應的mAP值計算。實驗結果如表1所示。

表1 錨框對比實驗Table 1 Anchor frame contrast experiment
通過K-means++聚類算法得到錨框的寬高分別是(25,24)、(54,56)、(70,47)、(64,61)、(55,75)、(78,63)、(69,72)、(85,80)、(140,127)。可以從聚類后的錨框尺寸直觀看出,縱橫比約為1∶1的居多,符合血細胞的標注框特征。另外聚類預測出的檢測框和真實標注框的平均IoU(AveIoU)的精度相比通用錨框得出的AveIoU提高了22.92個百分點,對應的mAP也提高了2.97個百分點。
3.4.2 對比分析實驗
本文將YOLO-Att模型與現有的目標檢測模型Faster-RCNN、SSD、YOLOv3、RetinaNet[11]及YOLOv4在數據集BCCD上進行對比分析,通過對比數據集中各個細胞的AP指標以及平均檢測精度(mAP)、檢測速率(speed time),驗證YOLO-Att的高效性。實驗結果如表2所示,YOLO-Att模型的平均檢測精度達到了66.32%,相比Faster-RCNN、YOLOv3、SDD以及YOLOv4分別提高了5.93、9.14、10.98、5.09個百分點。另外與采用Focal loss損失函數的RetinaNet網絡相比檢測精度提高約7個百分點。同時YOLO-Att在小型細胞(Platelets)的檢測精度上相比其他算法均有較為明顯的提高,進一步驗證了YOLO-Att在小型目標的檢測中有一定的優勢。為體現YOLO-Att模型的效率,表2中還比較了在NVIDIA GTX 1660Ti顯卡上測試的處理速度。如表中結果所示,YOLO-Att不僅在處理速度上匹配了one stage類算法,處理一張測試圖片僅需85.4 ms,還大幅提高了檢測精度,這在實際應用中更符合業界對血細胞檢測算法的實時性要求。

表2 對比分析實驗Table 2 Comparative analysis experiment
3.4.3 消融實驗
本文通過消融實驗對比分析,進一步驗證各個改進點的優化效果,實驗對比結果如表3所示,對基礎網絡YOLO框架結構嵌入多尺度殘差增強模塊、Attention Reseau模塊以及對原Loss進行優化,該消融實驗均采用K-means++聚類得到后錨框,從表3中數據可知,傳統YOLO框架的平均分割精度mAP只有57.18%,當引入多尺度殘差模塊后,加強了骨干網絡的細節特征信息提取能力,將平均分割精度提高了1.39個百分點;而嵌入Attention Reseau模塊后,可將平均分割精度大幅度提高至61.12%;最后改進優化損失函數,雖然平均分割精度不如優化模型2,但是加快了模型收斂速度。綜合上述三種改進點后,相對于YOLO,本文提出的優化模型YOLO-Att不僅保持了原有的檢測速率,還有效地將分割精度提高了9.14個百分點,說明了改進算法YOLOAtt的實用性。

表3 消融實驗Table 3 Ablation experiments
3.4.4 圖片對比效果
隨機選取測試集圖的圖片進行檢測結果對比分析,對Faster-RCNN、YOLOv3、YOLOv4以及YOLO-Att進行對比,結果如圖6所示,圖6(a)為人工標注圖片,圖6(b)為Faster-RCNN測試結果圖,圖6(c)為YOLOv3測試結果圖,圖6(d)為YOLOv4測試結果圖,圖6(e)為YOLO-Att測試結果圖。從第一行的對比分析中可看出,當只存在白細胞與紅細胞時,采用Faster-RCNN算法標注后的血細胞存在1個錯檢與3個漏檢,運用YOLOv3算法標注后的血細胞存在1個錯檢與2個漏檢,YOLOv4算法標注的存在1個錯檢與1個漏檢,而采用YOLO-att算法標注后的血細胞沒有錯檢與漏檢。而當存在小型細胞血小板(Platelets)時,如第三、四、五行的對比分析圖所示,Faster-RCNN并不能有效地識別并標記出血小板(Platelets),而采用YOLOv3、YOLOv4與YOLO-Att算法則可以高效地檢測出來(圖中紅色框標注);另一方面,對比采用YOLOv3、YOLOv4以及YOLO-Att算法的所有效果圖可知,采用YOLO系列算法進行血細胞檢測時,標注的紅細胞(RBC)存在大量的錯檢與漏檢問題,另外白細胞(WBC)雖能準確識別,但其標注框的大小與位置卻不夠精準。綜合圖片檢測結果可知,YOLO-Att對白細胞(WBC)、孤立的紅細胞(RBC)與血小板(Platelets)都有非常高的檢測準確率,雖然當紅細胞(RBC)存在重疊與粘連部分時,YOLOAtt也存在部分漏檢與錯檢問題,但相比于其他算法,YOLO-Att大幅提升了檢測準確率,并且保持了良好的檢測速率,進一步說明了YOLO-Att的高效性。

圖6 可視化對比圖Fig.6 Visual comparison diagram
本文提出一種面向BCCD血細胞檢測的YOLO-Att網絡模型。考慮精度與效率兩方面,YOLO-Att首先在原YOLO框架的Bockbone中嵌入多尺度殘差模塊,其次為頸部(Neck)設計一種注意力門控結構Attention Reseaus來提高挖掘上下文語義特征的能力,最后運用Focal loss代替原損失函數中的交叉熵函數,進一步提高分割精度。通過在BCCD數據集上的消融實驗驗證了YOLO-Att中的各個嵌入模塊與設計的注意力門控結構的有效性,并且與現有目標檢測網絡相比,YOLO-Att在網絡參數、運行速度、識別精度等方面均取得了更優異的結果。
下一步工作是繼續優化模型結構與損失函數,并研究如何提升分割模型的精度與實用性,希望能有效解決紅細胞(RBC)重疊、粘連的情況。