柴文光,李嘉怡
廣東工業大學 計算機學院,廣州 510006
現今深度學習和神經網絡已經廣泛應用在各領域中,如遙感圖像識別、視頻監控、醫學圖像檢測等。由于大多數醫學圖像數據集存在著樣本數量少、樣本獲取成本高、人工標注成本高以及類別嚴重不均等問題,而深度卷積神經網絡模型需要大量帶有標注的訓練樣本來保證其最終性能,所以普通的深度卷積網絡很難直接應用于與醫學圖像相關的視覺任務中。因此,將深度學習的方法應用在醫學圖像檢測時,需要對數據本身或神經網絡本身進行一定程度的處理,以彌補因醫學圖像數據本身的缺點而造成的問題[1-4]。張馳名提出一種ChestXNet細粒度診斷網絡,通過引入通道間的注意力機制模塊,和雙路并行的全局最大-平均池化結構來優化神經網絡[5]。張凱等人提出使用生成對抗網絡來增強醫學數據樣本的數量,通過提高訓練樣本數量以達到提高網絡精度的目的[6]。馮毅博等人提出一種深度可分離稠密網絡DWSDenseNet,使用了2 905例COVID-19胸部X線平片影像作為實驗數據集進行二分類檢測實驗[7]。然而,以上文獻忽略了一個重要的問題,即在進行多分類的醫學圖像檢測任務時,如何解決數據集中類別分布不平衡的情況。
在處理實際應用問題時,所能收集到的數據集往往出現類別不平衡的情況。數據集中大多數的樣本會集中分布在頭部前幾種類別中,而剩下的少量樣本則零散分布在尾部更多的類別中,其分布接近“二八定律”。這就是計算機視覺中經典的“長尾”問題(long-tail),如圖1所示。

圖1 “長尾”問題中的數據分布的坐標軸示意圖Fig.1 Axis diagrams of data distribution in“long tail”problem
解決“長尾”問題的主流方法是“重采樣”(re-sampling)和“重加權”(re-weight)。重采樣是指改變數據被特征提取器采樣的頻率;而重加權是指對每一類數據的損失函數進行加權。
本文以covid-chestxray-dataset數據集作為研究對象,針對數據集中出現的長尾問題,提出結合兩種不同權重對損失函數進行重加權,通過改進損失函數,以實現反向抵消神經網絡在訓練時出現的過擬合現象。本文使用CLAHE算法[8]對原始樣本圖像進行預處理,并將ResNext50作為分類檢測的特征提取網絡。經實驗表明,在應用新的改進方法后,網絡在測試集中的準確度、精確率、召回率和F1值四項評估標準中均有一定程度的提高。
損失函數的計算具有靈活性和方便性,可以更好地適應不同數據中圖像特征的變化趨勢。因此,多數研究和實驗都使用重加權作為長尾問題的主要解決方法之一[9-10]。通過對損失函數進行重加權,可以增加尾部分類損失在總損失中所占的比例,同時降低頭部分類損失函數在總損失函數中所占的比例,使網絡在訓練過程中對尾部類別能夠更加地關注,從而反向抵消了神經網絡在學習數據集時因長尾分布而導致的頭部類別過擬合問題。
Lin等人提出了焦點損失算法(focal loss)[11],該損失函數是交叉熵損失(cross entropy error function)的一種變形。通過對在交叉熵損失函數中加入兩個權重參數,來平衡每類樣本的重要性,也可理解為一種困難樣本挖掘。Chen等人的研究和實驗也證明了將焦點損失運用在目標檢測模型的區域提案網絡(region proposal network,RPN)中,可以解決因為類不平衡造成的過擬合問題[12]。Cui等人則提出,可以通過使用有效樣本數量(effective number of sample)的定義來求出每一類數據在總數據集中的有效樣本期望數量,并根據該期望得到重加權的權重值[13]。以上文獻的研究和實驗結果皆能證明重加權方法在解決類不平衡“長尾”問題的有效性。
ResNext[14]是一種特殊的殘差網絡,它屬于ResNet網絡[15]和Inception網絡[16]的結合體,其網絡塊結構是由簡化后Inception結構塊加上ResNet中的跳層捷徑(short-cut)構成,可以在減少神經網絡超參數的同時,保證網絡的性能。其結構如圖2所示。網絡的設計脫離了通過加深和加寬網絡層次來提升網絡性能的固定思維模式,增加了具有相同拓撲結構的路徑數量,以簡單、可擴展的方式利用拆分-轉換-合并策略進行分組卷積[17]。ResNext網絡在各類計算機視覺任務的應用中,都呈現出了顯著的效果。

