孫璐陽
(山東科技大學,山東 青島 266590)
目前絕大多數(shù)超市收銀大多以收銀員使用掃碼槍逐一掃碼方式結(jié)算,這種方式浪費了大量的時 間[1],超市流量大時很容易造成“長隊”現(xiàn)象,引起客戶不滿。為了解決這一現(xiàn)象,論文基于單點多框預測(Single Shot MultiBox Detector,SSD)深度學習算法[2],采用同時檢測多個目標的圖像識別方法來替代逐一掃碼這種方式,可有效節(jié)省時間,降低“排長隊”現(xiàn)象的發(fā)生。
本系統(tǒng)主要由商品信息采集模塊、商品檢測模塊、上位機計價模塊三部分組成。
商品信息采集模塊中,通過攝像頭采集檢測區(qū)域內(nèi)商品的圖像信息,并將信息匯聚到商品檢測模塊,以完成檢測;在商品檢測模塊中,對采集到商品圖像進行預處理以及圖像處理后,與事先訓練好的模型進行匹配,將識別后的結(jié)果送至上位機計價模塊;上位機計價模塊通過查詢數(shù)據(jù)庫,展示識別出的商品信息,并實現(xiàn)計價、結(jié)算、清零等功能。系統(tǒng)結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)
本系統(tǒng)基于PYNQ-Z2(基于Python生產(chǎn)力的Zynq-Z2系列,Python Productivity for Zynq-Z2)開發(fā)板進行開發(fā),PYNQ-Z2開發(fā)板是Xilinx支持 PYNQ開源框架的第二代最新開發(fā)平臺。PYNQ-Z2可以使用Python進行編程,并且提供了基于Web訪問的Jupyter Notebook在線編輯工具。運行在先進精簡指令集微處理器(Advanced RISC Machine,ARM)上的嵌入式Linux系統(tǒng)為PYNQ提供了軟件基礎(chǔ)平臺,Python環(huán)境、Jupyter Notebook工具都在其上。
由于PYNQ既包含ARM處理器又包含現(xiàn)場可編程門陣列(Field-Programmable Gate Array,F(xiàn)PGA)。商品信息采集既可以通過ARM來實現(xiàn),也可以通過FPGA來實現(xiàn)。由于ARM端已經(jīng)對USB接口支持,而市面上的攝像頭大多采用USB接口,所以圖像采集部分通過ARM端來實現(xiàn)將降低系統(tǒng)開發(fā)的難度,且USB具有即插即用的特點,便于系統(tǒng)硬件的連接[3]。
將攝像頭接至開發(fā)板的USB接口,在ARM端的Linux上配置好Linux環(huán)境,調(diào)用OpenCV的庫函數(shù),由ARM驅(qū)動USB接口進行指定區(qū)域內(nèi)商品的圖像采集和視頻流輸入。設(shè)計框圖如圖2所示。
圖2 商品信息采集模塊設(shè)計框圖
2.2.1 設(shè)計思路
這部分包含PYNQ和上位機兩部分,在PYNQ上進行圖像的預處理[4];在上位機上執(zhí)行圖像處理和識別。圖像預處理包括通道順序、圖像尺寸、圖像格式調(diào)整。準備階段主要包括:商品圖片數(shù)據(jù)集收集、標準視覺物體分類(Visual Object Classes,VOC)數(shù)據(jù)集制作、VOC轉(zhuǎn)TFRecord格式、選擇預訓練模型、模型訓練。
系統(tǒng)運行階段主要包括:調(diào)用訓練好的模型文件、調(diào)用模型商品檢測。設(shè)計框圖如圖3所示。
圖3 商品檢測模塊設(shè)計框圖
2.2.2 SSD識別算法
本系統(tǒng)選用的是SSD(Single Shot MultiBox Detector)物體檢測模型[5]。SSD物體檢測模型是基于單個前向傳播CNN網(wǎng)絡(luò)(卷積神經(jīng)網(wǎng)絡(luò)),產(chǎn)生一系列固定大小的邊界框,以及每一個邊界框中包含物體實例的可能性。在預測期間,網(wǎng)絡(luò)針對每個默認框中的每個存在對象類別生成分數(shù),并且對框進行調(diào)整以更好地匹配對象形狀,之后,對分數(shù)進行非極大值抑制(Non-maximum Suppression)得到最終的預測結(jié)果。另外,網(wǎng)絡(luò)組合來自具有不同分辨率的多個特征圖的預測,以適應處理各種尺寸的對象。在SSD結(jié)構(gòu)中,以VGG-16作為基礎(chǔ)網(wǎng)絡(luò),在基礎(chǔ)網(wǎng)絡(luò)之后添加額外的卷積層作為輔助結(jié)構(gòu),產(chǎn)生多尺度特征圖檢測:將卷積特征層添加到截斷的基礎(chǔ)末尾。這些層尺寸逐漸減小,得到多個尺度檢測的預測值。檢測的卷積模型對于每個特征層是不同的。
每個添加的特征層(或可選的基礎(chǔ)網(wǎng)絡(luò)的現(xiàn)有特征層)可以使用一組卷積濾波器產(chǎn)生固定的預測集合[6]。對于具有p個通道的大小為m×n的特征層,使用3×3×p卷積核卷積操作,產(chǎn)生類別的分數(shù)或相對于默認框的坐標偏移。在每個應用卷積核運算的m×n大小位置處,產(chǎn)生一個輸出值。邊界框偏移輸出值是相對于默認框測量,默認框位置則相對于特征圖產(chǎn)生。
SSD訓練時需要建立真實標簽和默認框之間的對應關(guān)系。位置損失(loc)和置信損失(conf)加權(quán)求和得到總體目標損失函數(shù),如式(1)所示:
其中,N是先驗框的正樣本數(shù)量。這里 Xpij∈{1,0}為一個指示參數(shù),當Xpij時表示第i個先驗框與第j個ground truth匹配,并且ground truth的類別為p。c為類別置信度預測值。l為先驗框的所對應邊界框的位置預測值,而g是ground truth的位置參數(shù)。對于位置誤差,其采用Smooth L1 loss,定義如式(2)、式(3)、式(4)所示:
2.2.3 模型訓練
本部分工作主要包括:商品圖片數(shù)據(jù)集收集、標準VOC數(shù)據(jù)集制作、VOC轉(zhuǎn)TFRecord格式、選擇預訓練模型、模型訓練。
商品圖片數(shù)據(jù)集獲取的主要方式是下載網(wǎng)絡(luò)數(shù)據(jù)集以及超市實拍圖片。創(chuàng)建標準VOC格式數(shù)據(jù)集,并且在獲得圖像數(shù)據(jù)集之后,通過注釋工具創(chuàng)建VOC格式的數(shù)據(jù)集。VOC格式如下:
<annotation verified=”no”>
<folder>JPEGImages</folder>
<filename>image_10</filename> //文件名
<path>G:photosgoods_photosVOCdevkitJPEGImagesimage_10.jpg</path>
<source>
<database>Unknown</database>
</source>
<size> //文件大小屬性
<width>780</width>
<height>520</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object> //圖片中的物體
<name>cup</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<Difficult>0</Difficult>
<bndbox> //物體位置
<xmin>424</xmin>
<ymin>371</ymin>
<xmax>490</xmax>
<ymax>468</ymax>
</bndbox>
</object>
</annotation>
VOC轉(zhuǎn)TFRecord格式,TFRecord文件格式在圖像識別中具有很好的應用效果,此格式最大的優(yōu)點是每幅輸入圖像和與之關(guān)聯(lián)的標簽放在同一個文件中。TFRecord文件是一種二進制文件,其不對數(shù)據(jù)進行,所以可以被快速加載到內(nèi)存中,因此它適合于大量的數(shù)據(jù)流,是作為深度學習理想的文件輸入格式。使用SSD模型進行訓練,訓練完成后提取模型文件。
本系統(tǒng)利用python腳本文件create_pascal_tf_record.py將VOC格式的數(shù)據(jù)轉(zhuǎn)換成TFRecord格式的數(shù)據(jù)文件。流程如圖4所示。
本部分采用PYQT進行設(shè)計實現(xiàn),主要包括連接數(shù)據(jù)庫、展示識別結(jié)果、展示識別出的商品信息、計價、清零等功能。
考慮到由于物品檢測區(qū)域有限,有時不能一次性檢測完全顧客的商品。所以在設(shè)計的過程中,將“清零”按鈕作為一次計價過程結(jié)束。
流程圖如圖5所示。
圖4 流程圖
圖5 計價模塊流程
商品的相關(guān)信息存儲于數(shù)據(jù)庫中。商品有唯一編號(id)、商品名(name)、品牌(brand)、生產(chǎn)商(producer)、價格(price)、折扣(discount)。
數(shù)據(jù)庫詳細設(shè)計如表1所示。
表1 數(shù)據(jù)庫詳細設(shè)計
系統(tǒng)利用深度學習技術(shù),在超市商品結(jié)算時可對對多個目標商品同時檢測、同時結(jié)算。為超市收銀系統(tǒng)提供了一種新方案,在一定程度上提高了收銀效率,節(jié)省了顧客排隊等待的時間,使顧客能有良好的購物體驗。目前本系統(tǒng)的商品識別準確率還有待提高。后續(xù)將逐步優(yōu)化系統(tǒng)結(jié)構(gòu)以及識別算法,以提升系統(tǒng)的準確性、實時性及實用性。