干貨 | 使用圖像分割來做缺陷檢測的一個例子
一個簡單的例子,詳細的過程和代碼說明。

1. 介紹
什么是物體檢測?
給定一張圖像,我們?nèi)祟惪梢宰R別圖像中的物體。例如,我們可以檢測圖像中是否有汽車,樹木,人等。如果我們可以分析圖像并檢測物體,我們可以教機器做同樣的事情嗎?
答案是肯定的。隨著深度學習和計算機視覺的興起,我們可以實現(xiàn)目標檢測的自動化。我們可以建立深度學習和計算機視覺模型,可以檢測和定位目標,計算它們之間的距離,預測它們的未來的位置等。目標檢測在計算機視覺和機器學習中有著廣泛的應用。目標跟蹤、閉路電視監(jiān)控、人類活動識別,甚至自動駕駛汽車都利用了這項技術。為了更好地理解它,考慮下面的圖片。

圖中為一幅道路交通圖像從車輛上看的目標檢測。這里我們可以看到它正在檢測其他車輛,交通信號等。如果車輛是自動駕駛汽車,應該能夠檢測到行駛路徑、其他車輛、行人、交通信號等,以便平穩(wěn)、安全駕駛。
現(xiàn)在我們已經(jīng)了解了目標檢測,讓我們轉(zhuǎn)移到一個稍微高級的技術,稱為圖像分割。通過分析下圖,我們可以很容易地理解目標檢測和圖像分割之間的區(qū)別。

這兩種方法都試圖識別和定位圖像中的物體。在目標檢測中,這是通過邊界框?qū)崿F(xiàn)的。該算法或模型將通過在目標周圍繪制一個矩形邊界框來定位目標。在圖像分割中,對圖像中的每個像素進行標注。這意味著,給定一幅圖像,分割模型試圖通過將圖像的所有像素分類成有意義的對象類別來進行像素級分類。這也被稱為密集預測,因為它通過識別和理解每個像素屬于什么對象來預測每個像素的含義。
“圖像分割的返回格式稱為掩碼:一個與原始圖像大小相同的圖像,但對于每個像素,它只有一個布爾值指示目標是否存在?!?/span>
我們將在本案例研究中使用這種技術?,F(xiàn)在我們有了目標檢測和圖像分割的概念。讓我們進一步理解問題陳述。
2. 問題陳述
我們得到了一些產(chǎn)品的圖像。有些產(chǎn)品有缺陷,有些沒有??紤]到產(chǎn)品的圖像,我們需要檢測它是否有缺陷。我們還需要定位這個缺陷。
3. 機器學習的形式
這個問題可以表述為圖像分割任務。給定一個產(chǎn)品的圖像,我們需要為其繪制分割掩模。如果產(chǎn)品有缺陷,分割圖應該能夠定位該缺陷。
4. 性能度量
在分割問題中最常用的指標之一是(IoU分數(shù)。參考下面的圖像,這清楚地顯示了如何IoU分數(shù)是計算的。

我們也可以把IoU分數(shù)寫成TP/TP+FN+FP。
這個度量值的范圍是0到1。Iou得分為1表示完全重疊,Iou得分為0表示完全不重疊。
本案例研究中使用的損失函數(shù)是Dice損失。Dice 損失可以被認為是1-Dice 系數(shù),其中Dice 系數(shù)定義為,
Dice系數(shù) = 2 * 相交的重疊面積
5. 理解數(shù)據(jù)
該數(shù)據(jù)集包含兩個文件夾 —— train和test。訓練集由六類圖像組成。每一類圖像被分成兩個文件夾,其中一個文件夾包含1000張無缺陷圖像,另一個文件夾包含130張有缺陷圖像。下圖顯示了train文件夾中的文件夾。

以 “def”結尾的文件夾名稱包含相應類的有缺陷的圖像,沒有“def”的則表示無缺陷的圖像。測試文件夾包含一組120個有缺陷的圖像,這些圖像的分割圖將被預測。
6. 數(shù)據(jù)預處理
6.1 準備圖像數(shù)據(jù)和分割蒙版
現(xiàn)在我們需要為每個圖像準備圖像數(shù)據(jù)和相應的分割掩模。我們把圖片分成十二個文件夾。讓我們來看一些圖片。


第一幅圖像表示有缺陷的產(chǎn)品,第二幅圖像表示無缺陷的圖像。現(xiàn)在我們需要為這些圖像準備分割圖。分割圖可以檢測出圖像中有缺陷的部分。對于上面的圖像,預期的分割圖是這樣的。


我們可以看到,在第一幅圖像中,橢圓區(qū)域代表檢測部分。第二幅圖像是空白的,因為它沒有缺陷。
讓我們再分析一些有缺陷的圖像。




我們可以看到缺陷在圖像中以曲線或直線的形式出現(xiàn)。因此,我們可以利用橢圓來將這些區(qū)域標記為缺陷。
但我們?nèi)绾螠蕚浞指钛诖a?是否需要手工標注?
我們有另一個包含關于分割掩碼信息的文件。

