雷 飛,孫 康,王雪麗
(北京工業(yè)大學(xué) 信息學(xué)部,北京 100124)
牛奶作為營養(yǎng)價值很高的飲品,已經(jīng)成為了人們生活中不可或缺的一部分。隨著人們健康意識的提升,人們對牛奶的安全性也有了更高的要求。顯而易見,牛奶包裝上的生產(chǎn)日期和保質(zhì)期是直接關(guān)系牛奶是否安全的重要標(biāo)準(zhǔn)之一[1]。
生產(chǎn)日期指產(chǎn)品在工業(yè)流水線上完成全部工序后,經(jīng)過檢查并包裝成為可上市售賣的成品時的日期。當(dāng)前牛奶廠家主要通過噴碼機(jī)來實(shí)現(xiàn)牛奶生產(chǎn)日期的噴印,噴印過程快速,且成本低廉。但在噴印過程中,難免會發(fā)生生產(chǎn)日期缺印、錯印等現(xiàn)象。針對此類現(xiàn)象,傳統(tǒng)人工檢測生產(chǎn)日期的方式,不僅檢測效率低下,還會增加生產(chǎn)成本[2]。因此對牛奶生產(chǎn)日期識別的研究具有重要的現(xiàn)實(shí)意義和廣闊的應(yīng)用前景。
字符識別傳統(tǒng)算法如最近鄰算法[3]、模板匹配[4]、支持向量機(jī)[5]等,對復(fù)雜分類問題的數(shù)學(xué)表示能力有限,存在識別率低、處理速度慢等問題,不能滿足現(xiàn)實(shí)生產(chǎn)過程中牛奶生產(chǎn)日期識別的需求,因此急需一種新的方法來解決上述問題。
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)正是一種滿足牛奶生產(chǎn)日期識別需求的新方法,它是一種層與層之間局部連接的深度神經(jīng)網(wǎng)絡(luò)。作為深度學(xué)習(xí)熱門的研究方向之一,卷積神經(jīng)網(wǎng)絡(luò)已經(jīng)被成功應(yīng)用于車牌識別[6]、貨車列車車號識別[7]、行人檢測[8]等多個領(lǐng)域中。文中首先闡述了卷積神經(jīng)網(wǎng)絡(luò)和LeNet-5[9]的結(jié)構(gòu),之后對LeNet-5模型的改進(jìn)進(jìn)行了詳細(xì)說明,使其能夠很好地應(yīng)用于牛奶生產(chǎn)日期識別中。并設(shè)計了實(shí)驗(yàn)方案,對比了改進(jìn)后的LeNet-5模型與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)識別算法的性能,得到了改進(jìn)后的LeNet-5在識別率上更優(yōu)的結(jié)論,并對進(jìn)一步的研究工作進(jìn)行了展望。
卷積神經(jīng)網(wǎng)絡(luò)是人工神經(jīng)網(wǎng)絡(luò)的一種,是引起人們廣泛重視的一種高效識別方法[10-14]。卷積神經(jīng)網(wǎng)絡(luò)能夠?qū)D像直接作為網(wǎng)絡(luò)輸入,避免了前期圖像處理工作,是一種端到端的學(xué)習(xí)網(wǎng)絡(luò)模型,通過常用的梯度下降算法來訓(xùn)練參數(shù),訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)能夠從圖像中學(xué)習(xí)到某些特征,并且能夠?qū)D像的特征進(jìn)行提取和分類。
卷積神經(jīng)網(wǎng)絡(luò)是一個多層的神經(jīng)網(wǎng)絡(luò),其基本結(jié)構(gòu)包含輸入層、卷積層、池化層、全連接層及輸出層。
卷積神經(jīng)網(wǎng)絡(luò)的輸入層能夠直接接收二維圖像,并且能夠主動提取輸入圖像的數(shù)據(jù)特征、學(xué)習(xí)分類器,無需人為參與,大大減少了人工預(yù)處理過程,有助于學(xué)習(xí)與當(dāng)前分類任務(wù)最為有效的視覺特征。
卷積層是卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)核心,主要用作圖像的特征提取。通過一個可學(xué)習(xí)的卷積核對上一層的特征圖進(jìn)行卷積,再經(jīng)過激活函數(shù),就能夠獲得新的特征圖。之后繼續(xù)對特征圖進(jìn)行卷積,特征之間繼續(xù)組合卷積多個特征圖的值[15]:
(1)
卷積層之后緊跟著的是池化層。池化層通過減少網(wǎng)絡(luò)參數(shù)的方式來加快計算速度,并且也有一定防止過擬合的作用。一般地,池化層的形式如下式所示[15]:
(2)
卷積神經(jīng)網(wǎng)絡(luò)的全連接層連接在多個卷積層和池化層之后。全連接層能夠重組卷積層或池化層中具有類別區(qū)分性的部分信息。一般地,全連接層的形式如下式所示[15]:
(3)
其中,xl代表全連接層l的輸出,wl代表全連接網(wǎng)絡(luò)的權(quán)重系數(shù),bl代表全連接層l的偏置項(xiàng)。
卷積神經(jīng)網(wǎng)絡(luò)的輸出層,以全連接方式進(jìn)行傳遞。最后一層隱含層可以是卷積層或池化層,所得到的多個二維數(shù)據(jù)矩陣被重新組合成一維向量,與輸出層以全連接的方式進(jìn)行相連。該結(jié)構(gòu)能夠發(fā)掘最后提取的特征與分類結(jié)果之間的映射關(guān)系,在復(fù)雜的運(yùn)用中,輸出層可設(shè)為多層全連接。
LeNet-5模型是由Yan Lecun等人于20世紀(jì)90年代提出的一種卷積神經(jīng)網(wǎng)絡(luò)模型,最初設(shè)計用于手寫數(shù)字的識別,是卷積神經(jīng)網(wǎng)絡(luò)前期發(fā)展中最有代表性的實(shí)驗(yàn)系統(tǒng)之一。LeNet-5模型共有7層(不包括輸入層),其中第1、3和5層是卷積層,第2和4層是池化層,第6層是全連接層,第7層是輸出層。其具體結(jié)構(gòu)如圖1所示。
圖1 LeNet-5模型結(jié)構(gòu)
因?yàn)長eNet-5模型是針對手寫數(shù)字識別設(shè)計的網(wǎng)絡(luò),且考慮到網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜性不僅對模型訓(xùn)練和識別時間有影響,而且對硬件設(shè)備要求極高,很大程度上影響到了識別系統(tǒng)的通用性和實(shí)用性。因此,文中對LeNet-5進(jìn)行了改進(jìn),刪除了其C5層,將池化層S4直接與全連接層相連。改進(jìn)后的LeNet-5結(jié)構(gòu)如圖2所示。
圖2 改進(jìn)后的LeNet-5結(jié)構(gòu)
如圖2所示,改進(jìn)后的LeNet-5輸入層輸入的是28×20像素大小的牛奶生產(chǎn)日期數(shù)字圖片。之后為第一個卷積層C1,它包含6個24×16大小的特征圖,其中特征圖是由一個5×5的卷積核與輸入圖像卷積之后,通過激活函數(shù)輸出得到的。在牛奶圖像卷積過程中,由于同一特征映圖上的神經(jīng)元權(quán)值相同,因而網(wǎng)絡(luò)可以并行的學(xué)習(xí),卷積層的結(jié)果將作為池化層S2的輸入,S2層的特征圖中的每個神經(jīng)元以一個2×2大小的區(qū)域同C1層的特征圖相連,通過池化層后的特征圖個數(shù)不發(fā)生改變,大小縮小為原先的一半。
C3是第二個卷積層,S4則是第二個池化層,它們與C1、S2基本對應(yīng)一致。FC包含256個神經(jīng)元,與S4層進(jìn)行全連接,并得到輸出的輸出層。輸出層包含10個神經(jīng)元,分別對應(yīng)數(shù)字0至9,并采用Softmax函數(shù)進(jìn)行多分類,其具體公式如下所示:
(4)
其中,x表示全連接層的輸出。在激活函數(shù)方面,最初的LeNet-5模型采用的是Sigmoid函數(shù):
(5)
Sigmoid函數(shù)也被稱為Logistic函數(shù),它被用于隱含層神經(jīng)元的輸出,其取值范圍為(0,1)。
Sigmoid函數(shù)在特征相差比較復(fù)雜或是相差不是特別大時效果比較好,但易發(fā)生梯度消失的情況,從而導(dǎo)致無法完成深層網(wǎng)絡(luò)的訓(xùn)練。所以文中采用ReLU函數(shù)代替Sigmoid函數(shù)作為激活函數(shù),其中ReLU函數(shù)為:
R(x)=max(0,x)
(6)
相比Sigmoid函數(shù),ReLU函數(shù)只需要一個閾值就能得到激活值,計算復(fù)雜度低,并且能夠加快隨機(jī)梯度下降算法的收斂速度。
文中提出的基于改進(jìn)LeNet-5的牛奶生產(chǎn)日期識別方法主要包括兩部分:網(wǎng)絡(luò)訓(xùn)練和識別測試。其中,網(wǎng)絡(luò)訓(xùn)練主要是對圖像數(shù)據(jù)集訓(xùn)練實(shí)現(xiàn)CNN分類模型;識別測試主要是對待識別的牛奶生產(chǎn)日期圖像輸入訓(xùn)練完成的模型進(jìn)行識別,具體流程如圖3所示。
圖3 改進(jìn)LeNet-5的識別流程
編程采用Python3.6結(jié)合TensorFlow框架對改進(jìn)后的卷積神經(jīng)網(wǎng)絡(luò)LeNet-5模型進(jìn)行了仿真實(shí)驗(yàn),同時為了驗(yàn)證改進(jìn)LeNet-5的性能,收集到了實(shí)際來自不同品牌牛奶的生產(chǎn)日期圖像數(shù)據(jù)共200個,利用生產(chǎn)日期分割后的單個數(shù)字分別建立了1 000個訓(xùn)練樣本集和200個測試樣本集。部分牛奶生產(chǎn)日期圖像如圖4所示。
圖4 部分牛奶生產(chǎn)日期數(shù)據(jù)
分割后的牛奶生產(chǎn)日期是不同數(shù)字的單字符圖像,文中利用邊框擴(kuò)充背景像素的方式,使其滿足模型輸入層要求。同時牛奶生產(chǎn)日期多為點(diǎn)陣字符,圖像經(jīng)過二值化處理后,日期各個點(diǎn)是分離的,不利于識別。為此針對點(diǎn)陣字符的特點(diǎn),采用數(shù)學(xué)形態(tài)學(xué)中膨脹和細(xì)化的方式,使得點(diǎn)陣字符近似連接,便于圖像的訓(xùn)練及識別。如圖5所示,左側(cè)為牛奶生產(chǎn)日期點(diǎn)陣字符,右側(cè)為該字符連接后圖像。
圖5 牛奶生產(chǎn)日期點(diǎn)陣字符連接圖
訓(xùn)練學(xué)習(xí)首先要設(shè)置訓(xùn)練參數(shù),其中學(xué)習(xí)率alpha和迭代次數(shù)epochs很大程度上決定了卷積神經(jīng)網(wǎng)絡(luò)的整個訓(xùn)練效果。學(xué)習(xí)率alpha是使用隨機(jī)梯度下降算法時梯度前面的系數(shù),該參數(shù)不能置得太大或太小,參數(shù)設(shè)置過大,易導(dǎo)致算法無法優(yōu)化;參數(shù)設(shè)置過小,則會發(fā)生優(yōu)化過慢及掉入局部最優(yōu)的現(xiàn)象。
迭代次數(shù)epochs表示的是系數(shù)更新之前遍歷訓(xùn)練樣本集的次數(shù),同樣該參數(shù)不能置得太大或太小,參數(shù)設(shè)置過大,易導(dǎo)致訓(xùn)練時間過長且效果并無顯著提升;參數(shù)設(shè)置過小,則訓(xùn)練深度不夠。文中在實(shí)驗(yàn)中將alpha設(shè)置為0.01,epochs設(shè)為32,每次訓(xùn)練樣本batch為32張,每個epoch需要訓(xùn)練100次,總迭代訓(xùn)練3 200次。圖6為參數(shù)設(shè)置完成后,改進(jìn)LeNet-5網(wǎng)絡(luò)訓(xùn)練集的損失函數(shù)曲線。從圖中可以看出,迭代次數(shù)與損失函數(shù)值之間成反比,即迭代次數(shù)越大,損失函數(shù)值越小。并且在迭代250次上下時,訓(xùn)練模型能夠得到較小的損失函數(shù)值,代表訓(xùn)練已經(jīng)有了充分收斂。
圖6 損失函數(shù)變化曲線
為了驗(yàn)證改進(jìn)LeNet-5模型的識別性能,與傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)識別算法進(jìn)行了牛奶生產(chǎn)日期識別的正確率和識別耗時的比較。其中BP神經(jīng)網(wǎng)絡(luò)隱含層取450個節(jié)點(diǎn),學(xué)習(xí)率采用0.01,對比結(jié)果如表1所示。
表1 改進(jìn)LeNet-5與BP算法識別性能比較
從表1可以看出,相較于BP神經(jīng)網(wǎng)絡(luò),改進(jìn)LeNet-5網(wǎng)絡(luò)模型的識別率有著明顯的提升,但在運(yùn)算速度上差異還是較為顯著的,但是基本能夠滿足實(shí)際應(yīng)用情況。
提出一個用于牛奶生產(chǎn)日期識別的改進(jìn)卷積神經(jīng)網(wǎng)絡(luò)LeNet-5模型,主要是針對牛奶生產(chǎn)日期字符特點(diǎn),對LeNet-5模型結(jié)構(gòu)、激活函數(shù)以及網(wǎng)絡(luò)中各層特征圖的大小和數(shù)量進(jìn)行了改進(jìn),在保證識別正確率的同時,加快了訓(xùn)練和識別時間。與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)識別算法相比,改進(jìn)后的LeNet-5模型識別方法擁有更高的準(zhǔn)確率,并且識別速度能夠滿足實(shí)際應(yīng)用需求。在下一步的工作中,將繼續(xù)對識別模型進(jìn)行改進(jìn),并增大訓(xùn)練集圖像樣本,以進(jìn)一步提高識別率,并嘗試將其應(yīng)用于其他食品生產(chǎn)日期的識別中。