1. 程式人生 > >深度學習、影象分類入門,從VGG16卷積神經網路開始

深度學習、影象分類入門,從VGG16卷積神經網路開始

剛開始接觸深度學習、卷積神經網路的時候非常懵逼,不知道從何入手,我覺得應該有一個進階的過程,也就是說,理應有一些基本概念作為奠基石,讓你有底氣去完全理解一個龐大的卷積神經網路:

本文思路:


一、我認為學習卷積神經網路必須知道的幾個概念:

1、卷積過程:

  我們經常說卷積神經網路卷積神經網路,到底什麼才是卷積?網路層卷積過程到底怎麼實現?我們在這裡借鑑了另一位部落格大牛的動態圖來給大家演示一下,

  圖作者文章在此:http://blog.csdn.net/silence1214/article/details/11809947

我們可以看到,卷積過程其實還是基於一個固定的矩陣,在另外一個矩陣不斷一格一格掃過去的到的數值的和,(注意:這裡的一格一格非常重要,因為涉及後面的概念:步長→我們不妨想一想當固定矩陣不是一格一格前進的時候,會發生什麼呢?)產生的一個新的矩陣,我們以作為比較會發現:粉紅色矩陣和綠色矩陣在根本上有很大不一樣,

第一,卷積之後的維數降低了;第二,我們要想想為什麼降維了?(思考:降低維度到底有沒有規律?)

  答案是有的:我們發現橙色的固定框為3*3,綠色是5*5,出來是三乘三;

  所以規律可以得到:粉紅色最後的卷積結果矩陣維度=綠色矩陣維數-橙色矩陣維數+1

  (我們又應該思考:如果我不想最後減少維度,我只希望卷積,怎麼辦呢?)

2、兩層之間的池化:

  我們依然延用部落格大牛的另一個動圖(再次點贊做的精細準確!)


我們可以發現其實跟之前沒什麼不一樣:還是以三個矩陣之間的運算,但是我們很容易發現,它並不是一行一行掃過去的,橙色矩陣維度是黃色矩陣的整數倍,所以池化的最終的結論是要把原來的維度減少到1/n.這是池化最根本的原理(當然也有特殊情況。)

