0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于深度學(xué)習(xí)識(shí)別模型的缺陷檢測(cè)方法

新機(jī)器視覺(jué) ? 來(lái)源:CSDN ? 2023-07-10 08:48 ? 次閱讀

一、介紹

缺陷檢測(cè)被廣泛使用于布匹瑕疵檢測(cè)、工件表面質(zhì)量檢測(cè)、航空航天領(lǐng)域等。傳統(tǒng)的算法對(duì)規(guī)則缺陷以及場(chǎng)景比較簡(jiǎn)單的場(chǎng)合,能夠很好工作,但是對(duì)特征不明顯的、形狀多樣、場(chǎng)景比較混亂的場(chǎng)合,則不再適用。近年來(lái),基于深度學(xué)習(xí)的識(shí)別算法越來(lái)越成熟,許多公司開(kāi)始嘗試把深度學(xué)習(xí)算法應(yīng)用到工業(yè)場(chǎng)合中。

二、缺陷數(shù)據(jù)

這里以布匹數(shù)據(jù)作為案例,常見(jiàn)的有以下三種缺陷,磨損、白點(diǎn)、多線。

如何制作訓(xùn)練數(shù)據(jù)呢?這里是在原圖像上進(jìn)行截取,截取到小圖像,比如上述圖像是512x512,這里我裁剪成64x64的小圖像。這里以第一類(lèi)缺陷為例,下面是制作數(shù)據(jù)的方法。

4e0d2b8a-1e3b-11ee-962d-dac502259ad0.png

4e38cf92-1e3b-11ee-962d-dac502259ad0.png

注意:在制作缺陷數(shù)據(jù)的時(shí)候,缺陷面積至少占截取圖像的2/3,否則舍棄掉,不做為缺陷圖像。

一般來(lái)說(shuō),缺陷數(shù)據(jù)都要比背景數(shù)據(jù)少很多, 最后通過(guò)增強(qiáng)后的數(shù)據(jù),缺陷:背景=1:1,每類(lèi)在1000幅左右~~~

三、網(wǎng)絡(luò)結(jié)構(gòu)

具體使用的網(wǎng)絡(luò)結(jié)構(gòu)如下所示,輸入大小就是64x64x3,采用的是截取的小圖像的大小。每個(gè)Conv卷積層后都接BN層,具體層參數(shù)如下所示。

Conv1:64x3x3

Conv2:128x3x3 ResNetBlock和DenseNetBlock各兩個(gè),具體細(xì)節(jié)請(qǐng)參考?xì)埐罹W(wǎng)絡(luò)和DenseNet。

Add:把殘差模塊輸出的結(jié)果和DenseNetBlock輸出的結(jié)果在對(duì)應(yīng)feature map上進(jìn)行相加,相加方式和殘差模塊相同。

注意,其實(shí)這里是為了更好的提取特征,方式不一定就是殘差模塊+DenseNetBlock,也可以是inception,或者其它。

Conv3:128x3x3 Maxpool:stride=2,size=2x2 FC1:4096 Dropout1:0.5 FC2:1024 Dropout1:0.5 Softmax:對(duì)應(yīng)的就是要分的類(lèi)別,在這里我是二分類(lèi)。

4e6a6eda-1e3b-11ee-962d-dac502259ad0.png

關(guān)于最后的損失函數(shù),建議選擇Focal Loss,這是何凱明大神的杰作,源碼如下所示:

def focal_loss(y_true, y_pred):
    pt_1 = tf.where(tf.equal(y_true, 1), y_pred, tf.ones_like(y_pred))
    return -K.sum(K.pow(1. - pt_1, 2) * K.log(pt_1))

數(shù)據(jù)做好,就可以開(kāi)始訓(xùn)練了~~~

四、整幅場(chǎng)景圖像的缺陷檢測(cè)

上述訓(xùn)練的網(wǎng)絡(luò),輸入是64x64x3的,但是整幅場(chǎng)景圖像卻是512x512的,這個(gè)輸入和模型的輸入對(duì)不上號(hào),這怎么辦呢?其實(shí),可以把訓(xùn)練好的模型參數(shù)提取出來(lái),然后賦值到另外一個(gè)新的模型中,然后把新的模型的輸入改成512x512就好,只是最后在conv3+maxpool層提取的feature map比較大,這個(gè)時(shí)候把feature map映射到原圖,比如原模型在最后一個(gè)maxpool層后,輸出的feature map尺寸是8x8x128,其中128是通道數(shù)。如果輸入改成512x512,那輸出的feature map就成了64x64x128,這里的每個(gè)8x8就對(duì)應(yīng)原圖上的64x64,這樣就可以使用一個(gè)8x8的滑動(dòng)窗口在64x64x128的feature map上進(jìn)行滑動(dòng)裁剪特征。然后把裁剪的特征進(jìn)行fatten,送入到全連接層。具體如下圖所示。

