張欣宇,張 楠,王希彥,吳 玉,劉 鵬,謝 斌,張文碩,王延忠
(1.北京航空航天大學(xué) 機(jī)械工程與自動(dòng)化學(xué)院,北京 100191;2.中國兵器工業(yè)新技術(shù)推廣研究所,北京 100089;3.重慶鐵馬變速箱有限公司,重慶 400050)
隨著智能制造技術(shù)的逐漸發(fā)展,裝配產(chǎn)線自動(dòng)化程度越來越高,但仍然有部分檢測(cè)工作無法使用自動(dòng)化設(shè)備替代,依舊需要采用人工檢測(cè)的方式,不但會(huì)造成裝配效率的降低,而且檢測(cè)過程易產(chǎn)生錯(cuò)誤。以減速器中制動(dòng)器裝配為例,裝配過程需交替裝配摩擦片和鋼片兩種零件,且裝配順序和數(shù)量唯一,操作不當(dāng)會(huì)造成錯(cuò)裝、漏裝等錯(cuò)誤,進(jìn)而導(dǎo)致售后問題,影響制動(dòng)器的使用性能,產(chǎn)生經(jīng)濟(jì)損失,甚至造成不必要的后果。制動(dòng)器裝配后由于其結(jié)構(gòu)緊湊、密封性好等特點(diǎn),人工檢測(cè)裝配不方便,需要花費(fèi)大量的時(shí)間,而且存在錯(cuò)誤的風(fēng)險(xiǎn)。針對(duì)這些問題,本文提出了一種在裝配過程中實(shí)時(shí)檢測(cè)零件裝配情況的檢測(cè)方法,幫助提高裝配的準(zhǔn)確性。
計(jì)算機(jī)視覺是賦予計(jì)算機(jī)類似于人的特征,通過對(duì)獲取的圖片、視頻等圖像數(shù)據(jù)進(jìn)行分析處理,產(chǎn)生一定自主判斷能力[1]。目前,計(jì)算機(jī)視覺已經(jīng)可以代替人力,進(jìn)行一些檢測(cè)、識(shí)別、判斷等工作任務(wù)[2-3]。本文使用的是計(jì)算機(jī)視覺中的目標(biāo)檢測(cè)技術(shù)[4],目標(biāo)檢測(cè)是計(jì)算機(jī)視覺中重要的研究方向之一,應(yīng)用范圍廣泛,目前已經(jīng)可以應(yīng)用于機(jī)器人、工業(yè)檢測(cè)、視頻監(jiān)控等領(lǐng)域[5]。2016年后,目標(biāo)檢測(cè)算法發(fā)展迅速,國內(nèi)外學(xué)者相繼提出算法SDD[6](Single Shot Multi-Box Detector)系列和YOLO[7-9](You Only Look Once)系列。2021年,Ultralytics公司推出了YOLOv5算法,YOLOv5是基于原有YOLOv4架構(gòu)的基礎(chǔ)上進(jìn)行各方面的優(yōu)化改進(jìn)[10]。相比其他目標(biāo)檢測(cè)算法,YOLOv5因其高速和高精度而受到廣泛關(guān)注,YOLOv5網(wǎng)絡(luò)具備快速推理、高準(zhǔn)確率和小尺寸等優(yōu)點(diǎn),非常適合應(yīng)用在制動(dòng)器裝配檢測(cè)中。
YOLOv5算法依據(jù)網(wǎng)絡(luò)模型寬度和深度的不同,按照從小到大依次遞增排序,有4種版本:YOLOv5s、YOLOv5m、YOLOv5l以及YOLOv5x。在這些算法中,YOLOv5s模型小、實(shí)時(shí)性好、具有最快的識(shí)別速度。因此,本文選取YOLOv5s算法作為制動(dòng)器裝配檢測(cè)的訓(xùn)練模型。YOLOv5s算法主要包括輸入端、主干網(wǎng)絡(luò)、Neck模塊和輸出端4個(gè)部分。
輸入端主要包括3個(gè)部分:Mosaci數(shù)據(jù)增強(qiáng)、圖片尺寸縮放和自適應(yīng)錨框計(jì)算。Mosaci數(shù)據(jù)增強(qiáng)隨機(jī)從數(shù)據(jù)集中選取4張照片,經(jīng)過隨機(jī)的縮放、裁剪等處理后,將圖像拼接為一張包含4張不同圖像的大圖像,此操作增強(qiáng)了數(shù)據(jù)集的多樣性,豐富了數(shù)據(jù)集素材;圖片尺寸縮放是在圖像中添加最少的黑邊,以提高模型的計(jì)算速度,減少訓(xùn)練計(jì)算量;自適應(yīng)錨框計(jì)算通過對(duì)初始錨框的計(jì)算,將其與實(shí)際框架進(jìn)行比較,并將二者之差進(jìn)行逆向更新,通過多次迭代,獲得最佳錨框架參數(shù),減少樣本影響,提高檢測(cè)準(zhǔn)確率。
主干網(wǎng)絡(luò)包含F(xiàn)ocus和CSP結(jié)構(gòu)[11]。Focus結(jié)構(gòu)包括切片與卷積,將具有高分辨率圖片中的像素點(diǎn)加到低分辨率的圖片中,堆疊形成新圖片,對(duì)新圖片進(jìn)行卷積運(yùn)算,從中提取出圖像中的關(guān)鍵信息。CSP結(jié)構(gòu)是將輸入的特征圖分為兩部分處理,一部分輸入到下一層做卷積處理,另一部分通過子網(wǎng)絡(luò)處理,最后將兩部分結(jié)合起來作為下一層的輸入。使用不同類型的特征抽取模塊抽取檢測(cè)目標(biāo)零件,產(chǎn)生目標(biāo)檢測(cè)零件的語義信息,提高神經(jīng)網(wǎng)絡(luò)在訓(xùn)練集合中的學(xué)習(xí)與推理的速度。
Neck模塊使用FPN(Feature Pyramid Network)+PAN(Path Aggregation Network)結(jié)構(gòu)[12]。FPN結(jié)構(gòu)通過從上到下的方式,對(duì)各特征進(jìn)行上層到下層的融合。PAN是在FPN基礎(chǔ)上進(jìn)行的,通過自下而上的方式,可以很好地把下層的位置信息傳遞給上層,從而增強(qiáng)對(duì)目標(biāo)的探測(cè)。FPN+PAN結(jié)構(gòu)如圖1所示。
圖1 FPN+PAN結(jié)構(gòu)圖
輸出端用來檢測(cè)大、中、小物體的網(wǎng)格,以CIOU Loss[13]為損失函數(shù),在進(jìn)行多輪操作的同時(shí),使用NMS(Non-max Suppression)方法對(duì)相應(yīng)的參數(shù)進(jìn)行持續(xù)的調(diào)整,使得計(jì)算出的錨框和實(shí)際錨框之間的誤差值達(dá)到最小,最后獲得最佳的模型。
本文檢測(cè)系統(tǒng)搭配攝像頭可用于制動(dòng)器零件檢測(cè),以摩擦片和鋼片檢測(cè)為例,具體流程如圖2所示。將攝像頭安裝在制動(dòng)器裝配工位,用于實(shí)時(shí)檢測(cè)制動(dòng)器的裝配過程,另一端連接檢測(cè)計(jì)算機(jī),將拍攝的圖像反饋給計(jì)算機(jī);調(diào)用檢測(cè)程序,使檢測(cè)系統(tǒng)處于等待檢測(cè)的狀態(tài);攝像頭在裝配過程中每隔10 ms保存一張視頻幀圖片,傳輸給計(jì)算機(jī)分析是否檢測(cè)已經(jīng)開始;當(dāng)檢測(cè)到裝配工作進(jìn)行,檢測(cè)識(shí)別系統(tǒng)開始工作,調(diào)用YOLOv5s算法程序?qū)D片進(jìn)行計(jì)算,自動(dòng)識(shí)別裝配零件的類型,根據(jù)檢測(cè)到的結(jié)果進(jìn)行分析對(duì)比,輸出檢測(cè)結(jié)果的標(biāo)注框信息,并存貯到記錄中;若裝配過程為摩擦片和鋼片各交替安裝5個(gè),且總數(shù)為10個(gè),則證明裝配正確,檢測(cè)系統(tǒng)提示裝配正確并輸出裝配順序;若檢測(cè)到裝配相鄰兩零件為同一類型的零件,則跳出檢測(cè)系統(tǒng),輸出裝配順序并發(fā)出警告,提示存在錯(cuò)裝;若裝配順序正確但裝配總數(shù)沒達(dá)到要求,檢測(cè)系統(tǒng)將在最近零件裝配后等待30 s,超時(shí)沒檢測(cè)到下一零件裝配,則跳出檢測(cè)系統(tǒng),輸出裝配順序并發(fā)出警告,提示存在漏裝。
圖2 裝配檢測(cè)流程圖
環(huán)境的搭建依賴NVIDIA驅(qū)動(dòng)安裝與更新,根據(jù)電腦的顯卡版本登錄官網(wǎng)下載對(duì)應(yīng)的驅(qū)動(dòng)更新,安裝完成后在命令框輸入:nvidia-smi,用于查看最高支持的CUDA版本,并根據(jù)此版本安裝深度學(xué)習(xí)環(huán)境。
虛擬環(huán)境的搭建需要Anaconda軟件完成,在Anaconda的終端上輸入命令:conda create-n pytorch python=3.8,即建立一個(gè)名為pytorch的虛擬環(huán)境,python的版本是3.8,執(zhí)行命令:conda activate pytorch,用于激活環(huán)境;進(jìn)入Pytorch的官方網(wǎng)站,按照顯卡的型號(hào)、CUDA的最大支持版本,將方塊中的命令語句(見圖3)拷貝到命令窗口中,即可下載該環(huán)境所需的相關(guān)軟件包;最后,下載Pycharm程序并在其上建立一個(gè)與之前所建立的虛擬環(huán)境,可確認(rèn)是否已經(jīng)完成了配置。
圖3 虛擬環(huán)境軟件包下載
為方便數(shù)據(jù)集素材和處理結(jié)果的存儲(chǔ),創(chuàng)建一個(gè)名為“VOC2007”的文件夾,在其中建立一個(gè)“JPEGImages”文件夾,用來存儲(chǔ)需要標(biāo)記的圖像文件;建立一個(gè)標(biāo)簽文件,命名為“Annotations”來存儲(chǔ)注釋;建立一個(gè)名為“predefined_classes”的txt文件,用來存儲(chǔ)標(biāo)注的分類名。
將要標(biāo)注的圖片放在“JPEGImages”文件夾中,素材越多,準(zhǔn)確度也會(huì)越高,本次數(shù)據(jù)集包含每種零件在不同光照強(qiáng)度、位置、角度等因素的照片500~600張,總數(shù)超過1 000張(見圖4a)。圖像處理應(yīng)用labelimg軟件,命令控制臺(tái)輸入:pip install labelimg,自動(dòng)下載軟件相關(guān)的數(shù)據(jù)包。在命令行鍵入:labelimg JPEGImages predefined_classes.txt,打開labelimg,選擇每個(gè)圖片中的目標(biāo)對(duì)象,并標(biāo)記分類,處理過程如圖4b所示,結(jié)果存儲(chǔ)到“Annotations”文件中(見圖4c),處理后的文件格式為xml文件,為方便深度學(xué)習(xí)環(huán)境訓(xùn)練,編寫python程序?qū)⑵滢D(zhuǎn)為txt文件,并按照比例將數(shù)據(jù)集劃分為80%的訓(xùn)練集和20%的驗(yàn)證集。
a)數(shù)據(jù)集素材
本文利用YOLOV5算法訓(xùn)練數(shù)據(jù)集,其代碼結(jié)構(gòu)如下:data用于存放yaml文件,為數(shù)據(jù)集和驗(yàn)證集提供配置信息,可以根據(jù)需求修改所檢測(cè)目標(biāo)的類別數(shù)和對(duì)應(yīng)的名稱;weights用于存放數(shù)據(jù)集訓(xùn)練好權(quán)重;models包含4個(gè)不同的s、m、l、x的項(xiàng)目版本,按照如上順序檢測(cè)速度升高,準(zhǔn)確度下降;算法的實(shí)現(xiàn)主要依賴于3個(gè)python程序,分別為train.py、detect.py、test.py,用于訓(xùn)練數(shù)據(jù)集、目標(biāo)檢測(cè)識(shí)別和測(cè)試結(jié)果;“requirements.txt”文本文件包含yolov5的依賴庫,可以根據(jù)需要安裝到環(huán)境中。
將2.2節(jié)制作好的數(shù)據(jù)集文件導(dǎo)入到工程文件中,按照本次檢測(cè)需求分別修改data文件夾和models文件夾的yaml配置文件。將data文件夾中的voc.yalm文件復(fù)制,填寫數(shù)據(jù)集中用于訓(xùn)練和測(cè)試的圖片集路徑,填寫所需檢測(cè)目標(biāo)零件的英文名,并按照所需檢測(cè)零件數(shù)量修改檢測(cè)類別數(shù);找到models文件夾中yolov5s.yaml文件,復(fù)制并按需修改參數(shù)。在train.py中分別填入修改后data和models的yaml配置文件路徑,填寫weights路徑到對(duì)應(yīng)權(quán)重參數(shù),更改訓(xùn)練輪次為300輪,啟動(dòng)程序開始訓(xùn)練,訓(xùn)練時(shí),可以使用tensorbord來查看實(shí)時(shí)參數(shù)。在訓(xùn)練完成后,將產(chǎn)生一個(gè)best.py文件,可以使用此文件來識(shí)別目標(biāo)。
本文采用Astra Pro攝像機(jī)與目標(biāo)檢測(cè)程序相結(jié)合,將2.3節(jié)所述產(chǎn)生的best.py文件嵌入到檢測(cè)程序中,在生產(chǎn)線安裝檢測(cè)攝像機(jī)連接計(jì)算機(jī),實(shí)時(shí)檢測(cè)制動(dòng)器裝配過程,輸出所檢測(cè)零件的英文名字和置信度(即代表有多大概率可以確定是所要檢測(cè)的目標(biāo)零件)。圖5和圖6所示分別為裝配過程中摩擦片和鋼片的實(shí)時(shí)檢測(cè)結(jié)果,以圖5a為例,方框中即表示為所要檢測(cè)的目標(biāo)零件,標(biāo)簽“steelPlate”表示其類別為鋼片,0.95為檢測(cè)結(jié)果的置信度,表示算法模型計(jì)算判斷該物體有95%的概率是鋼片,系統(tǒng)默認(rèn)置信度超過0.5即可接受,本文將該參數(shù)設(shè)置為0.8,仍可順利完成目標(biāo)檢測(cè)任務(wù),提高了檢測(cè)精準(zhǔn)性,降低了檢測(cè)失誤率。
a)置信度為0.95
a)置信度為0.97
根據(jù)實(shí)際生產(chǎn)線裝配實(shí)驗(yàn)結(jié)果,檢測(cè)目標(biāo)零件正確率可達(dá)到99%以上。本文檢測(cè)系統(tǒng)會(huì)自動(dòng)將識(shí)別的裝配零件加入到裝配順序中,同時(shí)將同一裝配序列零件所檢測(cè)到的圖片儲(chǔ)存到一起,以便后續(xù)查到。針對(duì)裝配過程中易發(fā)生的錯(cuò)裝和漏裝問題,分別作出相應(yīng)處理,若檢測(cè)到相鄰裝配流程裝配的是同一裝配序列零件時(shí),立刻跳出檢測(cè)系統(tǒng),輸出裝配順序并發(fā)出警報(bào),提示檢查是否錯(cuò)裝,系統(tǒng)恢復(fù)等待檢測(cè)狀態(tài);若從零件開始裝配,直到裝配停止,檢測(cè)系統(tǒng)檢測(cè)零件未達(dá)到數(shù)量要求,則同樣輸出裝配順序并發(fā)出警報(bào),提示檢查是否漏裝,系統(tǒng)恢復(fù)等待檢測(cè)狀態(tài)。
本文設(shè)計(jì)了一種基于YOLOv5s算法的制動(dòng)器防錯(cuò)裝檢測(cè)系統(tǒng),以制動(dòng)器中摩擦片和鋼片為實(shí)驗(yàn)對(duì)象,采用對(duì)生產(chǎn)線零件圖片收集的方式制作數(shù)據(jù)集,應(yīng)用labelimg軟件對(duì)數(shù)據(jù)集進(jìn)行標(biāo)注處理,編寫代碼將文件格式轉(zhuǎn)化,并劃分為訓(xùn)練集和驗(yàn)證集,使用YOLOv5算法完成對(duì)數(shù)據(jù)集的訓(xùn)練,最后將檢測(cè)程序與外接攝像頭相接,根據(jù)實(shí)際生產(chǎn)線裝配需求,完成制動(dòng)器防錯(cuò)裝檢測(cè)系統(tǒng)。
實(shí)驗(yàn)結(jié)果表明,該檢測(cè)系統(tǒng)可以對(duì)生產(chǎn)線裝配進(jìn)行實(shí)時(shí)監(jiān)測(cè),對(duì)裝配過程中存在的錯(cuò)裝和漏裝問題進(jìn)行警報(bào)提示,可代替人工檢測(cè),減少成本,降低產(chǎn)品裝配失誤率,提高產(chǎn)品一次合格率,避免錯(cuò)裝產(chǎn)品流入市場。