
一、pathCore算法流程pathCore中沒有訓(xùn)練它使用的backbone都是公開數(shù)據(jù)集中預(yù)訓(xùn)練的例如ImageNet數(shù)據(jù)集上pathCore所有的前提都是當(dāng)前的feature可以用來表征我的使用場景的特征例如ImageNet與訓(xùn)練應(yīng)用到工業(yè)領(lǐng)域這個(gè)是應(yīng)用是非常合理的在這前提之上通過大量正常樣本建立一個(gè)“正常feature的地圖測試時(shí)看新的feature是否落到這個(gè)地圖附近。PatchCore和之前學(xué)習(xí)的Deep SVDD最大的特點(diǎn)是Deep SVDD學(xué)習(xí)一個(gè)正??臻gPatchCore記住一個(gè)正??臻g。1、patch feature提取算法2、GreedyCoresetSampler算法2.1 降維操作在GreedyCoresetSampler采樣算法中有一個(gè)降維的操作代碼如下def_reduce_features(self,features):iffeatures.shape[1]self.dimension_to_project_features_to:returnfeatures mappertorch.nn.Linear(features.shape[1],self.dimension_to_project_features_to,biasFalse)_mapper.to(self.device)featuresfeatures.to(self.device)returnmapper(features)經(jīng)過上面的操作例如將[pic_name784, 4680] 的特征向量降低維度到[pic_name784, 128]沒有訓(xùn)練直接使用torch.nn.Linear的隨機(jī)權(quán)重初始化進(jìn)行線性變化這個(gè)操作真的是厲害。為什么隨機(jī)Linear也有效這個(gè)是patchCore論文里面的工程技巧因?yàn)镃oreset選擇只需要保存feature之間的相對(duì)距離原始向量為x1,x2x_1, x_2x1?,x2?距離∣∣x1?x2∣∣||x_1 - x_2||∣∣x1??x2?∣∣經(jīng)過隨機(jī)投影后的距離W(x1?x2)W(x_1-x_2)W(x1??x2?)論文里面說高維空間隨機(jī)映射到低維如果維度足夠距離關(guān)系基本保持。2.2 GreedyCoresetSampler代碼層面上的已經(jīng)知道了算法的步驟現(xiàn)在進(jìn)一步去理解這個(gè)算法在干什么。第一次的時(shí)候coreset_anchor_distances中的每一行是向量row_i到所有向量的距離的平方和的根號(hào)是一個(gè)很大的值這里應(yīng)該是coreset_anchor_distances初始化為一個(gè)很大值之后逐漸被真實(shí)距離替換找到A向量后 coreset_select_distance每行是A向量到row_i向量的距離然后的操作就是將coreset_anchor_distances和coreset_select_distance在行的維度上cat然后行的維度上取小值形成新的coreset_anchor_distances這里最小的值應(yīng)該所有向量到A 的距離當(dāng)前coreset{A}第二輪開始去找coreset_anchor_distances里面的最大值意思是距離A最遠(yuǎn)的那個(gè)向量例如B然后將所有向量到B的距離和coreset_anchor_distances合并里面找最小值意思是剩下的向量到A或者B的距離的最小值其實(shí)就是到這個(gè)集合最近的距離組成新的coreset_anchor_distances然后再看哪個(gè)向量距離{A,B}最遠(yuǎn)把這個(gè)最遠(yuǎn)的也選擇上。在patchCore中從大量的feature中挑出一小部分“最有代表性”的feature用它們代表整個(gè)正常數(shù)據(jù)集它不是在判斷異常而是在做正常特征庫的壓縮。我的思考GreedyCoresetSampler在patchCore中發(fā)揮它的作用的前提是視覺相似性等同于Feature空間中的距離比較小patchCore通常不自己訓(xùn)練一個(gè)異常檢測Encoder直接利用ImageNet預(yù)訓(xùn)練CNN的中間層特征ImageNet已經(jīng)讓CNN學(xué)到了大量的視覺結(jié)構(gòu)這個(gè)是沒有問題的但是我覺得patchCore選擇ImageNet最主要的原因是patchCore是用來做工業(yè)檢測的工業(yè)上的圖片目標(biāo)的尺寸和角度和ImageNet是非常相似的另外工業(yè)上的圖片受光照影響比較小因此用ImageNet也是比較合理另外在工業(yè)圖片中異常往往是局部的而正常數(shù)據(jù)的視覺結(jié)果相對(duì)穩(wěn)定。ImageNet的預(yù)訓(xùn)練不適合監(jiān)控視頻我的判斷patchCore不適合軌道異物檢測在工業(yè)場景中相機(jī)、產(chǎn)品、拍攝距離、角度比較固定使得工業(yè)圖片的全局特征比較穩(wěn)定所以不同特征的同一位置的path(i,j)對(duì)用的空間位置基本相同例如都是一個(gè)螺絲孔、焊點(diǎn)、軸承邊緣等所以在不同正常圖片中空間位置局部視覺語義基本穩(wěn)定因此可以拆成大量path在軌道場景中不同圖片的相同位置的path不一定具有相同視覺內(nèi)容imagenet的特征不適用軌道場景;