全連接層也需要重新建立一個(gè)模型,輸入是flatten之后的輸入,輸出是softmax層的輸出。這是一個(gè)簡(jiǎn)單的小模型。

4e929112-1e3b-11ee-962d-dac502259ad0.png

在這里提供一個(gè)把訓(xùn)練好的模型參數(shù),讀取到另外一個(gè)模型中的代碼

#提取特征的大模型
def read_big_model(inputs):
    # 第一個(gè)卷積和最大池化層
    X = Conv2D(16, (3, 3), name="conv2d_1")(inputs)
    X = BatchNormalization(name="batch_normalization_1")(X)
    X = Activation('relu', name="activation_1")(X)
    X = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="max_pooling2d_1")(X)
    # google_inception模塊
    conv_1 = Conv2D(32, (1, 1), padding='same', name='conv2d_2')(X)
    conv_1 = BatchNormalization(name='batch_normalization_2')(conv_1)
    conv_1 = Activation('relu', name='activation_2')(conv_1)
    conv_2 = Conv2D(32, (3, 3), padding='same', name='conv2d_3')(X)
    conv_2 = BatchNormalization(name='batch_normalization_3')(conv_2)
    conv_2 = Activation('relu', name='activation_3')(conv_2)
    conv_3 = Conv2D(32, (5, 5), padding='same', name='conv2d_4')(X)
    conv_3 = BatchNormalization(name='batch_normalization_4')(conv_3)
    conv_3 = Activation('relu', name='activation_4')(conv_3)
    pooling_1 = MaxPooling2D(pool_size=(2, 2), strides=(1, 1), padding='same', name='max_pooling2d_2')(X)
    X = merge([conv_1, conv_2, conv_3, pooling_1], mode='concat', name='merge_1')
    X = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name='max_pooling2d_3')(X)  # 這里的尺寸變成16x16x112
    X = Conv2D(64, (3, 3), kernel_regularizer=regularizers.l2(0.01), padding='same', name='conv2d_5')(X)
    X = BatchNormalization(name='batch_normalization_5')(X)
    X = Activation('relu', name='activation_5')(X)
    X = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name='max_pooling2d_4')(X)  # 這里尺寸變成8x8x64
    X = Conv2D(128, (3, 3), padding='same', name='conv2d_6')(X)
    X = BatchNormalization(name='batch_normalization_6')(X)
    X = Activation('relu', name='activation_6')(X)
    X = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same', name='max_pooling2d_5')(X)  # 這里尺寸變成4x4x128

    return X

def read_big_model_classify(inputs_sec):
    X_ = Flatten(name='flatten_1')(inputs_sec)
    X_ = Dense(256, activation='relu', name="dense_1")(X_)
    X_ = Dropout(0.5, name="dropout_1")(X_)
    predictions = Dense(2, activation='softmax', name="dense_2")(X_)
    return predictions
#建立的小模型
inputs=Input(shape=(512,512,3))
X=read_big_model(inputs)#讀取訓(xùn)練好模型的網(wǎng)絡(luò)參數(shù)
#建立第一個(gè)model
model=Model(inputs=inputs, outputs=X)
model.load_weights('model_halcon.h5', by_name=True)

五、識(shí)別定位結(jié)果

上述的滑窗方式可以定位到原圖像,8x8的滑窗定位到原圖就是64x64,同樣,在原圖中根據(jù)滑窗方式不同(在這里選擇的是左右和上下的步長(zhǎng)為16個(gè)像素)識(shí)別定位到的缺陷位置也不止一個(gè),這樣就涉及到定位精度了。在這里選擇投票的方式,其實(shí)就是對(duì)原圖像上每個(gè)被標(biāo)記的像素位置進(jìn)行計(jì)數(shù),當(dāng)數(shù)字大于指定的閾值,就被判斷為缺陷像素。

識(shí)別結(jié)果如下圖所示:

4ea5bea4-1e3b-11ee-962d-dac502259ad0.png
4f861d00-1e3b-11ee-962d-dac502259ad0.png
506a4c64-1e3b-11ee-962d-dac502259ad0.png

六、一些Trick

