缺陷檢測是工業(yè)視覺領域非常重要的應用之一。幾乎所有的工業(yè)產(chǎn)品在流入市場之前都會有缺陷檢測的環(huán)節(jié),目的是確保產(chǎn)品是合格的。
對產(chǎn)品進行缺陷檢測時,分為人工目視檢測和工業(yè)視覺檢測。利用工業(yè)視覺做缺陷檢測時,常用的解決思路如下:
Ⅰ、傳統(tǒng)圖像算法
用傳統(tǒng)圖像算法做缺陷檢測時,方法有二:
①特征工程
特征工程是缺陷檢測中最常用的方法。特征工程是通過傳統(tǒng)圖像算法分析圖像灰度值、方差、均值、顏色、型狀、輪廓、面積等特征去檢測缺陷,方法非常靈活,開發(fā)速度也快。在應用層面,一般會將缺陷特征的相關參數(shù)開放到軟件端,供使用者靈活調(diào)整。
②模板匹配
模板匹配是通過預設一些圖像模板,將圖像模板與待測圖像進行比較,以達到識別缺陷的目的。這種算法應用有限,舉個例子,做某品牌飲料瓶標簽的缺陷檢測,會利用方法①特征工程的技術識別部分缺陷類型,但也會利用模板匹配,通過預設一些標簽圖像模板去匹配待測圖像,以判斷標簽是否有缺陷。
Ⅱ、CV算法
計算機視覺算法即CV(Computer Vision)算法,是指讓計算機理解圖像的一種技術,屬于AI(Artificial Intelligence)算法的分支之一。
在工業(yè)視覺領域,處理對象是圖像,故提到AI算法便是CV算法。也許AI算法聽起來高級,所以在工業(yè)視覺領域,大家一般多說AI算法,不怎么提CV算法。
圖像分類、目標檢測、語義分割、實例分割、目標跟蹤、OCR、人臉識別、圖像生成、異常檢測、等都屬于CV算法。其中,在工業(yè)視覺缺陷檢測領域應用較多的CV算法為圖像分類、目標檢測、實例分割。
①圖像分類
圖像分類,顧名思義,是對圖像進行分類并確定圖像類別的一種算法。根據(jù)分類任務不同,圖像分類又分為單標簽分類和多標簽分類。常用的分類網(wǎng)絡有ResNet、MobileNet、EfficientNet等。
在工業(yè)視覺領域,理論上講,可以利用圖像分類算法對整張圖像直接分類,以確定其缺陷類別。由于工業(yè)相機拍攝的視野問題,會使整張圖像除了目標區(qū)域外,還會包含很多無關的背景,這些無關的背景會干擾圖像分類模型的訓練,導致圖像分類算法的準確率低,因此實際項目中,極少利用圖像分類算法直接對整張圖進行分類。
②目標檢測
目標檢測算法是在圖像中對所有感興趣的目標,用檢測框定位目標的位置和類別,如下圖1所示。這種方法簡單粗暴,即通過標注大量缺陷數(shù)據(jù)集,訓練一個具有缺陷檢測能力的目標檢測模型。
圖1 目標檢測示例
最經(jīng)典目標檢測算法首推YOLO系列,準確率高且推理速度快,屬于非常優(yōu)異的算法。在實際應用中,需要對圖像進行尺寸的縮放,使圖像大小符合目標檢測模型所要求的尺寸。如果原圖很大,缺陷很小,使缺陷在原圖中占比很小,比如點狀的微小缺陷,可能會使圖像在預處理縮放過程中,將缺陷丟失。因此,如果有此類問題的風險,一般會將原圖進行裁剪為多份,比如10000*5000分辨率的圖像,拆分為10張2000*2500分辨率的圖像,然后對這10張圖像單獨進行檢測,最后將檢測結果匯總。
此類方法也有弊端,那就是數(shù)據(jù)集,成也數(shù)據(jù)集,敗也數(shù)據(jù)集。因為目標檢測算法屬于有監(jiān)督學習,依賴大量的數(shù)據(jù)集,如果數(shù)據(jù)集不夠,會導致算法準確率低。實際項目中,往往需要持續(xù)收集數(shù)據(jù),反復多次迭代模型,才能達到理想效果。
③實例分割
實例分割是目標檢測的升華版本,即在目標檢測的基礎上用更精細的mask進行定位,而非檢測框,如圖2所示。
圖2 實例分割示例
YOLO算法的原創(chuàng)作者Joseph Redmon在他YOLOv3論文的最后寫了這樣一句話:Boxes are stupid anyway though, I’m probably a true believer in masks except I can’t get YOLO to learn them。由此可見,Joseph Redmon是認可mask而非box。
將實例分割算法應用到缺陷檢測上,可以獲得比目標檢測算法更加精準的缺陷定位,這是有利于缺陷檢測的。另一方面,當不同的缺陷離得很近,并且出現(xiàn)交叉或者包含的情況,目標檢測算法很難獲得較好的類別區(qū)分,但是實例分割算法并沒有這個困境。若用實例分割算法在尺寸很大的圖像上進行缺陷檢測時,處理方法與目標檢測算法一致,也是將圖像拆分。
實例分割算法和目標檢測算法一樣,都屬于有監(jiān)督學習,需要依賴大量的數(shù)據(jù)集。相比于目標檢測算法拉框式的標注,實例分割算法標注的更為精確,標注工作量更大。實際項目中,實例分割算法往往也需要持續(xù)收集圖像數(shù)據(jù),反復多次迭代模型,才能達到理想效果。
PS:此處致敬一下Joseph Redmon大神,摘選他YOLOv3論文驚人敬佩的結束語,如下圖3所示:
圖3 YOLOv3論文摘選
Ⅲ、傳統(tǒng)圖像算法+CV算法
這種方法將傳統(tǒng)圖像算法和CV算法結合在一起,也是常用的策略。
通常是利用傳統(tǒng)圖像算法先定位缺陷,然后再將缺陷ROI圖像傳給AI分類算法進行分類。這種方法解決了傳統(tǒng)圖像算法定位容易,但是分類困難的問題。
結束語
工業(yè)視覺缺陷檢測算法有很多,本文羅列了三大類主流方法,除了上述三大類,也有無監(jiān)督學習算法、圖像異常檢測算法,讀者感興趣可自行檢索研究。
任何一種缺陷檢測算法都有自己的技術邊界,在使用的時候,要具體情況具體分析,好的策略是將多種不同的算法組合使用,形成“絕對檢測”。