侯劍平,趙萬里,孫千鵬,王超,劉聰
安圖實驗儀器(鄭州)有限公司,河南 鄭州 450016
隨著新的檢測技術和自動化儀器的應用逐漸普及,更多的醫院開始引入醫學實驗室自動化生化免疫檢驗流水線[1]。在流水線的運行過程中,采血管從冰箱取出后需要使用開封膜設備去掉鋁箔帽。鋁箔帽去膜失敗會造成后續檢測設備撞針,嚴重影響流水線的運行安全及作業人員的生物安全,因此采血管鋁箔帽狀態檢測意義重大。
醫學實驗室自動化生化免疫檢驗流水線對檢測設備的識別準確率要求極高,識別錯誤率不能高于十萬分之一。同時,極高的檢測通量對識別速度要求非常高,識別時間不能超過20 ms。由于采血管樣本類型眾多,采血管鋁箔帽封膜和去膜失敗狀態復雜,以及存在大量管壁掛液樣本的干擾,且前人研究的基于超聲波檢測技術[2]以及傳統機器視覺的缺陷檢測技術[3]只能適用于單一類型、正常情況下的采血管鋁箔帽狀態檢測,無法滿足實際檢驗過程中對復雜采血管鋁箔帽狀態的檢測要求,因此該研究技術的識別準確率較低。
深度學習技術的快速發展使基于卷積神經網絡的圖像分類網絡模型的識別精度越來越高。從VGGNet[4]、GoogleNet[5]到ResNet[6],識別錯誤率大幅降低至3.57%。隨著嵌入式邊緣側應用場景的出現,圖像分類網絡模型正朝著輕量化的方向發展,DenseNet[7]、MobileNet[8]和ShuffleNet[9]等輕量化分類網絡模型的參數量下降至10 M以內。目前,劉洋等[10]將輕量級卷積神經網絡應用到植物病害識別,鄭冬等[11]將輕量化卷積網絡應用到車輛及行人檢測,田苗等[12]將卷積神經網絡應用到神經影像的應用研究中,張海濤等[13]將卷積神經網絡應用到急性淋巴細胞白血病血液細胞顯微圖像的輔助診斷分類研究中,但還沒有將卷積神經網絡應用到采血管鋁箔帽狀態檢測中的相關研究。
醫學實驗室自動化流水線內部預留的裝配空間狹小,且由于需要兼顧成本,就要求必須使用邊緣側計算設備,使用更加輕量化的分類網絡模型。針對以上問題,本文提出一種基于卷積神經網絡的采血管鋁箔帽狀態檢測方法,該方法使用知識蒸餾技術,分別設計了教師深網絡和學生淺網絡模型,通過教師網絡指導學生網絡進行知識蒸餾學習,最終得到的輕量化小模型可準確識別采血管鋁箔帽狀態。
為了適應邊緣側計算設備較低的算力,同時滿足較高檢測通量的要求,本文提出了一種基于輕量化卷積神經分類網絡模型的檢測方法,該方法使用知識蒸餾技術分別設計教師網絡和學生網絡。首先訓練相對復雜的教師網絡模型,在取得較好的識別準確率后,使學生網絡學習教師網絡并進行知識蒸餾,最后訓練得到同樣較高識別準確率的學生網絡模型。教師網絡模型和學生網絡模型均以ResNet 為基礎,壓縮網絡深度,修改部分卷積層的參數,增加側支和壓縮與激勵(Squeeze-and-Excitation,SE)模塊。模型各層間激活函數使用高斯誤差線性單元(Gaussian Error Linear Units,GELU)函數,模型訓練損失函數選擇Focal Loss 函數。教師網絡和學生網絡的唯一區別是教師網絡比學生網絡多1 個大層。教師網絡模型的和學生網絡模型的3D 網絡結構分別如圖1~2 所示,教師網絡模型和學生網絡模型的架構圖分別如圖3~4 所示。兩種模型整體結構類似,主要由輸入、主支、側支和分類器4 部分組成。模型輸入的是歸一化之后的鋁箔帽區域圖像,輸出的是鋁箔帽狀態識別結果,二分類結果分別對應“有鋁箔帽”和“無鋁箔帽”2 種狀態。

圖1 教師網絡模型3D網絡結構

圖2 學生網絡模型3D網絡結構

圖3 教師網絡模型架構