對(duì)上述案例來(lái)說(shuō),其實(shí)64x64大小的定位框不夠準(zhǔn)確,可以考慮訓(xùn)練一個(gè)32x32大小的模型,然后應(yīng)用方式和64x64的模型相同,最后基于32x32的定位位置和64x64的定位位置進(jìn)行投票,但是這會(huì)涉及到一個(gè)問(wèn)題,就是時(shí)間上會(huì)增加很多,要慎用。

對(duì)背景和前景相差不大的時(shí)候,網(wǎng)絡(luò)盡量不要太深,因?yàn)樘畹木W(wǎng)絡(luò)到后面基本學(xué)到的東西都是相同的,沒(méi)有很好的區(qū)分能力,這也是我在這里為什么不用object detection的原因,這些檢測(cè)模型網(wǎng)絡(luò),深度動(dòng)輒都是50+,效果反而不好,雖然有殘差模塊作為backbone。

但是對(duì)背景和前景相差很大的時(shí)候,可以選擇較深的網(wǎng)絡(luò),這個(gè)時(shí)候,object detection方式就派上用場(chǎng)了。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CMOS
    +關(guān)注

    關(guān)注

    58

    文章

    5651

    瀏覽量

    235001
  • CCD
    CCD
    +關(guān)注

    關(guān)注

    32

    文章

    877

    瀏覽量

    142056
  • 機(jī)器視覺(jué)
    +關(guān)注

    關(guān)注

    161

    文章

    4320

    瀏覽量

    119995
  • 工業(yè)相機(jī)
    +關(guān)注

    關(guān)注

    5

    文章

    313

    瀏覽量

    23559
  • 機(jī)器視覺(jué)系統(tǒng)

    關(guān)注

    1

    文章

    83

    瀏覽量

    18847

