趙海越 黃昭縣 寧玉富
(山東青年政治學(xué)院 山東省濟(jì)南市 250000)
在超市和市場中,消費者購買果蔬需要完成等待稱重、計價、貼碼,付款等一系列復(fù)雜的流程,而完成流程所需的時間長、精度低、速度慢,這必然會降低消費者的購物體驗[1]。同時,該過程也需要商家招聘相應(yīng)的人員來完成稱重、計價、貼碼等流程。這對于商家來說,無疑是加大了人力成本,且造成了一定的人力資源損失。
近年來,如何利用AI技術(shù)實現(xiàn)果蔬自助銷售,引起人們的廣泛關(guān)注。在2020年張建強(qiáng)等人[2]提出了基于機(jī)器視覺的果蔬自動銷售系統(tǒng),該系統(tǒng)利用了機(jī)器視覺技術(shù)實現(xiàn)了分類識別功能。但是其神經(jīng)網(wǎng)絡(luò)構(gòu)造簡單,還存在著檢測速度慢、識別易混淆、需要PC上位機(jī)才能實現(xiàn)其功能等問題。
而毛穎穎等人[3]針對果蔬識別開發(fā)了相應(yīng)的深度學(xué)習(xí)算法,通過Android端采集圖像,在其建立的專屬數(shù)據(jù)庫完成對果蔬的識別和分類,最終取得了不錯的效果。毛穎穎等人在研究過程中,發(fā)現(xiàn)了不同的外部環(huán)境會對識別效果產(chǎn)生不同的影響。但是,毛等人并未重視該影響,只是將實驗至于不同環(huán)境下進(jìn)行多次測試。
在2015年Joseph Redmonsho開發(fā)了YOLO[4]算法模型。YOLO算法在檢測物體方面具有速度快的優(yōu)勢,但在識別精度上與Fast R-CNN[5]相比略有不足。后來Joseph Redmonsho提出了精度更高,識別速度又快的YOLO9000[6]、YOLOv3[7]等模型算法。
由于YOLO系列算法具有檢測速率快、識別度高等優(yōu)點,常常被工業(yè)界搭載到嵌入式設(shè)備上替代傳統(tǒng)的人工檢查崗位。因此,本文提出,在嵌入式設(shè)備上攜帶YOLOv3-M深度學(xué)習(xí)算法,使該設(shè)備能夠準(zhǔn)確、快速地識別果蔬。并設(shè)計自動計價算法,實現(xiàn)設(shè)備在識別果蔬后,能夠同步計算出其重量、價格。經(jīng)試驗,該設(shè)備能獨立完成識別、稱重、計價等功能,可以有效的提高果蔬交易速度,減少人力支出成本,為消費者和商家提供了更加省時、省心、省力的交易方式。
該設(shè)備由三部分組成:主控板(Raspberry 4B)、識別模塊、稱重模塊,具體如圖1所示。
圖1:設(shè)備總體結(jié)構(gòu)示意圖
主控板為Raspberry 4B,Raspberry 4B搭載Linux系統(tǒng),支持Python等編程語言,價格便宜,性能良好。
識別模塊由USB攝像頭組成。稱重模塊由HX711芯片和應(yīng)變電阻傳感器組成的,其稱重范圍為0-5kg。
整體工作流程如下:
(1)消費者將所購買的果蔬放在搭載稱重模塊的電子秤上,電子秤檢測到有物體放入,激活處于休眠狀態(tài)中的攝像頭,攝像頭捕獲果蔬圖像。
(2)攝像頭將捕獲到的果蔬圖像傳入主程序,再由主程序上的YOLO-M算法檢測物體種類。
(3)稱重模塊將物體重量傳入主程序中,主程序根據(jù)YOLO-M算法識別的果蔬種類,調(diào)用MySQL數(shù)據(jù)庫中所存儲的果蔬價格。
(4)樹莓派計算果蔬總價,并將最終果蔬的種類、重量、單價和總價等信息展示在顯示屏上。
數(shù)據(jù)集樣本主要為網(wǎng)上采集的圖片,水果蔬菜共六類:蘋果、橘子、土豆、白菜、香蕉、黃瓜,每類一百張樣本,共計六百張樣本。用Labelimg工具標(biāo)記數(shù)據(jù)樣本。
在深度學(xué)習(xí)中,訓(xùn)練樣本的數(shù)量十分重要。樣本數(shù)量的多少,質(zhì)量的好壞,將直接影響模型的訓(xùn)練狀態(tài)和最終效果。為解決F&V數(shù)據(jù)集樣本量少的問題,采取了數(shù)據(jù)增強(qiáng)的方式,對圖像進(jìn)行了旋轉(zhuǎn)、放縮、超分辨率、浮雕、明亮、陰暗等處理。這樣處理的好處是,不僅解決了數(shù)據(jù)集樣本少的問題,還解決了未來設(shè)備檢測環(huán)境多樣性、復(fù)雜性等問題,在一定程度上增加了模型抗干擾的能力。最終,經(jīng)過處理的F&V數(shù)據(jù)集樣本數(shù)量達(dá)到了3600張。
最后,將處理好的數(shù)據(jù)樣本分為三組,即:訓(xùn)練集、測試集和驗證集。訓(xùn)練集負(fù)責(zé)訓(xùn)練模型,測試集用于測試模型是否具有良好的性能,驗證集可以在訓(xùn)練過程中檢查模型的情況,并且可以根據(jù)模型的當(dāng)前狀態(tài)調(diào)整最優(yōu)的學(xué)習(xí)狀態(tài),使模型達(dá)到預(yù)期良好的效果。
本文按將訓(xùn)練集和測試集按照9:1的比例進(jìn)行劃分,將訓(xùn)練集和驗證集按照訓(xùn)練集中的9:1比例進(jìn)行劃分,圖2展示了部分F&v數(shù)據(jù)集。
圖2:部分F&V數(shù)據(jù)集
YOLOv3是以Darknet-53為主要神經(jīng)網(wǎng)絡(luò),F(xiàn)PN特征金字塔為負(fù)責(zé)加強(qiáng)特征提取的深度學(xué)習(xí)算法,YOLOv3結(jié)構(gòu)如圖3所示。
圖3:YOLOv3結(jié)構(gòu)圖
YOLOv3算法使用了殘差網(wǎng)絡(luò)結(jié)構(gòu),模型可以適當(dāng)加深網(wǎng)絡(luò)結(jié)構(gòu),以提高算法準(zhǔn)確率。主干神經(jīng)網(wǎng)絡(luò)Darknet-53在卷積特征圖上進(jìn)行BN批標(biāo)準(zhǔn)化和LeakyReLU非線性函數(shù)激活。其中,LeakyReLU激活函數(shù)相較于以往的ReLU激活函數(shù)有所不同。ReLU激活函數(shù)在輸入小于0時輸出值為0,而LeakyReLU則是在小于0的輸入部分,按照斜率α取負(fù)值,公式如(1)所示:
這樣處理的優(yōu)點是,可使得輸入小于0的神經(jīng)元參與模型的訓(xùn)練。當(dāng)更多的神經(jīng)元參與到模型的訓(xùn)練中時,可有效地提升整體模型效果。
YOLOv3算法中的FPN特征金字塔是以Darknet-53的(52,52,256)、(26,26,512)、(13,13,1024)三種尺寸的特征圖為輸入,以卷積、上采樣、多尺度融合三種處理方法為核心的算法機(jī)制。其中(13,13,1024)為最底層,(26,26,512)為中間層結(jié)構(gòu),(52,52,256)為頂層結(jié)構(gòu)。
FPN特征金字塔工作流程圖如圖4所示。
圖4:FPN特征金字塔結(jié)構(gòu)圖
預(yù)測結(jié)果A、B、C為不同感受野對應(yīng)的預(yù)測結(jié)果,由于特征圖的大小不一致,所以相對應(yīng)的感受野也不一致。圖像尺寸越小,感受野越大,圖像檢測越精細(xì)。YOLOv3算法使用三種大小不同的感受野,會對圖片中大小不同的對象檢測的更加全面。由于YOLOv3的工作原理是將一張圖片分成多個小格進(jìn)行檢測,而一張圖片里可能對應(yīng)多個對象,每個對象對應(yīng)多個小格,這樣就會造成對于一個對象會出現(xiàn)多個檢測框,這樣就使得單個檢測對象上存在大量的檢測框,嚴(yán)重影響檢測圖像的結(jié)果。為了解決這個問題,YOLOv3采用了NMS非極大值抑制,利用K-means聚類算法篩除多余的檢測框。K-means聚類算法采用的是歐式距離函數(shù),如公式(2):
但歐式距離函數(shù)的大小是取決于檢測框中心坐標(biāo)點之間距離的遠(yuǎn)近,這樣的壞處就是會在大的檢測框部分出現(xiàn)大量偏差,無法達(dá)成預(yù)期的聚類結(jié)果。因此傳統(tǒng)的歐氏距離函數(shù)并不適用于目標(biāo)檢測算法。
但Joseph Redmonsho將歐式距離函數(shù)中的坐標(biāo)點距離改為交并比(IOU),IOU是檢測框之間面積的交集比上面積的并集,改進(jìn)之后的歐式距離函數(shù)可以有效的去除冗余的檢測框,新的歐氏距離函數(shù)如公式(3):
YOLOv3損失函數(shù)(Loss)采用的是交叉熵,由三部分組成,分別是:
實際框與預(yù)測框hw,xy之間的差異:
實際框與預(yù)測框之間置信度的差異:
實際與預(yù)測之間種類結(jié)果的差異:
與YOLO和YOLO9000相比,YOLOv3模型的檢測速率和準(zhǔn)確率均有了很大的提高。但是,在低算力的嵌入式設(shè)備上,使用該算法會存在著檢測速度慢、識別圖像模糊、準(zhǔn)確效果差等問題。因此,如何簡化YOLOv3模型,使其能夠以較少算力的Raspberry正常運行,就成為了工作的中心。
相對于計算量龐大的YOLOv3模型,YOLOv3-Tiny則是要精簡的多。YOLOv3-Tiny改變了以往Darknet-53復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),其結(jié)構(gòu)圖如圖5所示。
圖5:YOLOv3-Tiny結(jié)構(gòu)圖
YOLOv3-Tiny去除了復(fù)雜的殘差循環(huán)結(jié)構(gòu),只保留了卷積層對圖像進(jìn)行處理。并在每一個卷積層后面添加一個Maxpooling最大池化層做池化處理。YOLOv3-Tiny對FPN特征金字塔的處理是:去掉頂層結(jié)構(gòu),保留下兩層結(jié)構(gòu)。實驗證明,模型的參數(shù)大量減少,檢測速率大幅度提高,但是檢測精度下降了許多。
導(dǎo)致YOLO-Tiny精度低的原因是,用于提取特征的主干網(wǎng)絡(luò)層數(shù)的減少,從而導(dǎo)致了模型對圖像特征提取的能力變?nèi)?。所以,要將YOLOv3-Tiny簡單的主干網(wǎng)絡(luò)替換成提取特征效果更好的輕量級神經(jīng)網(wǎng)絡(luò)作為主干網(wǎng)絡(luò)。
MobileNet[8]模型是Google提出的輕量級模型之一。MobileNet之所以被稱為輕量級模型,主要的原因就在于一個特殊的卷積:深度可分離卷積。
傳統(tǒng)的卷積層對于一個Nw*Nh*Nc的圖像處理,是將M個大小為3x3卷積核對其進(jìn)行具有卷積性質(zhì)的相關(guān)性運算。因此傳統(tǒng)卷積運算的參數(shù)為:
而深度可分離卷積對于圖像的處理,是先對圖像用Nc個大小為3x3的卷積核進(jìn)行深度運算,再用M個1x1的卷積核將Nc通道數(shù)調(diào)為M通道數(shù)。深度可分離卷積運算的參數(shù)為:
通過以上的公式分析,可以發(fā)現(xiàn)深度可分離卷積比傳統(tǒng)卷積具有計算量更小、計算效率高的優(yōu)點。
根據(jù)上文分析,對于YOLOv3模型的簡化,共有三種方法:
(1)將YOLOv3主干網(wǎng)絡(luò)Darknet-53替換為MobileNet模型,簡稱YOLOv3-M。
(2)將YOLOv3主干網(wǎng)絡(luò)做簡化處理,對FPN特征金字塔進(jìn)行減枝處理,減少金字塔層數(shù)構(gòu)建YOLOv3-Tiny,簡稱YOLOv3-T。
(3)將MobileNet模型替換YOLOv3-Tiny的主干網(wǎng)絡(luò)并構(gòu)建YOLOv3-Lite。
針對三種模型,根據(jù)參數(shù)量初步篩選所需要的模型,分別對其進(jìn)行參數(shù)檢測,具體見表1。
根據(jù)表1所示,三種新模型的參數(shù)量均遠(yuǎn)遠(yuǎn)小于YOLOv3的參數(shù)量,而YOLOv3-M與YOLOv3-Lite的參數(shù)量相似。同YOLOv3-M相比,YOLOv3-Lite只不過刪除了FPN特征金字塔的部分結(jié)構(gòu)以此來減少參數(shù)量,相比于檢測精度的損失,減少的小部分參數(shù)并沒有實際意義。所以經(jīng)過初步篩選,選擇YOLOv3-M和YOLOv3-T兩個模型搭載到Raspberry上。
表1:四種模型的參數(shù)對比
在機(jī)器學(xué)習(xí)領(lǐng)域中,激活函數(shù)的選擇必不可少,常見的激活函數(shù)有:Sigmoid、Tanh、ReLU、Arctan等。傳統(tǒng)的算法模型大多以ReLU為激活函數(shù)。例如,YOLOv3中的激活函數(shù)是LeakyReLU函數(shù),MobileNet中是以ReLU函數(shù)最大值為6的ReLU6作為激活函數(shù)。相較于ReLU函數(shù),LeakyReLU函數(shù)和ReLU6函數(shù)一個提升了神經(jīng)元的利用率,一個能避免數(shù)值崩塌且盡早的捕捉到圖像稀疏特征。總體來說,LeakyReLU和ReLU6相較于ReLU均取得了不錯的效果。
在2016Hendrycks D等人提出了GeLUs(Gaussian error linear units)[9]函數(shù),其標(biāo)準(zhǔn)正態(tài)分布的GeLUs函數(shù)公式如(8)所示:
GeLUs函數(shù)完善了以往激活函數(shù)只能非線性激活的缺點,將隨機(jī)正則化的能力引入非線性激活函數(shù)之內(nèi)。GeLUs函數(shù)在BERT[10]、PVT[11]等Tranformer[12][13]系列體系中使用的十分廣泛且效果較好,因此證明了GeLUs函數(shù)要優(yōu)于ReLU等傳統(tǒng)函數(shù)。
最終,將GeLUs函數(shù)作為激活函數(shù)引入YOLOv3的主干網(wǎng)絡(luò)MobileNet中。
YOLOv3系列模型在很長的一段時間里保持了較好的性能,但不少學(xué)者仍發(fā)現(xiàn)YOLOv3中的NMS非極大值抑制存在著弊端。
假設(shè)當(dāng)A與B為同類物體時,A的分?jǐn)?shù)比B高且兩者所處區(qū)域重合面積較大時,NMS會刪去B的檢測框只保留A的檢測框。這樣的處理結(jié)果反映出了NMS對于檢測框處理過度的問題。針對此問題,模型在后續(xù)的算法改進(jìn)中引入了Soft-NMS機(jī)制,不再將單一的IOU作為評判指標(biāo),而是引入種類SCORE,使NMS建立以IOU和SCORE為基礎(chǔ)的權(quán)重判別形式,把IOU取高斯指數(shù)之后乘上SCORE,進(jìn)行新的分?jǐn)?shù)排序,從而將分?jǐn)?shù)較小的檢測框刪去。
新的評判機(jī)制減緩了NMS生硬的處理機(jī)制,且提升了聚類效果,從而提高了模型對于物體的檢測能力。
模型使用F&V數(shù)據(jù)集訓(xùn)練,考慮到Raspberry的算力小,不可能完成模型訓(xùn)練的問題,因此采用遷移學(xué)習(xí)的思想在計算機(jī)上完成模型的訓(xùn)練。將訓(xùn)練好的模型文件傳入Raspberry中,實現(xiàn)Raspberry的目標(biāo)檢測功能。
由于模型要部署在嵌入式設(shè)備上,所以要選擇合適的神經(jīng)網(wǎng)絡(luò)框架搭載到嵌入式設(shè)備上。目前使用廣泛的神經(jīng)網(wǎng)絡(luò)框架主要 有:Tensorflow、Pytorch、Caffe、PaddlePaddle等幾種框架。其中Tensorflow早已廣泛應(yīng)用于工業(yè)界,能很好的兼容嵌入式平臺。因此選擇Tensorlow作為模型的主框架。最終的訓(xùn)練環(huán)境如下:Tensorflow-GPU-1.14.0、Keras-2.2.5、Python-3.7、OpenCVPython-4.5.1.48。
本文采用MAP評估模型識別物體的性能。MAP是平均的AP精度,也就是所有類的AP的平均值。MAP數(shù)值越大,代表該神經(jīng)網(wǎng)絡(luò)模型性能越好。AP是精確度和召回率在二維平面上所有點的組合。而準(zhǔn)確率(Precision)和召回率(Recall)由TP(True Positives)、FP(False Positives)、FN(False Negatives)這三個數(shù)值組成,公式如(9)所示:
對模型進(jìn)行MAP評估后,對具體參數(shù)如表2所示。
表2:三種模型性能指標(biāo)
在模型訓(xùn)練中得到損失值(Loss),損失值越小,模型的精度越高。根據(jù)表1分析可得,YOLOv3-M的參數(shù)總量是YOLOv3的39.63%,YOLOv3-T則是YOLOv3的14.29%。分析表2可知,YOLO3-M和YOLOv3-T的性能相較于YOLOv3有所下降。但是可以反映出YOLOv3-M的性能要遠(yuǎn)好于YOLOv3-T。
所以,最后選擇YOLOv3-M作為搭載到Raspberry上的模型。
自動計價算法的核心是計算單價和重量。其中,重量是由稱重模塊稱取物體而獲得的,單價是由圖像識別的結(jié)果調(diào)取MySQL數(shù)據(jù)庫獲得的。
稱重模塊的A/D轉(zhuǎn)換芯片選取的是HX711芯片,傳感器模塊選擇應(yīng)變電阻傳感器。將稱重模塊連接到Raspberry上,稱重模塊獲得的重量數(shù)值可以傳到Raspberry中。
在Raspberry中安裝MySQL數(shù)據(jù)庫,建立果蔬價格庫,創(chuàng)建價格表,將每天果蔬實時單價插入表里。
最后由主程序?qū)ΨQ重模塊上果蔬的重量和識別的果蔬單價進(jìn)行相應(yīng)的計算,獲得最終的價格。在交易結(jié)束后,Rspberry可使用Socket發(fā)送數(shù)據(jù)至服務(wù)器后端,商家可以通過每天果蔬售賣情況,分析市場需求的走向。
以PC機(jī)為Raspberry的外接顯示器使用PUTTY軟件連接Raspberry,輸入VNCServer命令語句啟動Raspberry的VNC可視化頁面,并在可視化頁面啟動由Pyside2編寫的主程序頁面。在主程序頁面可以看到設(shè)備在交易進(jìn)行時的狀態(tài)和運行結(jié)果,設(shè)備運行效果如圖6所示。
圖6:設(shè)備運行示意圖
在檢測精度方面,用設(shè)備對六種在不同環(huán)境下的果蔬分別進(jìn)行50次測試,共計300次,測試結(jié)果如表3所示。
表3:測試結(jié)果
在檢測速度方面,設(shè)備可實現(xiàn)秒級的檢測速度,完成單次交易只需6秒左右??傮w上,設(shè)備運行良好,可以實現(xiàn)快速、準(zhǔn)確的識別果蔬并給出重量、單價和總價。
準(zhǔn)確率和圖像檢測速度雖然達(dá)到了預(yù)期效果,但由于Raspberry的算力和性能較差,所以還存在著捕獲圖像速度略慢等問題。
在YOLOv3算法模型的基礎(chǔ)上,將其改進(jìn)為輕量級YOLOv3-M算法,大大的減少了模型參數(shù),提高了模型運行速度,并在YOLOv3-M的基礎(chǔ)上引入GeLUs激活函數(shù)和Soft-NMS機(jī)制,有效的提高了模型精度。通過YOLOv3-M設(shè)計并實現(xiàn)了一款智能果蔬計價設(shè)備,設(shè)備實現(xiàn)了識別果蔬和自動稱重計價的功能,功能達(dá)到了預(yù)期設(shè)計的效果。設(shè)備可獨立于PC上位機(jī)工作,且處于良好的工作狀態(tài)。主程序具有一定通用性,可將程序遷移至性能更好的主控板上,使識別果蔬的速度和準(zhǔn)確率得到進(jìn)一步提升?;谏疃葘W(xué)習(xí)的智能果蔬計價設(shè)備的設(shè)計優(yōu)化了傳統(tǒng)果蔬交易方式,對于未來“無人售貨”,“智慧農(nóng)貿(mào)”具有一定的參考意義。