張春玲,向洪波,楊新年,秦春波,孫世光
(黑龍江工業學院 電氣與信息工程學院,黑龍江 雞西 158100)
秋冬季節,雞西地區快遞公司每日出口郵件約100萬件,進口200~300萬件。在雞西郵件處理中心,轉運人員需要將進口的所有車輛上的郵件按照地址分到所屬區縣,再由趟車將這些郵件運輸到對應位置進行投遞[1]。營投人員需將每日收寄的郵件按出口省份進行分揀,裝上對應車輛。雙11、雙12期間郵件暴增,這使轉運人員負載過重、不能及時處理郵件,導致客戶反應時效性較差。另外,雨雪天氣[2]、高速封路等原因也會導致在許多郵件在郵件處理中心積壓[3]。為了解決上述問題,快速、準確地實現郵件的自動分揀已經成為亟須解決的問題。本文提出了基于圖像的郵件分類模型,通過給定圖像,機器就可以實現自動分類,從而實現對郵件分揀。該方法與傳統手動分揀相比耗時少、成本低,有利于提高客戶體驗[4]。
本文采集雞西進口郵件900余件。進口郵件需要按所屬區縣進行分類,主要分為雞冠區、恒山區、城子河區、滴道區、梨樹區、麻山區、雞東縣、密山縣、虎林9個區域。按地域隨機提取每個區域郵件100個。在郵件上做好標注后,將電子面單撕下、帶回。用打印機掃描得到每個區域電子面單圖像100個,共計900個數字圖像。建立9個地區的郵件面單文件夾,用于處理。
(1)環境準備:安裝anoconda 3.7,pycharm 用于編譯和集成的實驗環境。安裝 TensorFlow,requests,numpy,seaborn,pandas,keras等用于深度學習的包。
(2)樣本均衡:樣本平衡與否直接關系模型預測準確度。在訓練時,如果某一類樣本數量較多,會導致模型準確度不高。為了防止9個不同地域樣本出現不均衡的情況,常用的解決數據不平衡問題的方法有上采樣和下采樣[5]。上采樣是通過增加樣本個數達到平衡的一種方法,增加少量的樣本個數使樣本數達到均衡。下采樣是減少樣本的個數,從較多的樣本中抽取一部分,使其與少數類別的樣本達到平衡的狀態[6]。
(3)訓練集和預測集構建:為了便于評估模型預測的性能,需要建立訓練集和測試集。在處理時,保留原有圖像文件。單獨建立訓練集和測試集文件夾。為了使抽取的圖像具有隨機性,將每個類別的圖像文件名順序打亂。選取前20%作為測試集,其余80%作為訓練集。這樣訓練集和測試集下各有9個文件夾。
(4)數據增強:為了增加模型泛化能力,防止因圖像模糊、方位變換等問題[7],導致在測試時,不能準確識別未知圖像的問題。需要對訓練集數據進行旋轉、平移、縮放等處理,增加不同類別訓練數據集泛化能力。
(5)圖像剪切:將訓練集、測試集及數據增強后圖像調整至一致大小400 px×300 px。為了提高郵件分類準確率,對圖像進行剪切。選取圖像中間的有收件人位置的信息圖像,裁剪位置為(width/2-112,height/2-112,width/2+112,height/2+112) px。剪切后的圖像變成224 px×224 px大小圖像,將剪切后圖像重新存儲。
(6)數據加標簽:訓練數據集和測試數據集下圖片建成2個csv文件,csv文件中包含圖像數據和標簽數據。圖像數據是讀取的訓練和測試文件夾下圖像數據,而標簽數據是根據分類好的文件夾進行人為設定,每個類別對應標簽為1~9。
Vgg16是卷積網絡的一種,16是指含有權重的卷積層和全連接層層數,而不是全部層數。圖像經過13個卷積層[9],2個全連接層,1個輸出層,如表1所示。通過4個池化層,圖像的維數從開始224 px×224 px變成7 px×7 px,雖然圖像維數有所減少,但圖像的通道數逐漸增加,用于提取圖像的特征越來越多。VGG是深層網絡,網絡參數非常多,參數數量=圖像像素大小×上層通道數×本層通道數。因為深度學習計算量大、內存占用較高、訓練速度慢,所以一般采用訓練好的模型進行預測或在訓練好的模型上進行精調。卷積神經網絡雖然準確率較高,但模型參數較多、訓練起來難度大。VGG一共16層,參數達到96 M,極大浪費內存[10]。因此使用已經訓練好的預定義模型來進行預測比較簡單。

表1 VGG模型結構及參數
遷移學習是將已經訓練好的模型用于未知數據集上,主要是將已經訓練好的網絡前n層復制到目標網絡中,剩下的層開始訓練。但為了防止過擬合,通常根據目標數據集的大小選擇是否凍結前n層的參數。
由于VGG模型參數較多,可以在訓練時采用網絡上已經訓練好的模型權重進行初始化以減少訓練時間。本文在電子面單分類時,對VGG模型結構進行調整。使調整后模型結構圖含有卷積層、池化層、全連接層和輸出層,如圖1所示。調整結構時,保留用于提取圖像特征的卷積和池化層 、刪除原來1 000個類別的輸出層。重新建立預測模型,在最后一個輸出為4 096的全連接層上增加2個新的全連接層,分別是單通道輸出為256的全連接層,單通道輸出為9的輸出層。隨機丟棄比率dropout為設為0.5,調整后模型結構如圖1所示。

