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