任克勤,陶青川
(四川大學電子信息學院,成都 610065)
試管是一種重要的通用醫療器具,新冠疫情帶來的大批量檢測需求,對試管批量檢測自動化提出了要求,部分檢測任務如計數、分類等機械、枯燥,耗費人工且易出錯,計算機視覺的快速發展使得基于機器視覺的檢測方法替代人工成為可能。試管批處理的第一步是從試管架上識別單根試管,然后再進行后續檢測項目。傳統方法主要通過濾波失真矯正、邊緣檢測、模板匹配等來識別試管,其抗干擾能力和泛化能力都較弱。基于卷積神經網絡的目標識別算法通過對數據集的學習可以很好地提取目標的特征,但現有的目標識別算法存在模型大、檢測速度慢,實際部署需要GPU 導致硬件成本高的問題,需要做輕量化改進,減少模型大小,以適應在嵌入式設備上運行。
當前的目標檢測任務主要基于卷積神經網絡CNN,卷積神經網絡被證明能夠很好地提取圖像的特征,目標檢測算法也主要分為一階段和二階段目標檢測器兩種。一階段目標檢測器直接在圖中找出要檢測的目標的定位和類別,如YOLO 系列、RetinaNet、SSD 等。二階段目標檢測器的第一階段先選出候選框,第二階段進行分類,識別候選框中的目標類別,如RCNN、SPPNet、Faster RCNN 等。一階段目標檢測器將圖片直接網格化,物體中心所在的網格負責對該物體進行檢測,因此檢測速度快。二階段目標檢測器需要在圖片上進行搜索,然后再進行分類和回歸,檢測精度高,不容易出現漏檢,但檢測速度不及一階段的目標檢測器,同時還面臨著正負樣本失衡的問題。一般在算法的選擇上,速度仍然是個硬指標,一階段目標檢測器在添加FPN、注意力等機制的改進下,其檢測精度也能與二階段檢測器相媲美,同時一階段目標檢測器的模型通常更小,適于嵌入式硬件環境中使用。
一個一階段的目標檢測網絡由三個組件構成,如圖1所示:backbone、neck和head,backbone 是一個卷積神經網絡,對輸入的圖片提取特征;neck 通常使用SSD 或者FPN 等方法對特征圖進行混合或者組合,形成一些更為復雜的特征;head 用于對圖像特征進行預測,生成邊界框并預測類別。

圖1 YOLOv5網絡結構
YOLOv5 中 的backbone 主 要 包 含Focus、CBL、C3 和SPP 等層。Focus 是將圖片先切片再按照通道維度進行拼接,最后通過卷積運算,將圖片的長和寬均變為原來的一半,通道數變為原來的4倍;CBL操作其實由三個操作組合而成:Conv、BN 和SiLU 激活函數;C3 層包含了若干個殘差結構,解決網絡梯度信息重復的問題,既減少了參數量又加強了網絡的特征融合能力;SPP是一個空間金字塔池化操作,輸出特征圖具備滿足特定數目的通道,避免了RCNN對候選框進行裁剪和縮放帶來的信息丟失和扭曲。YOLOv5 的neck 與YOLOv4類似,采用了FPN+PAN 的結構,將高層特征通過上采樣與低層特征相融合,既保留了高分辨率下具有較高空間信息的特征又保留了低分辨率下具有豐富語義信息的特征。YOLOv5的檢測層提供了兩種優化方式:Adam 和SGD,默認使用Adam 優化。YOLOv5 定義的損失包含三個部分,分別是CIoU 損失、交叉熵損失和分類損失,它們之和作為反向傳播的損失。
數據增強方法同YOLOv4 一樣,采用了Mosaic方法,將多張圖像進行隨機縮放、裁剪、排列之后進行拼接,豐富了檢測目標的背景,以便網絡能從一張增強后的圖像中學習到更多的特征。
YOLOv5 在公開數據集上有著一流的表現,模型的特征提取和預測能力都得到了認可,但其最小的模型文件都是十幾兆級別的大小,參數量依然很大,難以直接在嵌入式設備上運行,因此,需要對其進行輕量化改進。
本文使用ShuffleNetV2構建YOLOV5s 的主干網絡,替換原有的DarkNet53網絡,同時減少原YOLOv5 中檢測頭的通道數量、減少參數量、加快檢測速度;并在主干網的最后一層添加SA注意力機制,將SA 機制中通道注意力的全局平均池化改為最大池化,以便更好地保留最明顯的目標特征。
ShuffleNetV2 降低了深度網絡的計算量。作者通過大量實驗和論證,提出了影響高效網絡架構的4個發現,分別是“同等網絡深度減少內存訪問代價”、“過量使用組卷積會增加內存訪問代價”、“網絡碎片化會降低并行度”、“元素級操作的開銷不可忽視”,并根據這4 個發現提出了ShuffleNetV2 網絡,其主要有三個亮點。一是使用channel shuffle:具體做法是先將輸入特征圖在通道維度分成兩個分支,將兩個分支分別進行卷積運算,之后再做拼接,輸出通道數與輸入通道數相同,最后進行channel shuffle,使各分支間的信息得以交流。這樣做既可以降低分組卷積的運算量,又避免了單純使用可以降低分組帶來的各組只學習到組內特征的局限;二是將shuffleNetV1中1*1 的組卷積改為普通卷積,因為之前的channel split 就相當于做了分組,并且減少使用組卷積也降低了計算量;三是將一個分支上的普通卷積改為深度可分離卷積,大幅減少計算量。

