一個模型解決所有類別的異常檢測

文章目錄

  • 一、內容說明
  • 二、相關鏈接
  • 三、概述
  • 四、摘要
    • 1、現有方法存在的問題
    • 2、方案
    • 3、效果
  • 五、作者的實驗
  • 六、如何訓練自己的數據
    • 1、數據準備
    • 2、修改配置文件
    • 3、代碼優化修改
    • 4、模型訓練與測試
  • 七、結束

一、內容說明

  • 在我接觸的缺陷檢測項目中,檢測缺陷有兩種方法。一種是使用傳統方法,采用去噪、二值化、輪廓檢測等,但傳統方法很受閾值的影響,往往這張圖片適用,那張圖片就不行,很難調好閾值。另外一種是使用深度學習方法,例如本篇文章的UniAD,也有朋友使用語義分割的方式。
  • 在本文章,我將會介紹無監督缺陷檢測算法UniAD的創新點、網絡以及如何應用在自己的項目中。
  • 最后來一句“決定我們自身的不是過去的經歷,而是我們自己賦予經歷的意義”,來自《被討厭的勇氣》

二、相關鏈接

?? 論文名稱:《A Unified Model for Multi-class Anomaly Detection》
?? Github:https://github.com/zhiyuanyou/UniAD
?? Paper:https://arxiv.org/abs/2206.03687.pdf

三、概述

??UniAD是由一個鄰居掩碼編碼器(NME) 和一個分層查詢解碼器(LQD) 組成。
??首先,由固定的預訓練骨干網絡提取的特征token被NME進一步整合,以得出編碼器嵌入。然后,在LQD的每一層中,可學習的查詢嵌入與編碼器嵌入和前一層的輸出相繼融合(第一層為自我融合)。特征融合是由鄰居掩碼注意力(NMA)完成的。LQD的最終輸出被看作是重構的特征。此外,還提出了一個特征抖動(FJ)策略,向輸入特征添加擾動,引導模型從去噪任務中學習正態分布。最后,通過重建差異得到異常定位和檢測的結果
??通俗說法:我已經學習了正常圖片是什么樣子,輸入一張缺陷圖,我就重構出它的正常圖,將正常圖和輸入圖做對比,不就知道哪里有缺陷了😄

圖1

圖1

圖1說明:
?(a)圖是已經存在的方法,圖片中有兩種圖片類型,分別是青色和藍色,需要兩個邊界,才能區分兩種類型圖片的缺陷
?(b)圖是該論文提出的方法,用一個邊界就能區分所有類別圖片
?(c)圖說明在以前的方法里,解決多類型圖片缺陷的方法,一種缺陷類型使用一個模型,多個類型用多個模型識別, one-class-one-model
?(d)圖是該論文的重點,用一個統一的模型識別所有缺陷,a unified framework

四、摘要

1、現有方法存在的問題

?? 已有的重構方法存在 “identity shortcut” 的問題,即重構的圖片和輸入圖片差不多,像是對輸入圖片的復制,圖片越復雜,這個問題越嚴重

2、方案

(1)提出了“layer-wise query decoder”(分層查詢解碼器)
?? 看下文圖2的(a)圖,MLP和CNN的曲線逐漸上升,突然下降,Transformer也有下降,但下降幅度要小些。曲線下降主要還是上文提到的“identity shortcut”問題。Ours方法就基本不存在曲線下降問題。
在這里插入圖片描述

圖2

(2)采用了“neighbor masked attention”模塊(鄰居掩碼注意力)

?? 特征不跟自己相關,也不跟鄰居相關,避免了information leak。

??請看圖3,Query是4x4,與Key做Attention操作時,相鄰的值進行mask,將注意力圖Attention Map展開。

??話外題:聯想常見的Transformer結構,Mask主要有兩種作用。第一種是 padding mask ,在encoder和decoder中使用,保證輸入長度的一致性;另外一種是 Sequence mask ,在decoder中使用,掩蓋當前詞后面出現的詞。這么一對比就看出作者的mask改動了什么。

在這里插入圖片描述

圖3

(3)“feature jittering strategy”(特征抖動策略)

??受Bengio的啟發,提出了一個“feature jittering strategy”(特征抖動策略),在有噪聲的情況下也能恢復源信息

3、效果

??用UniAD模型在15個類別的數據集MVTec-AD上做實驗,AUROC分別從88.1%提升到 96.5%,從 89.5%提升到96.8%

五、作者的實驗

??Normal正常圖片;Anomaly異常圖片;Recon重構圖;GT標注的mask圖;Pred是Anomaly和Recon差異圖,對缺陷進行定位,顏色越深,表示缺陷的概率越大。效果看起來,so nice
在這里插入圖片描述

圖4
??下圖是作者做的消融實驗,不細講,看圖

在這里插入圖片描述

圖5

六、如何訓練自己的數據

