1. 介紹
什么是物體檢測?
給定一張圖像,我們人類可以識別圖像中的物體。例如,我們可以檢測圖像中是否有汽車,樹木,人等。如果我們可以分析圖像并檢測物體,我們可以教機器做同樣的事情嗎?
答案是肯定的。隨著深度學習和計算機視覺的興起,我們可以實現目標檢測的自動化。我們可以建立深度學習和計算機視覺模型,可以檢測和定位目標,計算它們之間的距離,預測它們的未來的位置等。目標檢測在計算機視覺和機器學習中有著廣泛的應用。目標跟蹤、閉路電視監控、人類活動識別,甚至自動駕駛汽車都利用了這項技術。
圖中為一幅道路交通圖像從車輛上看的目標檢測。這里我們可以看到它正在檢測其他車輛,交通信號等。如果車輛是自動駕駛汽車,應該能夠檢測到行駛路徑、其他車輛、行人、交通信號等,以便平穩、安全駕駛。
現在我們已經了解了目標檢測,讓我們轉移到一個稍微高級的技術,稱為圖像分割。通過分析下圖,我們可以很容易地理解目標檢測和圖像分割之間的區別。
圖2,目標檢測和圖像分割
這兩種方法都試圖識別和定位圖像中的物體。在目標檢測中,這是通過邊界框實現的。該算法或模型將通過在目標周圍繪制一個矩形邊界框來定位目標。在圖像分割中,對圖像中的每個像素進行標注。這意味著,給定一幅圖像,分割模型試圖通過將圖像的所有像素分類成有意義的對象類別來進行像素級分類。這也被稱為密集預測,因為它通過識別和理解每個像素屬于什么對象來預測每個像素的含義。
“圖像分割的返回格式稱為掩碼:一個與原始圖像大小相同的圖像,但對于每個像素,它只有一個布爾值指示目標是否存在。“
我們將在本案例研究中使用這種技術。現在我們有了目標檢測和圖像分割的概念。讓我們進一步理解問題陳述。
2. 問題陳述
我們得到了一些產品的圖像。有些產品有缺陷,有些沒有。考慮到產品的圖像,我們需要檢測它是否有缺陷。我們還需要定位這個缺陷。
3. 機器學習的形式
這個問題可以表述為圖像分割任務。給定一個產品的圖像,我們需要為其繪制分割掩模。如果產品有缺陷,分割圖應該能夠定位該缺陷。
4. 性能度量
在分割問題中最常用的指標之一是(IoU分數。參考下面的圖像,這清楚地顯示了如何IoU分數是計算的。
IoU是預測分割與真實分割的重疊面積除以預測分割與原始分割的并集面積
我們也可以把IoU分數寫成TP/TP+FN+FP。
這個度量值的范圍是0到1。Iou得分為1表示完全重疊,Iou得分為0表示完全不重疊。
本案例研究中使用的損失函數是Dice損失。Dice 損失可以被認為是1-Dice 系數,其中Dice 系數定義為,
Dice系數 = 2 * 相交的重疊面積
5. 理解數據
該數據集包含兩個文件夾 —— train和test。訓練集由六類圖像組成。每一類圖像被分成兩個文件夾,其中一個文件夾包含1000張無缺陷圖像,另一個文件夾包含130張有缺陷圖像。下圖顯示了train文件夾中的文件夾。
圖3,訓練數據集
以 “def”結尾的文件夾名稱包含相應類的有缺陷的圖像,沒有“def”的則表示無缺陷的圖像。測試文件夾包含一組120個有缺陷的圖像,這些圖像的分割圖將被預測。
6. 數據預處理
6.1 準備圖像數據和分割蒙版
現在我們需要為每個圖像準備圖像數據和相應的分割掩模。我們把圖片分成十二個文件夾。讓我們來看一些圖片。
圖4,產品的圖像
第一幅圖像表示有缺陷的產品,第二幅圖像表示無缺陷的圖像。現在我們需要為這些圖像準備分割圖。分割圖可以檢測出圖像中有缺陷的部分。對于上面的圖像,預期的分割圖是這樣的。
圖5,圖4上的分割蒙版
我們可以看到,在第一幅圖像是空白的,因為它沒有缺陷。
讓我們再分析一些有缺陷的圖像。
圖6,一些缺陷圖像的例子
我們可以看到缺陷在圖像中以曲線或直線的形式出現。因此,我們可以利用橢圓來將這些區域標記為缺陷。
但我們如何準備分割掩碼?是否需要手工標注?
我們有另一個包含關于分割掩碼信息的文件。
每一行包含關于圖像的mask區域的信息。每一列表示圖像的文件名、橢圓的半長軸、橢圓的半短軸、橢圓的旋轉角度、橢球中心的x位置、橢球中心的y位置。
繪制橢圓所需的數據是使用get_data函數獲得的,如下所示:
我們可以使用這些信息,并使用skimage函數繪制一個橢圓分割蒙版。
值得注意的是,這只適用于有缺陷的圖像。對于無缺陷的圖像,我們需要創建空白圖像作為分割掩模。
6.2 加載圖像
結構化數據以如下所示的形式獲得。
“images”列包含每個圖像的完整文件路徑,“mask”列包含相應的掩碼圖像。
下一步是加載數據。
7. 模型
現在我們得到了所有的數據,下一步是找到一個模型,可以生成圖像的分割mask。讓我來介紹一下UNet模型,它在圖像分割任務中非常流行。
UNet架構包含兩種路徑:收縮路徑和擴展路徑。下圖可以更好地理解Unet架構。
圖7,Unet結構
模型結構類似于英文字母“U”,因此得名Unet。模型的左側包含收縮路徑(也稱為編碼器),它有助于捕獲圖像中的上下文。該編碼器只是一個傳統的卷積和最大池層堆棧。在這里我們可以看到,池化層降低了圖像的高度和寬度,增加了通道的深度和數量。在收縮路徑的末端,模型將理解圖像中出現的形狀、模式、邊緣等,但它丟失了“在哪里”出現的信息。
由于我們的問題是獲取圖像的分割映射,我們從壓縮路徑中獲得的信息是不夠的。我們需要一個高分辨率的圖像作為輸出,其中所有像素都是分類的。
”如果我們使用一個規則的卷積網絡,pooling層和dense層,我們會丟失WHERE信息,只保留不是我們想要的“WHAT”信息。在分割的情況下,我們既需要“WHAT”信息,也需要“WHERE”信息
所以我們需要對圖像進行上采樣,以保留“where”信息。這是在右邊的擴張路徑中完成的。擴展路徑(也稱為解碼器)用于使用上采樣技術定位捕獲的上下文。上采樣技術有雙線性插值法、最近鄰法、轉置卷積法等。、
8. 訓練
現在我們已經準備好了所有的訓練數據,也確定了模型。現在讓我們訓練模型。
由于無缺陷圖像的數量遠遠高于有缺陷圖像的數量,所以我們只從無缺陷圖像中提取一個樣本,以獲得更好的結果。采用adam優化器訓練模型,并以dice 損失為損失函數。
使用的性能指標是iou分數。
經過10個epoch,我們能夠獲得0.98的iou分數和0.007的骰子損失,這是相當不錯的。讓我們看一些圖像的分割圖。
我們可以看到,該模型能夠預測類似于原始分割圖的分割圖。
9. 測試數據分割圖的預測
現在讓我們嘗試解決手邊的問題,即預測和繪制測試圖像的分割蒙版。下圖顯示了一些測試圖像的預測分割圖。
可以看出,該模型具有良好的測試性能,能夠檢測出測試圖像中的缺陷。
10. 未來的工作
如上所述,與無缺陷圖像相比,有缺陷圖像的數量非常少。因此,對缺陷圖像采用上采樣和增強技術可以改善訓練效果。
編輯:jq
-
數據
+關注
關注
8文章
7002瀏覽量
88942 -
圖像
+關注
關注
2文章
1083瀏覽量
40449 -
物體檢測
+關注
關注
0文章
8瀏覽量
9171
原文標題:干貨 | 使用圖像分割來做缺陷檢測的一個例子
文章出處:【微信號:jiqishijue2020,微信公眾號:機器視覺自動化】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論