劉 鵬
(蘇州盛景信息科技股份有限公司,江蘇 蘇州 215004)
圖像分類技術在圖像檢索、用戶搜索行為分析、人臉識別等領域有著廣泛的應用前景。目前國內外學者對圖像分類和識別方向的研究都是基于開放的圖像數據集,例如有COCO[1]、CIFAR10[2]、MNIST[3]、ImageNe[4]和Fasion-MNIST等圖像集,其中,COCO圖像集是微軟發布的大規模對象檢測、分割和字幕數據集,MNIST圖像集是訓練各種數字圖像識別,同時也是最先用在卷積神經網絡的數據集,ImageNe圖像集是一個用于視覺物品識別研究的大型數據集,包含了超20 000個類別和超1 400萬個圖像以及每個圖像上的標注。Fasion-MNIST圖像集是用于衣服的識別。本文采用改進后的卷積神經網絡模型,選取包含了10個分類由60 000個32×32彩色圖像組成的CIFAR10圖像集作為訓練集,提出將圖像增強技術應用在圖像集上,通過對圖像的預處理從而達到增強圖像特征層信息的目的,有效地避免了訓練集中圖像的冗雜,從而實現對CIFAR10圖像集中所有圖像的有效分類。
2015年,何愷明在CNN的神經網絡模型中引入了一種稱為殘差網絡的新結構(ResNet)[5],殘差網絡的技術如圖1所示,可以實現連接跳過幾層的訓練并直接連接到輸出。

圖1 殘差塊
殘差網絡是為了在進一步加深網絡結構的同時,能夠學習到更精細的特征從而提高網絡精度,首先實現的一點就是恒等映射H(x)=x,所以何愷明等人將網絡設計成H(x)=F(x)+x,即F(x)=H(x)-x[5]。這樣隨著網絡的加深,F(x)便會逼近于0,從而實現恒等映射。殘差塊的優點是如果有任何層損壞了架構的性能,那么它將被正常化跳過。因此,使用殘差塊后可以訓練得到非常深的神經網絡,而不會因梯度消失或者爆炸梯度而導致的問題。ResNet50是一個易于使用和優化、具有更小的卷積核的殘差學習網絡框架,因此,本文將采用基于殘差神經網絡框架的ResNet50網絡作為圖像分類訓練的模型。
CIFAR10是一套典型的用來訓練機器學習與電腦視覺演算法的圖像集[2],其包括60 000幅32×32的10種不同類型的彩色圖片,這10個類別分別是飛機、汽車、鳥類、貓、鹿、狗、青蛙、馬、船和貨車。每一類均有6 000幅圖片,其中5 000張的訓練圖像和1 000張的測試圖像。由于CIFAR10中的圖像分辨率為32×32像素,因此該數據集通常被科研人員用于測試各種網絡,且各種卷積神經網絡也往往最擅長識別CIFAR10中的圖像。因此本文所設計的圖像分類系統選取CIFAR10作為圖像分類模型的數據集。
為了提高數據集的分類準確率,以鳥的類別為例,本文將對此采取了色彩空間轉換和噪聲注入的圖像數據增強技術。
2.2.1 色彩空間轉換
簡單的色彩強化就包括了隔離每一個色彩通道,比如,使用RGB通過隔離該矩陣和在其他的色彩通道加入二個零矩陣,就能夠使圖形迅速地轉化為它在一個色彩通道上的表現。本文將通過grey,hsv,yuv3種不同的顏色轉換來進行展示[4]。
2.2.2 噪聲注入
噪聲注入包含了一個隨機值矩陣,該矩陣一般是從高斯分布中提取的。本文將噪聲矩陣加入圖像中可以使得優化后的卷積網絡模型獲得更多的特征。可以清晰地看出加入噪聲和不加噪聲在圖片上的區別。
基于CIFAR10圖像集的圖像分類模型的構建流程如圖2所示,分為以下3步驟。