圖4 學生網絡模型架構
1.1.1 Focal Loss損失函數
Focal Loss 損失函數[14]是在標準交叉熵損失函數的基礎上修改得到的,是一種針對類別不平衡問題的損失函數,通過調整難易樣本的權重來解決大多數樣本易分類而少數樣本難分類的問題。該函數可通過減少易分類樣本的權重,使模型在訓練時更專注于難分類的樣本。
開封膜撕膜失敗樣本和管壁掛液干擾復雜多變,同時樣本類別分布不均衡,且存在比較嚴重的難例樣本挖掘問題;少量正樣本所提供的關鍵信息難以被損失函數發現,使模型優化的方向不是正確的方向,從而造成部分樣本誤檢,Focal Loss 損失函數正好可以解決這一難題。Focal Loss 損失函數的計算方式如公式(1)所示。
式中,tα為平衡因子,用來平衡正負樣本的比例;pt為調節簡單樣本權重降低的速率,用來解決難例樣本難以被訓練的問題。本文取tα=0.25,pt=2。
1.1.2 知識蒸餾
知識蒸餾可用于壓縮和加速模型,是一種基于“教師-學生網絡思想”的遷移學習訓練方法。該方法首先使用教師深層網絡模型進行訓練,獲得一個識別成功率比較高的教師網絡模型的權重文件,再使用學生淺層網絡模型進行知識蒸餾學習,最終獲得一個用于部署學生網絡模型權重的文件。
知識蒸餾的核心是其損失函數L 的設計,本文使用的損失函數L 的計算方式如公式(2)~(5)所示。
式中,α和β是超參數,本文全部為1;vi和zi分別為樣本使用教師網絡和學生網絡輸出Softmax[15]前的值;N為樣本總數;T為溫度系數;L 為模型的損失函數;Lsoft為軟損失函數又名為蒸餾損失函數;Lhard為硬損失函數又名為學生損失函數;和分別為教師網絡模型和學生網絡模型的輸出類別概率值;此處k=1。
其中,當T值接近于0 時,輸出的最大概率接近于1,而其他值趨近于0,接近于one-hot 形式;當T值接近于∞時,輸出的概率值趨近于均勻分布;當T值等于1 時,輸出的概率值就是標準的Softmax函數。本文T取值為3。
1.1.3 SE模塊
SE 模塊[16]主要包含壓縮和激勵兩部分,其結構如圖5 所示。這種注意力機制讓模型更關注信息量最大的通道特征,抑制不重要的通道特征。網絡可自動學習每個通道的重要性權重,并將注意力集中在最具區分性的通道上,有助于提升網絡的表達能力和判別能力,進而改善模型在各種計算機視覺任務中的性能。

圖5 SE注意力模塊
1.1.4 GELU激活函數
本模型使用的激活函數是GELU 函數[17],其性能優于傳統的修正線性單元(Rectified Linear Unit,ReLU)激活函數,可使網絡更具稀疏性,防止梯度消失,增加網絡的非線性。GELU 激活函數的計算方式如公式(6)所示。
式中,x為函數的輸入;X~N( 0,1)為均值為0、標準差為1 的高斯正態分布函數。
通常情況下取μ=0 和σ=1 的標準正態分布函數,其近似的計算方式如公式(7)所示。
1.1.5 改進型BottleNeck殘差塊
改進型BottleNeck 殘差塊[6]的結構如圖6 所示。在原始BottleNeck 殘差塊的基礎上增加SE 模塊,同時使用GELU 激活函數替代ReLU 激活函數,目的是為了在增加網絡深度和非線性的前提下,盡可能減小網絡的計算量和參數量,引用通道注意力機制,從而使更重要的通道獲得更多的訓練權重。

