一文了解CNN可視化技術(shù)總結(jié)之卷積核可視化
導(dǎo)言:
上篇文章我們介紹了特征圖可視化方法,對(duì)于特征圖可視化的方法(或者說(shuō)原理)比較容易理解,即把feature map從特征空間通過(guò)反卷積網(wǎng)絡(luò)映射回像素空間。
那卷積核怎樣可視化呢,基于什么原理來(lái)可視化?卷積核的尺寸一般只有3x3, 5x5大小,如何可視化?本文將介紹這個(gè)兩個(gè)內(nèi)容。
歡迎關(guān)注公眾號(hào) CV技術(shù)指南 ,專注于計(jì)算機(jī)視覺(jué)的技術(shù)總結(jié)、最新技術(shù)跟蹤、經(jīng)典論文解讀。
卷積核可視化的原理
卷積核,在網(wǎng)絡(luò)中起到將圖像從像素空間映射到特征空間的作用,可認(rèn)為是一個(gè)映射函數(shù),像素空間中的值經(jīng)過(guò)卷積核后得到響應(yīng)值,在特征提取網(wǎng)絡(luò)中,基本都是使用最大池化來(lái)選擇最大響應(yīng)值進(jìn)入下一層繼續(xù)卷積,其余響應(yīng)值低的都進(jìn)入待定。也就是說(shuō),我們認(rèn)定只有響應(yīng)值大的才會(huì)對(duì)最終的識(shí)別任務(wù)起作用。
根據(jù)這個(gè)思路,給定一個(gè)已經(jīng)訓(xùn)練好的網(wǎng)絡(luò),現(xiàn)在想要可視化某一層的某一個(gè)卷積核,我們隨機(jī)初始化生成一張圖(指的是對(duì)像素值隨機(jī)取值,不是數(shù)據(jù)集中隨機(jī)選一張圖),然后經(jīng)過(guò)前向傳播到該層,我們希望這個(gè)隨機(jī)生成的圖在經(jīng)過(guò)這一層卷積核時(shí),它的響應(yīng)值能盡可能的大,換句話說(shuō),響應(yīng)值比較大的圖像是這個(gè)卷積核比較認(rèn)可的,是與識(shí)別任務(wù)更相關(guān)的。然后不斷調(diào)整圖像像素值,直到響應(yīng)值足夠大,我們就可以認(rèn)為此時(shí)的圖像就是這個(gè)卷積核所認(rèn)可的,從而達(dá)到可視化該卷積核的目的。
理解了它的原理后,它的實(shí)現(xiàn)方法就比較簡(jiǎn)單了,設(shè)計(jì)一個(gè)損失函數(shù),即以經(jīng)過(guò)該層卷積核后的響應(yīng)值為目標(biāo)函數(shù),使用梯度上升,更新像素值,使響應(yīng)值最大。
實(shí)現(xiàn)代碼
Setup
import numpy as np import tensorflow as tf from tensorflow import keras # The dimensions of our input image img_width = 180 img_height = 180 # Our target layer: we will visualize the filters from this layer. # See `model.summary()` for list of layer names, if you want to change this. layer_name = "conv3_block4_out"
Build a feature extraction model
# Build a ResNet50V2 model loaded with pre-trained ImageNet weights model = keras.a(chǎn)pplications.ResNet50V2(weights="imagenet", include_top=False) # Set up a model that returns the activation values for our target layerlayer = model.get_layer(name=layer_name) feature_extractor = keras.Model(inputs=model.inputs, outputs=layer.output)
Set up the gradient ascent process
loss函數(shù)取最大化指定卷積核的響應(yīng)值的平均值,為了避免邊界的影響,邊界的響應(yīng)值不計(jì)。
def compute_loss(input_image, filter_index): activation = feature_extractor(input_image) # We avoid border artifacts by only involving non-border pixels in the loss. filter_activation = activation[:, 2:-2, 2:-2, filter_index] return tf.reduce_mean(filter_activation)
@tf.function def gradient_ascent_step(img, filter_index, learning_rate): with tf.GradientTape() as tape: tape.watch(img) loss = compute_loss(img, filter_index) # Compute gradients. grads = tape.gradient(loss, img) # Normalize gradients. grads = tf.math.l2_normalize(grads) img += learning_rate * grads return loss, img
Set up the end-to-end filter visualization loop
def initialize_image(): # We start from a gray image with some random noise img = tf.random.uniform((1, img_width, img_height, 3)) # ResNet50V2 expects inputs in the range [-1, +1]. # Here we scale our random inputs to [-0.125, +0.125] return (img - 0.5) * 0.25 def visualize_filter(filter_index): # We run gradient ascent for 20 steps iterations = 30 learning_rate = 10.0 img = initialize_image() for iteration in range(iterations): loss, img = gradient_ascent_step(img, filter_index, learning_rate) # Decode the resulting input image img = deprocess_image(img[0].numpy()) return loss, img def deprocess_image(img): # Normalize array: center on 0., ensure variance is 0.15 img -= img.mean() img /= img.std() + 1e-5 img *= 0.15 # Center crop img = img[25:-25, 25:-25, :] # Clip to [0, 1] img += 0.5 img = np.clip(img, 0, 1) # Convert to RGB array img *= 255 img = np.clip(img, 0, 255).a(chǎn)stype("uint8") return img
可視化效果圖
可視化vgg16卷積核
總結(jié):本節(jié)內(nèi)容介紹了一種可視化卷積核的方法,即通過(guò)生成指定卷積核響應(yīng)值盡可能大的圖像來(lái)達(dá)到可視化卷積核的目的,使用的方法是梯度上升。
在不少論文的末尾都有可視化卷積核來(lái)分析提出的模型,該方法值得了解。
下一篇我們將介紹最常用的可視化方法--CAM系列,其作用是給出圖像中對(duì)類(lèi)別識(shí)別起作用的區(qū)域的熱力圖。
本文來(lái)源于公眾號(hào) CV技術(shù)指南 的技術(shù)總結(jié)系列。
歡迎關(guān)注公眾號(hào) CV技術(shù)指南 ,專注于計(jì)算機(jī)視覺(jué)的技術(shù)總結(jié)、最新技術(shù)跟蹤、經(jīng)典論文解讀。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車(chē)母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車(chē)研發(fā)中心重磅落地,寶馬家門(mén)口“搶人”
最新活動(dòng)更多
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 2 人形機(jī)器人,正狂奔在批量交付的曠野
- 3 宇樹(shù)機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 解碼特斯拉新AI芯片戰(zhàn)略 :從Dojo到AI5和AI6推理引擎
- 5 AI版“四萬(wàn)億刺激”計(jì)劃來(lái)了
- 6 2025年8月人工智能投融資觀察
- 7 8 a16z最新AI百?gòu)?qiáng)榜:硅谷頂級(jí)VC帶你讀懂全球生成式AI賽道最新趨勢(shì)
- 9 Manus跑路,大廠掉線,只能靠DeepSeek了
- 10 地平線的野心:1000萬(wàn)套HSD上車(chē)