段仲靜,李少波,*,胡建軍,楊 靜,王 錚
(1.貴州大學(xué) 現(xiàn)代制造技術(shù)教育部重點實驗室,貴州 貴陽 550025;2.貴州大學(xué) 機械工程學(xué)院,貴州 貴陽 550025)
藥用膠囊在現(xiàn)實生活中隨處可見。藥用空心膠囊主要用來包裹固體藥物,對藥物顆粒起保護作用,并且解決了藥劑難以下咽、口感差等問題。膠囊的缺陷主要是雙蓋、破片、黑斑和凹陷等[1]。
傳統(tǒng)對空心膠囊缺陷檢測通常采用基于計算機視覺的模版匹配算法[2]或人工抽樣檢測。在特定的圖像采集裝置上采集膠囊圖像后,通過對完好膠囊圖像的閾值、梯度值的處理,制作成標準模版。當缺陷膠囊與標準模版不匹配時,標注圖像中不匹配位置,即膠囊存在缺陷的位置。文獻[3]提出一種基于極端學(xué)習(xí)機來提取膠囊的偏心率和圓形度為特征變量的膠囊缺陷檢測方法,檢出率為90%。文獻[4]對膠囊圖像邊緣進行了輪廓提取與跟蹤,實現(xiàn)了膠囊缺陷90.5%平均識別率。文獻[5]分析了透明膠囊的成像特性,結(jié)合閾值分割、腐蝕、輪廓提取及區(qū)域填充算法,通過最小包圍矩形測量膠囊尺寸來判斷膠囊尺寸是否有缺陷,檢出率為93.62%。本研究針對凹陷的膠囊,制作了膠囊數(shù)據(jù)集,進行缺陷識別檢測,旨在探索驗證新算法的實際應(yīng)用能力。
針對由R-CNN所代表的兩階段方法中的難題,Mask R-CNN算法[6]在2017年被何凱明等人提出。文獻指出,因為在進行ROI池化和下采樣的時候Faster R-CNN[7-8]對feature map尺寸都采用了量化操作,會對像素級別的計算精度產(chǎn)生較大影響,故Mask R-CNN用ROIAlign替換ROIPooling以至模型不對圖片做量化處理。此外Mask R-CNN添加了FCN[9]層來做語義掩膜預(yù)測,該添加層很好地避免了feature map與input image上的ROI不對準的問題,使掩碼正確率上升10%~50%;Mask R-CNN還采用過ResNeXt[10]作為基礎(chǔ)網(wǎng)絡(luò),使Fast R-CNN在COCO數(shù)據(jù)集上的正確率由19.7%增加到39.8%。
Mask R-CNN對檢測精度和實例分割在現(xiàn)階段都有相當高的水準,即便一些算法模型的性能在不斷優(yōu)化,但基本維持在同一層次。檢測速度慢、很難實現(xiàn)實時性工作需求是Mask R-CNN的一大短板。此外,實例分割領(lǐng)域的一大難題是對樣本的標注成本過高。
殘差神經(jīng)網(wǎng)絡(luò)(ResNet)[11]在2015年由微軟的何凱明等人提出,獲得ILSVRC第一名。它完成了152層超深卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,取得很好的效果,并且易于和其他的網(wǎng)絡(luò)結(jié)構(gòu)相集成。ResNet在ImageNet中定位準確率高出第二名27%,檢測準確率高出第二名16%,分類錯誤率僅為3.57%;在COCO分割中準確率高出第二名12%。ResNet目前在計算機視覺的5個重要技術(shù)鄰域都是最好,也是目前最優(yōu)的CNN模型。
ResNet的基本模塊(殘差學(xué)習(xí)單元)如圖1所示。X為模型輸入,F(xiàn)(x)+X為模型輸出,F(xiàn)(x)是模型中的數(shù)據(jù)加法或乘法計算。當H(x)=F(x)+X為模型的最優(yōu)擬合結(jié)果時,F(xiàn)(x)最優(yōu)為X和H(x)的殘差,通過殘差擬合的途徑來優(yōu)化網(wǎng)絡(luò)的性能。轉(zhuǎn)換為殘差擬合比傳統(tǒng)的卷積網(wǎng)絡(luò)優(yōu)越,這是由于網(wǎng)絡(luò)在訓(xùn)練過程中保持殘差為零,網(wǎng)絡(luò)性能也不會因增加殘差學(xué)習(xí)單元而受影響。對多個殘差學(xué)習(xí)單元進行疊加就得到了ResNet模型,理論上不論疊加多少層都不會影響網(wǎng)絡(luò)性能。
圖1 ResNet模型的基本模塊
ResNet模型的一大貢獻是實現(xiàn)了超深網(wǎng)絡(luò),避免了對神經(jīng)網(wǎng)絡(luò)不斷深化而導(dǎo)致正確率達到飽和的瓶頸問題;此外,能通過直接把輸入和輸出相連使殘差學(xué)習(xí)成為整體網(wǎng)絡(luò)的工作以達到簡化學(xué)習(xí)目標與難度的目的;另外,ResNet也是具有很好遷移性的網(wǎng)絡(luò)結(jié)構(gòu),能很方便地與其他網(wǎng)絡(luò)結(jié)構(gòu)相集成。
ROIAlign是Mask-RCNN首次應(yīng)用的一種區(qū)域特征聚合操作,使傳統(tǒng)的ROIPooling操作中對特征區(qū)域2次量化引起的區(qū)域不匹配問題得到有效處理。實驗表明,用ROIAlign替換ROIPooling可以實現(xiàn)對特征圖ROI提取,是像素級的對齊,可以提高模型檢測正確率。
1.3.1 ROIPooling的缺陷
在two-stage檢測模型(如Fast-RCNN,F(xiàn)aster-RCNN)中,ROIPooling[12]的功能是根據(jù)預(yù)選框的位置坐標在feature map中把相應(yīng)區(qū)域池化為特定大小的feature map,以便后續(xù)的bbox回歸與分類運算。模型通過回歸運算得到浮點數(shù)值的候選框位置,特征圖經(jīng)過池化后得到整型尺寸。ROIPooling運算過程會有2次量化處理:一是將候選框的坐標值取整;二是將取整過的候選框邊界區(qū)域均分為k×k個單元(bin),并對單元邊界取整。至此得到的候選框相對最初位置出現(xiàn)了偏差,從而影響分割和檢測的正確率。
1.3.2 ROIAlign 的主要思想和具體方法
針對ROIPooling的上述弊端,何凱明等提出了一種改進的ROIAlign[13]方法。ROIAlign的思路很簡單:采用雙線性插值方法,得到坐標為浮點數(shù)的像素點上的圖像值,來替換量化操作,把整個特征匯集過程轉(zhuǎn)換為不間斷的操作。值得關(guān)注的是,ROIAlign不直接填補出候選區(qū)域邊界上的坐標點,而是有著一套獨特的操作流程:先是遍歷全部候選區(qū)但對邊界坐標值不做取整處理;接著將候選框邊界區(qū)域均分為k×k個單元(bin)也不對單元數(shù)值做取整處理;然后采用雙線性插值法計算每個單元中固定的4個坐標值,最后最大池化操作。實際上ROIAlign的遍歷采樣點比ROIPooling要少,它卻能得到更優(yōu)的效果,很好地處理了像素不對齊的問題。
1.3.3 ROIAlign的反向傳播
常規(guī)的ROIPooling反向傳播公式為[14]:
(1)
式中,xi為池化前特征圖上的像素點;i×(r,j)為點yrj像素值的來源(max_pool選出的最大像素值點的位置),第r個候選區(qū)域的第j個點池化后用yrj表示。由式(1)可以看出,在池化過程中只有當某個點的像素值采用了當前點xi的像素值(即i=i×(r,j)),才在xi處回傳梯度。
根據(jù)ROIPooling,ROIAlign中對BP算法做了優(yōu)化:xi×(r,j)是BP計算得到的采樣點浮點型坐標值,在特征圖池化前,xi×(r,j)水平和垂直坐標都小于1的點都要接受對應(yīng)點yrj回傳的梯度,故ROIAlign的法向傳播公式:
(2)
式中,d(·)為兩點的距離;Δw,Δh為xi與xi×(r,j)水平和垂直坐標的差,作為雙線性插值的系數(shù)與原始梯度相乘。
設(shè)計的膠囊制造缺陷在線檢測實驗平臺系統(tǒng)如圖2所示。組件的膠囊生產(chǎn)表面缺陷在線檢測實驗平臺[15]如圖3所示。主要包括采集數(shù)據(jù)的傳感器、數(shù)據(jù)處理器、傳送帶、光源以及機械支架等構(gòu)件。采用32英寸的工業(yè)觸摸屏作為輸入數(shù)據(jù)和顯示數(shù)據(jù)的顯示屏;用具備電子滾動快門功能的MindVision高速工業(yè)相機作為圖像采集設(shè)備,因為它能夠?qū)崟r采集快速移動的待檢測產(chǎn)品樣本。采用樹莓派B3作為平臺的數(shù)據(jù)處理器;在箱體內(nèi)配置可調(diào)亮度的帶狀光源LED燈以保證箱體內(nèi)有合適的光線。另外,為了保證獲得清晰的圖像樣本,在相機外部配置了專用環(huán)形光源Microscope LED Ring Light來對待檢測樣本補光。平臺的傳送帶由可變速電機驅(qū)動,為了便于把檢測結(jié)果可視化,在箱體外側(cè)安裝了顯示器,為了減輕數(shù)據(jù)處理器的運算負荷而配置了戴爾GPU1080顯卡工作站。此外,具有無線通信功能的樹莓派B3數(shù)據(jù)處理器可以使檢測實驗平臺和工作站之間實現(xiàn)端到端的通信。工作站裝載了SQL Server 2008 R2數(shù)據(jù)庫,以達到對本地數(shù)據(jù)實時抓取和對數(shù)據(jù)自動實時云端存儲的目的。
圖2 膠囊制造缺陷檢測實驗平臺系統(tǒng)
圖3 高速膠囊制造缺陷檢測實驗平臺
膠囊通過傳送帶運送到工業(yè)相機鏡頭視野中,當光纖傳感器感受到有樣本經(jīng)過時就會給樣本采集部分發(fā)送觸發(fā)脈沖;樣本采集部分按預(yù)設(shè)指令給照明系統(tǒng)和工業(yè)相機發(fā)送啟動脈沖后實現(xiàn)對樣本圖像的捕獲。專用環(huán)形光源Microscope LED Ring Light起照明作用,照明點亮?xí)r間和相機曝光時間之間應(yīng)該相匹配。在獲取樣本圖像之后,樣本采集部分會接收到模擬信號,經(jīng)模擬數(shù)字轉(zhuǎn)換器(Analog to Digital,A/D)轉(zhuǎn)換將圖像數(shù)字化;樣本采集后數(shù)字圖像會保存到處理器或計算機的內(nèi)存里;最后,處理器將對采集到的樣本進行處理、識別、分析,以獲得檢測結(jié)果并存儲。
本實驗采集的圖像數(shù)據(jù)大小為512 pixel×512 pixel,一共采集了600個樣本圖片。Mask R-CNN不能直接輸入采集的純樣本圖片進行訓(xùn)練,需要對樣本進行標注,以獲得每個樣本對應(yīng)的label.png圖片和json文件。目前主流的制作標簽數(shù)據(jù)集的工具軟件有l(wèi)abelme、VIA、LabelBox、COCO UI等[16]。由于labelme簡單快速,可以離線運行并且能直接生產(chǎn)json文件,后面對json文件的批量轉(zhuǎn)換和label.png提取都能用一個很簡單的腳本文件實現(xiàn),所以采用labelme來制作數(shù)據(jù)集標簽。本文主要針對膠囊凹陷缺陷進行檢測識別,因此把數(shù)據(jù)集分為3類,其中T_capsule代表正常膠囊,F(xiàn)_capsule代表缺陷膠囊,sunken代表凹陷膠囊。樣本展示如圖4所示。
圖4 樣本處理展示
按訓(xùn)練集:測試集按3∶1的比例劃分訓(xùn)練集和測試集,每個數(shù)據(jù)集都包括4個數(shù)據(jù)文件夾,分別是放置每個樣本label.png圖片的cv2_mask;放置json文件的json文件夾;放置json文件轉(zhuǎn)換后產(chǎn)生如圖5所示的5個對應(yīng)文件的文件夾labelme_json和放置原始數(shù)據(jù)圖片的pic文件夾。所用膠囊是白色囊體和黃色囊蓋,其中正常膠囊樣本量為100,黃頭缺陷樣本量為100,白頭缺陷樣本量為400,其中有200個樣本是同一張圖像中2粒膠囊,其余的都是每張圖像中只有一粒膠囊。樣本圖像大小為512 pixel×512 pixel,label.png的位深為8位。
圖5 每個樣本對應(yīng)一個json文件夾
本文實驗平臺為Windows10,實驗環(huán)境CPU為Intel Core i7-6700 3.40 GHz×8。
Mask R-CNN是在Faster R-CNN的基礎(chǔ)上改進的,其中一個改進點就是Mask R-CNN中添加了mask分支,所以每個ROI的損失函數(shù)就是在Faster R-CNN損失函數(shù)的基礎(chǔ)上增加mask的損失值[16-17]:
L=Lcls+Lbox+Lmask,
(3)
式中,Lcls為分類損失函數(shù);Lbox為邊界框損失函數(shù);Lmask為掩膜損失函數(shù)。訓(xùn)練時,mask分支對每個ROI有K個m×m維度的輸出(K個(類別數(shù))分辨率位m×m的二值mask)。針對一個第K個類別的ROI,Lmask僅僅取值第K個mask,這種定義的好處就是對所有類別都會生成mask,而且不會存在類間競爭。其中一組實驗的loss值可視化如圖6所示。
圖6 損失下降曲線
訓(xùn)練數(shù)據(jù)集一共450個樣本,考慮到樣本數(shù)量較小,采取兩階段訓(xùn)練模式,即先訓(xùn)練頭部分支,然后再訓(xùn)練所有層,兩階段的epochs都各為20,batch_size=1,STEPS_PER_EPOCH設(shè)置150,使在每一個epoch都會從訓(xùn)練集中隨機抽取150個樣本來訓(xùn)練。根據(jù)經(jīng)驗值,設(shè)置頭部分支訓(xùn)練階段的學(xué)習(xí)率為0.001,在訓(xùn)練所有層時使學(xué)習(xí)率衰減10倍,為0.000 1,共迭代6 000次。
通過改變Backbone網(wǎng)絡(luò)和每個樣本訓(xùn)練的ROIs數(shù)量以及單個樣本目標數(shù)目,一共做了8組對比實驗。分別把經(jīng)典的ResNet101和ResNet50作為獲取特征的骨架網(wǎng)絡(luò),然后對每個骨架網(wǎng)絡(luò)做了ROIs分別為200和300的訓(xùn)練,得到每組實驗的實例分割mAP如表1所示。樣本測試結(jié)果展示如圖7所示。
表1 目標檢測的mAP結(jié)果對比
圖7 測試結(jié)果展示
A組表示大小為100,且每個樣本圖片只有一粒膠囊的測試集;B組表示大小為150,其中有50個樣本圖片有2粒膠囊的測試集。從實驗結(jié)果得出,每個樣本僅有一粒膠囊的mAP遠高于有多粒膠囊的樣本,圖7的結(jié)果也顯示多目標樣本的測試結(jié)果不太理想。骨架網(wǎng)絡(luò)ResNet101在mAP方面更優(yōu)于ResNet50。對于ROIs的數(shù)量,200與300的差別不大,差距在可接受的范圍之內(nèi),但是當ROIs為200時速度比300更快,如果太低又會降低準確率,所以ROIs為200是綜合最優(yōu)的。
本文論述了Mask R-CNN及其基礎(chǔ)網(wǎng)絡(luò)ResNet的結(jié)構(gòu)和優(yōu)缺點,分析了ROIPooling模塊的局限性和ROIAling替換ROIPooling的優(yōu)越性,并針對膠囊缺陷的檢測識別,設(shè)計并搭建了膠囊制造缺陷在線檢測實驗平臺。使用了two stage類的Mask R-CNN模型方法對膠囊進行缺陷檢測,實驗結(jié)果表明,本文使用的方法對膠囊缺陷檢測有較好的效果。在檢測準確率和定位精確度上two stage類算法占有優(yōu)勢,而在算法速度上one stage相對更有優(yōu)勢[18],對于本實驗方法,文獻[6]在搭載高性能GPU的實驗平臺上的運行速度是5幀每秒,基本可以實現(xiàn)實時性的要求。在今后的研究中,對速度提升將展開更多的研究。