吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于深度學習識別模型的缺陷檢測方法

新機器視覺 ? 來源:CSDN ? 2023-07-10 08:48 ? 次閱讀

一、介紹

缺陷檢測被廣泛使用于布匹瑕疵檢測、工件表面質量檢測、航空航天領域等。傳統的算法對規則缺陷以及場景比較簡單的場合,能夠很好工作,但是對特征不明顯的、形狀多樣、場景比較混亂的場合,則不再適用。近年來,基于深度學習的識別算法越來越成熟,許多公司開始嘗試把深度學習算法應用到工業場合中。

二、缺陷數據

這里以布匹數據作為案例,常見的有以下三種缺陷,磨損、白點、多線。

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

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

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

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

一般來說,缺陷數據都要比背景數據少很多, 最后通過增強后的數據,缺陷:背景=1:1,每類在1000幅左右~~~

三、網絡結構

具體使用的網絡結構如下所示,輸入大小就是64x64x3,采用的是截取的小圖像的大小。每個Conv卷積層后都接BN層,具體層參數如下所示。

Conv1:64x3x3

Conv2:128x3x3 ResNetBlock和DenseNetBlock各兩個,具體細節請參考殘差網絡和DenseNet。

Add:把殘差模塊輸出的結果和DenseNetBlock輸出的結果在對應feature map上進行相加,相加方式和殘差模塊相同。

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

Conv3:128x3x3 Maxpool:stride=2,size=2x2 FC1:4096 Dropout1:0.5 FC2:1024 Dropout1:0.5 Softmax:對應的就是要分的類別,在這里我是二分類。

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

關于最后的損失函數,建議選擇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))

數據做好,就可以開始訓練了~~~

四、整幅場景圖像的缺陷檢測

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

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

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

在這里提供一個把訓練好的模型參數,讀取到另外一個模型中的代碼

#提取特征的大模型
def read_big_model(inputs):
    # 第一個卷積和最大池化層
    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)#讀取訓練好模型的網絡參數
#建立第一個model
model=Model(inputs=inputs, outputs=X)
model.load_weights('model_halcon.h5', by_name=True)

五、識別定位結果

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

識別結果如下圖所示:

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

六、一些Trick

對上述案例來說,其實64x64大小的定位框不夠準確,可以考慮訓練一個32x32大小的模型,然后應用方式和64x64的模型相同,最后基于32x32的定位位置和64x64的定位位置進行投票,但是這會涉及到一個問題,就是時間上會增加很多,要慎用。

對背景和前景相差不大的時候,網絡盡量不要太深,因為太深的網絡到后面基本學到的東西都是相同的,沒有很好的區分能力,這也是我在這里為什么不用object detection的原因,這些檢測模型網絡,深度動輒都是50+,效果反而不好,雖然有殘差模塊作為backbone。

但是對背景和前景相差很大的時候,可以選擇較深的網絡,這個時候,object detection方式就派上用場了。




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • CMOS
    +關注

    關注

    58

    文章

    5736

    瀏覽量

    236097
  • CCD
    CCD
    +關注

    關注

    32

    文章

    884

    瀏覽量

    142586
  • 機器視覺
    +關注

    關注

    162

    文章

    4406

    瀏覽量

    120736
  • 工業相機
    +關注

    關注

    5

    文章

    327

    瀏覽量

    23762
  • 機器視覺系統

    關注

    1

    文章

    84

    瀏覽量

    18929