圖2 圖像分類模型構建流程
步驟1:需要從本地加載圖片,并將圖片進行預處理操作。
步驟2:建立ResNet50神經網絡模型,并利用遷移學習技術來提取圖片的特征參數。
步驟3:將輸出的特征參數進行特征匹配,設置CIFAR10圖像集中的10個分類對應10個不同范圍,如果輸出的參數在某一范圍便返回某一類別。
為了更好地優化模型,以便能提升圖像分類識別的準確率,本次模型訓練將分為以下兩個階段進行。
階段1:對已有的模型參數進行調整。由于模型中最后的特征輸出層為2 048維,所以在進行外積操作時可能會因維度過大導致顯存爆炸,因此,利用1×1卷積將特征輸出的維度降成1 024維,并添加正則化技術和激活函數來避免過擬合和梯度爆炸。由于ResNet50的訓練模型使用遷移學習進行預習的,因此可以將預先訓練的權重裝入已建立的ResNet50模型中,在提高訓練時間的前提下,達到較好的分類效果[6]。
階段2:通過對階段1中出現的損耗和精度進行觀察,并對各權重進行重新調整。利用ResNet50的預訓練模型,對殘差神經網絡進行初值重建,固定預訓練卷積層的參數,只訓練未參加預訓練的卷積層,以便獲得較好的殘差網絡參數;采用模型優化技術,在其之后加入 Dropout層和RELU線性整流函數,逐步對網絡進行優化;最后采用反向傳播算法對已優化好的殘差神經網絡進行加權更新,直到網絡收斂。
由于Pytorch-lightning可以很好地將訓練過程進行復現,考慮到訓練時間和算力的消耗,本次圖像分類模型第二階段僅迭代50次,通過Tensorboard工具將預測結果和模型損失以可視化的方式進行展現。
這里,Train_loss為訓練集的損失量,經歷了一次迭代之后,損失率便出現了大幅度下降,這是因為遷移學習已經預先加載好權重。Train_acc為訓練集的準確率,經歷了50次迭代后,訓練集的準確率已經逼近于百分之九十,由于實驗時迭代次數較少,從而導致了準確率產生波動,未能達到更高的準確率。Val_loss為測試集的損失,在經過幾輪迭代后,損失率降至1.5左右,和訓練集的損失率基本持平。Val_acc為測試集的準確率,由于測試集圖片數量相對較少,但其準確率也高達到95%,其幅度在經歷了幾次迭代后逐漸轉為平穩。
通過加載上文訓練得到的圖像權重值和構建的ResNet50模型,圖像分類實現步驟:
步驟1:為了增加結果的準確率,在進行分類識別前利用圖像增強技術對圖像進行預處理。
步驟2:分別加載訓練階段的殘差神經網絡和訓練好的權重。
步驟3:將權重和圖像進行匹配,獲得圖像的所屬類別及識別準確率。
步驟4:利用matplotlib庫將圖像和分類結果以可視化進行展示。
最后,通過CIFAR10圖像集來驗證本文模型的圖像分類結果是否達到需求,下列所示為本文模型在CIFAR1中的識別結果,從表1的結果可以看出10類圖像結果均達到了90%以上的準確率。

表1 圖像分類測試結果
本文設計的圖像分類模型引入RELU激活函數和正則化技術來對整個模型進行優化。通過ReLU激活函數可以使網絡隨機梯度下降和反向傳播算法更加有效,避免梯度爆炸和梯度消失的問題,同時在池化層的后面添加Dropout層來防止網絡過擬合。為了加快深度神經網絡的學習,可以在兩個卷積層之間施加附加的限制,從而使各層網絡的輸入平均值與方差值在某一區間。
從圖像分類預測結果可以看出,本文設計的圖像分類神經網絡模型應用到CIFAR10圖像集上的圖像分類識別準確率高,具有較好的魯棒性,識別準確率基本能夠達到90%以上。但由于硬件限制,本文實驗所采用的GPU環境都部署在云端,并不能很好地調動GPU性能,如果有計算性能更好的硬件環境和設備,在滿足最大顯存的要求下,通過提高batch_size和增加迭代次數又或者更換神經網絡模型,來提高訓練的準確率。