趙攀峰,王一群
(1.中國人民大學(xué),北京 100872;2.北京信息科技大學(xué),北京 100192)
近年來,人工智能技術(shù)發(fā)展迅速,其中的圖像識別和分類技術(shù)被廣泛應(yīng)用,如無人駕駛、大數(shù)據(jù)開發(fā)、產(chǎn)品檢測等[1-2]。很多工業(yè)生產(chǎn)線需要對零件產(chǎn)品進行分揀。人工分揀零件存在效率低、可靠性差等問題,機器人分揀能夠提高分揀效率,降低生產(chǎn)成本[3]。機器人分揀零件的關(guān)鍵技術(shù)是零件識別和分類,傳統(tǒng)的識別方法如模板匹配[4]、特征提取[5]、支持向量機[6]等,在合適的環(huán)境下識別的準確度較高,但是,工廠生產(chǎn)線環(huán)境復(fù)雜多變、零件形狀多樣,傳統(tǒng)識別算法難以取得理想效果[7]。
本文設(shè)計了一套基于FPGA與卷積神經(jīng)網(wǎng)絡(luò)的零件識別系統(tǒng),卷積神經(jīng)網(wǎng)絡(luò)完成對零件特征向量更高維度視野的提取,獲得同一類型零件的共同抽象元素,據(jù)此進行分類,能夠提高圖像對光照和姿態(tài)的魯棒性[8],FPGA是一種可編程邏輯門電路,外部配置可以根據(jù)工程需求調(diào)用IP內(nèi)核任意設(shè)置[9],同時,FPGA并行運算的特點適合對神經(jīng)網(wǎng)絡(luò)進行加速,提高識別速度[10]。本文系統(tǒng)能夠自動完成零件圖像拍攝、圖像處理、識別結(jié)果上傳等任務(wù),提高生產(chǎn)線零件分揀效率。
基于FPGA與卷積神經(jīng)網(wǎng)絡(luò)的零件識別系統(tǒng)的結(jié)構(gòu)如圖1所示。系統(tǒng)由傳送帶、位置傳感器、光源、攝像機、圖像處理單元、電源和上位機部分組成,紅外對射式傳感器檢測相機曝光位置是否存在目標,CCD工業(yè)相機采集零件圖像,通過USB3.0接口快速將圖像數(shù)據(jù)傳給圖像處理單元,圖像處理單元完成對零件圖像的處理和識別分類,將分類結(jié)果通過RS485電路穩(wěn)定、長距離地傳輸至上位機,電源給圖像處理單元供電。
系統(tǒng)硬件設(shè)計如圖2所示。為了實現(xiàn)圖像在線處理,提高圖像數(shù)據(jù)回傳速度,同時對卷積神經(jīng)網(wǎng)絡(luò)進行加速計算,設(shè)計了以FPGA為核心的圖像處理單元,制作了圖像處理單元的電源和檢測電路。
圖2 系統(tǒng)硬件設(shè)計框圖
圖像處理單元以FPGA芯片作為數(shù)據(jù)處理和邏輯控制中心,利用其高速并行運算的特征加速神經(jīng)網(wǎng)絡(luò)的計算,提高系統(tǒng)的識別速度,搭配外部通信電路、檢測電路、數(shù)據(jù)存儲電路等,實現(xiàn)零件圖像的自動采集、自動處理和結(jié)果上傳等功能。
圖3為圖像處理單元硬件原理圖,該硬件單元主要由FPGA芯片最小系統(tǒng)、閃存芯片、動態(tài)隨機存儲器、RS485電平轉(zhuǎn)換芯片和OV7251攝像頭組成,EP4CE10F17C8是具有豐富片內(nèi)資源的FPGA芯片,芯片擁有可編程邏輯單元10 320個、18×18的片內(nèi)乘法器23個,可供用戶調(diào)用的I/O共179個,所有的用戶I/O被劃分為8個BANK,片上內(nèi)存共414 Kbit。OV7251為一款30萬像素的工業(yè)CCD相機,W25Q16是一款16 Mbit的片外掛載FLASH芯片,用于存儲FPGA運行過程中的變量,W9825G6KH是一款32 MB的SDRAM芯片,最高運行頻率為166 MHz,用來實現(xiàn)FPGA芯片與攝像頭之間的圖像數(shù)據(jù)的緩沖。SP3485是一款TTL轉(zhuǎn)RS485電平轉(zhuǎn)換芯片,完成UART到RS485通信接口的轉(zhuǎn)換。
圖3 圖像處理單元硬件原理圖
圖4為卷積神經(jīng)網(wǎng)絡(luò)模型移植入FPGA中的框架圖。本設(shè)計的模型需要使用大量的IP內(nèi)核、可編程邏輯單元和片內(nèi)存資源進行設(shè)計,因此模型設(shè)計采用了模塊化設(shè)計方式,內(nèi)部架構(gòu)設(shè)計主要由輸入、輸出模塊、寄存器模塊、激活函數(shù)池化計算模塊、FIFO陣列、RAM陣列等部分構(gòu)成,輸入、輸出模塊調(diào)用IP內(nèi)核和用戶I/O設(shè)計,形成高速USB和UART通信接口,用于連接攝像頭和SP3485芯片,寄存器模塊由加法器和多個乘法器組成,存儲網(wǎng)絡(luò)的權(quán)值和輸入緩存數(shù)據(jù),激活函數(shù)池化計算模塊由可編程邏輯單元設(shè)計,完成權(quán)值和每層輸出的累加與乘積運算,FIFO陣列和RAM陣列模塊使用FPGA內(nèi)部ROM資源設(shè)計,作為數(shù)據(jù)緩沖器使用。圖像處理單元完成卷積神經(jīng)網(wǎng)絡(luò)的計算任務(wù),利用FPGA并行運算的特點加速模型的運行,提高系統(tǒng)識別效率。
圖4 FPGA內(nèi)部框架設(shè)計
檢測電路檢測當(dāng)前位置是否存在零件,采用TM-NF30/15型對射式光電傳感器,其工作原理為:當(dāng)前位置存在零件時,零件遮擋發(fā)射器發(fā)出的激光,接收器無法接收到激光,會發(fā)出一個高電平信號,說明當(dāng)前位置存在物體。其具有1 m的測量距離、工作電壓為5 V、反應(yīng)時長約為2 ms,使用壽命長、組裝簡便。檢測電路如圖5所示。由于輸出電壓上限值為5 V,采用電阻R2、R3設(shè)計了分壓電路,能夠避免燒壞FPGA芯片引腳。
圖5 光電檢測模塊電路
系統(tǒng)各部分硬件的供電電壓標準分為1.2、2.5、3.3、5 V,設(shè)計了圖6所示電源電路,為了減少電路發(fā)熱,減少壓降,接入電源電路的電壓由12 V適配器提供,經(jīng)過MP2359降壓轉(zhuǎn)化器后產(chǎn)生穩(wěn)定的5 V電壓,然后5 V電壓分為3路,分別經(jīng)由ASM1117-3.3、ASM1117-2.5、ASM1117-1.2芯片產(chǎn)生目標電壓。
圖6 電源電路圖
MP2359是一款內(nèi)置功率MOSFET的單片降壓開關(guān)轉(zhuǎn)換器,可提供1.2 A的峰值輸出電流,故障保護包括逐周期限流保護和過溫保護,最大限度地減少了現(xiàn)有外部元器件的使用。ASM1117屬于正向低壓降穩(wěn)定器,提供多種固定電壓輸出類型芯片,內(nèi)部封裝多種保護電路。本設(shè)計的電源電路具有輸出諧波小和性價比高的優(yōu)勢。
圖像處理算法由圖像預(yù)處理、特征提取和特征分類3部分組成,具體工作流程如圖7所示。
圖7 圖像處理算法流程圖
圖像預(yù)處理的目的是為了去除外部環(huán)境對系統(tǒng)成像質(zhì)量的影響,減小圖像的所占內(nèi)存,同時最大程度上保留圖像的紋理、結(jié)構(gòu)等特征。本系統(tǒng)的圖像預(yù)處理包括圖像濾波、灰度化和二值化3個步驟。為了盡可能保留圖像的邊緣信息,使用雙邊濾波對圖像進行濾波去噪處理。雙邊濾波器的原理是:以非線性的方式將圖像的空間鄰近度與像素值相似度進行排列組合,這樣在對圖像進行去噪的同時,還能夠充分保留圖像的邊緣信息[11]。式(1)為雙邊濾波器計算公式。
(1)
式中:(k,l)為滑動模板窗口中心像素點的坐標;(i,j)為除模板窗口中心點外其他像素點的坐標;σd為二維高斯函數(shù)的標準差。
采用平均值法和QTSU算法對圖像進行灰度化和二值化。圖8為零件圖像經(jīng)過圖像預(yù)處理后的結(jié)果。從圖8可看出,圖像的邊信息保存較完整,有利于后續(xù)更充分地提取圖像邊緣特征。
(a)零件A
(b)零件B
(c)零件C
(d)零件D圖8 預(yù)處理后圖像效果
由于流水線現(xiàn)場零件放置方向、角度不同,零件在圖像中成像的姿勢、位置會不同。考慮到Hu不變矩陣的平移、縮放與旋轉(zhuǎn)不變的穩(wěn)定性質(zhì)和大量現(xiàn)場成功應(yīng)用的實例[12],因此本文使用Hu不變矩陣提取零件的特征,并以此作為分類依據(jù)。
對于一幅M×N的圖像,提取它的(p+q)階原點矩Opq和中心矩陣Cpq:
(2)
式中f(x,y)為像素點在(x,y)處的灰度值。
(3)
(4)
將(p+q)階中心距歸一化為εpq:
(5)
然后利用歸一化后的的二階和三階中心距能夠計算出7個不變矩L1~L7,如式(6)所示。
(6)
由7個不變矩構(gòu)成一組特征向量,由于有文獻表明對圖片中物體的識別過程中,低階矩不變性保持得比較好,其余不變矩帶來的誤差比較大。因此為了凸顯低階矩的性質(zhì),對7個變量進行加權(quán)計算,同時為了減小不變矩的波動范圍將數(shù)值限制在一定范圍,得到本文的最終不變矩Gk。
(7)
本系統(tǒng)采用6層卷積神經(jīng)網(wǎng)絡(luò),如圖9所示。由于圖像共7個不變矩,因此輸入層尺寸為7×7×1,共有4種零件,輸出層尺寸為4×1×1,為了減小模型容量,沒有使用池化層,使用4個卷積層、2個全連接層。激活函數(shù)為ReLU函數(shù),分類函數(shù)為Softmax函數(shù)。
圖9 神經(jīng)網(wǎng)絡(luò)模型解構(gòu)
采集角度、位置不同的4種零件樣本圖片共2 002張,采用隨機分布方式初始化權(quán)重系數(shù),模型的訓(xùn)練集和測試集的圖像數(shù)量為1 450和552張,由于模型訓(xùn)練樣本的數(shù)量較多,因此,分批次將樣本喂入模型,每次喂入2張,同時設(shè)置最多50次迭代(epochs),模型使用學(xué)習(xí)率衰減法進行學(xué)習(xí),a為模型的學(xué)習(xí)率,其中1~10次迭代過程a設(shè)置為10-4,11~31次迭代過程a設(shè)置為10-5,32~50次迭代過程a設(shè)置為10-6。損失值差的閾值設(shè)置為0.001,采用權(quán)重系數(shù)批量隨機梯度下降算法對模型進行優(yōu)化。
每次訓(xùn)練后,模型輸出一個損失值和準確率值,圖10為模型準確率隨迭代次數(shù)的變化情況,從圖10可以看出,模型訓(xùn)練到48次左右時停止訓(xùn)練,得到一個穩(wěn)定的零件識別神經(jīng)網(wǎng)絡(luò),識別的正確率約為98%。
圖10 準確率隨迭代次數(shù)的變化
使用Verilog HDL硬件描述語言對FPGA內(nèi)部進行模塊化設(shè)計,主要設(shè)計內(nèi)容有通信接口驅(qū)動模塊、圖像處理模塊、主程序控制模塊。其具體流程如圖11所示 。
圖11 系統(tǒng)軟件流程圖
FPGA上電初始化后,開始周期性檢測光電檢測器輸出的電壓信號,檢測周期為10 μs,當(dāng)檢測到電壓信號后。攝像機由上升沿電平觸發(fā),拍攝零件圖像,圖像輸出格式設(shè)置為RGB類型,FPGA得到圖像后開始對圖像進行處理與分類,得到分類結(jié)果后上傳至上位機。
通過對上述系統(tǒng)軟件和硬件的分析,研發(fā)了一套基于FPGA與卷積神經(jīng)網(wǎng)絡(luò)的零件識別系統(tǒng),并對系統(tǒng)工作過程中FPGA的資源占用率、識別的正確率、耗時時間等指標進行了線上測試。
卷積神經(jīng)網(wǎng)絡(luò)模型的參數(shù)約18萬個,將所有參數(shù)定義為16 bit整型,設(shè)計完成FPGA內(nèi)硬件結(jié)構(gòu)后,查看FPGA內(nèi)的資源占用情況,如圖12所示??梢钥闯鯢PGA內(nèi)部剩余資源豐富,可以根據(jù)識別結(jié)果做進一步擴展。
圖12 FPGA資源占用情況
試驗樣本零件共有4種類型,對樣本進行隨機角度旋轉(zhuǎn)擴充,然后對擴充后的樣本進行線上測試,得到如表1所示的結(jié)果。
表1 線上測試結(jié)果
由表1能夠看出,4種零件線上識別正確率最高的為類型C的98.40%,最低的為類型A的97.93%,耗時最長為類型A的876 ms,耗時最短的為類型B的874 ms,平均準確率和平均耗費時間分別為98.24%和875 ms。說明本文零件識別系統(tǒng)具有較高的準確率和較快的速度。本系統(tǒng)能夠為工業(yè)流水線上零件識別分揀方案設(shè)計提供借鑒。
本文設(shè)計了一套基于FPGA與卷積神經(jīng)網(wǎng)絡(luò)的零件識別系統(tǒng),首先,根據(jù)需求設(shè)計了系統(tǒng)硬件,然后設(shè)計并訓(xùn)練得出一套零件識別率較高的卷積神經(jīng)網(wǎng)絡(luò)模型,最后對系統(tǒng)進行了線上測試,測試結(jié)果說明本文零件識別系統(tǒng)具有較高的準確率和較快的速度,證明了利用FPGA并行高速的特點加速識別過程的可行性。