在醫學診斷中,全血細胞計數是一項評估整體健康狀況的重要檢測。傳統上,血細胞是用血細胞計數器及其他實驗室設備和化學染料來人工識別計數的,是一種既耗時又枯燥乏味的工作。本文介紹了一種「你只用看一遍」(YOLO)目標檢測和分類算法對三種類型血細胞進行自動識別和計數的機器學習方法。用修改配置後的血塗片圖像BCCD數據集來訓練YOLO框架,以自動識別和計算紅細胞、白細胞和血小板的數量。此外,考慮到架構複雜性、報告準確性和框架運行時間,本研究還對其他卷積神經網絡架構進行了實驗,並比較了不同模型檢測血細胞的準確度。還用另一個不同數據集的血塗片圖像測試了訓練模型,結果發現學習後的模型具有普遍適用性。總之,計算機輔助檢測和計數系統使我們能夠在不到一秒鐘內計算出血塗片圖像中的血細胞數,這對於實際應用意義重大。
全血細胞計數(CBC)是醫護人員常用於評估健康狀況的一項重要檢測。構成血液的三種主要細胞是紅細胞(RBCs)、白細胞(WBCs)和血小板。RBCs也稱為紅血球,是血液中數量最多的一種血細胞,約佔40%-45%[美國血液學協會:http://www.hematology.org/Patients/Basics/]。血小板也稱為凝血細胞,在血液中數量也很多。WBC又稱為白血球,僅佔血細胞總數的1%。RBCs將氧氣運送到我們的身體組織,組織接收的含氧量受RBCs數量影響。WBC能抵抗感染,而血小板有助於凝血。由於這些血細胞的數量巨大,傳統上使用血細胞計數器的手動血細胞計數系統極其費時且容易出錯,在大多數情況下,計數的準確度高度取決於臨床實驗室技師的技能。因此,血塗片圖像中多種血細胞的自動計數過程將大大地促進整個計數過程。
隨著機器學習技術的發展,圖像分類和目標檢測應用越來越穩健,也越來越準確。因此,基於機器學習的方法被應用到各個領域。尤其是,深度學習方法被應用到多個醫學領域,如胸部X光片的異常檢測和定位,心臟MRI圖像的左心室自動分割,以及視網膜眼底照片中糖尿病視網膜病變的檢測。因而,值得探討可用於識別和計算血塗片圖像中血細胞數的深度學習方法。
本文介紹了一種基於深度學習的血細胞計數方法。我們利用基於深度學習的目標檢測方法鑑別不同類型的血細胞。在卷積神經網絡(R-CNN)、你只用看一遍(YOLO)等最先進的目標檢測算法中,我們選擇了YOLO框架,它比採用VGG-16架構的Faster R-CNN約快三倍。YOLO使用單個神經網絡直接根據完整圖像一次性預測邊界框(bounding box)和類別概率。我們再次訓練YOLO框架,以自動識別和計算血塗片圖像中的RBCs、WBCs和血小板數。為了提高計數準確度,我們還開發了一種驗證方法來避免框架重複計數。另外,我們用另一個數據集的圖像測試了訓練模型,以明確方法的普遍適用性。圖1是我們提出的基於深度學習的血細胞識別和計數系統。
一般來說,有兩種方法可用於血細胞的自動計數過程。這兩種方法分別是圖像處理法和機器學習法。Acharya和Kumar提出了用於RBCs計數的圖像處理法。這種方法通過處理血塗片圖像進行RBC計數,並識別正常和異常細胞。他們使用K-medoids算法從圖像中提取WBC,然後通過粒度分析將RBC與WBC分離,再使用標記算法和圓霍夫變換(CHT)對RBC進行計數。Sarrafzadeh等人提出用圓環變換對灰度圖像中的RBC進行計數,使用迭代軟閾值法進行識別和計數。Kaur等人提出了一種通過CHT自動計算顯微血細胞圖像中血小板數的方法,根據CHT的血小板大小和形狀特徵進行計數。Cruz等人介紹了一種用於血細胞計數的圖像處理法,用色相、飽和度、值閾值方法和連接成分標記進行血細胞識別和計數。Acharjee等人提出通過霍夫變換檢測橢圓形和雙凹形狀進行RBC計數的半自動方法。Lou等人提出利用光譜角度成像和支持向量機(SVM)自動計算RBC數的方法。Zhao等人提出了基於卷積神經網絡(CNN)的WBC自動識別和分類方法,首先找出顯微圖像中的WBC,然後用CNN識別各種WBC。Habibzadeh等人介紹了一種WBC五分類系統,在這個過程中使用了三個分類器,包括兩個不同的SVM和一個CNN分類器。Habibzadeh等人利用預先訓練的CNN、ResNet和Inception Net計算分割圖像中的WBC數,利用顏色空間分析對圖像進行分割。Xu等人首先對預處理的圖像進行補丁大小標準化,然後用CNN對鐮狀細胞病患者顯微鏡圖像中的RBC形狀進行分類。
不同於以上所有的方法,我們利用YOLO同時檢測三種血細胞類型。我們的方法不需要任何灰度轉換或二元分割。整個過程完全自動化、速度快且準確。
我們的目標是使用目標檢測和分類算法YOLO直接對血塗片圖像中的血細胞進行識別和計數。我們需要用修改後的配置和帶注釋的血細胞訓練圖像來訓練YOLO框架。
1. 數據集:我們使用了一個公開的帶注釋的血細胞圖像數據集,即血細胞計數數據集(BCCD)[BCCD:https://github.com/Shenggan/BCCD_Dataset]。最初,該數據集共有364幅帶注釋的血塗片圖像,但是它存在一些明顯的缺陷。將此數據集分為訓練集(300幅圖像)和測試集(64幅圖像)後,我們發現測試集中的一個注釋文件不包含任何RBC,但是圖像包含RBC。此外,還有三個注釋文件顯示遠遠低於實際數量的RBC。因此,我們刪除了這4個不合理的文件,最終測試集包含60幅圖像。我們隨機選擇了60幅帶注釋的訓練圖像組成驗證集。可從GitHub資源庫下載修改後的數據集(https://github.com/MahmudulAlam/Complete-Blood-Cell-Count-Dataset)。我們使用了另外的數據集測試訓練模型。該數據集包括100幅解析度為3246×2448的圖像,這些圖像是用Nikon ECLIPSE 50i顯微鏡上的Nikon V1相機拍攝的,放大倍數為100倍。
2. YOLO算法:「你只看一遍」,簡稱YOLO,是目前最先進的目標檢測分類算法。它將目標檢測視為回歸問題。它只需要通過網絡進行一次前向傳播即可對圖像類別和位置進行快速預測。它將圖像大小調整為448×448,並將整個圖像劃分為7×7的網格單元,每個網格單元預測兩個邊界框和對應邊界框的置信度得分。如果目標的中心落在一個網格單元中,則該網格單元負責檢測此目標。最初實施的YOLO模型,是經過PASCAL VOC數據集評估的CNN。受到GoogLeNet的啟發,它的網絡架構包含24個卷積層和2個全連接層。在不同的YOLO版本中,我們選擇使用Tiny YOLO,因為這個版本是最快的。除了用9個卷積層代替24個卷積層以外,Tiny YOLO在所有參數上保持不變。
3. 訓練:最初的Tiny YOLO配置經過了20個不同類別的訓練。為了使其適用於血細胞識別,我們將其改為包含WBC、RBC和血小板三個類別。由於改變了類別數,CNN架構中最終卷積層(final convolutional Layer)的過濾器數也需要變化。YOLO會預測出每個錨框(anchor box)的5個值及類別概率。這5個值分別是目標落在網格單元的概率、目標的x和y坐標、目標的高度和寬度。在我們的方法中,錨框的數量為5,因為它將根據目標的高寬比更靈活地放置邊界框。最終卷積層的過濾器數NF,可以根據錨框數NA和類別數NC計算出來:
NF =NA×(NC +5)(1)在實驗中,NA是5,NC是3,因此NF為40。
我們使用300張帶注釋的血液塗片圖像進行訓練,60張用於測試。我們記錄每一步訓練中的損失值和移動平均損失值。我們共記錄了4500個步驟的數據,並使用了兩種不同的學習速率。第1-2500步的學習速率是10-5,第2501-4500步的學習速率是10-7。結果發現,在第2501-4500步採用較低的學習速率可以實現更好的收斂(convergence)。我們每隔125步記錄一次權重並評估模型。圖2是用損失函數表示的YOLO血細胞檢測算法的學習曲線。圖中同時給出了損失函數的損失值和移動平均損失值。從圖中可以看出,在學習速率為10-7時第3750步的移動平均損失值最小,為8.8766。我們利用此步的權重進行測試。
4. YOLO血細胞識別和計數方法:我們提出用機器學習方法,即YOLO算法對血細胞進行自動識別和計數。這種方法包括配置經過修改的訓練模型,我們將最終卷積層改為三種輸出,根據適當的閾值識別血細胞並根據標記進行計數。我們通過計算基礎真值與在不同閾值所得的估計值之間的平均絕對誤差來選擇閾值,並找到每種細胞的適當閾值,即在該閾值下驗證數據集中的平均絕對誤差最小。我們提出的方法(即YOLO血細胞識別和計數方法)不會誤判細胞類型,比如,不會將RBC誤判為WBC或將血小板誤判為RBC等。在某些情況下,它會重複計算血小板的數量。我們通過對每個血小板應用K近鄰算法(KNN)和交並比算法(IOU)來解決這一問題。總而言之,YOLO血細胞識別和計數方法既快速又準確。該方法的步驟如算法1(見圖3)所述。
對於檢測的每種細胞,YOLO模型會得出4個參數。這4個參數分別是該細胞的標記、該細胞的置信度、左上角位置和右下角位置。我們有兩種方法可以顯示在血塗片圖像中檢測到的細胞。我們可以用左上角和右下角坐標,將檢測到的每個細胞放到一個矩形邊界框內。然而,血細胞並不是矩形的,在形狀上更接近於圓形,而且矩形框所佔的空間比所需空間大得多。因此,我們用圓形邊界框來標記每個細胞,這需要將左上角和右下角坐標轉換為圓形的半徑和中心點。
鑑於左上角和右下角坐標分別是(x1,y1)和(x2,y2),因此,用於標記細胞的圓形的中心點C和半徑r可以計算為:
我們根據細胞的標記進行計數。根據檢測的細胞類型,修改後的YOLO算法會返回三種標記,即「RBC」、「WBC」和「血小板」。一個塗片圖像中的RBC總數就是包含「RBC」標記的總數,WBC總數就是包含「WBC」標記的總數,以此類推。
在某些情況下,同一血小板被計數兩次,這是因為兩個連續的網格單元檢測到相同的血小板。為了避免這種重複計數現象,我們首先用KNN算法確定每個血小板的鄰近血小板,然後用兩個血小板之間的交並比(IOU)來計算重疊度。依據經驗,血小板與鄰近血小板之間的允許重疊度是10%。如果重疊度大於10%,我們將忽略該細胞的重複計數,以排除虛假計數。圖4表示血小板被YOLO算法計數兩次的情況。利用KNN和IOU技術可以解決重複計數問題。
我們用YOLO方法對RBC、WBC和血小板進行自動識別和計數。並用60幅圖像組成的測試數據集(已知基礎真值)測試我們的YOLO模型。首先使用我們的模型來計數不同置信閾值的驗證數據集中的不同細胞。請注意,閾值在YOLO算法中發揮重要的作用,因為YOLO利用該閾值預測每個網格單元,而不是整個圖像。不包含血細胞的網格單元置信度較低。因此,我們可以通過選擇適當的置信閾值來避免多餘的和虛假的預測。
我們計算了基礎真值與驗證數據集的估計細胞數之間的平均絕對誤差。利用不同的置信閾值,使每種細胞的平均絕對誤差值達到最低,並將這些置信值用於血細胞的識別過程。誤差的計算公式如下:
其中,cell代表細胞類型(RBC、WBC或PLT),N是驗證數據集的大小(在我們的實驗中,N=60),χ是細胞數,ε是特定細胞的平均絕對誤差值。計算所得的誤差值如表1所示。從表中可以看出,RBC計數的閾值是0.55。而WBC和PLT的閾值則低得多(在我們的實驗中分別是0.35和0.25)。因此,每種細胞的閾值被選定為:
(1)RBC:置信閾值為55%;
(2)WBC:置信閾值為35%;
(3)PLT:置信閾值為25%。
然後,我們根據基礎真值細胞的總數和測試數據集的估計細胞總數計算準確度。在55%置信閾值,RBC計數的準確度達到了96.09%。不同類型細胞的估計總數和在適當置信閾值計算的準確度如表2所示。YOLO算法給出的RBC計數似乎高於圖像中的實際RBC計數。但是,我們必須指出,對於某些位於圖像邊緣的RBC,並未給出基礎真值標記。YOLO算法能夠檢測到這些RBC,因此RBC計數較高。
為了形象化地比較基礎真值與YOLO方法的輸出值,圖5表示來自測試集的一個樣品血塗片圖像。從圖中可以看出,所有WBC和PLT計數均無誤。該方法漏掉了中間的一個RBC,但是檢測到圖像邊緣的另一個RBC(不包括在基礎真值中)。
1. 利用其它CNN架構進行實驗:受到GoogLeNet架構的啟發,YOLO有一個內置的CNN分類架構。除了用YOLO自己的CNN訓練血細胞檢測模型,我們還用其它常用的CNN架構進行了實驗。我們用VGG-16、ResNet50、InceptionV3和MobileNet CNN架構替代YOLO算法的內置CNN。為了在後端用這些網絡訓練YOLO,我們將訓練集分成兩部分。前250幅帶注釋的圖像用於訓練,後50幅圖像用於驗證。對於所有網絡,訓練的損失曲線及驗證的平均精度均值(mAP)如圖6所示。從圖中可以看出,InceptionV3和ResNet50的誤差最小。測試集中RBC、WBC和PLT計數的準確度如表3所示。從表中可以看出,使用Tiny YOLO架構對RBC和PLT進行計數的準確度最高,其中RBC計數的準確度達到96.09%,PLT計數的準確度達到96.36%。另一方面,用VGG-16和InceptionV3進行WBC計數時準確度最高(100%)。因此,不同細胞的計數可以用不同的模型達到最高準確度。我們還計算了這些CNN架構的平均精度均值(mAP),各架構對每幅測試圖像的執行時間如表3所示。從表中可以看出,ResNet50的mAP值最高。YOLO血細胞識別和計數方法速度極快,即使進行更深的網絡分析,也僅需不到一秒。我們在計算機(配置為8GB Intel Core i5 6500顯卡,4GB Nvidia GTX1050 TiGPU)上計算了每幅測試圖像所需的前向傳播時間。通過計算平均值以獲得最終執行時間來報告估計時間。
2. 用不同的數據集進行測試:為了確定訓練模型是否具有資料庫依賴性,我們還用另一個數據集的血塗片圖像測試了模型。該數據集的圖像具有較高的解析度,因此圖像被分成網格以創建子圖像,並且在建議的圖像渲染管線(pipeline)中單獨處理每幅子圖像。然後將每幅子圖像的檢測和計數投射到原圖像上。圖7表示一幅被分成3×3網格的血塗片圖像,也就是用建立的方法處理9幅子圖像。從圖中可以看出,輸出圖像正確識別了RBC、WBC和PLT,性能令人滿意。
3. 結論:本文介紹了一種基於YOLO算法對血塗片圖像中的血細胞進行自動識別和計數的機器學習方法。為了提高準確度,該方法利用KNN和IOU方法解決了同一目標的多重計數問題。用公開的數據集評估了YOLO血細胞識別和計數方法。在測試數據集中,YOLO方法準確地識別了RBC、WBC和PLT。結果表明,即使數據集未對某些細胞進行標記,YOLO方法也能準確地計數。我們還在YOLO後端嘗試了不同的神經網絡模型,不同細胞的計數可以用不同的模型達到最高準確度。即使嘗試了具有不同深度的不同模型,該方法在進行血塗片圖像計數和標記時也非常快。還用另外的血塗片圖像數據集測試了YOLO方法,結果令人滿意。鑑於該方法的準確度和檢測性能,可以說它有可能簡化手
動血細胞識別和計數過程。
編譯者:王小茜(本刊編輯部)
審校者:楊大幹(浙江大學第一附屬醫院)
註:本文來源於《臨床實驗室》2020年第8期「數位化、智能化、智慧化」專題