可視化一張圖像的卷積神經網絡的激活區域

可視化卷積神經網絡的激活區域

將圖像的激活區域與原始圖像進行比較,檢查激活區域並發現網絡學習的特徵,發現較淺層中的通道學習顏色和邊緣等簡單特徵,較深層中的通道學習複雜特徵。下面都是基於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)

還有其他功能,有興趣的大家可以去嘗試一下!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章