圖2 ResNext網絡結構塊示意圖Fig.2 Block of ResNext network
為適應多分類胸部X光圖像的病癥檢測任務,本文使用ResNext50作為特征提取網絡,利用重加權方法改進交叉熵損失函數,并使用CLAHE算法進行圖像預處理。
為解決模型因數據長尾分布而造成的過擬合問題,本文提出引入重加權來優化原有的損失函數。使用兩種不同的權值計算方法來得出兩種權重,并將這兩種權重進行線性組合,再用新權重值來為損失函數進行加權。
一般而言,對交叉熵損失函數進行重加權的通用公式如下:

假設該神經網絡的輸入為樣本x,其中N是網絡最后一層輸出的向量的長度,即樣本中的類別數目,zj、zi是指輸出向量的第j和i個值,weight為對損失函數進行重加權的權重,該權重向量長度等于N。重加權中每一類損失的權重數值,是根據該類別樣本在數據集中所占的比例而設定的,賦予樣本數量過多的類別較小的權重,反之則賦予較大權重。因此,根據重加權的原理,本文提出第一種權重設定方法如下:

其中,Ni為數據集中第i類的樣本數目,ai為第i類樣本的權重值,n為樣本中類別的數目,a=[a1,a2,…,an]。雖然需要給樣本數少的類別賦予較大權重,但權重也不宜過大,否則神經網絡在訓練時同樣會傾向權重過大的類別。由logn X函數的單調性質可知,當底數n大于1時,該函數是個單調遞增函數,且X值越大時,函數的走向也趨于平緩。因此,選用lnX函數來計算權重值。
第二種權值的計算方法是通過有效樣本數量的定義得出,文獻[13]中有其具體推斷過程。該權重的計算公式為:

其中,bi為第i類樣本的權重值,ni為第i類樣本的樣本數量,根據文獻[12]的參數設定Ω=0.99。將該權重應用在損失函數的公式為:

其中,b=[b1,b2,…,bn]。
公式(2)所得的權重a是利用每類樣本數在總樣本數中所占的比例來計算的,計算方式較為簡單粗暴,可以有效提升模型的準確度,但魯棒性不強。公式(4)中得出的權重b,是通過有效樣本數量所計算而來,能更好地反向消除模型訓練時對頭部數據的過擬合問題,雖然在準確度的提高上不及前一種權重,但使用該權重時模型魯棒性更好。兩種加權方式各有優劣,因此,將a、b兩種權重進行線性組合。改進后的交叉熵損失函數如下:

其中,λ和μ為平衡參數,在本文實驗中取λ=0.65,μ=1。
同時,通過第3.4節的對比實驗也能證明,使用本文提出的損失函數比起其他損失函數,在covid-chestxraydataset數據集上的四項實驗評估值都會更好。這證實了本文改進的損失函數更適用于多分類X光胸照檢測任務。
Wang等人證明了神經網絡運用在X光胸照病癥檢測上的可行性,同時提出了COVID-Net網絡[18]。該網絡模型是在普通神經網絡模型的基礎上增加了深度分離卷積層(depthwise convolution,DWConv)。文獻實驗結果表明VGG16和ResNet50等常規神經網絡在X光胸照上的病癥檢測性能不及COVID-Net。
衡量一個神經網絡模型的性能,除了觀察它應用在具體任務上的準確度外,還有網絡的參數量及計算量,它們是衡量神經網絡計算開銷的重要指標。計算量即浮點計算數(floating point operations,FLOPs),公式為:

其中,H、W和Ci分別為神經網絡輸入的三個維度,即特征圖片的長、寬和通道數,Kw n為模型中第n層卷積網絡中卷積核的寬度,Co為網絡最后輸出的特征圖片通道數。現假設網絡輸入是256×256的3通道圖片,本文通過計算得出了Vgg16、Resnet50、COVID-Net和ResNext50的參數數量和計算量,如表1所示。從中能得知ResNext50參數量最少,而計算量也偏少。

