娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

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

發布者:Lihua521最新更新時間:2024-08-08 來源: elecfans關鍵字:深度學習  識別模型  缺陷檢測 手機看文章 掃描二維碼
隨時隨地手機看文章

一、介紹

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


二、缺陷數據

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

如何制作訓練數據呢?這里是在原圖像上進行截取,截取到小圖像,比如上述圖像是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方式就派上用場了。


關鍵字:深度學習  識別模型  缺陷檢測 引用地址:基于深度學習識別模型的缺陷檢測方法

上一篇:介紹常見電機的控制算法
下一篇:用PLC怎么實現編碼器的定位功能

推薦閱讀最新更新時間:2025-05-31 12:37

環信機器人:擁有深度學習和機器學習的智能客服系統,人機協作解決難題
客服作為企業直接接觸用戶和消費者的重要環節,在很大程度上影響著企業的銷售業績、服務質量以及品牌建設。因此對一些重服務和銷售的行業來說,招聘大量客服人員必不可少。但是由于客服人員工資低、工作強度大,導致流動性高,招人困難,企業投入的大量培訓成本往往并不能得到相應的回報,客服部門逐漸成為企業的成本中心,存在著一堆“老大難”的問題。 隨著云計算和人工智能技術的發展,原來只能通過傳統呼叫中心完成的客服工作通過在線客服、移動客服以及客服機器人實現了分流和效率提升,尤其是客服機器人的應用,為客服人員分擔了大量重復性客服問題,使得他們能夠專注與提供更有價值的服務。 然而,早期的客服機器人由于采用基于規則的方法,在構建和維護過程中,
[機器人]
為什么深度學習仍未取代傳統的計算機視覺技術?
深度學習 只是一種 計算機視覺 工具,而不是包治百病的良藥,不要因為流行就一味地使用它。傳統的計算機視覺技術仍然可以大顯身手,了解它們可以為你省去很多的時間和煩惱;并且掌握傳統計算機視覺確實可以讓你在深度學習方面做得更好。這是因為你可以更好地理解深度學習的內部狀況,并可執行預處理步驟改善深度學習結果。 ? 本文的靈感同樣來自論壇中的一個常見問題: ? 深度學習已經取代了傳統的計算機視覺嗎? ? 或是換種說法: ? 既然深度學習看起來如此有效,是否還有必要學習傳統的計算機視覺技術? ? 這個問題很好。深度學習確實給計算機視覺和人工智能領域帶來了革命性的突破。許多曾經看似困難的問題,現在機器可以比解決的比人類還好。圖像分類就是最好的印
[嵌入式]
人工智能科學家王雪梅:機器人終究是工具
現實生活中, 人工智能 與我們的生活越來越密切,甚至不可或缺。人們忍不住開始思考一些“可怕”的問題:人工智能發展到一定程度后,會反過來掌控人類嗎?人類和人工智能除了各種大戰之外,是否能夠實現和諧共存?人類和 機器人 之間是否會有愛情出現? ? ? 讓計算機像人一樣思考,是科學家的夢想。 ? 為此,記者對在美國工作生活近30年的人工智能科學家王雪梅進行了采訪。 ? 問:科幻大片中,經常有失控的機器人把人類逼到絕路的場面。這種情況會真實地發生嗎? ? 答:我還是從人工智能的歷史發展談起吧。20世紀50年代,人工智能的概念就已由美國學者正式提出,主要目標是讓機器勝任需要人類智力才能完成的復雜工作,讓計算機像人一樣去看、去聽、去思考。在
[嵌入式]
萬萬沒想到,聊天機器人居然成了中國特色?
在剛剛過去的2016年,科技圈內談論最多的就是自動駕駛和機器人,而驅動兩者快速前行的核心動力,就是迅猛發展的 人工智能 (AI)。那么人工智能到底是什么?它可以為人類做什么?它對人類未來又會產生什么深遠的影響?在很多業內人士看來,2017年認為是機器人之年。這里所說的機器人,并不是《終結者》系列中的T-1000,也不是每隔幾個月上頭條的人形機器,而是出現在你的客廳,擁有人工智能的各種獨立設備。 ? 在這股機器人浪潮中,從知名度來說Google Home和亞馬遜Echo無疑是其中的代表;而從技術角度來說,國內也有一家企業在人工智能領域走在了前列,那就是 百度 。 ? 與Google相同,百度也是從搜索引擎起步,逐漸延生至各種數字和物
[嵌入式]
機器人時代:誰會成為新一個“Intel”?
“家里的洗衣機知道你在洗什么衣服,并自動采用最合適的洗滌方案,會給你推薦最適合的洗滌產品,甚至可能會告訴你,這些衣服不適合機洗,建議呼叫O2O洗衣服務” 。 這是未來智慧化生活的其中一個場景。 ? 跟我們提到這個場景時,余凱已經不再是百度深度學習研究院IDL的負責人。 他近期從百度離職,正在組建Horizon Robotics Inc. (地平線機器人科技有限公司),致力于定義機器人的“大腦”晶片,想要說明硬體產品實現上述復雜的智慧化場景。 ? 目前,Horizon Robotics剛剛完成種子輪融資,融資規模尚未被披露,投資方包括晨興資本、高瓴資本、紅杉資本、金沙江創投、線性資本和真格基金。 這個投資人陣容堪稱豪華,背
[嵌入式]
小廣播
最新嵌入式文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 集贤县| 祁阳县| 满城县| 潢川县| 廊坊市| 普兰店市| 鹤峰县| 凤冈县| 土默特左旗| 岫岩| 大余县| 德庆县| 铜梁县| 当雄县| 会东县| 阆中市| 乐至县| 封开县| 大庆市| 博兴县| 云和县| 山西省| 平山县| 和硕县| 德昌县| 芜湖县| 运城市| 清涧县| 邛崃市| 宣城市| 河间市| 麻江县| 周口市| 南和县| 阳江市| 右玉县| 六枝特区| 郧西县| 肃南| 睢宁县| 迭部县|