<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          圖像異常檢測

          共 3623字,需瀏覽 8分鐘

           ·

          2021-03-15 10:25

          點擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時間送達(dá)

          在機(jī)器學(xué)習(xí)中,處理異常檢測任務(wù)是很常見的。數(shù)據(jù)科學(xué)家經(jīng)常遇到必須顯示,解釋和預(yù)測異常的問題。在這篇文章中,我們主要講述:從時間序列交換為圖像。給定一張圖像,我們要實現(xiàn)雙重目的:預(yù)測異常的存在并對其進(jìn)行個性化處理,從而對結(jié)果進(jìn)行豐富多彩的表示。


          數(shù)據(jù)集


          我們從互聯(lián)網(wǎng)上獲得了數(shù)據(jù):裂縫數(shù)據(jù)集包含墻壁裂縫的圖像(URL格式)。提供了1428張圖像:其中一半顯示了新的且未損壞的墻塊;其余部分顯示了各種尺寸和類型的裂縫。第一步包括發(fā)出一個獲取請求,以讀取圖像,調(diào)整大小并將其轉(zhuǎn)換為數(shù)組格式。

          images = []for url in tqdm.tqdm(df['content']):    response = requests.get(url)    img = Image.open(BytesIO(response.content))    img = img.resize((224, 224))    numpy_img = img_to_array(img)    img_batch = np.expand_dims(numpy_img, axis=0)    images.append(img_batch.astype('float16'))images = np.vstack(images)

          從下面的示例中你們可以看到,在我們的數(shù)據(jù)中顯示了不同類型的墻體裂縫,其中一些對我來說也不太容易識別。

          開裂和不開裂的例子

          模型


          我們想要建立一個機(jī)器學(xué)習(xí)模型,該模型能夠?qū)Ρ趫D像進(jìn)行分類并同時檢測異常的位置。為了達(dá)到這個雙重目的,最有效的方法是建立一個強(qiáng)大的分類器,它將能夠讀取輸入圖像并將其分類為“損壞”或“未損壞”。在最后一步,我們將利用分類器學(xué)到的知識來提取有用的信息,這將有助于我們檢測異常情況。在Keras中,僅需幾行代碼,這非常容易做到。

          vgg_conv = vgg16.VGG16(weights='imagenet', include_top=False, input_shape = (224, 224, 3))for layer in vgg_conv.layers[:-8]:    layer.trainable = False

          詳細(xì)地說,我們導(dǎo)入了VGG體系結(jié)構(gòu),可以訓(xùn)練最后兩個卷積塊。這將使我們的模型能夠?qū)iT從事分類任務(wù)。為此,我們還排除了原始模型的頂層,將其替換為另一種結(jié)構(gòu)。

          x = vgg_conv.outputx = GlobalAveragePooling2D()(x)x = Dense(2, activation="softmax")(x)model = Model(vgg_conv.input, x)model.compile(loss = "categorical_crossentropy", optimizer = optimizers.SGD(lr=0.0001, momentum=0.9), metrics=["accuracy"])

          在分類階段,GlobalAveragePooling層通過取每個要素圖的平均值來減小前一層的大小。這種選擇加上中間致密層的省略用法,可以避免過度擬合。如果你們可以使用GPU,則培訓(xùn)既簡單又容易。COLAB為我們提供了加快這一過程所需的武器。我們還使用了Keras提供的簡單數(shù)據(jù)生成器進(jìn)行圖像增強(qiáng)。最后,我們能夠達(dá)到0.90的整體精度。

          局部異常


          現(xiàn)在,在訓(xùn)練好模型之后,我們將對其進(jìn)行操作以提取所有有用的信息,以使我們能夠在墻壁圖像中顯示出裂縫。我們試圖使此過程變得容易并且很容易在最后用熱圖表示法看到。我們需要的有用信息位于頂部,特別是我們可以訪問:

          • 卷積層:上層是VGG結(jié)構(gòu),還有網(wǎng)絡(luò)創(chuàng)建的更多重要功能。我們選擇了最后一個卷積層(“ block5_conv3 ”),并在此處剪切了我們的分類模型。我們已經(jīng)重新創(chuàng)建了一個中間模型,該模型以原始圖像為輸入,輸出相關(guān)的激活圖。考慮到維度,我們的中間模型增加了初始圖像的通道(新功能)并減小了尺寸(高度和寬度)。

          • 最終密度層:對于每個感興趣的類別,我們都需要這些權(quán)重,這些權(quán)重負(fù)責(zé)提供分類的最終結(jié)果。

          有了這些壓縮的物體,我們掌握了定位裂縫的所有知識。我們希望將它們“繪制”在原始圖像上,以使結(jié)果易于理解且易于看清。“解壓縮”此信息在python中很容易:我們只需進(jìn)行雙線性上采樣即可調(diào)整每個激活圖的大小并計算點積。執(zhí)行一個簡單的函數(shù)即可訪問:

          def plot_activation(img):    pred = model.predict(img[np.newaxis,:,:,:])    pred_class = np.argmax(pred)    weights = model.layers[-1].get_weights()[0]    class_weights = weights[:, pred_class]    intermediate = Model(model.input,                         model.get_layer("block5_conv3").output)    conv_output = intermediate.predict(img[np.newaxis,:,:,:])    conv_output = np.squeeze(conv_output)    h = int(img.shape[0]/conv_output.shape[0])    w = int(img.shape[1]/conv_output.shape[1])    act_maps = sp.ndimage.zoom(conv_output, (h, w, 1), order=1)    out = np.dot(act_maps.reshape((img.shape[0]*img.shape[1],512)),                  class_weights).reshape(img.shape[0],img.shape[1])    plt.imshow(img.astype('float32').reshape(img.shape[0],               img.shape[1],3))    plt.imshow(out, cmap='jet', alpha=0.35)    plt.title('Crack' if pred_class == 1 else 'No Crack')

          我在下面的圖像中顯示結(jié)果,在該圖像中,我已在分類為裂紋的測試圖像上繪制了裂紋熱圖。我們可以看到,熱圖能夠很好地泛化并指出包含裂縫的墻塊。

          總結(jié)


          在這篇文章中,我們提供了一種用于異常識別和定位的機(jī)器學(xué)習(xí)解決方案。所有這些功能都可以通過實現(xiàn)單個分類模型來訪問。在訓(xùn)練過程中,我們的神經(jīng)網(wǎng)絡(luò)會獲取所有相關(guān)信息,從而可以進(jìn)行分類。在此階段之后,我們無需進(jìn)行額外的工作就組裝了最終零件,這些零件告訴我們圖像中裂紋的位置!


          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機(jī)視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产欧美日 | 亚洲一在线 | 国产乱伦日韩 | 色天堂网站 | 伊人婷婷五月天激情 |