1. 程式人生 > >【深度學習】基於MatConvNet框架的CNN卷積層與特徵圖視覺化

【深度學習】基於MatConvNet框架的CNN卷積層與特徵圖視覺化

【題目】
程式設計實現視覺化卷積神經網路的特徵圖,並探究影象變換(平移,旋轉,縮放等)對特徵圖的影響。選擇AlexNet等經典CNN網路的Pre-trained模型,視覺化每個卷積層的特徵圖(網路輸入圖片自行選擇)。其中,第一層全部視覺化,其餘層選取部分特徵圖進行視覺化。然後對影象進行變換,觀察影象變換後特徵圖的變化。

 【方法概述】
本次實驗使用了VGG-f作為預先載入的模型,通過MATLAB中的load方法將imagenet-vgg-f中的引數載入程序序。
imagenet-vgg-f是一個21層的卷積神經網路,其引數在ImageNet資料集上進行了訓練。它的網路結構包括了5層卷積層、3層全連線層,輸出的類別可達1000種。網路結構圖太長了放在文章最後。

實驗中共有6個輸入影象,分別是原圖input.jpg以及對它進行平移、縮放、旋轉、水平翻轉、垂直翻轉後的影象
這裡寫圖片描述
首先將輸入影象進行歸一化操作,也就是將圖片resize到網路的標準輸入大小224*224,並且將圖片的每個畫素與均值圖片的每個畫素相減,再輸入網路。
接下來,視覺化卷積核的時候,將網路第一層卷積核的引數net.layers{1}.weights{1}提取出來,並使用vl_imarraysc函式進行視覺化。第一層卷積核的3個通道在視覺化的過程中就被當作RGB三個通道。
對於feature map的視覺化任務,需要先使用vl_simplenn將圖片輸入神經網路並獲取其輸出結果。我們需要視覺化的是每個卷積層後經過ReLU的結果,每個輸入影象對應5個特徵圖。

 【結果分析】
由於卷積核的引數是預訓練得到的,與輸入圖片無關,所以只展現一幅圖就夠了。如下圖所示,第一層卷積核學到了圖片中一些基礎性的特徵,比如各種方向的邊緣和角點。
這裡寫圖片描述
下面展示的是原始圖片輸入後,5個卷積層的視覺化結果。需要說明的是,第二層之後的特徵圖數量較多,因此每層只選取了64個進行視覺化。另外,特徵圖是單通道的灰度圖片,為了視覺化的效果更好,我將灰度值對映到了“藍-黃”的顏色區間內,進行了偽彩色的處理,得到了如下的視覺化結果。

其中,第一層特徵圖的細節比較清晰和輸入圖片較為相似,提取出了輸入圖片的邊緣(包括刺蝟身上的刺)。第2、3、4層特徵圖的解析度較低,已經難以看出輸入圖片的特徵,但是可以發現有些特徵圖對背刺區域啟用顯著,有些特徵圖對刺蝟的外輪廓、背景等區域啟用顯著。可以猜測,它們提取了圖片中比邊緣和角點更高層的語義資訊。最後一層特徵圖中有少量對背刺區域啟用顯著,少量幾乎沒有被啟用。可以猜測,刺蝟的背刺特徵是網路判斷其類別的顯著特徵,因此被分類為刺蝟的圖片在最後一個特徵層的背刺區域啟用最為明顯。
這裡寫圖片描述


這裡寫圖片描述

 【對比分析】
由於篇幅限制,這裡只放置較小的略縮圖,高清圖片可以執行程式自行檢視。

我們先對比最清晰的第一層特徵圖的視覺化結果。
可以看出除了縮放的圖片以外,其他特徵圖都隨著輸入圖片的變化而變化:平移的圖片作為輸入,特徵圖也產生了相對的平移;翻轉、旋轉都有類似的效果。只有縮放的輸入圖片並不影響特徵圖的表現,其原因應該是VGG-f採用固定大小的輸入資料,因此不論圖片是否經過縮放,在輸入VGG-f之前都會被歸一化為同樣的大小,所以直觀上看並不影響特徵圖的表現。但是由於解析度的不同,經過resize之後的圖片可能會有畫素級別的細微差異,人眼不容易分辨出來。