??圖6是我在自己的數據上做的訓練,數據特點是:缺陷圖片少、缺陷小,效果還是可以的
在這里插入圖片描述

圖6
那么如何在自己的數據上做訓練呢?

1、數據準備

  • 進入./data/創建新文件夾/ (可參考./data/MVTec-AD/)
  • 創建train.json、test.json文件,格式如下:
    {"filename": "000_00_00/train/good/bad_02_0419_Image_20230419104815488_0_0_1280_1280.png", "label": 0, "label_name": "good", "clsname": "000_00_00"}{"filename": "000_02_01/train/good/good_06_0421_Image_20230420180152737_922_563_2202_1843.png", "label": 0, "label_name": "good", "clsname": "000_02_01"}...
    字段說明
    ??filename:圖片路徑
    ??label:標簽(0無缺陷、1缺陷)
    ??label_name:標簽名稱(good無缺陷、bad缺陷)
    ??clsname:圖片類型名稱

2、修改配置文件

  • 進入cd ./experiments/創建新文件夾/ (具體可參考cd ./experiments/MVTec-AD/,將MVTec-AD的文件復制到自己文件夾)
  • 修改config.yaml,如圖7
    在這里插入圖片描述
圖7

修改說明

??image_dir:訓練圖片路徑
??meta_file:訓練和測試的json文件

3、代碼優化修改

??預訓練模型提取特征時,卷積采用zero-padding會導致邊界引入新信息,造成誤檢。文獻提出使用reflection_padding可降低邊界誤檢,在github代碼中還未修改,需要手動修改。
代碼路徑:./models/efficientnet/utils.py
原代碼

self.static_padding = nn.ZeroPad2d((pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2))

修改為

self.static_padding = nn.ReflectionPad2d((pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2))

