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