摘 ?要:我國疆域遼闊,土壤肥沃,氣候溫和,尤其是新疆地區(qū),日照時間充足,盛產(chǎn)水果。造就了我國成為農(nóng)業(yè)生產(chǎn)大國,每年進出口非常多的水果蔬菜。據(jù)了解,在大部分農(nóng)貿(mào)市場都靠人工進行果蔬分類,工作量多且效率低下。提出一種基于MobileNet模型的果蔬識別系統(tǒng),該系統(tǒng)可以快速進行果蔬識別。該項目用了傳統(tǒng)CNN模型和更輕量化的MobileNet模型對12個不同品種的蔬果數(shù)據(jù)集進行訓(xùn)練,發(fā)現(xiàn)基于MobileNet模型的識別結(jié)果正確率更高。
關(guān)鍵詞:深度學(xué)習(xí);圖像識別;卷積神經(jīng)網(wǎng)絡(luò);MobileNet
中圖分類號:TP391.4 ? ? 文獻標識碼:A文章編號:2096-4706(2021)13-0155-04
Fruit and Vegetable Recognition System Based on MobileNet
CHEN Yifan
(School of Computer and Software, Jincheng College of Sichuan University, Chengdu, 611731, China)
Abstract: China has a vast territory, fertile soil and mild climate. Especially in Xinjiang, it has sufficient sunshine and is rich in fruits. As a result, China has become a large agricultural production country, importing and exporting a lot of fruits and vegetables every year. It is understood that in most farmers’ markets, fruits and vegetables are classified manually, which has a large of workload and low efficiency. Therefore, this paper puts forward a fruit and vegetable recognition system based on MobileNet model, which can quickly recognize fruits and vegetables. The project uses the traditional CNN model and the lighter MobileNet model to train the data sets of 12 different kinds of fruit and vegetable. It is found that the recognition result based on MobileNet model has a higher accuracy.
Keywords: deep learning; image recognition; convolutional neural network; MobileNet
0 ?引 ?言
近年來,隨著社會的快速發(fā)展,經(jīng)濟貿(mào)易的逐漸擴大,我們國家已經(jīng)成為了一個商品進出口大國,特別是農(nóng)業(yè)商品,每年的進出口量非常之大。在調(diào)查過程中,發(fā)現(xiàn)國內(nèi)大部分農(nóng)貿(mào)市場并沒有涉及有水果蔬菜識別領(lǐng)域的系統(tǒng),大多數(shù)地方都采用人工工作,于是本實驗項目設(shè)計了一個果蔬識別系統(tǒng),預(yù)期可以用于果蔬識別及分類,有效提高農(nóng)貿(mào)市場工作效率。該設(shè)計采用了卷積神經(jīng)網(wǎng)絡(luò)(CNN),CNN已經(jīng)普遍應(yīng)用在計算機視覺、自然語言處理領(lǐng)域,并且已經(jīng)取得了不錯的效果。所以在圖像識別領(lǐng)域,必然離不開廣泛使用的卷積神經(jīng)網(wǎng)絡(luò)。本項目使用了傳統(tǒng)CNN和輕量級MobileNet網(wǎng)絡(luò)模型,并借此調(diào)用數(shù)據(jù)集進行訓(xùn)練,再對訓(xùn)練后的兩個模型進行測試,并對它們的結(jié)果進行對比。
1 ?MobileNet網(wǎng)絡(luò)
1.1 ?什么是MobileNet網(wǎng)絡(luò)
MobileNet網(wǎng)絡(luò)是專注于移動端或者嵌入式設(shè)備中的輕量級CNN網(wǎng)絡(luò),相比傳統(tǒng)神經(jīng)網(wǎng)絡(luò),在準確率小幅降低的前提下大大減少了模型參數(shù)和運算量,具體可以在下面公式的推算中證明。MobileNet的基本單元是深度可分離卷積(depth wisese parable convolution),該操作又可以分為兩個操作——深度卷積(depth wise convolution)和逐點卷積(point wise convolution)。
逐點卷積(pointwiseconvolution)其實就是普通的卷積,因為傳統(tǒng)卷積核都是3×3的,但此時的point wise convolution操作采用了1×1的卷積。
1.2 ?與標準卷積網(wǎng)絡(luò)的對比
圖1展示了標準卷積和MobileNet的深度可分離卷積的兩個組成—深度卷積和逐點卷積。
(c)逐點卷積
由上圖我們可以看出:
對于圖1(a)的標準卷積(standard convolution)計算量為 :
Dk×Dk×M×N×DF×DF
對于圖1(b)的深度卷積計算量為:
Dk×Dk×M×DF×DF
對于圖1(c)的逐點卷積計算量為:
M×N×DF×DF
最后我們將屬于MobileNet網(wǎng)絡(luò)的深度卷積和逐點卷積的計算量加起來除以標準卷積的計算量,可得以下式子:
由此式可以得出結(jié)論:當(dāng)使用3×3的卷積核時,忽略極小項1/N,如果使用標準卷積,其計算量是可分離深度卷積的9倍。由此可知,如果使用MobileNet網(wǎng)絡(luò),其核心深度可分離卷積可大大幫助減少運算量,使其成為更輕量化的模型。
2 ?訓(xùn)練過程
2.1 ?數(shù)據(jù)集處理
本實驗項目借助Tensorflow框架。對12個不同類別的果蔬數(shù)據(jù)集進行訓(xùn)練,為了提高模型的泛化能力,對數(shù)據(jù)集采用數(shù)據(jù)增強手段對數(shù)據(jù)集進行處理,從而得到更多的圖像。通過數(shù)據(jù)分割,把數(shù)據(jù)分為訓(xùn)練集和測試集。因為訓(xùn)練集和驗證集的數(shù)據(jù)不能一樣,所以本實驗劃分訓(xùn)練集占80%,驗證集占20%。對兩個模型訓(xùn)練,都是先分別傳入訓(xùn)練集的目錄和測試集的目錄,加載數(shù)據(jù)集,統(tǒng)一把數(shù)據(jù)圖像處理成224x224的大小傳入模型做訓(xùn)練,為了模型一次訓(xùn)練16張圖片,batchsize設(shè)置為16,設(shè)置成16可以防止模型過擬合同時保證模型的訓(xùn)練速度更快。
2.2 ?構(gòu)建模型
加載完數(shù)據(jù)集然后就是構(gòu)建模型了,這是訓(xùn)練過程中最重要的一步。本實驗對兩個模型都做了歸一化的處理,為了方便模型調(diào)整,把像素值0~255統(tǒng)一處理到0~1之間,但兩個模型的優(yōu)化器不一樣,本次實驗在傳統(tǒng)CNN模型的訓(xùn)練中采用的是廣泛使用的SGD優(yōu)化器,而在MobileNet模型訓(xùn)練采用的是一個比較新型的Adam優(yōu)化器。這兩個優(yōu)化器之間各有千秋,SGD優(yōu)化器最大的缺點是loss下降速度慢,而且可能會在溝壑的兩邊持續(xù)震蕩,停留在一個局部最優(yōu)點。這一點可以在后面的圖像中明顯看出。而Adam是新出的優(yōu)化器,經(jīng)歷了幾代優(yōu)化器(例如SGD、SGDM、NAG、AdaGrad、AdaDelta)才誕生,顯然是前面幾代優(yōu)化器的集大成者。那么SGD-M在SGD基礎(chǔ)上增加了一階動量,AdaGrad和AdaDelta在SGD基礎(chǔ)上增加了二階動量。把一階動量和二階動量都用起來,就是Adam了。而在本實驗項目的結(jié)果中可以通過后面的表格看出確實Adam優(yōu)化器的下降函數(shù)曲線更快也更平穩(wěn),不會出現(xiàn)使用傳統(tǒng)SGD優(yōu)化器的問題。同時MobileNet的訓(xùn)練過程中采用了遷移學(xué)習(xí)的思想,因為是用MobileNet網(wǎng)絡(luò),所以該訓(xùn)練過程中采用了MobileNetV2的特征層,對主干模型的輸出進行全局平均池化(這一步的目的是替代全連接層,可以減少參數(shù)數(shù)量,防止過擬合),然后通過全連接層映射到最后的分類目錄上。兩個模型的損失函數(shù)都采用交叉熵損失函數(shù)。該項目最重要的就是構(gòu)建兩個模型,下文給出實現(xiàn)上述操作的代碼。
2.3 ?構(gòu)建CNN模型
構(gòu)建CNN模型的代碼具體為:
def model_load(IMG_SHAPE=(224, 224, 3), class_num=12):
# 搭建模型
model = tf.keras.models.Sequential([
tf.keras.layers.experimental.preprocessing.Rescaling(1. / 255, input_shape=IMG_SHAPE),
# 卷積層,該卷積層的輸出為32個通道,卷積核的大小是3*3,激活函數(shù)為relu
tf.keras.layers.Conv2D(32, (3, 3), activation=’relu’),
# 添加池化層,池化的kernel大小是2*2
tf.keras.layers.MaxPooling2D(2, 2),
# Add another convolution
# 卷積層,輸出為64個通道,卷積核大小為3*3,激活函數(shù)為relu
tf.keras.layers.Conv2D(64, (3, 3), activation=’relu’),
# 池化層,最大池化,對2*2的區(qū)域進行池化操作
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation=’relu’),
# 通過softmax函數(shù)將模型輸出為類名長度的神經(jīng)元上,激活函數(shù)采用softmax對應(yīng)概率值
tf.keras.layers.Dense(class_num, activation=’softmax’)
])
model.summary()
# 指明模型的訓(xùn)練參數(shù),優(yōu)化器為sgd優(yōu)化器,損失函數(shù)為交叉熵損失函數(shù)
model.compile(optimizer=’sgd’, loss=’categorical_crossentropy’, metrics=[‘a(chǎn)ccuracy’])
return model
2.4 ?構(gòu)建MobileNet模型
構(gòu)建MobileNet模型的代碼具體為:
def model_load(IMG_SHAPE=(224, 224, 3), class_num=12):
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=False,
weights=’imagenet’)
base_model.trainable = False
model = tf.keras.models.Sequential([
# 進行歸一化的處理
tf.keras.layers.experimental.preprocessing.Rescaling(1. / 127.5, offset=-1, input_shape=IMG_SHAPE),
base_model,
# 對主干模型的輸出進行全局平均池化
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(class_num, activation=’softmax’)
])
model.summary()
# 模型訓(xùn)練的優(yōu)化器為adam優(yōu)化器,模型的損失函數(shù)為交叉熵損失函數(shù)
model.compile(optimizer=’adam’, loss=’categorical_crossentropy’, metrics=[‘a(chǎn)ccuracy’])
return model
2.5 ?繪制訓(xùn)練圖像
為了直觀演示訓(xùn)練過程,訓(xùn)練完分別繪制兩個模型訓(xùn)練過程的曲線。包括準確率和loss圖像。圖2是CNN的準確率和loss圖像,圖3是MobileNet訓(xùn)練的準確率和loss圖像。
對上面兩圖分析,可以明顯看出共同點,隨著訓(xùn)練epoch(輪數(shù))的增加,Accuracy(準確率)都是逐漸上升,CrossEntropyloss(交叉熵損失)也隨訓(xùn)練輪次逐漸下降。但可以明顯看出,圖3的MobileNet模型訓(xùn)練中,它的準確率幾乎是陡然上升,大概是只訓(xùn)練了5輪就大概達到了接近100%的正確率,而在圖2模型的訓(xùn)練過程中,幾乎是16輪訓(xùn)練完才勉強達到了75%的正確率。在loss下降的圖像中可以看出MobileNet的下降是平穩(wěn)快速無震蕩,而CNN模型下降得慢而且有震蕩。所以圖像顯示本實驗對MobileNet的訓(xùn)練過程非常好,該曲線符合一般模型訓(xùn)練圖像走勢,并沒有過擬合情況的發(fā)生。
3 ?實驗分析及結(jié)果
3.1 ?實驗分析
Heatmap作為目前最常見的一種可視化手段,因其豐富的色彩變化和生動飽滿的信息表達被廣泛應(yīng)用于各種大數(shù)據(jù)分析場景,所以在測試模型的過程中選擇了繪制heatmap圖。模型訓(xùn)練好后我們調(diào)用模型對驗證集的數(shù)據(jù)進行測試,測試完將結(jié)果顯示在heatmap圖上。該圖可以直觀反映對數(shù)據(jù)集的測試結(jié)果,如圖4圖5所示。同時可以對比兩個模型訓(xùn)練結(jié)果及識別情況,圖4是經(jīng)典CNN模型的heatmap,圖5是MobileNet模型的heatmap。
通過上面兩圖可以明顯看出,在訓(xùn)練完CNN模型后,測試結(jié)果顯示對蔬果識別并不準確,尤其是在對大蔥、梨、西紅柿等蔬果的識別,識別正確的概率非常低。由此可見此模型對數(shù)據(jù)集訓(xùn)練后用來識別的效果并不理想。而圖5是用輕量化網(wǎng)絡(luò)模型MobileNet對數(shù)據(jù)集訓(xùn)練后的測試結(jié)果。通過對顏色的深淺可以明顯看出,在對12個不同蔬果種類的測試中,對8個種類蔬果的識別準確率都達到了100%,只有少數(shù)把土豆識別成芒果,大蔥識別出韭菜等錯誤,原因可能是這兩種蔬果顏色、形狀等特征相似,如果訓(xùn)練更多蔬果的特征圖會改善此問題。由此可得出結(jié)論,MobileNet網(wǎng)絡(luò)模型在本實驗項目中,得到識別正確結(jié)果的準確率比較高,總錯誤率不超過0.3%。所以該系統(tǒng)采用MobileNet網(wǎng)絡(luò)模型更好。
3.2 ?實驗結(jié)果
模型訓(xùn)練完畢后,我們隨便在網(wǎng)絡(luò)上搜索果蔬的網(wǎng)圖,運行此程序進行識別,在通過測試了蘋果、香蕉以及錯誤率最高的芒果后,得出結(jié)果都是正確識別,如圖6圖7所示。但可能隨著測試次數(shù)的增加,會有識別錯誤情況以及錯誤概率的提升。因為驗證集的測試結(jié)果顯示并不是每張圖都是完全正確識別,還是有小部分錯誤識別的狀況,造成錯誤識別的原因可能是數(shù)據(jù)集或訓(xùn)練epoch的原因,如果提高數(shù)據(jù)集數(shù)量和訓(xùn)練的epoch次數(shù)會使識別準確率更高,如果要達到每張圖都能完全正確識別的狀態(tài)還有待進一步地優(yōu)化提升。
4 ?結(jié) ?論
本實驗項目設(shè)計并實現(xiàn)了一種基于MobileNet的果蔬識別系統(tǒng),訓(xùn)練模型采用了MobileNetV2的特征層,Adam優(yōu)化器和交叉熵損失函數(shù)。訓(xùn)練結(jié)果顯示相比傳統(tǒng)CNN模型,MobileNet模型的精度更高,但本實驗中通過測試發(fā)現(xiàn)識別正確率還有待提升,為了能夠投入商業(yè)化應(yīng)用還有待進一步優(yōu)化,以提高果蔬檢測的準確度和穩(wěn)定性。
參考文獻:
[1] HOWARD A G,ZHU M L,CHEN B,etal. MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications [J/OL].arXiv:1704.04861 [cs.CV].https: //arxiv.org/abs/1704.04861.
[2] 高淑萍,趙清源,齊小剛,等.改進MobileNet的圖像分類方法研究 [J].智能系統(tǒng)學(xué)報,2021,16(1):11-20.
[3] 陸飛,沈世斌,蘇曉云,等.基于改進Mask R-CNN的交通監(jiān)控視頻車輛檢測算法 [J].南京師范大學(xué)學(xué)報(工程技術(shù)版),2020,20(4):44-50.
[4] 張焯林,曹飛龍.基于MobileNet的輕量級網(wǎng)絡(luò)構(gòu)建及其超分辨率圖像重建 [J].中國計量大學(xué)學(xué)報,2019,30(1):56-64+103.
[5] 高洋,陳萬米,林城.基于SSD-MobileNet的投籃機器人目標識別算法 [J].工業(yè)控制計算機,2021,34(6):51-53.
[6] 江南大學(xué).基于MobileNetV3的實時人臉檢測方法:CN110647817A [P].2020-01-03.
[7] 張?zhí)諏帲惗鲬c,肖文福.一種改進MobileNet_YOLOv3網(wǎng)絡(luò)的快速目標檢測方法 [J].小型微型計算機系統(tǒng),2021,42(5):1008-1014.
[8] 張駿,朱標,吉濤.基于MobileNet-SSD的紅外人臉檢測算法 [J].激光與紅外,2021,51(1):107-113.
作者簡介:陳怡帆(2000—),男,漢族,四川南充人,本科在讀,研究方向:機器學(xué)習(xí)。