卷積神經(jīng)網(wǎng)絡(luò)(cnn)是一種神經(jīng)網(wǎng)絡(luò),通常用于圖像分類(lèi)、目標(biāo)檢測(cè)和其他計(jì)算機(jī)視覺(jué)任務(wù)。CNN的關(guān)鍵組件之一是特征圖,它是通過(guò)對(duì)圖像應(yīng)用卷積濾波器生成的輸入圖像的表示。

理解卷積層
1、卷積操作卷積的概念是CNN操作的核心。卷積是一種數(shù)學(xué)運(yùn)算,它把兩個(gè)函數(shù)結(jié)合起來(lái)產(chǎn)生第三個(gè)函數(shù)。在cnn的上下文中,這兩個(gè)函數(shù)是輸入圖像和濾波器,而得到的結(jié)果就是特征圖。
2、卷積的層
卷積層包括在輸入圖像上滑動(dòng)濾波器,并計(jì)算濾波器與輸入圖像的相應(yīng)補(bǔ)丁之間的點(diǎn)積。然后將結(jié)果輸出值存儲(chǔ)在特征映射中的相應(yīng)位置。通過(guò)應(yīng)用多個(gè)過(guò)濾器,每個(gè)過(guò)濾器檢測(cè)一個(gè)不同的特征,我們可以生成多個(gè)特征映射。
3、重要參數(shù)
Stride:Stride 是指卷積濾波器在卷積運(yùn)算過(guò)程中在輸入數(shù)據(jù)上移動(dòng)的步長(zhǎng)。
Padding:Padding是指在應(yīng)用卷積操作之前在輸入圖像或特征映射的邊界周?chē)砑宇~外像素。Padding的目的是控制輸出特征圖的大小,保證濾波窗口能夠覆蓋輸入圖像或特征圖的邊緣。如果沒(méi)有填充,過(guò)濾器窗口將無(wú)法覆蓋輸入數(shù)據(jù)的邊緣,導(dǎo)致輸出特征映射的大小減小和信息丟失。有兩種類(lèi)型的填充“valid”和“same”。
kernel/filter:kernel(也稱(chēng)為filter 或 weight )是一個(gè)可學(xué)習(xí)參數(shù)的小矩陣,用于從輸入數(shù)據(jù)中提取特征。在下圖中,輸入圖像的大小為(5,5),過(guò)濾器filter 的大小為(3,3),綠色為輸入圖像,黃色區(qū)域?yàn)樵搱D像的過(guò)濾器。在輸入圖像上滑動(dòng)濾波器,計(jì)算濾波器與輸入圖像的相應(yīng)像素之間的點(diǎn)積。Padding是valid (也就是沒(méi)有填充)。stride值為1。

Output_Size = (Input_Size - Filter_Size + 2 * Padding) / Stride + 1
這個(gè)公式非常重要,因?yàn)樵谟?jì)算輸出時(shí)肯定會(huì)用到,所以一定要記住來(lái)自一個(gè)卷積層的特征映射作為網(wǎng)絡(luò)中下一層的輸入數(shù)據(jù)。隨著層數(shù)的增加,網(wǎng)絡(luò)能夠?qū)W習(xí)越來(lái)越復(fù)雜和抽象的特征。通過(guò)結(jié)合來(lái)自多層的特征,網(wǎng)絡(luò)可以識(shí)別輸入數(shù)據(jù)中的復(fù)雜模式,并做出準(zhǔn)確的預(yù)測(cè)。特征圖可視化
這里我們使用TF作為框架進(jìn)行演示
## Importing libraries
#Imageprocessinglibrary
importcv2
#Kerasfromtensorflow
importkeras
#InKeras,thelayersmoduleprovidesasetofpre-builtlayerclassesthatcanbeusedtoconstructneuralnetworks.
fromkerasimportlayers
#Forplotinggraphsandimages
importmatplotlib.pyplotasplt
importnumpyasnp
使用OpenCV導(dǎo)入一張圖像,并將其大小調(diào)整為224 x 224像素。
img_size=(224,224)
file_name="./data/archive/flowers/iris/10802001213_7687db7f0c_c.jpg"
img=cv2.imread(file_name)#readingtheimage
img=cv2.resize(img,img_size)
我們添加2個(gè)卷積層:
model=keras.Sequential()
filters=16
model.add(layers.Conv2D(input_shape=(224,224,3),filters=filters,kernel_size=3))
model.add(layers.Conv2D(filters=filters,kernel_size=3))
從卷積層中獲取過(guò)濾器。
bias = model.layers[0].get_weights()
min_filter = filters.min()
max_filter = filters.max()
filters = (filters - min_filter) / (max_filter - min_filter)p
可視化
=plt.figure(figsize=(10,20))
=filters.shape[-1]
=filters.shape[0]
=1
:
:
channels, index)
:, :, filter])
plt.xticks([])
plt.yticks([])
=1
plt.show()
將圖像輸入到模型中得到特征圖
=(img-img.min())/(img.max()-img.min())
=normalized_img.reshape(-1,224,224,3)
=model.predict(normalized_img)
特征圖需要進(jìn)行歸一化這樣才可以在matplotlib中顯示
feature_map = (feature_map - feature_map.min())/ (feature_map.max() - feature_map.min())
提取特征圖并顯示
total_imgs = feature_map.shape[0]
no_features=feature_map.shape[-1]
fig=plt.figure(figsize=(10,50))
index=1
forimage_noinrange(total_imgs):
forfeatureinrange(no_features):
#plottingfor16filtersthatproduced16featuremaps
plt.subplot(no_features,3,index)
plt.imshow(feature_map[image_no,:,:,feature],cmap="gray")
plt.xticks([])
plt.yticks([])
index+=1
plt.show()

總結(jié)
通過(guò)可視化CNN不同層的特征圖,可以更好地理解網(wǎng)絡(luò)在處理圖像時(shí)“看到”的是什么。例如,第一層可能會(huì)學(xué)習(xí)簡(jiǎn)單的特征,如邊緣和角落,而后面的層可能會(huì)學(xué)習(xí)更抽象的特征,如特定物體的存在。通過(guò)查看特征圖,我們還可以識(shí)別圖像中對(duì)網(wǎng)絡(luò)決策過(guò)程重要的區(qū)域。
-
imagination
+關(guān)注
關(guān)注
1文章
617瀏覽量
63101
原文標(biāo)題:可視化CNN和特征圖
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
圖撲 HT 驅(qū)動(dòng)智慧社區(qū)數(shù)字化轉(zhuǎn)型:多維可視化與系統(tǒng)集成實(shí)踐
工業(yè)可視化平臺(tái)是什么
光伏電站可視化的實(shí)現(xiàn)
如何使用協(xié)議分析儀進(jìn)行數(shù)據(jù)分析與可視化
工業(yè)設(shè)備可視化管理系統(tǒng)是什么
工業(yè)設(shè)備數(shù)據(jù)集中監(jiān)控可視化管理平臺(tái)是什么
VirtualLab Fusion應(yīng)用:3D系統(tǒng)可視化
可視化組態(tài)物聯(lián)網(wǎng)平臺(tái)是什么

可視化CNN和特征圖
評(píng)論