[問題] 圖片分類有狗/沒有狗,畫Saliency map

看板DataScience作者 (長常久九)時間6年前 (2018/07/07 10:40), 6年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
作業系統: win 7 問題類別: CNN, Saliency map 使用工具: python,tensorflow,keras 問題內容: 我用SqueezeNet 的架構,重新訓練model,再用keras.backend.gradients畫Saliency map。 但我不確定畫出來的Saliency map 對不對。 測試一:訓練model 分辨鳥、貓、狗 給model 狗(或貓、鳥)的圖片,Saliency map正確顯示的物體位置 如下圖,上排是原圖,下排是Saliency map,紅點是物體位置 https://imgur.com/bjmOxH6
測試二:訓練model ,分辨圖片中有狗/沒有狗 給model 有狗或沒狗的圖片,Saliency map亂標示一個位置或一片黑(數值全為0) 如下圖,上排是原圖,下排是Saliency map,白點是程式標示的位置 https://imgur.com/wCXVSBC
如果繼續訓練到overfit,則是變成下圖 https://imgur.com/y0jlqag
請問測試二是對的嗎? 我的程式碼如下,請各位指點看是不是哪裡有錯 如果要做成有狗的時候標出位置,沒有狗的時候不標位置,該怎麼修改 謝謝 from keras import backend as k import numpy as np ...讀取圖片,略... modela = load_model('../isdog.h5') yinput = Input(shape=(classnum,)) #這裡分兩類,classnum是2 loss = k.categorical_crossentropy(yinput, modela.output, from_logits=True) gradients = k.gradients(loss, modela.inputs[0]) runnn = k.function(inputs=[modela.input, yinput], outputs=gradients) smap = runnn([testimage, to_categorical(truelabel, classnum)])[0] smap = np.absolute(smap) smap = np.amax(smap, axis=3) ...matplot畫圖,略... ==================================================================== 自問自答 後來在程式發現兩個錯誤 一個是我在輸入時對圖片多做一個處理,但訓練model沒有做這個處理 另一個是,gradients是用輸出分數(未normalize)對圖片微分,不是loss對圖片微分 修正後,分辨有狗/沒狗就可以畫出saliency map了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.105.49.128 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1530931251.A.860.html ※ 編輯: guestttttt (27.105.49.128), 07/08/2018 09:35:25 ※ 編輯: guestttttt (27.105.49.128), 07/14/2018 12:27:27
文章代碼(AID): #1RG2WpXW (DataScience)
文章代碼(AID): #1RG2WpXW (DataScience)