從另一方面來說,雖然特徵圖對於輸入圖片的變換產生了相同的變換,但是特徵圖中的啟用區域並沒有顯著的變化。這說明VGG-f在圖片分類的任務中,對輸入圖片的大小、旋轉、翻轉、平移等變化是不敏感的,並不會顯著影響其分類結果的準確性。也說明了CNN網路具有一定程度的旋轉/平移不變性。
這裡寫圖片描述
這裡寫圖片描述
與第一層特徵圖類似,其他層的特徵圖也產生了類似的表現,即除了縮放的圖片以外,其他作用於輸入圖片的變換均體現在了特徵圖上。由於篇幅所限,這裡不再單獨放出。執行程式即可得到結果。

VGG-f網路結構圖

相關推薦

深度學習基於MatConvNet框架CNN特徵視覺

 【題目】 程式設計實現視覺化卷積神經網路的特徵圖,並探究影象變換(平移,旋轉,縮放等)對特徵圖的影響。選擇AlexNet等經典CNN網路的Pre-trained模型,視覺化每個卷積層的特徵圖(網路輸入圖片自行選擇)。其中,第一層全部視覺化,其餘層選

王小草深度學習筆記第四彈--神經網路遷移學習

標籤(空格分隔): 王小草深度學習筆記 1. 影象識別與定位 影象的相關任務可以分成以下兩大類和四小類: 影象識別,影象識別+定位,物體檢測,影象分割。 影象的定位就是指在這個圖片中不但識別出有只貓,還把貓在圖片中的位置給精確地摳出來今天我們來講

深度學習基於im2col的展開Python實現和池

一、回顧 上一篇 我們介紹了,卷積神經網的卷積計算和池化計算,計算過程中視窗一直在移動,那麼我們如何準確的取到視窗內的元素,並進行正確的計算呢? 另外,以上我們只考慮的單個輸入資料,如果是批量資料呢? 首先,我們先來看看批量資料,是如何計算的 二、批處理 在神經網路的

深度學習基於計算的反向傳播詳解

計算圖 計算圖就是將計算過程用圖形表示出來,這裡所說的圖形是資料結構圖,通過多個節點和邊表示(邊是用來連線節點的)。 下面我們先來通過一個簡單的例子瞭解計算圖的計算過程 假設我們有如下需求: 一個蘋果100塊錢,一個橘子150塊錢 消費稅為10% 買了

深度學習基於Keras的手寫體識別

from keras import models from keras import layers from keras.datasets import mnist # 搭建網路 network = models.Sequential() network.add(layers.Dens

深度學習基於Numpy實現的神經網路進行手寫數字識別

直接先用前面設定的網路進行識別,即進行推理的過程,而先忽視學習的過程。 推理的過程其實就是前向傳播的過程。 深度學習也是分成兩步:學習 + 推理。學習就是訓練模型,更新引數;推理就是用學習到的引數來處理新的資料。 from keras.datasets.mnist impor

深度學習基於caffe的表情識別(四):在Intel AI DevCloud上訓練模型

一、註冊申請Intel AI DevCloud   2.填寫註冊資訊:   3.Submit提交,提交後會出現下面的介面:   4.說明已經申請成功了,大概等2個工作日左右,會收到一封郵件,郵件長這樣:   第一個紅框內的連結是使用教程,教你怎麼連線到dev

深度學習Ubuntu環境下Tensorflow的安裝以及Pycharm的相互配置

****************************************************************************************************

理解CNN計算