圖2 ShuffleNetV2的stage模塊
深度可分離卷積,如圖3 所示,最早在Xception和MobileNet中開始使用,它將普通卷積分為一個深度可分離卷積和一個1*1的點卷積,對于一個輸入通道數為,輸出通道數為,特征圖大小為D,卷積核大小為D的標準卷積,計算開銷為:

圖3 深度可分離卷積

標準卷積操作具有基于卷積核過濾特征并組合特征以產生新表示的效果,深度可分離卷積將過濾和組合操作分別由一個深度卷積和點卷積完成,深度卷積對每個輸入通道使用單個過濾器,跟著一個點卷積,使用一個1*1 卷積構建深度層輸出的線性組合,在每一層后面都使用了BN 和ReLU 激活。對每個通道都使用單個過濾器的深度卷積可以寫做:



深度卷積過濾了通道,后續再跟一個1*1卷積將深度卷積的輸出線性組合,從而生成新的特征,加上該1*1卷積之后,深度可分離卷積的計算開銷為:

由此減少計算量:

本文使用ShuffleNetV2 來構建主干網絡,一方面其使用的深度可分離卷積相較于普通卷積的參數量減少,同時其網絡的層數也少于YOLOv5 原網絡使用的Darknet53,這樣減少的參數量就很可觀,模型大小也被大幅壓縮了。
原YOLOv5的檢測頭中輸出通道數量分別為256、512 和1024,考慮到試管類別少、特征簡單,原網絡的檢測頭輸出通道數量有著大量冗余特征,于是減少通道數量。經過實驗測試,三個檢測頭都輸出256個通道時,能在大幅減少參數量的同時起到較好的檢測效果。
注意力機制可以理解為對輸入的不同區域賦予不同的權重,進而有側重地進行特征選擇或者區域選擇,同時減少計算量。Hu 等提出了通道注意力機制,將輸入映射之后通過一個Squeeze 操作,該操作跨空間維度聚合特征圖來生成一個通道描述符,再將該描述符通過一個Excitation 操作,用自門控機制產生每個通道調制權重的集合,最后將這些權重應用到映射得到的特征圖上生成SE 模塊的輸出。Woo 等將通道注意力串聯起來,與ResNet 結構組合后很好地提高了SE 的性能。其空間注意力模塊是將輸入特征圖同時通過平均池化和最大池化兩個操作,將兩個結果再通過一個帶隱含層的多層感知機,生成通道注意力圖。其空間注意力模塊沿通道軸施加平均池化和最大池化操作,并將結果拼接起來,再將這個拼接的特征圖通過一個卷積層,得到空間注意力圖。