原文標題:基于深度學習識別模型的缺陷檢測

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    全網唯一一套labview深度學習教程:tensorflow+目標檢測:龍哥教你學視覺—LabVIEW深度學習教程

    ,基于深度學習缺陷檢測已經應用于金屬固件、布匹絲織物、建筑裂紋、鋼筋裂紋等多個領域,并取得了不錯的成果。下面將結合具體案例介紹其實現方法。
    發表于 08-10 10:38

    labview測試tensorflow深度學習SSD模型識別物體

    安裝labview2019 vision,自帶深度學習推理工具,支持tensorflow模型。配置好python下tensorflow環境配置好object_detection API下載SSD
    發表于 08-16 17:21

    labview缺陷檢測算法寫不出來?你OUT了!直接上深度學習吧!

    傳統視覺對于缺陷檢測有先天性的不足,當缺陷區域與正常區域灰度接近,沒有明確的邊界曲線時,往往無法將缺陷檢測出來,而
    發表于 08-16 17:29

    labview深度學習應用于缺陷檢測

    標注產品后通過訓練平臺完成模型訓練經過少量樣品訓練得到測試結果,表明深度學習對傳統視覺算法比較棘手的缺陷檢測方面,能簡單粗暴的解決問題,后續
    發表于 08-16 18:12

    labview+yolov4+tensorflow+openvion深度學習

    的網絡結構。當然,深度學習方法用來檢測,也有自己的很多缺點。例如:數據量要求大,工業數據收集成本高。但是隨著數據增強技術,無監督學習的不斷
    發表于 05-10 22:33

    labview深度學習檢測藥品兩類缺陷

    ),因此,利用深度學習的方式解決此類問題至關重要。 通過labview調用tensorflow實現常見通用模型:faster-rcnn,ssd,ssd-mobile等模型的訓練和調
    發表于 05-27 22:25

    基于深度學習和3D圖像處理的精密加工件外觀缺陷檢測系統

    缺陷空間,共同識別檢測缺陷,增加缺陷識別檢測的準確
    發表于 03-08 13:59

    基于深度學習模型的點云目標檢測及ROS實現

    近年來,隨著深度學習在圖像視覺領域的發展,一類基于單純的深度學習模型的點云目標檢測
    的頭像 發表于 11-05 16:47 ?1.8w次閱讀

    基于深度學習的小樣本墻壁缺陷目標檢測及分類

    近年來,無需人工干預的深度學習已經成為缺陷圖像檢測與分類的一種主流方法。本文針對室內墻壁缺 陷缺檢測
    發表于 04-24 09:44 ?1次下載

    基于深度學習的工業缺陷檢測方法

    基于深度學習的工業缺陷檢測方法可以降低傳統人工質檢的成本, 提升檢測的準確性與效率, 因而在智能
    的頭像 發表于 07-30 14:41 ?2830次閱讀

    基于深度學習的焊接焊點缺陷檢測

    深度學習主要包含卷積神經網絡和Faster R-CNN兩種網絡模型,通過利用算法模型自動學習的特點,不再受限于復雜多變的環境,可自動提取
    的頭像 發表于 10-19 15:08 ?2751次閱讀

    一文梳理缺陷檢測深度學習和傳統方法

    但由于缺陷多種多樣,傳統的機器視覺算法很難做到對缺陷特征完整的建模和遷移,所以越來越多的學者和工程人員開始將深度學習算法引入到缺陷
    的頭像 發表于 02-13 15:39 ?1310次閱讀

    基于深度學習的車牌識別偵測網絡模型

    基于深度學習的車牌識別,其中,車輛檢測網絡直接使用YOLO偵測。而后,才是使用網絡偵測車牌與識別車牌號。
    發表于 02-19 10:37 ?808次閱讀

    深度學習在工業缺陷檢測中的應用

    工業制造領域中,產品質量的保證是至關重要的任務之一。然而,人工的檢測方法不僅費時費力,而且容易受到主觀因素的影響,從而降低了檢測的準確性和一致性。近年來,基于深度
    的頭像 發表于 10-24 09:29 ?1690次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學習</b>在工業<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>中的應用

    基于AI深度學習缺陷檢測系統

    在工業生產中,缺陷檢測是確保產品質量的關鍵環節。傳統的人工檢測方法不僅效率低下,且易受人為因素影響,導致誤檢和漏檢問題頻發。隨著人工智能技術的飛速發展,特別是
    的頭像 發表于 07-08 10:30 ?1668次閱讀
    电子百家乐官网假在线哪| 百家乐系统足球博彩通| 威尼斯人娱乐城安全吗| 百家乐官网人生信条漫谈| 百家乐桌面| 三易博| 必博百家乐游戏| 六合彩官方网| 百家乐官网开闲的几率多大| 太阳城网上投注| 属蛇做生意坐向| 大发888娱乐城送白菜| 百家乐官网扫描技术| 大发888交流心得| 百家乐官网游戏单机牌| 大发888娱乐方下载| 圣安娜百家乐官网包杀合作| 百家乐最好投注法是怎样的去哪儿能了解一下啊 | 百家乐官网平台开户哪里优惠多| 威尼斯人娱乐网送38元彩金| 百家乐官网板路| 上海百家乐的玩法技巧和规则| 澳门百家乐官网的赢钱不倒翁| 新全讯网carrui| 老人头百家乐官网的玩法技巧和规则 | 京城国际| 百家乐博彩平台| 百家乐官网视频连连看| 怎么赢百家乐的玩法技巧和规则| 网上百家乐官网平台下载| 二八杠算法| 多伦多百家乐官网的玩法技巧和规则| 盛世国际娱乐场| 百家乐赌博机假在哪里| 赌博百家乐官网趋势把握| 大发888更名网址62| 百家乐澳门路规则| 百家乐官网技巧之微笑心法 | 百家乐官网赌博经历| 顶级赌场怎么样| 百家乐游戏机图片|