作者 | 劉暢?
編輯 | Jane
出品 | AI科技大本營(yíng)(ID:rgznai100)
開門見山。最近閱讀了一篇論文翩腐,加上看了一些之前的工作。記錄一下膏燃,CNN 到底學(xué)到了什么東西茂卦,或者換句話講。到底是什么樣的特征在影響著CNN 的性能组哩?
先放論文:
IMAGENET-TRAINED CNNS ARE BIASED TOWARDS TEXTURE; INCREASING SHAPE BIAS IMPROVES ACCURACY AND ROBUSTNESS
論文地址:
https://openreview.net/pdf?id=Bygh9j09KX
JeremyRifkin 在書《The end of Work》中寫道等龙,“時(shí)至今日,當(dāng)科學(xué)家們探討人工智能時(shí)伶贰,他們通常是在講一門能執(zhí)行人們所希望機(jī)器表現(xiàn)的智能藝術(shù)”蛛砰。這是我比較喜歡的關(guān)于人工智能的定義。因?yàn)樗苊饬舜笳勌卣勅缃竦娜斯ぶ悄芗夹g(shù)離真正的智能化有多遠(yuǎn)黍衙。而是享受當(dāng)下泥畅。不過,作為一名研究人員琅翻,我覺得揭開大腦的運(yùn)作原理和創(chuàng)造真正的智能機(jī)器是非常重要的位仁。目前深度學(xué)習(xí)主要做的研究是關(guān)于從數(shù)據(jù)中學(xué)到規(guī)則并將其自動(dòng)化的一個(gè)過程。這已經(jīng)帶來了非常多的好處方椎,舉一個(gè)簡(jiǎn)單的例子聂抢。在醫(yī)學(xué)領(lǐng)域引入深度學(xué)習(xí)技術(shù),可以將許多診斷過程全自動(dòng)化棠众,因此可以讓貧窮地區(qū)或國(guó)家的人們享受到頂級(jí)的治療琳疏。
開篇完畢,現(xiàn)在進(jìn)入正題。盡管深度學(xué)習(xí)技術(shù)的到來給人們的生活帶來了更多的便利空盼。但是神經(jīng)網(wǎng)絡(luò)看待和解釋世界的方式仍然是一個(gè)黑盒子书幕。因此我們需要嘗試更好的理解它,以便我們對(duì)深度學(xué)習(xí)網(wǎng)絡(luò)做出進(jìn)一步的改進(jìn)我注,以及嘗試去解釋某些深度學(xué)習(xí)行為按咒。有兩種主要的方法可以嘗試?yán)斫馍窠?jīng)網(wǎng)絡(luò)。一種是在數(shù)據(jù)集中查找導(dǎo)致特征圖有高激活響應(yīng)值的圖片但骨,另一種是在隨機(jī)的一張圖片中励七,通過優(yōu)化像素值來生成模式。接下來奔缠,通過一些例子來展示一下掠抬,CNN 到底學(xué)到了什么?
特征可視化
這本書《Deep Learning with Python》里面講了如何生成模式校哎。包括濾波器是如何響應(yīng)模式(紋理)等两波。接下來我們先觀察一下這些模式。以 VGG16 為例闷哆。
第7層卷積(64,128)
濾波器12腰奋,16,86抱怔,110(從左到右劣坊,從上到下)
第14層卷積(128,256)
濾波器1, 6屈留,31局冰,32,54, 77(從左到右灌危,從上到下)
第20層卷積(256,256)
濾波器3康二,34,39勇蝙,55沫勿,62,105(從左到右浅蚪,從上到下)
第30層卷積(512,512)
濾波器54藕帜,62,67惜傲,92洽故,123,141(從左到右盗誊,從上到下)
第40層卷積(512,512)——網(wǎng)絡(luò)頂部
256时甚,261隘弊,265,277荒适,286梨熙,462(從左到右,從上到下)
這些得到的中間結(jié)果看著非常漂亮刀诬。方法就是在網(wǎng)絡(luò)中最大化某個(gè)激活值就可以得到這些結(jié)果咽扇。看一下第 40 層的幾張圖陕壹。已經(jīng)有了明顯的形狀质欲。比如羽毛、鐵鏈等糠馆。接下來我們分析一下這些結(jié)果嘶伟。
模式識(shí)別
我們先從下面這張圖片開始吧。這張圖片看著像是拱門又碌。于是去數(shù)據(jù)集里面找來了一張拱門的圖片九昧,也就是右圖。
接下來我們來檢驗(yàn)一下毕匀,是不是由這張圖來確定的圖片的分類铸鹰。首先記住,這張圖是最后一層的第 286 個(gè)濾波器皂岔。如何檢驗(yàn)?zāi)氐粞伲课覀冎恍枰獙⑦@張圖片輸入進(jìn)網(wǎng)絡(luò),并繪制第 40 層的平均激活響應(yīng)凤薛,如下圖。
可以看到在特征圖第 286 的地方诞仓,出現(xiàn)了強(qiáng)烈的飆升缤苫。顯然它就是檢測(cè)拱形結(jié)構(gòu)的濾波器。但是注意墅拭,這樣的形狀結(jié)構(gòu)可能對(duì)應(yīng)著幾個(gè)不同的類別活玲。
那我們?cè)倏匆粋€(gè)例子吧。左邊這個(gè)看著像是雞頭(最后一層谍婉,第 256 個(gè))舒憾。因此找了右邊這一張圖片來測(cè)試。同樣的測(cè)試方法穗熬。
我們來看一看特征響應(yīng)圖镀迂。
好像似乎也印證了我的想法,可能是某種形狀導(dǎo)致了最后的輸出類別唤蔗。也就是說探遵,影響 CNN 效果的其實(shí)是形狀特征(猜想)窟赏。
不過讓我們?cè)訇P(guān)注一個(gè)例子,用同樣的方法箱季。輸入一張鳥類的圖涯穷。
濾波器172,288藏雏,437拷况,495(從左到右,從上到下)
我們發(fā)現(xiàn)了多個(gè)高響應(yīng)的特征圖掘殴。上面的特征圖有像是鳥腿赚瘦、眼睛和喙的東西?但是下面的特征圖杯巨,看不出來是什么蚤告,可能與圖像的背景有關(guān),或者一些只有網(wǎng)絡(luò)能理解的東西服爷。這部分現(xiàn)在仍然是黑匣子杜恰。也許之前的猜想是錯(cuò)的。
接下來放一下代碼(PyTorch):
1generate_image.py
2classFilterVisualizer():
3def__init__(self,?size=56,?upscaling_steps=12,?upscaling_factor=1.2):
4self.size,?self.upscaling_steps,?self.upscaling_factor?=?size,?upscaling_steps,?upscaling_factor
5self.model?=?vgg16(pre=True).cuda().eval()
6set_trainable(self.model,False)
7
8defvisualize(self,?layer,?filter,?lr=0.1,?opt_steps=20,?blur=None):
9sz?=?self.size
10img?=?np.uint8(np.random.uniform(150,180,?(sz,?sz,3)))/255#?generate?random?image
11activations?=?SaveFeatures(list(self.model.children())[layer])#?register?hook
12
13for_inrange(self.upscaling_steps):#?scale?the?image?up?upscaling_steps?times
14train_tfms,?val_tfms?=?tfms_from_model(vgg16,?sz)
15img_var?=?V(val_tfms(img)[None],?requires_grad=True)#?convert?image?to?Variable?that?requires?grad
16optimizer?=?torch.optim.Adam([img_var],?lr=lr,?weight_decay=1e-6)
17forninrange(opt_steps):#?optimize?pixel?values?for?opt_steps?times
18optimizer.zero_grad()
19self.model(img_var)
20loss?=?-activations.features[0,?filter].mean()
21loss.backward()
22optimizer.step()
23img?=?val_tfms.denorm(img_var.data.cpu().numpy()[0].transpose(1,2,0))
24self.output?=?img
25sz?=?int(self.upscaling_factor?*?sz)#?calculate?new?image?size
26img?=?cv2.resize(img,?(sz,?sz),?interpolation?=?cv2.INTER_CUBIC)#?scale?image?up
27ifblurisnotNone:?img?=?cv2.blur(img,(blur,blur))#?blur?image?to?reduce?high?frequency?patterns
28self.save(layer,?filter)
29activations.close()
30
31defsave(self,?layer,?filter):
32plt.imsave("layer_"+str(layer)+"_filter_"+str(filter)+".jpg",?np.clip(self.output,0,1))
33
34
35pytorch_hook.py
36
37classSaveFeatures():
38def__init__(self仍源,module):
39self.hook=module.register_forward_hook(self.hook_fn)
40defhook_fn(self心褐,module,input笼踩,output):
41self.features=torch.tensor(output逗爹,requires_grad=True).cuda()
42defclose(self):
43self.hook.remove()
44
45
46filter_visualizer.py
47
48layer=?40
49filter=?265
50FV=FilterVisualizer(size=56,?upscaling_steps=12,?upscaling_factor=1.2)
51FV.visualize(layer,?filter,?blur=5)
52
你以為到這里就完了嗎?還沒到這篇文章的重點(diǎn)內(nèi)容嚎于,新鮮出爐的 2019 ICLR 的論文:《Imagenet-trained?CNNs?are biased towards texture; Increasing shape bias improves accuracy and robustness》
看標(biāo)題掘而,就知道。我們之前的猜想是錯(cuò)誤的于购!CNN 學(xué)到的應(yīng)該是紋理特征袍睡。真讓人頭疼!
作者以一個(gè)問題入手肋僧,一只披著象皮的貓斑胜,神經(jīng)網(wǎng)絡(luò)會(huì)把它識(shí)別為大象還是貓?最后根據(jù)實(shí)驗(yàn)結(jié)果得出結(jié)論嫌吠。神經(jīng)網(wǎng)絡(luò)應(yīng)該是根據(jù)物體的紋理特征來進(jìn)行識(shí)別止潘,而并非我們以為的形狀特征。也就是說我們常了解的一些可視化技術(shù)如 Deconv 都是具有誤導(dǎo)性的辫诅,它們的結(jié)果僅僅只是圖像的重建部分凭戴,而與網(wǎng)絡(luò)如何做出最后的決策關(guān)系不大。
其實(shí)接觸過圖像風(fēng)格遷移技術(shù)的技術(shù)人員應(yīng)該都非常清楚炕矮,深度學(xué)習(xí)模型在里面提取的圖像的繪畫風(fēng)格就是紋理特征簇宽。貼上一張經(jīng)典圖片勋篓,生成的是一張具有梵高《星月夜》圖畫風(fēng)格的建筑圖片。
在論文里面魏割,作者為了更清楚的了解譬嚣,圖像識(shí)別到底是基于形狀還是基于紋理。做了以下的實(shí)驗(yàn)钞它。使用三張生成的圖片拜银,分別是帶有大象紋理的貓 , 帶有鐘表紋理的汽車 和 帶有水瓶紋理的熊
作者通過實(shí)驗(yàn)遭垛,采用了多個(gè)神經(jīng)網(wǎng)絡(luò)(AlexNet尼桶、VGG-16、GoogLeNet锯仪、ResNet-50泵督、ResNet-152、DenseNet-121庶喜、SqueezeNet1_1)進(jìn)行輸出結(jié)果小腊。為了對(duì)照,還召集了大約 100 名人類來做對(duì)照實(shí)驗(yàn)久窟。這個(gè)實(shí)驗(yàn)結(jié)果就是一只帶有象皮紋理的貓被深度神經(jīng)網(wǎng)絡(luò)判斷為大象秩冈,但對(duì)人類來說仍然是貓。帶有時(shí)鐘紋理的汽車被深度神經(jīng)網(wǎng)絡(luò)判斷為時(shí)鐘斥扛,帶有水瓶紋理的熊被深度神經(jīng)網(wǎng)絡(luò)判斷為水瓶入问。顯然!該實(shí)驗(yàn)支持了這一說法,即目前用于物體識(shí)別的深度學(xué)習(xí)技術(shù)主要依賴紋理,而不是物體形狀。
當(dāng)然,作者還做了更多的對(duì)比實(shí)驗(yàn)缎患。得出了一些具有啟發(fā)性的結(jié)論。比如對(duì)于只包含紋理圖片的數(shù)據(jù)集,神經(jīng)網(wǎng)絡(luò)能取得特別高的準(zhǔn)確率。采用原圖和灰度圖,神經(jīng)網(wǎng)絡(luò)都可以取得非常高的準(zhǔn)確率窜锯,而對(duì)于只包含輪廓和只包含邊緣的圖片张肾,神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確率則顯著降低。
更多的實(shí)驗(yàn)細(xì)節(jié)锚扎,可以查看論文吞瞪。總結(jié)一下驾孔,有幾點(diǎn)結(jié)論還是很有啟發(fā)性的:
第一芍秆、回答了影響CNN識(shí)別性能的是形狀還是紋理的問題惯疙。
第二、如何針對(duì)性的引導(dǎo)神經(jīng)網(wǎng)絡(luò)訓(xùn)練或者學(xué)習(xí)想要它學(xué)習(xí)的特征妖啥。(有意的抑制某個(gè)特征)
原文鏈接:
https://blog.csdn.net/u012395979/article/details/86651808
作者:AI科技大本營(yíng)
鏈接:http://www.reibang.com/p/9f2322027cad
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有霉颠,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。