4、模型訓練與測試

  • 模型訓練:
    ?? 1. cd ./experiments/自己的文件夾/
    ?? 2. sh train_torch.sh #NUM_GPUS #GPU_IDS
    ??例子:sh train_torch.sh 1 0(#NUM_GPUS:gpu個數,#GPU_IDS:gpu編號)
  • 模型測試 :
    ?? sh eval_torch.sh #NUM_GPUS #GPU_IDS

七、結束

?? 如果文章對你有所幫助,請記得點贊收藏哦,手動筆芯??????
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41657.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡通信基礎

1.網絡結構模式(C/S和B/S) (1)C/S結構模式 服務器 - 客戶機,即 Client - Server(C/S)結構。 優點: 能充分發揮客戶端 PC 的處理能力,很多工作可以在客戶端處理后再提交給服務器&#xff…

02 qt基本控件及信號和槽

一 QString類 功能:顯示一個字符串內容 主要接口函數 構造函數: QString(const char *str)QString(const QString &other)賦值運算符重載: QString &operator=(const QString &other)功能函數: 1&

如何完善餐飲門店的進店服務,請看餐飲神秘顧客如何專業檢測?

神秘顧客檢測能夠評估餐飲門店實際運營狀況和顧客體驗。但是,并不是所有的神秘顧客都能夠圓滿完成門店的各項檢測任務。如果神秘顧客在執行過程中進展不順,可能是沒有把握重點,神秘顧客調查是群狼調研(長沙快餐連鎖神秘顧客)優勢業務之一&…

C++字符串轉換總結

以下C字符串轉換均在unicode編碼下進行 目錄 string轉wstringwstring轉stringMFC CString轉wstringMFC CString轉stringMFC const char*轉CStringMFC CString轉const char*char、wchar_t數組轉stringTCHAR數組轉到CStringCString轉為TCHAR數組 string轉wstring 當在 Unicode 下…

大數據-玩轉數據-Flink RedisSink

一、添加Redis Connector依賴 具體版本根據實際情況確定 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-redis_2.11</artifactId><version>1.1.5</version> </dependency>二、啟動redis 參…

如何提高深度學習性能

可用于 對抗過度擬合并獲得更好泛化能力的20 個提示、技巧和技術 如何從深度學習模型中獲得更好的性能? 這是我最常被問到的問題之一。 可能會被問為: 如何提高準確率? ……或者可以反過來說: 如果我的神經網絡表現不佳該怎么辦? 我經常回答說:“我不太清楚,但我有很…

分類預測 | MATLAB實現DBN-SVM深度置信網絡結合支持向量機多輸入分類預測

分類預測 | MATLAB實現DBN-SVM深度置信網絡結合支持向量機多輸入分類預測 目錄 分類預測 | MATLAB實現DBN-SVM深度置信網絡結合支持向量機多輸入分類預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.分類預測 | MATLAB實現DBN-SVM深度置信網絡結合支持向量機多輸入分…

工作紀實36-ES跨集群遷移

1.es數據備份、恢復 https://blog.csdn.net/andy_only/article/details/111319175 2.reindex命令 https://codeleading.com/article/40964498185/ 添加配置、重啟ES cd bin sh elasticsearch -d3.開源工具 https://github.com/elasticsearch-dump/elasticsearch-dump 4.…

回歸預測 | MATLAB實現基于SAE堆疊自編輯器多輸入單輸出回歸預測

回歸預測 | MATLAB實現基于SAE堆疊自編輯器多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現基于SAE堆疊自編輯器多輸入單輸出回歸預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 1.MATLAB實現基于SAE堆疊自編輯器多輸入單輸出回歸預測&#xff1b; 2.運行環…

Request+Response

文章目錄 1. 介紹2. Request對象2.1 Request繼承體系2.2 Request獲取請求數據1.獲取請求行2.獲取請求頭3.獲取請求體4. 請求參數的通用方式5. 解決中文亂碼問題 2.3 Request請求轉發請求轉發資源間共享數據: 3. Response對象3.0 Response 繼承體系3.1 Response設置響應數據的功…

使用GEWE框架進行個人微信收藏夾及標簽管理(收藏夾篇)適用于微信群管、社群管理

友情鏈接&#xff1a;geweapi.com 點擊即可訪問&#xff01; 如果個人有多個微信&#xff0c;進行收藏夾管理是非常麻煩的事情&#xff0c;這時候可以用得到GEWE框架的管理模塊&#xff01;下面來看一下使用方法吧~ 獲取收藏信息 小提示&#xff1a; 獲取收藏相關信息注意&am…

iOS手機無法安裝Charles 的ssl證書

問題描述 iOS客戶端安裝證書時一直卡在下載這一步&#xff0c;無法抓包 1、打開Charles&#xff0c;選擇help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote Browser 2、按照步驟1中的提示進行操作&#xff0c;手機連接電腦代理&#xff0c;…

Spring系列七:聲明式事務

&#x1f418;聲明式事務 和AOP有密切的聯系, 是AOP的一個實際的應用. &#x1f432;事務分類簡述 ●分類 1.編程式事務: 示意代碼, 傳統方式 Connection connection JdbcUtils.getConnection(); try { //1.先設置事務不要自動提交 connection.setAutoCommit(false…

ZooKeeper的應用場景(分布式鎖、分布式隊列)

7 分布式鎖 分布式鎖是控制分布式系統之間同步訪問共享資源的一種方式。如果不同的系統或是同一個系統的不同主機之間共享了一個或一組資源&#xff0c;那么訪問這些資源的時候&#xff0c;往往需要通過一些互斥手段來防止彼此之間的干擾&#xff0c;以保證一致性&#xff0c;…

島嶼的最大面積(力扣)遞歸 JAVA

給你一個大小為 m x n 的二進制矩陣 grid 。 島嶼 是由一些相鄰的 1 (代表土地) 構成的組合&#xff0c;這里的「相鄰」要求兩個 1 必須在 水平或者豎直的四個方向上 相鄰。你可以假設 grid 的四個邊緣都被 0&#xff08;代表水&#xff09;包圍著。 島嶼的面積是島上值為 1 的…

error_Network Error

此頁面為訂單列表&#xff0c;是混合開發(頁面嵌入在客戶端中) 此頁面為訂單列表&#xff0c;此需求在開發時后端先將代碼發布在測試環境&#xff0c;我在本地調試時調用的后端接口進行聯調沒有任何問題。 此后我將代碼發布在測試環境&#xff0c;在app中打開頁面&#xff0c…

vue echarts中按鈕點擊后修改值 watch數據變化后刷新圖表

1 點擊按鈕 {feature: {myBtn1: {show: true,title: 反轉Y軸,showTitle: true,icon: path://M512 0A512 512 0 1 0 512 1024A512 512 0 0 0 512 0M320 320V192h384v128zM128 416V288h256v128zM320 704V576h384v128zM128 800V672h256v128z,onclick: () > {dataSetting.rever…

nginx服務器報錯502 Bad Gateway的原因以及解決辦法

服務器報錯nginx 502 Bad Gateway的原因以及解決辦法_502 bad gateway nginx_主題模板站的博客-CSDN博客

C++學習筆記總結練習:effective 學習日志

準則 1.少使用define define所定義的常量會在預處理的時候被替代&#xff0c;出錯編譯器不容易找到錯誤。而且還沒有作用范圍限制&#xff0c;推薦使用constdefine宏定義的函數&#xff0c;容易出錯&#xff0c;而且參數需要加上小括號&#xff0c;推薦使用inline有的類中例如…

已經開源的中文大模型對比,支持更新

大模型下載&#xff1a;互鏈高科 ClueAI/PromptCLUE-base-v1-5 at main (huggingface.co) 支持多任務生成&#xff0c;支持中文&#xff0c;不支持多輪對話&#xff0c;體驗&#xff1a;ClueAI (cluebenchmarks.com) 基于promptclue-base進一步訓練的模型&#xff1a;ClueAI/Ch…