可視化卷積神經網絡的激活區域
將圖像的激活區域與原始圖像進行比較,檢查激活區域並發現網絡學習的特徵,發現較淺層中的通道學習顏色和邊緣等簡單特徵,較深層中的通道學習複雜特徵。下面都是基於matlab R2018b實現。
1、加載預訓練的網絡和圖像
加載網絡;我這裏選擇簡單的alexnet
net = alexnet;
% 讀取圖像
im = imread('hehe.jpg');
% 查看網絡結構
net.Layers
alexnet的網絡結構信息如下:
ans =
25x1 Layer array with layers:
1 'data' Image Input 227x227x3 images with 'zerocenter' normalization
2 'conv1' Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0 0 0]
3 'relu1' ReLU ReLU
4 'norm1' Cross Channel Normalization cross channel normalization with 5 channels per element
5 'pool1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0]
6 'conv2' Convolution 256 5x5x48 convolutions with stride [1 1] and padding [2 2 2 2]
7 'relu2' ReLU ReLU
8 'norm2' Cross Channel Normalization cross channel normalization with 5 channels per element
9 'pool2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0]
10 'conv3' Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1]
11 'relu3' ReLU ReLU
12 'conv4' Convolution 384 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1]
13 'relu4' ReLU ReLU
14 'conv5' Convolution 256 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1]
15 'relu5' ReLU ReLU
16 'pool5' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0]
17 'fc6' Fully Connected 4096 fully connected layer
18 'relu6' ReLU ReLU
19 'drop6' Dropout 50% dropout
20 'fc7' Fully Connected 4096 fully connected layer
21 'relu7' ReLU ReLU
22 'drop7' Dropout 50% dropout
23 'fc8' Fully Connected 1000 fully connected layer
24 'prob' Softmax softmax
25 'output' Classification Output crossentropyex with 'tench' and 999 other classes
輸入圖像如下所示:從上面可以看出輸入圖像的尺寸必須大於或等於227*227*3不然肯定會出錯!記得調整圖像尺寸
2、顯示第一個卷積層的激活區域
act1 = activations(net,im,'conv1');
激活區域以三維數組的形式返回,其中第三個維度對 conv1
層上的通道進行索引。要使用 imtile
函數顯示這些激活區域,請將數組重構爲四維。imtile
的輸入中的第三個維度表示圖像顏色。將第三個維度的大小設置爲 1,因爲激活區域沒有顏色。第四個維度對通道進行索引。
sz = size(act1);
act1 = reshape(act1,[sz(1) sz(2) 1 sz(3)]);
現在您可以顯示激活區域。每次激活可能採用任何值,因此使用 mat2gray
歸一化輸出。縮放所有激活值,以使最小激活值爲 0,最大激活值爲 1。在 8×12 網格上顯示 96 個圖像,層中的每個通道對應一個圖像。
I = imtile(mat2gray(act1),'GridSize',[8 12]);
imshow(I)
3、調查更深的層
大多數卷積神經網絡在第一個卷積層中學習檢測顏色和邊緣等特徵。在更深的卷積層中,網絡學習檢測更復雜的特徵。較深的層通過組合較淺層的特徵來構建其特徵。以調查 conv1
層的方式調查 conv5
層。計算、重構並在網格中顯示激活區域。
act5 = activations(net,im,'conv5');
sz = size(act5);
act5 = reshape(act5,[sz(1) sz(2) 1 sz(3)]);
I = imtile(imresize(mat2gray(act5),[48 48]));
imshow(I)
還有其他功能,有興趣的大家可以去嘗試一下!