圖1 調整后VGG模型結構
3.3.1 調參步驟
卷積神經網絡通過正向傳播獲得損失函數的值,反向傳播更新參數。通過設定的輪數,來控制迭代的次數。具體求解過程如下:
(1)隨機初始化所有卷積層和全連接層的權重。
(2)根據輸入的圖像和初始化的權重通過前向傳播得到網絡的輸出,計算分類的概率,概率最大的類別為對應的圖像類別。
(3)根據損失函數確定網絡的損失,分類采用交叉熵損失。損失函數表示如下:
說明:i表示樣本下標,j表示類別下標。p表示標簽值,q表示預測概率,m為樣本數900,n為類別數9。
(4)Adam算法是動量法與RMSprop算法的結合,動量法從方向上改進,而RMSprop從學習率上進行改進。具體如公式(1)所示:
v(t)=ρ1v(t-1)-(1-ρ1)g(t)
s(t)=ρ2+(1-ρ2)g(t)?g(t)
(1)
說明:g為通過反向傳播求得,ρ1,ρ2,ε,w(0)為常數。
w(t+1)是根據w(t)計算的結果,通過迭代,對權重w進行更新,使得更新后模型的分類損失逐漸減小,直至最小,最終確定模型參數。
3.3.2 卷積層
卷積層為局部感受野范圍內元素與卷積核的線性疊加,是對應元素先相乘后相加的結果。卷積層為線性變換,矩陣展開式如公式(2)所示:
net11=a11w11+a12w12+a21w21+a22w22
net12=a12w11+a13w12+a22w21+a23w22
net21=a21w11+a22w12+a31w21+a32w22
net22=a22w11+a23w12+a32w21+a33w22
(2)
根據輸入圖像按不同等級的分類輸出,除了線性變換外,還需要非線性變換的激活函數relu,激活函數矩陣如公式(3)所示:
(3)
參數說明:a為正向傳播上層計算結果,計算當前層時已經確定值,w為對應權重,net為線性疊加結果,σ為激活函數。
為方便計算權重w梯度,引入誤差項,其含義為損失函數對當前凈輸入的偏導數,即損失函數對激活層之前的數值net求偏導。根據鏈式求導法則,得出對l層誤差項=l+1層誤差項×權重矩陣w×激活函數的導數,如公式(4)得到每層誤差項的關系。
δ(l+1)W(l+1)σ′(net(l))
(4)
說明:反向傳播,從后向前傳遞。求l層誤差項,由l+1層誤差項和l+1層w已經確定。
在卷積層中,卷積核中的每個權重都參與多個結果的輸出,如公式(1)所示,一個權重w11參與net11,net12,net21,net224個結果的輸出,因此對w11求偏導時,需要對與w11有關的4個結果net11,net12,net21,net22先求偏導,然后再對a求偏導,計算卷積核中4個權重的參數,如公式(5)所示。
(5)
梯度為誤差項與對應輸入的線性疊加,其中誤差項已經由公式(4)求得。將求得的梯度(5)代入Adam算法公式(1),對學習率和梯度方向進行更新,求得卷積層參數值。
3.3.3 池化層
池化層也稱降采樣層是對提取到圖像進行全局縮放,經過縮放后的圖像可以更好地顯示全局特征。通常的池化層包括最大池化和平均池化,因此在進行反向傳播時,進行首先升維,然后將圖像還原為原始圖像。
如果采用2 px×2 px的池化層,則將圖像升維成4 px×4 px的圖像,在原始圖像四周填0。如果是最大池化,根據標記位置,左上、右下、右上、左下還原原始圖像。
3.3.4 輸出層
softmax的導數:softmax屬于多類分類輸出層激活函數。輸出結果為各個類別的概率。假設z1=w1x+b,z2=w2x+b,z3=w3x+b,…z9=w9x+b9個輸入,經過softmax函數激活后,得到每個類別概率。

當k=i時,
sk(1-sk)
(6)
說明:正向傳播時w,b均為已知,求得s。s為每個類別對應的輸出概率。由輸出概率得到損失L。

(8)
將(6)和(8)代入式(7)中,得到損失函數對z的偏導,推導如下:

說明:輸出層損失函數對w的梯度=損失函數對輸出類別s的偏導×s對z的偏導×a偏導,從而求得輸出層權重參數。
由于卷積神經網絡參數較多,模型復雜度較高,當模型復雜度高于樣本復雜度時會發生過擬合,而導致測試集準確率降低。通常采用優化方法對模型進行優化,常用優化方法有丟棄法和早停法。
(1)丟棄法:隨機丟棄一定比例神經元。當丟棄一部分神經元后,每次訓練時,模型結構完全不同。采用不同的模型結構進行訓練,相當于bagging。根據多次預測結果,選取投票次數最多的類別作為最終類別,從而避免發生過擬合。
(2)早停法:合理的訓練集準確度在83%~93%,當訓練集準確度過高,在測試集上準確率反而會降低,相當于根據訓練集繪制的圖像,而沒有學習能力,不能在未知數據集上進行預測。因此需要觀測訓練集的準確率,當訓練集準確率達到某一數值時,提前停止訓練。
本文通過深度學習框架Keras進行編程,采用VGG預訓練模型,對全連接層和輸出層進行精調,對雞西地區電子郵件面單進行分類,針對每個類別的數據,進行測試,得到預測值和真實值之間的差異。得到訓練集和驗證集上輪數和準確率評價圖像,如圖2所示。訓練集準確率隨迭代次數在不斷提高,而驗證集準確性剛開始隨迭代次數增加而增加,但迭代次數到達6后,出現大幅度震蕩,迭代次數達到8時,出現最優值。

圖2 訓練效果
所以迭代次數達到8時模型分類效果較好達到92.5%,實現了郵件的自動分類。