看板 DataScience 關於我們 聯絡資訊
大家好,小弟是最近剛開始接觸CV的學渣, 以下若有觀念錯誤的地方,還請不吝指教! https://zhuanlan.zhihu.com/p/42904109 (知乎連結) 剛剛看到這篇提到「利用調整圖片,使某層有最大輸出, 再去看該層的feature map,可看出該層所辨識的特徵」 小弟不懂的地方是: 1. 去看一個CNN在某層負責的特徵, 應該是這個model經過training之後吧? 也就是說,用一大堆車子圖片訓練完的model,它的第某層負責的特徵, 和用一大堆乳牛圖片訓練完的model,它的第某層負責的特徵,會有不同? (可能差不多,畢竟低層數就是簡單特徵,高層數就是複雜特徵,相去不遠) 還沒train的model裡面參數都是random沒有意義的, 好像不太有看的意義? 2. 假設我是要看第三層所負責的特徵, 我是要用一張圖片從頭傳入,然後不斷調整使第三層有最大輸出, 當它有最大輸出時,其他層的輸出通常不會是最大, 因為每一層負責的特徵不同,這樣對吧? 3. 要看第三層負責的特徵是看第三層產生的feature map們, 如果很多張都出現很多直條紋,表示這層的filter們負責的特徵是直條紋, 對直條紋比較敏感,這樣對吧? 那這個時候看傳入的那張圖片也會是傾向於出現直條紋嗎? 我知道的是:相似的東西convolution後會有大的輸出, 但第三層的input是第二層的output,當第三層有大的輸出時, 跟第三層filter們相似的應該會是第二層產生的feature map們, 所以代表第二層的feature map們會有很多直條紋? 打到這裡我又開始懷疑自己:那這樣的話應該是看第二層的feature maps來 得知第三層的負責特徵才對呀? 以上有錯歡迎指正, 打得有點亂還請見諒, 實在不知道有什麼更適合的板可以問這種基本問題, 打擾各位了QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.212.6 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1536193666.A.7DE.html
eatpupu: 3 的第一句話不對吧09/06 13:03
Kazimir: 我覺得3這種分析可能很難說 我看了keras的code09/06 13:44
Kazimir: 我覺得唯一能得出的結論是深層的filter 傾向獲取複雜的09/06 13:45
Kazimir: feature 畢竟他先引入vgg09/06 13:46
什麼意思 所以文中提到利用梯度「上升」找到能產生最大輸出結果的圖片 這個方法不見 得可行? ※ 編輯: y956403 (101.9.193.107), 09/06/2018 14:48:22
yiefaung: 是對某一個filter的最大輸出 不是某一層吧09/06 15:04
yiefaung: 3的確不對 feature map看不出filter長怎樣09/06 15:15
所以原文在分析每一層時,都放上若干張圖片,是指對那層的若干個filter而言,這些圖 片分別能使那些filter各別有最大輸出,而這些圖片就只是原圖,這樣嗎? ※ 編輯: y956403 (101.9.193.107), 09/06/2018 15:50:30
yiefaung: 對 就是random noise對若干個filter做gradient ascent09/06 16:09
yiefaung: 的結果09/06 16:09
thefattiger: 史丹佛的CS231有一整堂課在講visualization可以去看09/06 18:12
yoyololicon: “有最大輸出才看得出特徵”有這種事??第一次聽說ㄟ09/06 18:34
yoyololicon: 有根據ㄇ09/06 18:34
yoyololicon: 1 應該沒什麼問題09/06 18:35
yoyololicon: 2 為什麼某一層有最大輸出時其他層不是最大?09/06 18:38
我的想法是:當圖片跟某個filter很相似時,convolution出來的輸出會很大,這時候看 圖片才有意義(否則不相似,看了圖片也不代表什麼) 讓某個filter有最大輸出的圖片,不代表會讓其他filter有最大輸出,因為它是對這個fi lter的輸出做gradient ascent,不是對那個filter 有錯請用力指正!! ※ 編輯: y956403 (101.9.193.107), 09/06/2018 18:44:41
yoyololicon: 3的敘述蠻模糊的 例如“相似的東西conv後有大的輸出09/06 18:41
yoyololicon: ”,是什麼跟什麼相似 09/06 18:41
yoyololicon: “conv(直條紋)=直條紋” 的說法並不成立,conv會出 09/06 18:43
yoyololicon: 來什麼完全取決於kernel weights09/06 18:43
取決於kernel的weight,那如果這個kernel負責的特徵是直條紋,當圖片跟它做convolut ion以後,直條紋會比其他特徵更明顯,以上敘述A是正確的嗎 然後如果我調整圖片使convolution的結果最大,這個時候看圖片會有很多直條紋,以上 敘述B是正確嗎
thefattiger: 回樓上,找filter最大輸出是一種幫人類理解CNN的方法 09/06 18:45
yiefaung: 對 正如樓上所言 只是想辦法解釋這個模型 實際上filter09/06 18:54
yiefaung: 不會長那個樣子09/06 18:54
fitler不會長那樣我大概知道,畢竟它是3D的矩陣,哪畫的出來。我好奇的是「解釋模型 」,最大輸出的時候去看原圖,這時候原圖跟filter的關係是什麼?
yoyololicon: 2我懂惹 仔細想的確是這樣 09/06 18:57
yiefaung: 另外回原po 說圖片跟filter相似也有點問題 因為中間層 09/06 19:02
yiefaung: 都是多個channel 實際做起來其實像三維的conv 所以不會 09/06 19:02
yiefaung: 是你理解的"長的像" 09/06 19:02
我指的相似是圖片有大量該filter負責的特徵,不是直接長得像,filter不能畫出來,圖 片可以,不可能用人眼就說:哦,長得很像。這樣對嗎
Kazimir: 我的意思是說 因為他是取其中一層的一個filter 在這之前 09/06 19:54
Kazimir: 會經過預訓練的filter 所以既不知道input也不知道filter 09/06 19:55
Kazimir: 這樣很難說某個f-map和對應的那個filter之間的關係 09/06 19:57
不太懂「很難說」的原因,如果feature map出現很多直條紋,不就是對應的那個filter 是負責直條紋的特徵,才會留下這些直條紋嗎
Mchord: 最大response在原圖的區域反應出該層該filter的target pat 09/06 21:28
Mchord: tern,不清楚的話先去試試sobel或gabor filter這種比較單09/06 21:28
Mchord: 純09/06 21:28
respond跟原圖的關係我就不太懂了,剛好最近在看傳統計算機視覺的課程,會去看看這 些的!
Mchord: 普遍CNN是3D kernel做2D convolution,除了第一層以外的fi 09/06 21:31
Mchord: lter都無法直接視覺化target pattern09/06 21:31
如果convolution的結果看到很多直條紋,不就是代表該filter的target pattern是直條 紋嗎?還是你說的視覺化是指直接看filter的長相(如果是的話我大概懂,filter是3D的 ,無法畫出) ※ 編輯: y956403 (140.114.212.6), 09/06/2018 23:25:08
Mchord: feature map查看到的結果是直條紋,代表該層該filter的 09/07 07:14
Mchord: target pattern在原圖的分布是呈現直條紋狀 09/07 07:14
Mchord: https://www.youtube.com/watch?v=AgkfIQ4IGaM 3:00 左右 09/07 07:16
Mchord: 0:50 處有低層次filter的展示,該filter很接近sobel效果 09/07 07:17
Mchord: 一個是影像 gradient +x, 一個是-x 09/07 07:18