作者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/cn.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