表1 網絡的Params值和Flops值Table 1 Params and Flops value of networks
接下來,本文分別對COVID-Net和ResNext50的模型準確度進行實驗,以文獻[18]中對X光胸照進行病癥檢測并將圖像進行三分類的任務作為目標,得出兩個網絡檢測的準確度,如表2所示。ResNext50在減少了網絡的參數量和計算量的同時,能擁有與COVID-Net相近的性能。綜上所述,選擇ResNext50作為該模型的特征提取網絡。

表2 網絡在相同任務下的準確度對比。Table 2 Comparison of networks’accuracy under same task
CLAHE算法又名限制對比度自適應直方圖均衡(contrast limited adaptive histogram equalization)[19],使用該方法對X光圖像進行處理,能夠突出圖像的內部細節,抑制噪聲,并且更好地保存X光圖像中的病灶信息[7]。算法的實施步驟如下:
(1)將圖像拆分為R、G、B三個圖層并轉化成3張單通道圖像,分別將這三個圖像切分為多個等大不重疊的圖像方塊。
(2)計算每個圖像方塊的灰度直方圖:

其中,AVG(N)表示灰度級的平均像素數,Nx和Ny分別表示X軸方向和Y軸方向的像素數,Ng是圖像塊中灰度級的數量。
(3)設定一個灰度級像素數的截取系數M,并計算截取閾值Nk。

求出截取閾值后,將截取到的像素總數平均分配到每個灰度級的像素數上。
(4)對每個圖像方塊的直方圖進行均衡化。
從covid-chestxray-dataset數據集中隨機選取兩張圖片數據,分別對其使用CLAHE算法進行預處理,結果如圖3。其中,左側是X光胸照的原圖,右側是該圖像通過CLAHE算法進行圖像預處理后的結果,可見其內部光暗對比更加明顯,細節也更為突出。

圖3 用CLAHE算法對胸部X光圖像進行增強Fig.3 Enhancing chest X-ray image with CLAHE algorithm
本實驗是在Linux系統中進行的,系統的Ubuntu版本號為18.04,代碼在Anconda中搭建的python3.6環境中進行編寫,算法模型統一使用pytorch框架構造。程序的運行使用了1塊內存為12 GB的GPU。
數據集本身具有類別樣本分布不平衡的情況,不止訓練集,這種不平衡的分布也同樣出現在測試集中。由于數據集的長尾分布可能會導致模型在訓練階段出現過擬合頭部類別的情況,如果只用準確度這一個指標來進行衡量,則無法全面地評估模型的性能。因此,本文使用了四種度量指標來評估所提模型的性能,分別是準確度(Accuracy)、精確率(Precision rate)、召回率(Recall rate)以及F1值(F1-measure)。如表3所示,是一個混淆矩陣。

表3 混淆矩陣Table 3 Confusion matrix
四種度量指標的區別和計算方法分別為:
(1)準確率,即所有預測正確的樣本占總樣本的比重:

(2)精確率,又稱為查準率,用來表示預測準確的樣本占所有預測為正的樣本的比例:

(3)召回率,又稱查全率。它以實際的樣本為判斷依據,計算實際為正例的樣本中,被預測正確的正例占總實際正例樣本的比例:

(4)F1值,通過精確率和召回率聯合計算得來。當測試集的分布存在特殊情況的前提下,單獨用精確率或者召回率不能很好地評估一個算法模型的性能優劣,需要用到F1值來衡量模型性能:

本文使用的數據集是github上的開源數據集covidchestxray-dataset,該數據集的樣本分布具有典型的長尾分布的特性。本次實驗前,出于對訓練集和測試集的劃分考慮,首先剔除原數據集中樣本小于5的類別。其次,為了更好地構造一個長尾分布的數據集,使數據分布符合“二八定律”,選擇從Kaggle競賽的RSNA pneumonia的數據集中隨機劃分30張normal類別的樣本進入訓練集中。最終得到用于實驗的共15個類別的數據集,并按照每類樣本總數的7∶3比例劃分成訓練集和測試集。由于數據集中圖片大小不一致,統一使用拉伸或壓縮的方式,將圖片尺寸調整為256×256。訓練集的類別樣本數目分布如表4所示。

表4 訓練集的類別樣本數目分布Table 4 Distribution of class samples of training set
本文設計了8項實驗,通過實驗結果對比表現來評估該模型的性能,以及重加權方法應用在不平衡醫學圖像數據集中的有效性。
實驗結果如表5所示。其中“+a”表示檢測模型使用的是公式(3)中經過重加權的損失函數,“+b”表示檢測模型使用的是公式(5)中的損失函數,“+a+b”表示檢測模型使用的是公式(6)中損失函數。從該表可以得出,經過重加權后的分類檢測網絡,其四項分類評估指標均有一定程度的提高。

