訓練數據有大概五六千張圖像,每個圖像中只有一個圖像,要麼是A類形狀,要麼是B類圖像,其實訓練一個二元分類模型,在測試集中判斷出A類還是B類不是很難,就是既要判斷出A類,也要判斷出B類,還要判斷出不是A類也不是B類的圖片。這個應該是異常檢測,請問各位大神有什麼好的方法解決這個問題?或者對於這個問題有什麼思路能指點一下我,先說聲謝謝了

補充:這裡只有A類和B類樣本的數據,沒有第三類的數據,但是要判斷出不是A類,也不是B類的圖片,


相當於檢測out of distribution的數據,你可以參考uncertainty measure的方法,去年nips專門有專題解決uncertainty measure的問題。

A Baseline for Detecting Misclassified and Out-of-Distribution Examples in Neural Networks?

arxiv.org

以及:

NeurIPS 2019 Schedule?

nips.cc


你的意思難道不是一個三分類嗎?


單純通過輸出的概率大小部分可行,但概率閾值是不太好定的。

建議採用基於卷積的自編碼試試看。


可以用生成模型去做。

P(x)=aP1(x)+bP2(x)

假設A中的數據由P1(x)生成,B中的數據由P2(x)生成,a和b為混合係數,a+b=1,a &> 0,b &> 0。

最大化訓練集由P(x)生成的對數概率log P(x)。

在推斷時,設置一個閾值,當P(x)小於閾值時,認為不屬於A,B兩類。否則比較P1(x)和P2(x)的大小來確定屬於A還是B。


搞一個CGAN生成器

將AB兩個域圖像作為輸入映射到自己定義的響應模式上

(譬如學習的目標是一張單通道圖像,A左側響應1,右側全0,反之反之)

根據生成的小圖左右像素比判斷AB類別

訓練好後如果遇到與AB分佈差異大圖像,輸出的圖像分佈模式會有很大差異。

根據觀察寫個函數判斷為其它類即可。


「不是某分類」也是一個概念來的,你不教它,它怎麼知道。人為擴展一些圖片吧,用triplet loss 訓練。可以參考一下FaceNet的方法。


給圖片加噪音,做三分類吧,人為修改圖片擴充數據集。


做三分類,由於沒有負樣本,為了提高泛化能力,可以使用對抗生成網路,隨機自動生成新的樣本


個人覺得想辦法生成第三類數據比較實用,沒必要增加自己的實踐難度。如果是想發paper就當我沒說


謝邀。

這是個好問題。題主應該是想只用現有的A、B兩類,實現類似編程的if-else if-else的判斷流程。

這是個很直接的想法,很好,很程序員。

我也曾有類似的想法,後來我發現,模型訓練的本質是擬合,目前只能根據特徵進行,不存在的數據,也就是本該寫入的else這部分,模型是沒法學習的。

建議的方法:

隨機收集真實環境的其它一些圖片作為第三個類C加入數據集,也就等同於是讓模型進行A、B、C的三分類訓練。目前都是用這種方法來解決else的問題。

或許未來會有更好的方法吧。


舉個栗子,當預測為A的概率為0.9則判斷為A,B亦同,如果預測A B的概率都較低(<0.5自定義)就判斷為不是A B


推薦閱讀:
相關文章