崔博森, 曾慶宇, 竇蓉蓉
(南京大學(xué)電子科學(xué)與工程學(xué)院,南京 210023)
在工業(yè)4.0 時(shí)代,將物聯(lián)網(wǎng)、人工智能等新興科技應(yīng)用到工業(yè)生產(chǎn)已成為趨勢(shì),信息系統(tǒng)和物理系統(tǒng)的深度融合使智能工廠在工業(yè)4.0 時(shí)代成為可能[1]。設(shè)備智能檢測(cè)仍然是智能工廠建設(shè)的短板,以實(shí)時(shí)檢測(cè)電動(dòng)螺絲刀工作狀態(tài)為例,應(yīng)用扭矩傳感器實(shí)現(xiàn)控制電動(dòng)螺絲刀鎖緊螺母的精度[2],但動(dòng)輒10 萬(wàn)的售價(jià),使得絕大部分中小企業(yè)的智能化改造成本劇增,不具備實(shí)用價(jià)值。
針對(duì)工業(yè)生產(chǎn)中判斷螺絲刀工作狀態(tài)與螺絲擰緊的實(shí)際問(wèn)題[2],提出一種基于百度飛槳PaddlePaddle深度學(xué)習(xí)框架下的語(yǔ)義分割PaddleSeg 和有限狀態(tài)機(jī)(Finite State Machine,F(xiàn)SM)的電動(dòng)螺絲刀工作狀態(tài)檢測(cè)算法,并設(shè)計(jì)硬件實(shí)驗(yàn)平臺(tái),以98%準(zhǔn)確率,1 s 以內(nèi)延時(shí),實(shí)現(xiàn)對(duì)于螺絲刀工作狀態(tài)的實(shí)時(shí)檢測(cè)與螺絲擰緊程度的判斷。
本系統(tǒng)總體設(shè)計(jì)框架如圖1 所示。主要包括視覺(jué)傳感模塊、算法執(zhí)行服務(wù)器和網(wǎng)頁(yè)端可視化。
圖1 系統(tǒng)總體設(shè)計(jì)
視覺(jué)傳感模塊采用1 080 p、30 f/s 的單目視覺(jué)攝像頭實(shí)時(shí)采集圖像,在計(jì)算平臺(tái)算力不足的情況下可以使用480 p、720 p 的攝像頭采集圖像。算法執(zhí)行服務(wù)器負(fù)責(zé)執(zhí)行PaddleSeg圖像語(yǔ)義分割和FSM識(shí)別算法,二者共同實(shí)現(xiàn)對(duì)智能工廠螺絲的打入情況進(jìn)行檢測(cè),其輸出結(jié)果主要分類為“合格產(chǎn)品”與“不合格產(chǎn)品”,方便智能工廠工作人員進(jìn)行處理。
機(jī)器學(xué)習(xí)領(lǐng)域中的PaddlePaddle深度學(xué)習(xí)框架與Tensorflow框架功能類似,前者具有中文生態(tài)的天然優(yōu)勢(shì)[3]。PaddlePaddle內(nèi)部提供了PaddleSeg 語(yǔ)義分割模型的算法應(yīng)用程序接口(Application Programming,API),調(diào)用該方法可將圖像信息按類分割,本系統(tǒng)把圖片中的螺絲刀和螺絲按類分割。PaddlePaddle的AI Studio平臺(tái)給用戶提供Cuda GPU用于訓(xùn)練模型,GPU訓(xùn)練模型相比于CPU有更快的速度,極大節(jié)省用戶在模型訓(xùn)練上的時(shí)間。網(wǎng)頁(yè)端可視化用于展示算法執(zhí)行服務(wù)器的輸出結(jié)果,并將結(jié)果上傳至云端進(jìn)行數(shù)據(jù)管理,輸出結(jié)果將呈現(xiàn)在特定的網(wǎng)頁(yè)界面上,方便工廠負(fù)責(zé)人查看,實(shí)現(xiàn)對(duì)工廠產(chǎn)品的管理,并及時(shí)糾正工廠可能存在的異常情況。
語(yǔ)義分割是將圖像像素按照不同的表達(dá)含義進(jìn)行分組[4]。是一種層次結(jié)構(gòu)復(fù)雜的任務(wù),也是一個(gè)核心計(jì)算機(jī)視覺(jué)問(wèn)題,對(duì)現(xiàn)實(shí)場(chǎng)景的理解與分析[4],讓計(jì)算機(jī)完成需要對(duì)場(chǎng)景有完整理解的任務(wù)。語(yǔ)義分割可采用PaddlePaddle開(kāi)發(fā)的PaddleSeg語(yǔ)義分割庫(kù)[5],其優(yōu)勢(shì)在于內(nèi)部已預(yù)先配置如DeepLabv3 +,U-Net 和ICNet等主流分割模型,方便用戶通過(guò)統(tǒng)一的預(yù)配置完成語(yǔ)義分割模型的訓(xùn)練與部署[5]。
調(diào)用PaddleSeg 模塊需要構(gòu)造專門的螺絲刀和螺絲的數(shù)據(jù)集,數(shù)據(jù)集要用labelme 工具對(duì)圖片做特殊標(biāo)記。數(shù)據(jù)集搭建完畢后,在AI Studio遠(yuǎn)程深度學(xué)習(xí)平臺(tái)上利用PaddleSeg API訓(xùn)練圖像分割模型,將攝像頭拍攝圖像中的螺絲刀和螺絲分割,并用不同的顏色標(biāo)記,得到分類圖像。
采用ICNet模型實(shí)現(xiàn)PaddleSeg語(yǔ)義分割效果,如圖2 所示。將智能工廠的工作圖像作為輸入傳入語(yǔ)義分割模塊,模塊會(huì)根據(jù)“電動(dòng)螺絲刀”和“螺絲”輸出分割圖像,圖中綠色標(biāo)記為電動(dòng)螺絲刀,紅色標(biāo)記為螺絲。
圖2 PaddleSeg語(yǔ)義分割圖像
電動(dòng)工具的操作都是循環(huán)的機(jī)械操作,其工作流程都是固定模式,故可以采用FSM來(lái)記錄電動(dòng)工具的工作狀態(tài)。
以“電動(dòng)螺絲刀”的工作狀態(tài)為例,F(xiàn)SM模塊內(nèi)部狀態(tài)轉(zhuǎn)移情況,如圖3 所示。FSM內(nèi)部共有6 種狀態(tài):空(IDLE)、螺絲刀下降(Screwdriver_is_falling)、貼合(Docking)、螺絲刀返回(Back _ Return)、打入成功(done_successful)和打入失?。╠one_with_error)。
圖3 狀態(tài)機(jī)工作流程圖
FSM算法以PaddleSeg 模塊的語(yǔ)義分割圖像作為輸入,輸出為該時(shí)刻螺絲刀和螺絲的工作狀態(tài)。在FSM算法模塊收到來(lái)自語(yǔ)義分割模塊的輸出時(shí),模塊內(nèi)部會(huì)對(duì)圖像做預(yù)處理,提取圖像中螺絲刀和螺絲的碰撞坐標(biāo)[6],判斷二者的碰撞坐標(biāo)與質(zhì)檢參考線坐標(biāo)的高低位置關(guān)系,以此作為螺絲刀是否成功將螺絲打入指定位置的依據(jù),而螺絲刀和螺絲的運(yùn)動(dòng)方向與它們和質(zhì)檢參考線的位置關(guān)系作為FSM 內(nèi)部狀態(tài)轉(zhuǎn)移的條件,可以嚴(yán)謹(jǐn)模擬實(shí)際情況下工件的工作狀態(tài)。
平臺(tái)硬件結(jié)構(gòu)如圖4 所示。主要包括PaddlePadle模型訓(xùn)練單元、硬件仿真單元和預(yù)訓(xùn)練集。
圖4 平臺(tái)實(shí)驗(yàn)設(shè)計(jì)
PaddlePaddle 模型訓(xùn)練單元包括:PC 機(jī)、無(wú)線路由器和AI Studio 平臺(tái)。PC 機(jī)設(shè)定PaddleSeg 語(yǔ)義分割模型需要實(shí)現(xiàn)的分割指標(biāo),通過(guò)WiFi無(wú)線網(wǎng)絡(luò)將指標(biāo)與訓(xùn)練集傳送到AI Studio 平臺(tái),在平臺(tái)上借助NVIDIA Tesla V100 訓(xùn)練模型,訓(xùn)練完畢后將模型下載,部署在計(jì)算單元上。
實(shí)驗(yàn)所需要的硬件模塊包括:視覺(jué)傳感器、計(jì)算單元、機(jī)械工作臺(tái)。視覺(jué)傳感器負(fù)責(zé)將工作臺(tái)圖像通過(guò)有線網(wǎng)橋傳入計(jì)算單元,計(jì)算單元會(huì)根據(jù)預(yù)先設(shè)定的自定義質(zhì)檢要求檢測(cè)螺絲的打入情況,并根據(jù)輸出結(jié)果將工作臺(tái)的螺絲分類為“合格產(chǎn)品”與“不合格產(chǎn)品”。在計(jì)算單元每次根據(jù)工作臺(tái)的情況輸出結(jié)果后,將工作臺(tái)的圖像信息與工作結(jié)果擴(kuò)充到原有的訓(xùn)練集中,PaddlePaddle 模型訓(xùn)練單元可將新的訓(xùn)練集上傳至AI Studio 平臺(tái),使以后模型訓(xùn)練的結(jié)果更準(zhǔn)確。
數(shù)據(jù)集是深度學(xué)習(xí)模型訓(xùn)練的關(guān)鍵[7],要實(shí)現(xiàn)高魯棒性的計(jì)算機(jī)視覺(jué)方案,就必須保證以下幾點(diǎn):高容量模型;高速增長(zhǎng)的計(jì)算能力;大規(guī)模標(biāo)記數(shù)據(jù)的可用性[7]。
AI Studio 遠(yuǎn)程深度學(xué)習(xí)平臺(tái)提供模型訓(xùn)練的算力,同時(shí)PaddleSeg語(yǔ)義分割模型需要構(gòu)建標(biāo)記過(guò)螺絲刀和螺絲的數(shù)據(jù)集,優(yōu)質(zhì)的數(shù)據(jù)集才能保證模型訓(xùn)練的有效性。數(shù)據(jù)集的獲取途徑主要有兩種:自定義數(shù)據(jù)集和公共數(shù)據(jù)集,本次應(yīng)用場(chǎng)景涉及螺絲刀與螺絲數(shù)據(jù)集,在已有的公共數(shù)據(jù)集中并無(wú)先例,因而需要自定義數(shù)據(jù)集。
采集自定義數(shù)據(jù)集的方式是通過(guò)拍攝一段正面視角、螺絲刀向下貼緊螺絲、打入螺絲、離開(kāi)的視頻,每秒截取4 張照片,共計(jì)截取200 張照片。
利用labelme工具對(duì)拍攝圖片進(jìn)行標(biāo)記,如圖5 所示,經(jīng)labelme工具標(biāo)記后的圖像會(huì)得到標(biāo)注圖像與記錄標(biāo)注點(diǎn)供模型讀取的JSON文件[8]。
圖5 labelme軟件標(biāo)記圖像界面
表1 列出了數(shù)據(jù)集目錄dataset 的文件格式。數(shù)據(jù)即主要包括annotations標(biāo)注圖像目錄和images原始圖像目錄,test、train、val文件夾分別對(duì)應(yīng)測(cè)試集、訓(xùn)練集和驗(yàn)證集。
表1 數(shù)據(jù)集格式
文件夾annotations 下存放分類標(biāo)記后的圖像,即經(jīng)過(guò)labelme工具標(biāo)記后的標(biāo)注圖像。文件夾images下存放原始圖像和對(duì)應(yīng)的JSON 格式的標(biāo)注文件,標(biāo)注分類為screwdriver(螺絲刀)和screw(螺絲)兩類。
在dataset文件夾的訓(xùn)練集數(shù)據(jù)準(zhǔn)備完畢后,可通過(guò)PaddlePaddle Segementaion 庫(kù)程序create _ dataset _list.py生成規(guī)范的cityscapes格式的數(shù)據(jù)集,供模型訓(xùn)練調(diào)用。
PaddleSeg內(nèi)部配置了多種功能腳本,如模型訓(xùn)練、模型評(píng)估和訓(xùn)練可視化等。不同腳本在訓(xùn)練過(guò)程中可通過(guò)控制特定Flags 開(kāi)關(guān)啟動(dòng),也可通過(guò)直接修改默認(rèn)的訓(xùn)練配置啟動(dòng)。
本次訓(xùn)練的語(yǔ)義分割對(duì)象screwdriver(螺絲刀)和screw(螺絲)是小型物體,且數(shù)據(jù)集規(guī)模不大,不過(guò)仍可在遠(yuǎn)程深度學(xué)習(xí)平臺(tái)AI Studio上借助一塊NVIDIA Tesla V100 開(kāi)啟CUDA加速,快速完成模型訓(xùn)練[9],且識(shí)別準(zhǔn)確率達(dá)到工業(yè)生產(chǎn)螺絲刀與螺絲的分割標(biāo)準(zhǔn)。
圖6 所示為分別借助CPU 和在AI Studio 上的NVIDIA Tesla V100 進(jìn)行模型訓(xùn)練的效果圖,其中圖6(a)為調(diào)用CPU的模型訓(xùn)練輸出結(jié)果,圖6(b)為調(diào)用GPU的結(jié)果。
圖6 模型訓(xùn)練效果圖
取連續(xù)10 個(gè)epoch作為樣本,分別計(jì)算采用GPU和CPU訓(xùn)練模型的平均速度,得到用GPU 訓(xùn)練模型的平均速度是3.353 step/s,而CPU 的平均速度只有1.776 step/s,說(shuō)明調(diào)用平臺(tái)GPU 的訓(xùn)練模型的速度是CPU的近1.89 倍,AI Studio 平臺(tái)訓(xùn)練模型只需花費(fèi)約原先一半的時(shí)間,是可靠的高性能計(jì)算手段[10]。
模型訓(xùn)練完畢后,將訓(xùn)練好的模型通過(guò)PaddleSeg API庫(kù)內(nèi)部的eval.py測(cè)試程序進(jìn)行驗(yàn)證,根據(jù)API的使用說(shuō)明可知,測(cè)試程序的輸出結(jié)果為準(zhǔn)確率(acc)、mean IoU和Kappa系數(shù),這3 種指標(biāo)數(shù)值通常是小于1 的正數(shù),其數(shù)值越接近1,說(shuō)明模型的一致性越好[11]。
圖7 所示為通過(guò)eval.py 測(cè)試程序?qū)δP瓦M(jìn)行測(cè)試的結(jié)果圖,由圖可見(jiàn),acc、mean IoU 和Kappa 系數(shù)3種指標(biāo)數(shù)值都十分接近1,說(shuō)明此時(shí)訓(xùn)練的模型一致性強(qiáng),具備完成螺絲刀與螺絲的語(yǔ)義分割任務(wù)的能力。
圖7 模型檢測(cè)
將原始圖片傳入語(yǔ)義分割模塊,模塊的輸出圖像僅包含螺絲刀圖像和螺絲圖像,該圖像不能直接作為輸入傳入FSM算法模塊,因?yàn)椴粌H需要將圖像信息轉(zhuǎn)換成FSM算法模塊的規(guī)范輸入,還需要考慮語(yǔ)義分割模塊在復(fù)雜環(huán)境下的噪聲干擾[12]。
FSM算法圖像預(yù)處理主要包括邊緣檢測(cè)和降噪。
邊緣檢測(cè)是提取分割圖像的邊緣信息,獲得只含有螺絲刀和螺絲的邊緣圖像[13],由于復(fù)雜環(huán)境影響,分割圖像存在噪音,需將該圖像再傳入降噪模塊濾掉噪聲。語(yǔ)義分割圖像經(jīng)邊緣檢測(cè)模塊輸出圖像,如圖8(a)、(b)所示。
圖8 邊緣檢測(cè)模塊工作效果圖
降噪模塊會(huì)接收邊緣檢測(cè)模塊的輸出圖像,對(duì)該圖像做降噪處理[14],保證傳入FSM 算法模塊的圖像是可識(shí)別的。邊緣檢測(cè)圖像經(jīng)過(guò)降噪模塊的輸出圖像,如圖9(a)、(b)所示。
圖9 降噪模塊工作效果圖
將降噪模塊的輸出圖像傳入FSM算法模塊中,保證FSM能正常運(yùn)作。
在FSM算法模塊中,不斷接收來(lái)自前模塊的輸出圖像,提取圖像特征,判斷螺絲刀和螺絲的工作狀態(tài),運(yùn)轉(zhuǎn)狀態(tài)機(jī)。
最初螺絲刀處于空閑狀態(tài),螺絲還未打入,此時(shí)FSM進(jìn)入“IDLE(空閑)”狀態(tài),如圖10 所示。只有當(dāng)螺絲刀高度低于初始位置,并且運(yùn)動(dòng)方向朝下時(shí),狀態(tài)機(jī)進(jìn)入次態(tài)Screwdriver_is_falling,否則將一直處于IDLE狀態(tài)。
圖10 “空閑”狀態(tài)
當(dāng)FSM識(shí)別到螺絲刀已離開(kāi)初始位置,并開(kāi)始下降至螺絲高度時(shí),F(xiàn)SM進(jìn)入次態(tài)“Screwdriver_is_falling(螺絲刀下降)”,如圖11 所示。只有當(dāng)螺絲刀和螺絲圖像合并時(shí),即在實(shí)際工作情況是螺絲刀與螺絲工件契合,螺絲刀開(kāi)始將螺絲旋入工件時(shí),F(xiàn)SM 進(jìn)入次態(tài)Docking,否則將一直處于Screwdriver_is_falling。
圖11 “螺絲刀下降”狀態(tài)
直到螺絲刀和螺絲契合,螺絲刀開(kāi)始旋轉(zhuǎn)螺絲,此時(shí)FSM才進(jìn)入次態(tài)“Docking(貼合)”,如圖12 所示。只有當(dāng)螺絲刀與螺絲不再合并,且螺絲刀運(yùn)動(dòng)方向朝上時(shí),狀態(tài)機(jī)進(jìn)入次態(tài)Back_return,否則將一直處于Docking。
圖12 “貼合”狀態(tài)
之后螺絲刀和螺絲分離,螺絲刀開(kāi)始上升回到初始位置,此時(shí)FSM狀態(tài)進(jìn)入次態(tài)“Back_return(螺絲刀返回)”,如圖13 所示。
圖13 “螺絲刀返回”及“打入成功”狀態(tài)
在Back_return 狀態(tài)下,根據(jù)輸入的不同,F(xiàn)SM 的次態(tài)情況會(huì)有不同:當(dāng)螺絲刀回到初始位置,且螺絲高度符合用戶自定義產(chǎn)品質(zhì)檢高度要求時(shí),F(xiàn)SM 進(jìn)入次態(tài)“done_successful(打入成功)”;當(dāng)螺絲刀回到初始位置,但螺絲高度不符合用戶自定義產(chǎn)品質(zhì)檢高度要求時(shí),F(xiàn)SM進(jìn)入次態(tài)“done_with_error(打入失?。?。質(zhì)檢高度指在工業(yè)生產(chǎn)中,螺絲打入器件時(shí)在外側(cè)露出的最大高度[15],它一般精確到毫米,當(dāng)下常用攝像頭的分辨率均已達(dá)到1 080 p,完全可以勝任毫米級(jí)的圖像識(shí)別,用這些攝像頭采集的圖像可以幫助計(jì)算機(jī)判斷螺絲是否符合質(zhì)檢要求。
顯然圖13 也能說(shuō)明此時(shí)FSM 識(shí)別螺絲屬于“done_successful(打入成功)”的情況。而對(duì)于“done_with_error”的輸出圖像,如圖14 所示。螺絲刀返回至初始位置,但螺絲高度不符合產(chǎn)品質(zhì)檢高度要求,此時(shí)FSM進(jìn)入次態(tài)“done_with_error(打入失?。薄?/p>
圖14 “打入失敗”狀態(tài)
當(dāng)FSM 狀態(tài)是“done_successful”或“done_with_error”時(shí),F(xiàn)SM會(huì)返回空閑狀態(tài)“IDLE”,準(zhǔn)備進(jìn)入下一輪對(duì)螺絲刀工作狀態(tài)的檢測(cè)。
對(duì)于FSM算法模塊,在正常工作情況下都會(huì)經(jīng)歷以上6 個(gè)狀態(tài)[16],但為防止異常情況發(fā)生,需要工廠負(fù)責(zé)人周期性檢查算法輸出的結(jié)果是否正常,防止造成資源浪費(fèi)[17]。
圖15 所示為電動(dòng)工具檢測(cè)設(shè)備實(shí)驗(yàn)平臺(tái)實(shí)物圖,包括:工件傳送帶,工件托盤,電動(dòng)螺絲刀,螺絲,攝像頭,運(yùn)算服務(wù)器(PC機(jī))等設(shè)備。
圖15 電動(dòng)工具檢測(cè)系統(tǒng)實(shí)物圖
在實(shí)際工作臺(tái)上運(yùn)行電動(dòng)工具檢測(cè)系統(tǒng),其輸出結(jié)果如圖16 所示。
本文以電動(dòng)螺絲刀工作狀態(tài)識(shí)別、判斷擰緊作為實(shí)際工作場(chǎng)景,基于PaddlePaddle深度學(xué)習(xí)框架,采用PaddleSeg語(yǔ)義分割方法,在AI Studio遠(yuǎn)程深度學(xué)習(xí)平臺(tái)訓(xùn)練語(yǔ)義分割模型,將語(yǔ)義分割圖進(jìn)行預(yù)處理后傳入FSM實(shí)現(xiàn)工作狀態(tài)識(shí)別與擰緊判斷,為解決工業(yè)生產(chǎn)提供一種方案。本系統(tǒng)具有物聯(lián)網(wǎng)特性,在智能工廠中設(shè)置視覺(jué)傳感器設(shè)備,將數(shù)據(jù)傳送至遠(yuǎn)程終端,在終端實(shí)現(xiàn)智能處理,實(shí)現(xiàn)工廠前端與管理后端數(shù)據(jù)互聯(lián)。本項(xiàng)目在2020 年全國(guó)物聯(lián)網(wǎng)設(shè)計(jì)大賽中獲華東賽區(qū)特等獎(jiǎng)。
圖16 電動(dòng)工具檢測(cè)系統(tǒng)輸出結(jié)果