表5 每一項實驗的準確度、精確率、召回率與F1值Table5 Accuracy,Precisionrate,Recallrateand F1-measureofeachexperiment %
實驗③、實驗④和實驗⑧在測試集中最后100個epoch中的準確率變化如圖4所示,所有epoch中的準確率變化如圖5所示。可以看出實驗③的測試準確率雖然比實驗④高,但穩定性較弱,準確率動蕩嚴重,而實驗④的測試準確率雖然較前者抵,但呈現了一種穩步上升的狀態。而實驗⑧的測試準確率趨勢結合了前兩者的優點,在準確率達到較高值的同時,準確率的收斂較為平緩,穩定性較高。

圖4 實驗③、④和⑧在最后100個epochs中的準確率變化Fig.4 Changesinaccuracyofexperiments③,④ and⑧ inlast100epochs

圖5 實驗③、④和⑧在所有epochs中的準確率變化Fig.5 Changesinaccuracyofexperiment③,④and⑧inallepochs
同時,為了進一步證明該方法的先進性,本文將其與焦點損失算法[11]、LDAMloss算法[20]和Seesawloss算法[21]在同樣的環境下進行實驗對比,這三種損失函數的實驗結果分別對應表5中實驗⑤、實驗⑥和實驗⑦。通過在covid-chestxray-dataset數據集上進行多分類檢測實驗,對比這其四項實驗評估值的結果。
實驗⑤和實驗⑧進行對照,能有效證實本文提出的重加權方法比文獻[11]中提出的焦點損失算法更適用于多分類X光胸照檢測任務上。實驗⑤中,使用焦點損失算法后的模型,其精確率、召回率和F1值對比實驗②中的數據分別提高了6.88個百分點、7.33個百分點和7.55個百分點,證明焦點損失能在一定程度上解決因長尾分布而產生的過擬合問題,但其準確度并不高,甚至還有下降趨勢。結合文獻[11]和文獻[12]進行分析,文獻中使用焦點損失算法能有效提高模型性能,可能的原因之一,是因為文獻中所使用的的實驗數據集雖然都存在類別不平衡的長尾分布問題,但每一類樣本數量都是充足的。而本文所使用的covid-chestxray-dataset數據集不僅存在長尾分布的問題,還存在尾部類別樣本數量過少的情況。焦點損失算法不適用于小樣本數據中。對比實驗①、實驗⑥和實驗⑧的結果可以看出,使用LDAMLoss能將神經網絡模型的召回率和F1值分別提高9.48個百分點和2.6個百分點,但準確度和精確率并沒有得到提高。而實驗⑦在程序多次運行的過程中出現了損失函數無法收斂的情況,導致最后實驗結果相當不理想。結合文獻[20]分析,可能的原因有兩個。一是醫學圖像數據集的類別量與數據量相較自然圖像數據集有較大的差異;二是本文使用的網絡模型的深度不夠,SeesawLoss函數并不適于該模型。由交叉熵損失函數的改進變形得來的損失函數更適用于該網絡模型以及胸部X光圖像的檢測分類任務。
最后,由實驗⑧可證明,本文所提出的重加權方法可以改進網絡在多分類X光胸照病癥檢測的任務效果,論文模型可行且有效。
本文使用深度學習的方法,實現了在多類別不平衡X光圖像數據集上進行病癥檢測。針對數據集中樣本數據出現長尾分布的問題,該模型使用對損失函數進行重加權的方法來反向抵消因數據類不平衡長尾分布對檢測模型所造成的影響。實驗模型以ResNext50作為檢測網絡,并使用CLAHE算法對數據集圖像進行預處理。通過8項實驗相對比說明,證實了本文提出的重加權對處理長尾問題確實可行且有效,且對比其他損失函數效果更好。
論文實驗結果受限于數據集的樣本數量。要做到將各項評估數值數值進一步提高,使模型能夠更好地適應多類別X光胸照病癥檢測任務,仍然需要在神經網絡訓練階段投入更多的數據。如何在有限的數據中使模型性能可以得到更好的提升,這是以后研究的重點。