作者y956403 (哈哈哈哈呵呵呵嗚嗚嗚嗚)
看板DataScience
標題[問題] 關於每一層conv所辨識的特徵
時間Thu Sep 6 08:27:43 2018
大家好,小弟是最近剛開始接觸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://webptt.com/m.aspx?n=bbs/DataScience/M.1536193666.A.7DE.html
1F:→ eatpupu: 3 的第一句話不對吧09/06 13:03
2F:推 Kazimir: 我覺得3這種分析可能很難說 我看了keras的code09/06 13:44
3F:→ Kazimir: 我覺得唯一能得出的結論是深層的filter 傾向獲取複雜的09/06 13:45
4F:→ Kazimir: feature 畢竟他先引入vgg09/06 13:46
什麼意思 所以文中提到利用梯度「上升」找到能產生最大輸出結果的圖片 這個方法不見
得可行?
※ 編輯: y956403 (101.9.193.107), 09/06/2018 14:48:22
5F:推 yiefaung: 是對某一個filter的最大輸出 不是某一層吧09/06 15:04
6F:推 yiefaung: 3的確不對 feature map看不出filter長怎樣09/06 15:15
所以原文在分析每一層時,都放上若干張圖片,是指對那層的若干個filter而言,這些圖
片分別能使那些filter各別有最大輸出,而這些圖片就只是原圖,這樣嗎?
※ 編輯: y956403 (101.9.193.107), 09/06/2018 15:50:30
7F:推 yiefaung: 對 就是random noise對若干個filter做gradient ascent09/06 16:09
8F:→ yiefaung: 的結果09/06 16:09
9F:→ thefattiger: 史丹佛的CS231有一整堂課在講visualization可以去看09/06 18:12
10F:→ yoyololicon: “有最大輸出才看得出特徵”有這種事??第一次聽說ㄟ09/06 18:34
11F:→ yoyololicon: 有根據ㄇ09/06 18:34
12F:→ yoyololicon: 1 應該沒什麼問題09/06 18:35
13F:→ 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
14F:→ yoyololicon: 3的敘述蠻模糊的 例如“相似的東西conv後有大的輸出09/06 18:41
15F:→ yoyololicon: ”,是什麼跟什麼相似 09/06 18:41
16F:→ yoyololicon: “conv(直條紋)=直條紋” 的說法並不成立,conv會出 09/06 18:43
17F:→ yoyololicon: 來什麼完全取決於kernel weights09/06 18:43
取決於kernel的weight,那如果這個kernel負責的特徵是直條紋,當圖片跟它做convolut
ion以後,直條紋會比其他特徵更明顯,以上敘述A是正確的嗎
然後如果我調整圖片使convolution的結果最大,這個時候看圖片會有很多直條紋,以上
敘述B是正確嗎
18F:→ thefattiger: 回樓上,找filter最大輸出是一種幫人類理解CNN的方法 09/06 18:45
19F:推 yiefaung: 對 正如樓上所言 只是想辦法解釋這個模型 實際上filter09/06 18:54
20F:→ yiefaung: 不會長那個樣子09/06 18:54
fitler不會長那樣我大概知道,畢竟它是3D的矩陣,哪畫的出來。我好奇的是「解釋模型
」,最大輸出的時候去看原圖,這時候原圖跟filter的關係是什麼?
21F:→ yoyololicon: 2我懂惹 仔細想的確是這樣 09/06 18:57
22F:推 yiefaung: 另外回原po 說圖片跟filter相似也有點問題 因為中間層 09/06 19:02
23F:→ yiefaung: 都是多個channel 實際做起來其實像三維的conv 所以不會 09/06 19:02
24F:→ yiefaung: 是你理解的"長的像" 09/06 19:02
我指的相似是圖片有大量該filter負責的特徵,不是直接長得像,filter不能畫出來,圖
片可以,不可能用人眼就說:哦,長得很像。這樣對嗎
25F:推 Kazimir: 我的意思是說 因為他是取其中一層的一個filter 在這之前 09/06 19:54
26F:→ Kazimir: 會經過預訓練的filter 所以既不知道input也不知道filter 09/06 19:55
27F:→ Kazimir: 這樣很難說某個f-map和對應的那個filter之間的關係 09/06 19:57
不太懂「很難說」的原因,如果feature map出現很多直條紋,不就是對應的那個filter
是負責直條紋的特徵,才會留下這些直條紋嗎
28F:→ Mchord: 最大response在原圖的區域反應出該層該filter的target pat 09/06 21:28
29F:→ Mchord: tern,不清楚的話先去試試sobel或gabor filter這種比較單09/06 21:28
30F:→ Mchord: 純09/06 21:28
respond跟原圖的關係我就不太懂了,剛好最近在看傳統計算機視覺的課程,會去看看這
些的!
31F:→ Mchord: 普遍CNN是3D kernel做2D convolution,除了第一層以外的fi 09/06 21:31
32F:→ 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
33F:→ Mchord: feature map查看到的結果是直條紋,代表該層該filter的 09/07 07:14
34F:→ Mchord: target pattern在原圖的分布是呈現直條紋狀 09/07 07:14
36F:→ Mchord: 0:50 處有低層次filter的展示,該filter很接近sobel效果 09/07 07:17
37F:→ Mchord: 一個是影像 gradient +x, 一個是-x 09/07 07:18