圖6 改進型BottleNeck殘差塊結構
改進型BottleNeck 殘差塊的左側分支分別使用1×1、3×3、1×1 的3 個卷積層進行特征提取,3 個卷積層之間使用GELU 函數進行激活,3 個卷積層之后是一層SE 模塊。改進型BottleNeck 殘差塊右側分支使用一個1×1 的卷積層改變輸入數據的通道數,接下來是一層SE 注意力模塊,用以保留上層網絡所獲取的特征信息,防止梯度彌散或梯度爆炸。改進型BottleNeck 殘差塊的左側分支和右側分支使用Add 匯總后,再使用GELU 函數進行激活。
改進型BottleNeck 殘差塊的計算方式如公式(8)所示。
式中,xl為上一層的輸入 ;xl+1為l層的輸出,同時是l+1 層的輸入;h(xl)為輸入的直接映射;F (xl,Wl)為殘差部分。
1.2.1 輸入圖像尺寸和模型輸入
經典卷積神經分類網絡模型的輸入圖像尺寸一般為224×224。經過對本模型的測試,發現輸入圖像尺寸為224×224 與128×128 對模型的識別準確率并無顯著差異;同時,128×128 的輸入圖像尺寸使模型的推理速度得到了明顯的提升。為了使得模型更加輕量化,更適合邊緣側的計算設備,本文使用128×128 作為模型的輸入圖像尺寸。
輸入部分包括2 層網絡結構,第一層使用Kernel 為5×5、Stride 為2 的卷積層提取輸入圖像中的一些細節特征,特別是邊緣形狀的淺層特征;第二層使用Kernel為3×3,Stride 為2 的最大池化層[7]進行池化,用來減少參數量,壓縮特征,進一步簡化網絡復雜度,減少計算量和內存消耗。卷積層和最大池化層之間使用GELU函數進行激活。
1.2.2 模型主支和側支
教師網絡模型主支整體包括3 大層,每一大層是一個改進型BottleNeck 殘差塊。改進型BottleNeck 殘差塊的結構如圖6 所示,在原始BottleNeck 殘差塊的基礎上增加SE 模塊,使用GELU 激活函數替代ReLU 激活函數。
教師網絡模型主支的3 大層將數據通道數依次變為128、256、512。第二大層和第三大層中間層使用Stride 為2 的卷積層進行降采樣,將數據的長和寬各減小50%,進一步壓縮特征,減小網絡的計算量和參數量。學生網絡模型主支比教師網絡少了一個大層,其他的結構和教師網絡模型一樣。主支使用比較深的網絡結構,用以提取樣本數據集中比較高級的特征信息。
教師網絡模型包括3 個側支,分別將輸入、主支第一大層和主支第二大層的輸出使用Kernel 為1×1,Stride 分別為4、4、2 的卷積層進行數據維度的整合,將數據降采樣,輸出通道變為512,再使用GELU 函數進行激活,最后與主支使用Add 進行匯總,合并為一個分支。學生網絡比教師網絡模型少一個側支,兩個卷積層的Stride 都是2,同時輸出的通道變為256。
各個側支分別從不同尺度不同深度獲取樣本數據集的特征信息后,將這些特征和主支獲取到的特征進行融合,獲得最終特征信息,提高模型的特征獲取能力。
1.2.3 模型分類器
分類器包括3 層網絡結構:第一層是全局池化層[18];第二層是線性變換層,將長度為512 的特征向量轉換為長度為2 的特征向量;第三層是Softmax,計算每個分類的概率得分值。
訓練數據集圖像采集于醫學實驗室自動化生化免疫檢驗流水線。分別準備未封膜采血管樣本2500 個,去膜成功采血管樣本2500 個,未去膜采血管樣本2500 個,去膜失敗(包括鋁箔帽翹起和鋁箔帽殘留)采血管樣本2500 個,所有樣本共計10000 個,其中包括直徑13 mm和16 mm、長度75 mm 和100 mm 的采血管樣本。采血管類型包括普通平口和螺紋口,采血管管壁包含各種顏色掛液。
未去膜采血管和去膜失敗采血管樣本屬于“有鋁箔帽”類型。未封膜采血管、去膜成功(包括各種掛液干擾)采血管樣本均屬于“無鋁箔帽”類型。使用工業相機采集所有采血管樣本圖片共10000 張,各種類型的采血管樣本圖片如圖7 所示。

圖7 采血管鋁箔帽區域圖片
將采集到的10000 張樣本圖片中的未封膜樣本和去膜成功樣本照片放到OK 文件夾內,未去膜樣本和去膜失敗樣本放到NG 文件夾內。使用隨機函數的方式按照8 ∶2 的比例將所有圖片劃分為訓練集和測試集,再將其分別放到train 和val 文件夾內,完成數據集的制作。
本文使用PyTorch 深度學習軟件平臺進行模型的訓練,使用圖形處理器(Graphics Processing Unit,GPU)進行加速訓練。具體的訓練環境如下:
軟件環境:Windows 10 專業版系統,CUDA 11.1 版本,PyTorch 1.8.2+cu111 版本,Python 3.6.13 版本。
硬件環境:Intel(R) Core(TM) i7-7700 CPU,NVIDIA GeForce GTX 1060 GPU,32G RAM。
模型訓練的初始學習率=1×10-5,batch_size=32,Epochs=150。
訓練過程包括教師網絡模型的訓練和學生網絡模型的訓練。對于教師網絡模型的訓練,需加載數據集中的訓練集和驗證集,選擇教師網絡模型,開始模型訓練。訓練過程中使用動態管理訓練學習率的策略,首先使用初始學習率,動態監測實時準確率和損失,保存當前最高的準確率和對應最低的損失。如果連續10 個訓練周期準確率沒有進一步提高且損失沒有進一步減少,則將學習率減少為原來的50%。經過150 個epoch 充分訓練后,獲得最佳訓練模型文件。
教師網絡模型訓練過程的準確率曲線如圖8 所示,經過100 個Epoch 訓練后的準確率值達到了比較穩定的狀態,最終值穩定在100%。本文模型訓練過程的損失曲線如圖9 所示,損失值經過快速下降以后,最終在0.005附近達到穩定狀態。

