天天看點

3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐

3.2 研究背景

當今社會,随着計算機技術,人工智能等科學技術的出現和發展,以及研究的深入,出現了基于機器視覺技術的表面缺陷檢測技術。這種技術的出現,大大提高了生産作業的效率,避免了因作業條件,主觀判斷等影響檢測結果的準确性,實作能更好更精确地進行表面缺陷檢測,更加快速的識别産品表面瑕疵缺陷。

産品表面缺陷檢測屬于機器視覺技術的一種,就是利用計算機視覺模拟人類視覺的功能,從具體的實物進行圖象的采集處理、計算、最終進行實際檢測、控制和應用。産品的表面缺陷檢測是機器視覺檢測的一個重要部分,其檢測的準确程度直接會影響産品最終的品質優劣。由于使用人工檢測的方法早已不能滿足生産和現代工藝生産制造的需求,而利用機器視覺檢測很好地克服了這一點,表面缺陷檢測系統的廣泛應用促進了企業工廠産品高品質的生産與制造業智能自動化的發展。

3.3 研究意義

工業産品缺陷檢測這塊市場空間很大,目前除了傳統的機器視覺廠商在做以外,深度學習創業巨頭涉及的比較少。缺陷檢測可以為工廠帶來以下好處:

1、優化人力:人工檢測易受經驗和心裡等因素的影響,精度低,穩定性差;解決勞動力短缺的問題;

2、非接觸處理:避免二次損傷,提高可靠性;

3、降低成本:改善産線自動化,提高生産效率;協助作業人員消除生産錯誤、降低内部生産損失;早期就報廢劣質産品,減少浪費節約成本;提高生産的柔性和自動化程度;

4、提高品質:産品品質均一,提升品牌競争力。通過圖像分析,可檢測各種瑕疵位置、尺寸、形狀和類型等;

5、高精度檢測:某些要求精密度較高的檢查領域、在配了合适的相機後,檢測精度可達到u級,人眼無法檢測可使用機器完成;

6、對缺陷進行分類:通過圖像分析,檢測出圖像上各種瑕疵的位置、大小和形狀,解析圖像,并對其進行分類;

7、分析無規律圖像、複雜圖像:通過深度學習算法,系統可自動學習瑕疵特征,是無規律圖像的分析變得可能;

3.4 産品缺陷檢測模型介紹

Mask R-CNN的方法通過添加一個與現有目标檢測框回歸并行的,用于預測目标掩碼的分支來擴充Faster R-CNN,通過添加一個用于在每個感興趣區域(RoI)上預測分割掩碼的分支來擴充Faster R-CNN,就是在每個感興趣區域(RoI)進行一個二分類的語義分割,在這個感興趣區域同時做目标檢測和分割,這個分支與用于分類和目标檢測框回歸的分支并行執行,如下圖(圖1)所示(用于目标分割的Mask R-CNN架構):

3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐

掩碼分支是作用于每個RoI的小FCN,以像素到像素的方式預測分割掩碼,可是要在ROI區域進行一個mask分割,存在一個問題,Faster R-CNN不是為網絡輸入和輸出之間的像素到像素對齊而設計的,如果直接拿Faster R-CNN得到的ROI進行mask分割,那麼像素到像素的分割可能不精确,因為應用到目标檢測上的核心操作執行的是粗略的空間量化特征提取,直接分割出來的mask存在錯位的情況,是以作者提出了簡單的,量化無關的層,稱為RoIAlign(ROI對齊),可以保留精确的空間位置,可以将掩碼(mask)準确度提高10%至50%。

3.5 實驗分析

3.5.1 産品缺陷資料集

Kaggle鋼鐵表面缺陷檢測資料集,資料集中,鋼鐵表面圖像可以不具有缺陷、單個類别的缺陷或多個類别的缺陷,缺陷類别分為4類。

3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐
3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐
3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐
3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐

3.5.2 資料集轉換方法

COCO資料集Json格式

{

"info": info,
"licenses": [license],
"images": [image],
"annotations": [annotation],           

}

info{

"year": int,
"version": str,
"description": str,
"contributor": str,
"url": str,
"date_created": datetime,           

license{

"id": int,
"name": str,
"url": str,           

}

image{

"id": int,
"width": int,
"height": int,
"file_name": str,
"license": int,
"flickr_url": str,
"coco_url": str,
"date_captured": datetime,           

annotations字段是包含多個annotation執行個體的一個數組,annotation類型本身又包含了一系列的字段,如這個目标的category id和segmentation mask。segmentation格式取決于這個執行個體是一個單個的對象(即iscrowd=0,将使用polygons格式)還是一組對象(即iscrowd=1,将使用RLE格式)。如下所示:

annotation{

"id": int,    
"image_id": int,
"category_id": int,
"segmentation": RLE or [polygon],
"area": float,
"bbox": [x,y,width,height],
"iscrowd": 0 or 1,           

COCO資料集的RLE都是uncompressed RLE格式(與之相對的是compact RLE)。 RLE所占位元組的大小和邊界上的像素數量是正相關的。RLE格式帶來的好處就是當基于RLE去計算目标區域的面積以及兩個目标之間的unoin和intersection時會非常有效率。 上面的segmentation中的counts數組和size數組共同組成了這幅圖檔中的分割 mask。其中size是這幅圖檔的寬高,然後在這幅圖像中,每一個像素點要麼在被分割(标注)的目标區域中,要麼在背景中。很明顯這是一個bool量:如果該像素在目标區域中為true那麼在背景中就是False;如果該像素在目标區域中為1那麼在背景中就是0。對于一個240x320的圖檔來說,一共有76800個像素點,根據每一個像素點在不在目标區域中,我們就有了76800個bit,比如像這樣(随便寫的例子,和上文的數組沒關系):00000111100111110...;但是這樣寫很明顯浪費空間,我們直接寫上0或者1的個數不就行了嘛(Run-length encoding),于是就成了54251...,這就是上文中的counts數組。

3.5.3 實驗環境

本文的實驗環境如表5.1所示。

表5.1 實驗環境

項目 說明

處理器 Intel Core i7

記憶體 32GB

系統類型 Ubuntu 16.01

顯示卡 GTX 1081ti

硬碟 256GB SSD

開發工具 Pycharm

開發語言 Python

3.5.4 實驗結果

3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐
3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐
3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐
3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐
3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐
3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐

模型對單一背景的表面缺陷能較好的檢測,複雜背景效果不好,模型還需要針對複雜背景進一步調優。

3 Kaggle鋼材表面缺陷檢測競賽的探索與實踐

繼續閱讀