(思考點:我們想象一下如果一個19*19的矩陣做池化,會是一種什麼樣的體驗呢?我們不可以縮小整數倍!!答案會在後面的VGG16裡面講清楚,不急不急吐舌頭吐舌頭吐舌頭

3、第三個知識點是步長的概念:

  卷積核(後面講到VGG16會介紹)移動的步長(stride)小於卷積核的邊長(一般為正方行)時,變會出現卷積核與原始輸入矩陣作用範圍在區域上的重疊(overlap),卷積核移動的步長(stride)與卷積核的邊長相一致時,不會出現重疊現象。

  通俗一點其實就是:剛剛說的那個粉紅色矩陣,他每一次移動多少格,格子就是步長!!

4、卷積核:

  一個聽起來很高大上的詞語,我們依然用之前的基礎來解釋:通俗易懂:就是粉紅色矩陣的個數!!因為有時候我們要提取的特徵非常多非常廣泛,所以需要我們用更多的矩陣來掃(多掃幾遍),那麼粉紅色矩陣的個數就是卷積核個數。

5、Padding:

  這個應該是最抽象的概念了:但是也不會特別難呢,就是我們在之前講到第一點:卷積的時候,我拋下了一個問題:

 (我們又應該思考:如果我不想最後減少維度,我只希望卷積,怎麼辦呢?)(現在知道括號的重要性了吧哈哈?罵人罵人罵人

  現在我們來解決這個問題:比如:我們需要做一個300*300的原始矩陣,用一個3*3卷積核(粉紅色矩陣)來掃,掃出來,按照之前公式,結果的矩陣應該是:298*298的矩陣,但是這樣很難計算,減得也不多,反而增加我計算難度,還不如池化(pooling)來得乾脆是吧!那我們就在300*300矩陣外面周圍加一圈“0”,記住,是在外面外包一層“0”

重點是:這樣的300*300就變成了302*302的矩陣,這樣就可以完全避開卷積後那兩層的抵消。

6、還有一個就是通道的概念:這個不算知識點,僅僅是一個常識詞語,比如一張圖片,有RGB三種顏色,對應三個灰度級別,也就是三個通道了:

更加抽象的圖可以參照下面的結構:


二、等待已久的VGG16:

VGG16分為16層,我們主要講前面的前幾層(越詳細越好吧,後面是一樣的)

——首先教會大家一個看其他神經網路也是用的辦法:官方資料表格:


看懂一些式子表達:

Conv3-512   →    第三層卷積後維度變成512;

Conv3_2 s=2     →     第三層卷積層裡面的第二子層,滑動步長等於2(每次移動兩個格子)

好了,我們有了以上的知識可以考試剖析VGG16卷積神經網路了

三、利用之前的基本概念來解釋深層的VGG16卷及網路;

【1、從INPUT到Conv1:】


首先兩個黃色的是卷積層,是VGG16網路結構十六層當中的第一層(Conv1_1)和第二層Conv1_2,他們合稱為Conv1。

我們主要講述第一個,也就是第一層(Conv1_1),它怎麼把一個300*300*3的矩陣變成一個300*300*64的矩陣?


我們假設藍色框是一個RGB影象,橙色是一個3*3*3的卷積核,我們對一個三維的27個數求和,然後掃過去,按照第一部分算的得出來的是一維的298*298的矩陣(因為卷積核也是三維所以結果是一維);

然後回想一下什麼是Padding、前面也講過它的概念了;所以不了一圈的圓,回到了300*300*1;

然後,VGG16這一層安置有64個卷積核,那麼,原來的300*300*1變成300*300*64

於是我們的到了想要的東西;最後的綠色框;

【1、從Conv1到Conv2之間的過度:】


這一步用的Pooling是:2*2*64 s=2;

也就是說,步長是二,滑動的矩陣本身沒有重疊;剛好減半,第三維度64不變;

【3、順利來到Conv2並且結構完全一樣進入Conv3:】

我們知道原來INPUT是300*300*3過了第一層出來時150*150*64

那麼第二層仍然有池化有128個卷積核,聯想推理:

出來的應該是75*75*128;這一步沒有問題,我們繼續往下分析:

【4、進入Conv3的推演:】


可以知道第三層有256個卷積核,包含三層小的卷基層:

【5、從Conv3到Conv4之間的過度:】


池化沒有問題,但是這裡75不是一個偶數怎麼弄,還記得我們第一部分前面的括號嗎?

就是這樣,我們在75這裡相加了一個一,使之成為76,變成一個偶數,還有一種方法是通過步長的設定這裡先不展開來講了;

【6、後續的步驟】

  後面的方法很簡單,根據我給的那個VGG16的表格查詢每一層裡面有什麼卷積核?多少個?池化的大小?步長多少?是否需要Padding?解決這些問題,你的VGG16就已經完全可以從頭到尾說清楚了!!!

【7、Faster Rcnn的例子】

http://blog.csdn.net/errors_in_life/article/details/70916583

____________後續我將介紹一些基於VGG16深度學習的影象分類知識,一個愛分享自己錯誤和經驗的師兄吐舌頭吐舌頭吐舌頭,多多指教!

相關推薦

深度學習影象分類入門VGG16神經網路開始

剛開始接觸深度學習、卷積神經網路的時候非常懵逼,不知道從何入手,我覺得應該有一個進階的過程,也就是說,理應有一些基本概念作為奠基石,讓你有底氣去完全理解一個龐大的卷積神經網路: 本文思路: 一、我認為學習卷積神經網路必須知道的幾個概念: 1、卷積過程:   我們經常說卷積

乾貨丨深度學習影象分類入門VGG16神經網路開始

剛開始接觸深度學習、卷積神經網路的時候非常懵逼,不知道從何入手,我覺得應該有一個進階的過程,也就

深度學習影象識別入門VGG16神經網路開始

剛開始接觸深度學習、卷積神經網路的時候非常懵逼,不知道從何入手,我覺得應該有一個進階的過程,也就是說,理應有一些基本概念作為奠基石,讓你有底氣去完全理解一個龐大的卷積神經網路: 本文思路: 一、我認為學習卷積神經網路必須知道的幾個概念: 1、卷積過程: 我們經常說卷積神經網路卷積神經網路,到

深度學習(十五)基於級聯神經網路的人臉特徵點定位

基於級聯卷積神經網路的人臉特徵點定位作者:hjimce一、相關理論本篇博文主要講解2013年CVPR的一篇利用深度學習做人臉特徵點定位的經典paper:《Deep Convolutional Netwo

深度學習與計算機視覺系列(10)_細說神經網路

1. 前言 前面九講對神經網路的結構,元件,訓練方法,原理等做了介紹。現在我們回到本系列的核心:計算機視覺,神經網路中的一種特殊版本在計算機視覺中使用最為廣泛,這就是大家都知道的卷積神經網路。卷積神經網路和普通的神經網路一樣,由『神經元』按層級結構組成

卷積神經網路入門一種全卷積神經網路(LeNet),從左至右依次為卷積→子取樣→卷積→子取樣→全連線→全連線→高斯連線測試 最後為了檢驗 CNN 能否工作我們準備不同的另一組圖片與標記集(不能在訓練

轉載來自:http://blog.csdn.net/maweifei/article/details/52443995 第一層——數學部分 CNN 的第一層通常是卷積層(Convolutional Layer)。輸入內容為一個 32 x 32 x 3 的畫素值陣列。現在

TensorFlow+實戰Google深度學習框架學習筆記(12)------Mnist識別和神經網路LeNet

一、卷積神經網路的簡述 卷積神經網路將一個影象變窄變長。原本【長和寬較大,高較小】變成【長和寬較小,高增加】 卷積過程需要用到卷積核【二維的滑動視窗】【過濾器】,每個卷積核由n*m(長*寬)個小格組成,每個小格都有自己的權重值, 長寬變窄:過濾器的長寬決定的 高度變高:過濾器的個數決定的 &nb

TensorFlow+實戰Google深度學習框架學習筆記(13)------Mnist識別和神經網路AlexNet

一、AlexNet:共8層:5個卷積層(卷積+池化)、3個全連線層,輸出到softmax層,產生分類。  論文中lrn層推薦的引數:depth_radius = 4,bias = 1.0 , alpha = 0.001 / 9.0 , beta = 0.75 lrn現在僅在AlexNet中使用,

Deep Learning.ai學習筆記_第四門課_神經網路

目錄 第一週 卷積神經網路基礎 第二週 深度卷積網路:例項探究 第三週 目標檢測 第四周 特殊應用:人臉識別和神經風格轉換   第一週 卷積神經網路基礎 垂直邊緣檢測器,通過卷積計算,可以把多維矩陣進行降維。如下圖:   卷積運算提供了一個方便的方法來發

學習筆記1】吳恩達_神經網路_第一週神經網路(1)

一、卷積神經網路 1.邊緣檢測 不同的語言中表示卷積的函式不同,在Python中為在tensorflow裡為 濾波器:垂直、水平邊緣檢測。 Sobel filter:其優點在於增加了中間一行元素的權重,即影象中間的畫素點提高,會使結果的魯棒(robust)性提高。

深度安卓惡意軟體檢測系統:用神經網路保護你的手機

惡意軟體可以說是我們現代生活的一大威脅,為了保護我們電子裝置中的財產和資料安全,我們往往需要尋求安全軟體的幫助。前段時間,來自貝爾法斯特女王大學和亞利桑那州立大學的研究者提出並開源了一種使用神經網路來幫助檢測安卓(Android)惡意軟體的方法。機器之心在本文中對該專案的介紹文件和論文摘要進行了介紹。

不用框架python實現神經網路

最近學習了卷積神經網路,推薦一些比較好的學習資源 對於網址,我大部分學習的資源和數學公式都是來源於此,強烈推薦學習。 對於網址2,我下面的程式碼就是在其基礎上改寫的,作者是用matlab實現的,這對於不會matlab的同學而言,會比較費時,畢竟, 我們要做的是搞懂卷積神

傳統方法到深度學習影象分類

1. 問題 Kaggle上有一個影象分類比賽Digit Recognizer,資料集是大名鼎鼎的MNIST——圖片是已分割 (image segmented)過的28*28的灰度圖,手寫數字部分對應的是0~255的灰度值,背景部分為0。 from keras.datasets import mnist (x

深度學習影象分類定位檢測語義分割例項分割方法

計算機視覺領域四大基本任務中的應用,包括分類(圖a)、定位、檢測(圖b)、語義分割(圖c)、和例項分割(圖d)。 一、影象分類(image classification) 給定一張輸入影象,影象分類任務旨在判斷該影象所屬類別。 (1) 影象分類常用資料集 以下

深度學習影象分類模型AlexNet解讀

版權宣告:本文為博主原創文章 https://blog.csdn.net/sunbaigui/article/details/39938097 在imagenet上的影象分類challenge上Alex提出的alexnet網路結構模型贏得了2012屆的冠軍。要研究CNN型別

深度學習影象分類中的發展

深度學習是一門比較年輕的研究方向,從機器視覺到語音識別,以及自然語言識別等領域都有它的身影。說實話,喵哥此前只是知道有這個學科,但是並不清楚它到底是什麼,怎麼使用它。其實現在也是一無所知,但是我越發覺得深度學習是我們今後特別需要的專業,今天寫下這篇綜述性的文章,希望可以對以後

PaddlePaddle | 深度學習 101- 影象分類

本人僅以 PaddlePaddle 深度學習 101 官網教程為指導,添加個人理解和筆記,僅作為學習練習使用,若有錯誤,還望批評指教。–ZJ 環境: - Python 2.7 - Ubuntu 16.04 影象分類 本教程原始碼目錄在bo

深度學習影象分類模型AlexNet結構分析和tensorflow實現

在ImageNet上的影象分類challenge上,Hinton和他的學生Alex Krizhevsky提出的AlexNet網路結構模型贏得了2012屆的冠軍,重新整理了Image Classification的機率。因此,要研究CNN型別深度學習模型在影象分

[caffe]深度學習影象分類模型VGG解讀

一、簡介 vgg和googlenet是2014年imagenet競賽的雙雄,這兩類模型結構有一個共同特點是go deeper。跟googlenet不同的是,vgg繼承了lenet以及alexnet的一些框架,尤其是跟alexnet框架非常像,vgg也是5個group的卷積、

[深度學習]神經網路池化常見分類網路

卷積 全連線層:將卷積層所有的畫素展開,例如得到一個3072維的向量,然後在向量上進行操作。 卷積層:可以保全空間結構,不是展開成一個長的向量。 卷積操作:將卷積核從影象(或者上一層的feature map)的左上方的邊角處開始,遍歷卷積核覆蓋的所有畫素點。在每一個位置