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