然后,再通過一個全連接層強化表達,最后使用sigmoid 激化:

其中,∈R,用來表示尺度縮放和平移的兩個參數。
空間注意力模塊使用GN(group norm)來獲得空間統計數據,再通過一個全連接層來強化表達,最后通過sigmoid 激活,得到空間注意力圖:

將F′與F′做拼接,得到的注意力圖的通道數與原子特征通道數相同。
對所有的子特征都進行上述操作后,將所有結果聚合,再做channel shuffle,具體做法是先對特征圖做分組卷積得到多個子特征圖,但是這些子特征圖可能各自表征了局部通道的信息,為了獲得更具全局性的信息,將多個子特征圖的特征沿著通道維度進行組合,使得每個組都包含其他組的特征信息,讓組間信息沿著通道維度充分交流,然后再通過一個分組卷積,從各組中提取特征,得到最終的注意力圖。改進后的模型如圖4 所示。其中,SA 模塊如圖5所示。

圖4 改進后的網絡結構

圖5 混合注意力機制
訓練所用硬件平臺配置為Intel(R)Core(TM)i5-6500 CPU @3.2 GHz,Nvidia GeForce GTX 1080Ti 11GB GPU,8 G 內存的服務器,采用Ubuntu 20.04 操作系統,CUDA11.4,Python 3.7。
本文使用的是自建數據集,包含3 類目標:“長試管”、“短試管”和“蓋帽”,總共11534張圖片,為了增強學習到的模型的泛化能力,采用不同光照、試管架、拍攝距離、背景和角度,每次對多根試管進行拍攝,得到數據集,示例見圖6。

圖6 自建數據集
圖像大小為547×364,送入網絡后會先調整大小為640×640再進行訓練。
本文采用目標檢測模型常用的評價指標:召回率(Recall)、(mean average precision)、模型大小以及檢測速度。
召回率等于網絡正確識別為正例的樣本個數占總正例樣本個數的比例。為各類別的平均值,其值等于(precision-recall)曲線下的面積,其中為,為,計算如下:


檢測速度定義為每秒處理圖像的幀數(frame per second,FPS)。
訓練輪次為200,批大小為8,采用YOLOv5s官方的預訓練權重,將11534張圖片按照8∶1∶1的比例進行隨機劃分,分別生成訓練集、驗證集和測試集。因為通過前期訓練發現loss收斂很快,所以統一 采用epoch 為100,batch-size 為8,圖片大小固定為640×640,線程數為8。
將改進后的網絡與原始YOLOv5s 網絡以及YOLOv4 網絡進行對比,檢測結果如圖7 所示。統計結果見表1。

表1 對比實驗結果

圖7 各模型檢測結果
可以看出,在YOLOv5 網絡中添加了SA 注意力機制之后,在增加一定參數量的情況下,模型的召回率有了0.8%的提高,而、和模型大小幾乎沒有變化;若單獨使用ShuffleNet來構建YOLOv5s的主干網,可以顯著降低參數量和模型大小,有了67.6%的提高,在召回率、則沒有明顯下降,說明對于試管檢測任務來說,輕量級的ShuffleNetV2 的特征提取能力已經足夠;若將ShuffleNetV2 作為主干網再添加SA 注意力機制,則在原YOLOv5 網絡上有了89.9%的提高,有1.9%的提高,參數量只有原來的6.2%,模型大小只有原來的7.6%,在、、參數量和模型大小四個指標上達到最優,代價只是召回率較原YOLOv5s網絡有1.6%的下降。說明對YOLOv5 網絡的輕量化改進是成功的。
本文針對試管檢測任務,對YOLOv5網絡進行輕量化改進:使用ShuffleNetV2 構建YOLOv5的主干網,減少檢測頭的通道數,并添加混合注意力機制。在自建數據集上實驗證明,該改進在少量精度損失下,大大減少了模型大小,加快了檢測速度。該改進網絡在模型大小、檢測速度和精度上取得了較好的平衡,利于在嵌入式設備上運行。