每一行包含關于圖像的mask區(qū)域的信息。每一列表示圖像的文件名、橢圓的半長軸、橢圓的半短軸、橢圓的旋轉(zhuǎn)角度、橢球中心的x位置、橢球中心的y位置。
繪制橢圓所需的數(shù)據(jù)是使用get_data函數(shù)獲得的,如下所示:

我們可以使用這些信息,并使用skimage函數(shù)繪制一個橢圓分割蒙版。

值得注意的是,這只適用于有缺陷的圖像。對于無缺陷的圖像,我們需要創(chuàng)建空白圖像作為分割掩模。
6.2 加載圖像
結構化數(shù)據(jù)以如下所示的形式獲得。

“images”列包含每個圖像的完整文件路徑,“mask”列包含相應的掩碼圖像。
下一步是加載數(shù)據(jù)。


7. 模型
現(xiàn)在我們得到了所有的數(shù)據(jù),下一步是找到一個模型,可以生成圖像的分割mask。讓我來介紹一下UNet模型,它在圖像分割任務中非常流行。
UNet架構包含兩種路徑:收縮路徑和擴展路徑。下圖可以更好地理解Unet架構。

模型結構類似于英文字母“U”,因此得名Unet。模型的左側(cè)包含收縮路徑(也稱為編碼器),它有助于捕獲圖像中的上下文。該編碼器只是一個傳統(tǒng)的卷積和最大池層堆棧。在這里我們可以看到,池化層降低了圖像的高度和寬度,增加了通道的深度和數(shù)量。在收縮路徑的末端,模型將理解圖像中出現(xiàn)的形狀、模式、邊緣等,但它丟失了“在哪里”出現(xiàn)的信息。
由于我們的問題是獲取圖像的分割映射,我們從壓縮路徑中獲得的信息是不夠的。我們需要一個高分辨率的圖像作為輸出,其中所有像素都是分類的。
”如果我們使用一個規(guī)則的卷積網(wǎng)絡,pooling層和dense層,我們會丟失WHERE信息,只保留不是我們想要的“WHAT”信息。在分割的情況下,我們既需要“WHAT”信息,也需要“WHERE”信息
所以我們需要對圖像進行上采樣,以保留“where”信息。這是在右邊的擴張路徑中完成的。擴展路徑(也稱為解碼器)用于使用上采樣技術定位捕獲的上下文。上采樣技術有雙線性插值法、最近鄰法、轉(zhuǎn)置卷積法等。、
8. 訓練
現(xiàn)在我們已經(jīng)準備好了所有的訓練數(shù)據(jù),也確定了模型?,F(xiàn)在讓我們訓練模型。
由于無缺陷圖像的數(shù)量遠遠高于有缺陷圖像的數(shù)量,所以我們只從無缺陷圖像中提取一個樣本,以獲得更好的結果。采用adam優(yōu)化器訓練模型,并以dice 損失為損失函數(shù)。
使用的性能指標是iou分數(shù)。

經(jīng)過10個epoch,我們能夠獲得0.98的iou分數(shù)和0.007的骰子損失,這是相當不錯的。讓我們看一些圖像的分割圖。


我們可以看到,該模型能夠預測類似于原始分割圖的分割圖。
9. 測試數(shù)據(jù)分割圖的預測
現(xiàn)在讓我們嘗試解決手邊的問題,即預測和繪制測試圖像的分割蒙版。下圖顯示了一些測試圖像的預測分割圖。




可以看出,該模型具有良好的測試性能,能夠檢測出測試圖像中的缺陷。
10. 未來的工作
如上所述,與無缺陷圖像相比,有缺陷圖像的數(shù)量非常少。因此,對缺陷圖像采用上采樣和增強技術可以改善訓練效果。
End 
聲明:部分內(nèi)容來源于網(wǎng)絡,僅供讀者學術交流之目的。文章版權歸原作者所有。如有不妥,請聯(lián)系刪除。
