劉 巍
(紅云紅河煙草(集團(tuán))有限責(zé)任公司昆明卷煙廠,云南 昆明 650202)
卷積神經(jīng)網(wǎng)絡(luò)算法(CNN)在圖像分類、圖像分割和目標(biāo)檢測(cè)等領(lǐng)域獲得廣泛應(yīng)用,但隨著性能要求越來越高,效率問題逐漸顯現(xiàn)。只有解決CNN效率問題,才能更廣泛地應(yīng)用。目前,使用輕量化模型正是解決此種問題的一種途徑,輕量化模型設(shè)計(jì)在于更高效的網(wǎng)絡(luò)計(jì)算方式,從而使網(wǎng)絡(luò)參數(shù)減少的同時(shí),不損失網(wǎng)絡(luò)性能。本文采用輕量化SqueezeNet模型作為小包外觀識(shí)別算法,之后將其部署到樹莓派上,實(shí)現(xiàn)對(duì)小盒的外觀檢測(cè)。
樹莓派由Raspberry Pi基金會(huì)開發(fā),外形只有信用卡大小。它是一款基于ARM的微型電腦主板,以SD/Micro SD卡為內(nèi)存硬盤,卡片主板周圍布有USB接口和以太網(wǎng)接口,可連接鍵盤、鼠標(biāo)和網(wǎng)線,以上部件全部整合在一張僅比信用卡稍大的主板上,具備所有PC的基本功能。
SqueezeNet是一種輕量化卷積神經(jīng)網(wǎng)絡(luò),由伯克利和斯坦福的研究人員合作發(fā)表于ICLR-2017。該算法不同于傳統(tǒng)的卷積網(wǎng)絡(luò),提出fire module,fire module包含兩部分,分別是squeeze層和expand層。squeeze層,就是1*1卷積,其卷積核數(shù)要少于上一層feature map數(shù)。expand層分別用1*1和3*3卷積,然后合并起來,如圖1所示。
圖1 fire module模型
輸入128個(gè)feature map,經(jīng)過fire module輸出后,同樣得到128個(gè)feature map。使用SqueezeNet算法有效減少神經(jīng)網(wǎng)絡(luò)權(quán)值參數(shù),還可進(jìn)行實(shí)時(shí)計(jì)算,減少算法計(jì)算時(shí)間。
本文所使用的圖像數(shù)據(jù)來自某卷煙廠52#號(hào)機(jī)FOCKE-FXS機(jī)型視覺成像系統(tǒng),所采圖像為近半年的數(shù)據(jù),包括缺陷剔除圖像與正常圖像,其中缺陷剔除圖像共587張,正常圖像295張,原始圖像尺寸大小為451像素×451像素,圖像經(jīng)過尺寸變換,轉(zhuǎn)化為227像素×227像素×3的圖像。
小包正面外觀缺陷包括商標(biāo)缺陷與印花缺陷2種,典型缺陷如圖2所示。
圖2 典型缺陷
針對(duì)小包外觀檢測(cè),本文設(shè)計(jì)了一種SqueezeNet卷積神經(jīng)網(wǎng)絡(luò)架構(gòu),如圖3所示。輸入的圖像數(shù)據(jù)是227像素×227像素×3的RGB圖像,作為網(wǎng)絡(luò)的輸入層。接下來是1層卷積層與池化層,conv1層卷積過濾器大小是3×3×3,卷積過濾器共有64個(gè),卷積步長為2,pool1為池化層,步長為2,進(jìn)行3×3的最大池化。網(wǎng)絡(luò)結(jié)構(gòu)中fire2、fire3、fire4、fire5、fire6、fire7、fire8、fire9是fire module層。經(jīng)過fire2、fire3得到128個(gè)特征圖,pool3為池化層,步長為2,進(jìn)行3×3的最大池化;經(jīng)過fire4、fire5,得到256個(gè)特征圖,pool5為池化層,步長為2,進(jìn)行3×3的最大池化;進(jìn)入fire6、fire7,得到384個(gè)特征圖,經(jīng)過fire8、fire9,得到512個(gè)特征圖;之后通過一個(gè)dropout層,dropout參數(shù)為50%;conv10與pool10為卷積層與池化層,conv10層卷積過濾器大小為1×1×512,卷積過濾器共有1 000個(gè),pool10步長為1,經(jīng)過14×14的平均池化;fc層為全連接層,將三維的圖像數(shù)據(jù)轉(zhuǎn)換為一維的數(shù)據(jù),便于進(jìn)行分類。最后1層為輸出層,使用softmax函數(shù)對(duì)小包外觀進(jìn)行分類,得到小包缺陷(defective)與正常(good)2種情況的識(shí)別概率。此外,在各卷積層后的激活函數(shù)為ReLU激活函數(shù)。
圖3 SqueezeNet網(wǎng)絡(luò)結(jié)構(gòu)
按照設(shè)計(jì)的模型結(jié)構(gòu),在MATLAB中使用神經(jīng)網(wǎng)絡(luò)工具箱生成卷積神經(jīng)網(wǎng)絡(luò),學(xué)習(xí)率設(shè)定為0.000 1,訓(xùn)練輪數(shù)為800輪,Minibatch取4,即每批次計(jì)算4個(gè)輸入圖像,選擇交叉熵?fù)p失函數(shù)作為優(yōu)化函數(shù),使用訓(xùn)練數(shù)據(jù)集對(duì)小包外觀識(shí)別的訓(xùn)練結(jié)果如圖4所示,迭代15 700次以后,模型逐漸趨于穩(wěn)定,準(zhǔn)確率達(dá)到97%以上。
圖4 訓(xùn)練集迭代識(shí)別準(zhǔn)確率曲線
訓(xùn)練過程中的損失函數(shù)曲線如圖5所示,隨著迭代的逐漸增加,損失函數(shù)逐漸降低并趨于穩(wěn)定,穩(wěn)定后的數(shù)值保持在0.01以下。
圖5 損失函數(shù)
用事先分配好的10%隨機(jī)驗(yàn)證集,在每次迭代完成,計(jì)算得到權(quán)重值后,使用驗(yàn)證集進(jìn)行驗(yàn)證,驗(yàn)證數(shù)據(jù)集與測(cè)試數(shù)據(jù)集基本一致,在迭代15 700次以后,達(dá)到穩(wěn)定。進(jìn)行15 700次迭代(800輪)后,得到模型最終權(quán)重值。之后,重新獲得小包外觀數(shù)據(jù)集,對(duì)算法進(jìn)行驗(yàn)證,結(jié)果見表1。
表1 數(shù)據(jù)集識(shí)別結(jié)果
由表可知,全部數(shù)據(jù)集識(shí)別準(zhǔn)確率達(dá)到99.66%,效果較好,比常規(guī)卷積神經(jīng)網(wǎng)絡(luò)識(shí)別準(zhǔn)確率要高,說明使用的SqueezeNet模型是有效的。
樹莓派操作系統(tǒng)為Raspbian Stretch,要運(yùn)行SqueezeNet卷積神經(jīng)網(wǎng)絡(luò)算法,還需要安裝OpenCV、ARM Compute Library兩個(gè)庫。之后,使用MATLAB的cnncodegen函數(shù)生成SqueezeNet C++代碼,通過編譯,產(chǎn)生可執(zhí)行文件object_recogition。
使用一張印花歪斜的圖片,如圖6(a)所示,圖片識(shí)別處理時(shí)間為769 ms,圖片被識(shí)別為缺陷的概率為100.0%,識(shí)別為正常的概率為0.0%,圖片識(shí)別正確。
使用一張印花正常的圖片,如圖6(b)所示,圖片識(shí)別處理時(shí)間663 ms,圖片被識(shí)別為正常的概率為97.3%,缺陷的概率為2.7%,圖片識(shí)別正確。
圖6 煙包識(shí)別結(jié)果
本文采用SqueezeNet卷積神經(jīng)網(wǎng)絡(luò)作為小包外觀檢測(cè)的識(shí)別算法,經(jīng)過算法學(xué)習(xí)與算法驗(yàn)證,取得較好的效果,小包外觀檢測(cè)識(shí)別準(zhǔn)確率達(dá)到99.66%。之后,使用樹莓派作為實(shí)現(xiàn)硬件,在樹莓派系統(tǒng)上編譯SqueezeNet算法,生成可執(zhí)行程序,圖像輸入樹莓派中進(jìn)行驗(yàn)證,結(jié)果顯示在樹莓派上運(yùn)行的程序能正確對(duì)卷煙小包外觀進(jìn)行識(shí)別,具有實(shí)際應(yīng)用價(jià)值。