CNN網絡 卷積層 池化層 深度學習 OpenCV 概述 深度學習中CNN網絡是核心,對CNN網絡來說卷積層與池化層的計算至關重要,不同的步長、填充方式、卷積核大小、池化層策略等都會對最終輸出模型與參數、計算復雜度產生重要影響,本文將從卷積層與池化層計算這些相關參數出發,演示一下不同步長、

深度學習Tensorflow——CNN 神經網路 2

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-05-CNN3/ 目錄 圖片處理  建立卷積層  建立全連線層  選優化方法  完整程式碼

深度學習Tensorflow——CNN 神經網路 1

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-04-CNN2/ 這一次我們會說道 CNN 程式碼中怎麼定義 Convolutional 的層和怎樣進行 pooling. 基於上一次卷積神經網路的介

深度學習CNN的實現以及在手寫數字識別中的應用

回顧 Affine層、Relu層以及SoftmaxWithLoss層實現 卷積層和池化層實現 上面兩篇部落格,實現了CNN包含的層,下面我們只需要將他們組合起來,搭建進行手寫數字識別的CNN CNN實現 我們按上圖CNN的網路結構進行實現

深度學習Python實現基於數值微分的神經網路的學習

回顧 \quad\quad 在之前的神經網路的學習過程一篇中,我們介紹瞭如何獲取批量資料、損失函式、梯度以及梯度下降

深度學習線性迴歸(三)使用MXNet深度學習框架實現線性迴歸

文章目錄 概述 程式碼 概述 這篇文章使用MXNet深度學習框架中的Gluon包實現小批量隨機梯度下降的線性迴歸問題。可以參考我的上一篇文章【深度學習】線性迴歸(二)小批量隨機梯度下降及其python實現。 主要包

深度學習2個經典的練手CNN原始碼MNIST資料集測試結果

對剛入門深度學習的童鞋,這2個簡單的工程可快速入門。建議手敲一遍,可快速熟悉程式碼和CNN的實現流程。 #1、匯入相關庫 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import inp

深度學習8:CNN神經網路sklearn資料集實現數字識別

前言:這個程式碼是自己閒暇無事時候寫的。 因為CNN卷積神經網路用MNIST資料集、sklearn資料集程式碼很多部分都很相似,這一篇就不附詳細說明,原始碼最下。CNN卷積神經網路的工作原理,請詳情參考——【深度學習】5:CNN卷積神經網路原理、MNIST資料

深度學習神經網路CNN基本知識點

卷積神經網路與前面學的常規神經網路很相似,也有輸入、權重、偏差、損失函式、啟用函式、全連線層等概念,之前的一些小的技巧也仍然適用。 與常規神經網路的對比 卷積神經網路(Convolutional Neural Networks,CNNs / ConvNe

深度學習CNN模型的視覺-1

CNN模型學到的東西很適合視覺化,這裡介紹三種方法: 視覺化CNN模型的中間輸出(中間啟用):幫助我們理解CNN是如何對輸入進行變換,以及CNN每個卷積核的含義 視覺化CNN的卷積核:幫助我們理解卷積核容易接受的視覺模式或概念 客戶刷影象中類啟用的熱力圖:影象中哪

深度學習5:CNN神經網路原理、識別MNIST資料集

前言:先坦白的說,深度神經網路的學習在一開始對我造成的困擾還是很大的,我也是通過不斷地看相關的視訊資料、文獻講解嘗試去理解記憶。畢竟這些內容大多都是不可查的,我們看到的都只是輸入輸出的東西,裡面的內部運作以及工作原理,都需要沉心靜思。 這篇CNN卷積神經網路的

深度學習神經網路(CNN

卷積神經網路(Convolutional Neural NetWork,CNN): 自然語言處理、醫藥發現、災難氣候發現、人工智慧程式。 輸入層: 整個神經網路的輸入 卷積層: 卷積神經網路中最重要的部分,卷積層中每一個節點的輸入只是上一層神經網路的一小塊,一般為3