原文標(biāo)題:基于深度學(xué)習(xí)識(shí)別模型的缺陷檢測(cè)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    全網(wǎng)唯一一套labview深度學(xué)習(xí)教程:tensorflow+目標(biāo)檢測(cè):龍哥教你學(xué)視覺(jué)—LabVIEW深度學(xué)習(xí)教程

    ,基于深度學(xué)習(xí)缺陷檢測(cè)已經(jīng)應(yīng)用于金屬固件、布匹絲織物、建筑裂紋、鋼筋裂紋等多個(gè)領(lǐng)域,并取得了不錯(cuò)的成果。下面將結(jié)合具體案例介紹其實(shí)現(xiàn)方法。
    發(fā)表于 08-10 10:38

    labview測(cè)試tensorflow深度學(xué)習(xí)SSD模型識(shí)別物體

    安裝labview2019 vision,自帶深度學(xué)習(xí)推理工具,支持tensorflow模型。配置好python下tensorflow環(huán)境配置好object_detection API下載SSD
    發(fā)表于 08-16 17:21

    labview缺陷檢測(cè)算法寫(xiě)不出來(lái)?你OUT了!直接上深度學(xué)習(xí)吧!

    傳統(tǒng)視覺(jué)對(duì)于缺陷檢測(cè)有先天性的不足,當(dāng)缺陷區(qū)域與正常區(qū)域灰度接近,沒(méi)有明確的邊界曲線時(shí),往往無(wú)法將缺陷檢測(cè)出來(lái),而
    發(fā)表于 08-16 17:29

    labview深度學(xué)習(xí)應(yīng)用于缺陷檢測(cè)

    標(biāo)注產(chǎn)品后通過(guò)訓(xùn)練平臺(tái)完成模型訓(xùn)練經(jīng)過(guò)少量樣品訓(xùn)練得到測(cè)試結(jié)果,表明深度學(xué)習(xí)對(duì)傳統(tǒng)視覺(jué)算法比較棘手的缺陷檢測(cè)方面,能簡(jiǎn)單粗暴的解決問(wèn)題,后續(xù)
    發(fā)表于 08-16 18:12

    labview+yolov4+tensorflow+openvion深度學(xué)習(xí)

    的網(wǎng)絡(luò)結(jié)構(gòu)。當(dāng)然,深度學(xué)習(xí)方法用來(lái)檢測(cè),也有自己的很多缺點(diǎn)。例如:數(shù)據(jù)量要求大,工業(yè)數(shù)據(jù)收集成本高。但是隨著數(shù)據(jù)增強(qiáng)技術(shù),無(wú)監(jiān)督學(xué)習(xí)的不斷
    發(fā)表于 05-10 22:33

    labview深度學(xué)習(xí)檢測(cè)藥品兩類(lèi)缺陷

    ),因此,利用深度學(xué)習(xí)的方式解決此類(lèi)問(wèn)題至關(guān)重要。 通過(guò)labview調(diào)用tensorflow實(shí)現(xiàn)常見(jiàn)通用模型:faster-rcnn,ssd,ssd-mobile等模型的訓(xùn)練和調(diào)
    發(fā)表于 05-27 22:25

    基于深度學(xué)習(xí)和3D圖像處理的精密加工件外觀缺陷檢測(cè)系統(tǒng)

    缺陷空間,共同識(shí)別檢測(cè)缺陷,增加缺陷識(shí)別檢測(cè)的準(zhǔn)確
    發(fā)表于 03-08 13:59

    基于深度學(xué)習(xí)模型的點(diǎn)云目標(biāo)檢測(cè)及ROS實(shí)現(xiàn)

    近年來(lái),隨著深度學(xué)習(xí)在圖像視覺(jué)領(lǐng)域的發(fā)展,一類(lèi)基于單純的深度學(xué)習(xí)模型的點(diǎn)云目標(biāo)檢測(cè)
    的頭像 發(fā)表于 11-05 16:47 ?1.8w次閱讀

    基于深度學(xué)習(xí)的小樣本墻壁缺陷目標(biāo)檢測(cè)及分類(lèi)

    近年來(lái),無(wú)需人工干預(yù)的深度學(xué)習(xí)已經(jīng)成為缺陷圖像檢測(cè)與分類(lèi)的一種主流方法。本文針對(duì)室內(nèi)墻壁缺 陷缺檢測(cè)
    發(fā)表于 04-24 09:44 ?1次下載

    基于深度學(xué)習(xí)的工業(yè)缺陷檢測(cè)方法

    基于深度學(xué)習(xí)的工業(yè)缺陷檢測(cè)方法可以降低傳統(tǒng)人工質(zhì)檢的成本, 提升檢測(cè)的準(zhǔn)確性與效率, 因而在智能
    的頭像 發(fā)表于 07-30 14:41 ?2602次閱讀

    基于深度學(xué)習(xí)的焊接焊點(diǎn)缺陷檢測(cè)

    深度學(xué)習(xí)主要包含卷積神經(jīng)網(wǎng)絡(luò)和Faster R-CNN兩種網(wǎng)絡(luò)模型,通過(guò)利用算法模型自動(dòng)學(xué)習(xí)的特點(diǎn),不再受限于復(fù)雜多變的環(huán)境,可自動(dòng)提取
    的頭像 發(fā)表于 10-19 15:08 ?2529次閱讀

    一文梳理缺陷檢測(cè)深度學(xué)習(xí)和傳統(tǒng)方法

    但由于缺陷多種多樣,傳統(tǒng)的機(jī)器視覺(jué)算法很難做到對(duì)缺陷特征完整的建模和遷移,所以越來(lái)越多的學(xué)者和工程人員開(kāi)始將深度學(xué)習(xí)算法引入到缺陷
    的頭像 發(fā)表于 02-13 15:39 ?1171次閱讀

    基于深度學(xué)習(xí)的車(chē)牌識(shí)別偵測(cè)網(wǎng)絡(luò)模型

    基于深度學(xué)習(xí)的車(chē)牌識(shí)別,其中,車(chē)輛檢測(cè)網(wǎng)絡(luò)直接使用YOLO偵測(cè)。而后,才是使用網(wǎng)絡(luò)偵測(cè)車(chē)牌與識(shí)別車(chē)牌號(hào)。
    發(fā)表于 02-19 10:37 ?718次閱讀

    深度學(xué)習(xí)在工業(yè)缺陷檢測(cè)中的應(yīng)用

    工業(yè)制造領(lǐng)域中,產(chǎn)品質(zhì)量的保證是至關(guān)重要的任務(wù)之一。然而,人工的檢測(cè)方法不僅費(fèi)時(shí)費(fèi)力,而且容易受到主觀因素的影響,從而降低了檢測(cè)的準(zhǔn)確性和一致性。近年來(lái),基于深度
    的頭像 發(fā)表于 10-24 09:29 ?1373次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>在工業(yè)<b class='flag-5'>缺陷</b><b class='flag-5'>檢測(cè)</b>中的應(yīng)用

    基于AI深度學(xué)習(xí)缺陷檢測(cè)系統(tǒng)

    在工業(yè)生產(chǎn)中,缺陷檢測(cè)是確保產(chǎn)品質(zhì)量的關(guān)鍵環(huán)節(jié)。傳統(tǒng)的人工檢測(cè)方法不僅效率低下,且易受人為因素影響,導(dǎo)致誤檢和漏檢問(wèn)題頻發(fā)。隨著人工智能技術(shù)的飛速發(fā)展,特別是
    的頭像 發(fā)表于 07-08 10:30 ?1066次閱讀