圖8 教師網絡模型訓練過程的準確率曲線

圖9 教師網絡模型訓練過程的損失曲線
學生網絡和教師網絡模型的訓練過程基本相同,不同的是學生網絡的損失函數使用的是知識蒸餾損失函數,通過學習教師網絡進行知識蒸餾,最終取得了非常高的識別準確率,達到了100%。
本文使用NVIDA Jetson Nano 邊緣側計算設備進行模型的測試,使用TensorRT 進行部署推理加速,具體的測試環境參數如下:
軟件環境:Ubuntu18.04LTS 操作系統,CUDA 10.2.300版本,TensorRT 8.0.1.6 版本,QT 5.9.5 版本。
硬件環境:4-core ARM A57 1.43GHZ CPU,128-core Maxwell GPU,計算性能472GFLOPS,4G RAM。
測試過程如下:將模型訓練獲得的模型文件部署到TensorRT 環境中,再使用TensorRT 批量讀取測試集并進行推理預測,記錄所有樣本的識別結果和推理時間,獲得模型的識別準確率和識別速度。
經過測試,本文教師網絡模型在Jetson Nano 邊緣側計算設備上的識別準確率達100%,識別速度達4.45 ms。本文學生網絡模型在Jetson Nano 邊緣側計算設備上的識別準確率達100%,識別速度達3.42 ms。
本文所提出的基于輕量化卷積神經分類網絡的采血管鋁箔帽狀態識別模型應用在醫學實驗室自動化生化免疫檢驗流水線開封膜設備中,優先考慮識別準確率和識別速度2 個評價指標。識別準確率=正確分類的樣本數/總數;識別速度為批量處理單個樣本的平均識別時間。
除了上述2 個評價指標外,由于邊緣側計算設備嵌入式板載存儲空間有限、內存及計算能力較弱,還需考慮模型的參數量以及浮點數計算量,并在盡可能高的識別準確率下,減小模型的參數量和浮點數計算量,提高識別速度,縮短識別時間。
為了驗證本文所提出的基于輕量化卷積神經分類模型的采血管鋁箔帽狀態識別模型的各項指標,分別與ResNet50、DenseNet121、MobileNetV2 以及ShuffleNetV2_0.5 卷積神經分類模型進行了對比測試。不同模型訓練過程的準確率曲線如圖10 所示,本文模型準確率曲線超過其他所有模型取得了最優結果,經過一個穩步增加過程后,最終的準確率值穩定在100%。

圖10 不同模型準確率曲線對比
分別從準確率、參數量、浮點數計算量和識別速度等維度對不同模型進行對比測試,對比實驗結果如表1所示。

表1 不同分類模型的實驗結果對比
由表1 可知,本文教師網絡和學生網絡模型均取得了較好的識別準確率,達到了100%。ShuffleNetV2_0.5模型的浮點數計算量雖然是最小的,但其識別速度并沒有本文教師網絡和學生網絡模型快,同時其準確率過低,無法滿足需要。本文學生網絡模型的參數量僅有0.354 M,浮點數計算量僅有0.165 GFlops,遠優于其他模型,并且在Jetson Nano 邊緣側計算設備上的識別速度只有3.42 ms,遠超其他網絡模型。
本文針對醫學實驗室自動化生化免疫檢驗流水線識別準確率和識別速度要求極高、采血管類型眾多、采血管鋁箔帽狀態復雜以及管壁掛液干擾嚴重的問題進行了研究。前人基于超聲波檢測技術[2]和傳統機器視覺方法[3]的研究無法適應如此復雜的情況,且識別準確率較低,因此本文提出了一種基于卷積神經網絡的采血管鋁箔帽狀態檢測方法。該方法首先采用輕量化的模型設計思想,通過減少模型的深度來降低參數量和計算量,同時,引入通道注意力機制,以提高樣本特征的提取能力;此外,還采用了Focal Loss 損失函數來解決難例樣本挖掘的問題,進一步優化了模型的性能;最后,通過教師網絡指導學生網絡模型進行知識蒸餾,得到了最終輕量化的小模型。
實驗結果表明,學生網絡模型的輕量化設計使其適用于資源有限的邊緣計算設備,模型的參數量僅為0.354 M,浮點數計算量為0.165 GFlops,Jetson Nano 設備上識別速度為3.42 ms,而且在復雜的采血管情況下仍能實現100%的識別準確率,充分證明了該模型的輕量化、高效性和實用性。
下一步研究將繼續探索輕量化卷積神經網絡模型在其他目標分類、目標識別和目標分割任務中的應用,以實現算法的工程化部署和實際應用。這一研究方向的拓展將進一步提升該模型的價值和適用性,推動其在實際場景中的廣泛應用和落地。