卷積神經網絡VGG16詳解

2020-12-04 funkingka的圖像識別

VGG網絡圖如下,本文要深入講解的是很常用的VGG16網絡。在看懂VGG16網絡之前,先補一下卷積神經網絡的知識,然後用代碼實例來更好說明VGG16網絡

VGG網絡

圖片數據如何輸入?

彩色圖像有RGB三個顏色通道,分別是紅、綠、藍三個通道,這三個通道的像素可以用二維數組來表示,其中像素值由0到255的數字來表示。比如一張160x60的彩色圖片,可以用160*60*3的數組表示。

什麼是卷積?

卷積過程是使用一個卷積核(如圖中的Filter),在每層像素矩陣上不斷按步長掃描下去,每次掃到的數值會和卷積核中對應位置的數進行相乘,然後相加求和,得到的值將會生成一個新的矩陣。卷積核相當於卷積操作中的一個過濾器,用於提取我們圖像的特徵,特徵提取完後會得到一個特徵圖。卷積核的大小一般選擇3x3和5x5,比較常用的是3x3,訓練效果會更好。卷積核裡面的每個值就是我們需要訓練模型過程中的神經元參數(權重),開始會有隨機的初始值,當訓練網絡時,網絡會通過後向傳播不斷更新這些參數值,知道尋找到最佳的參數值。對於如何判斷參數值的最佳,則是通過loss損失函數來評估。

卷積過程

什麼是padding?

在進行卷積操作的過程中,處於中間位置的數值容易被進行多次的提取,但是邊界數值的特徵提取次數相對較少,為了能更好的把邊界數值也利用上,所以給原始數據矩陣的四周都補上一層0,這就是padding操作。在進行卷積操作之後維度會變少,得到的矩陣比原矩陣要小,不方便計算,原矩陣加上一層0的padding操作可以很好的解決該問題,卷積出來的矩陣和原矩陣尺寸一致。什麼是池化pooling?

池化操作相當於降維操作,有最大池化和平均池化,其中最大池化(max pooling)最為常用。經過卷積操作後我們提取到的特徵信息,相鄰區域會有相似特徵信息,這是可以相互替代的,如果全部保留這些特徵信息會存在信息冗餘,增加計算難度。通過池化層會不斷地減小數據的空間大小,參數的數量和計算量會有相應的下降,這在一定程度上控制了過擬合。

最大池化max pooling

什麼是Fletten?

Flatten將池化後的數據拉開,變成一維向量來表示,方便輸入到全連接網絡。什麼是全連接層?

對n-1層和n層而言,n-1層的任意一個節點,都和第n層所有節點有連接。即第n層的每個節點在進行計算的時候,激活函數的輸入是n-1層所有節點的加權。

什麼是Dropout?

在訓練過程中,按照一定的比例將網絡中的神經元進行丟棄,可以防止模型訓練過擬合的情況。VGG16網絡

VGG16網絡

224x224x3的彩色圖表示3通道的長和寬都為224的圖像數據,也是網絡的輸入層白色部分為卷積層,紅色部分為池化層(使用最大池化),藍色部分為全連接層,其中卷積層和全連接層的激活函數都使用relu總的來說,VGG16網絡為13層卷積層+3層全連接層而組成VGG16網絡代碼實例講解

使用keras框架搭建的VGG16網絡開始輸入(60,160,1)的圖像數據,即寬為60,高度為160的單通道灰度圖像,使用灰度圖是為了加快模型的訓練Conv2D(64, (3,3), name='conv1',padding='same', kernel_initializer='he_uniform')

Conv2D卷積層的padding為"same",即給圖像矩陣四周都加上0。卷積核使用"he_uniform",大小為3x3,卷積核個數為64,一個卷積核掃完圖像矩陣數據後,生成一個新的矩陣,有64個卷積核就會生成64 層新的矩陣。BatchNormalization()(conv1)

使用BN層,加快模型的訓練和防止模型訓練過擬合Activation('relu')(bn1)

卷積後使用relu激活函數MaxPooling2D(pool_size=(2, 2), padding='same', name='pool3')(act7)

使用最大池化,池化的小矩陣是2x2,默認了也是2x2的步長。經過池化後,矩陣的長寬都降低一半,由64*160*60的數據變成64*80*30其他同理,只是卷積核大小和卷積層個數做了修改。x = Flatten()(pool3)

做了13層卷積和相應的池化操作後,使用Flatten(),將數據拉平,變成一維向量x1 = Dense(4096)(x)bnx1 = BatchNormalization()(x1)actx1 = Activation('relu')(bnx1)drop9 = Dropout(0.4)(actx1)

最後做3層全連接層,前兩個全連接層的神經元個數為4096,4096隻是VGG16論文裡提供的參考值,具體可以自己做測試修改。x = [Dense(10, activation='softmax', name='func%d'%(i+1))(x) for i in range(4)]

VGG16網絡裡最後的全連接層是1000個神經元,如果你想用VGG16 給自己的數據作分類任務,這裡就需要改成你預測的類別數。這個VGG16網絡我是用於做4位數字驗證碼的識別,所以最後的全連接層我修改為創建4個全連接層,區分10類,分別識別4個字符。至此VGG16的講解就結束了,如果想更加了解圖像矩陣大小的變化,可以列印模型的結構圖,或者自行列印圖像的緯度。

相關焦點

  • 圖像識別技術——卷積神經網絡CNN詳解
    前言卷積神經網絡不同於神經網絡,在圖片處理這方面有更好的表現。本文主要對神經網絡和卷積神經網絡做了簡要的對比,著重介紹了卷積神經網絡的層次基礎,同時也簡要介紹了卷積神經網絡參數更新方式和其優缺點,並結合具體實例對卷積神經網絡的工作方式做了介紹。
  • 卷積神經網絡理解(一):濾波器的意義
    卷積神經網絡的發展二. 卷積神經網絡的重要性三. 卷積神經網絡與圖像識別四. 濾波器一.卷積神經網絡的發展卷積神經網絡受到視覺細胞研究的啟發,1962年,Hubel和Wiesel發現初級視覺皮層中的神經元會響應視覺環境中特定的簡單特徵(比如有向的邊等)。
  • 卷積神經網絡(CNN)新手指南
    然而最經典的,或者說最流行的神經網絡使用範例是將其用於圖像處理領域。提到圖像處理,本文主要介紹的是如何使用卷積神經網絡來進行圖像分類。以類似的方式計算機能夠進行圖像分類任務,通過尋找低層次的特徵如邊緣和曲線,然後運用一系列的卷積層建立一個更抽象的概念。這是卷積神經網絡應用的一個總體概述,接下來我們來探討下細節。生物聯繫首先要稍微普及下一點背景知識,當你第一次聽到卷積神經網絡這個詞時,你也許會想這是是不與神經科學或者生物學有關?恭喜你,猜對了一部分。卷
  • 卷積神經網絡的卷積到底是什麼
    打開APP 卷積神經網絡的卷積到底是什麼 人工智慧遇見磐創 發表於 2020-05-05 08:40:00 卷積神經網絡是一種特殊的神經網絡結構,是自動駕駛汽車、人臉識別系統等計算機視覺應用的基礎,其中基本的矩陣乘法運算被卷積運算取代。
  • 卷積神經網絡小白入門手冊
    學習深度學習,最常接觸到的就是各式各樣的神經網絡了,其中卷積神經網絡是諸多神經網絡中最典型最常用的神經網絡了。本文原始素材來源於freecodecamp博客,經本人翻譯首發於此。希望能幫助到大家!覺得不錯就點個讚,或者關注下我吧,後續我還會分享更多相關的精彩內容。
  • 深度學習入門:淺析卷積神經網絡
    至今已有數種深度學習方法,如卷積神經網絡(CNN)、自編碼神經網絡(包括Auto encoder和Sparse Coding)和深度置信網絡(DBN),並在各個領域中取得了極好的效果。卷積層和全連接層中的參數會通過梯度下降被訓練,這樣卷積神經網絡計算出的分類評分就能和訓練集中的每個圖像的標籤逐漸相符了。1. 卷積層與卷積計算卷積層是構建卷積神經網絡的核心層,它佔據了網絡中大部分的計算。在處理圖像這樣的高維度輸入時,讓每個神經元都與前一層中的所有神經元進行全連接是不現實的。
  • 深度學習的卷積神經網絡、循環神經網絡,更看好哪個?
    深度學習、卷積神經網絡、循環神經網絡席捲每個角落,甚至學術性最強的國際會議都有幾萬人參見,將高大上、專業、枯燥的頂級專業會議變成了明星粉絲見面會。當然市場也一片紅火,過去的一年幾個網際網路、人工智慧公司上市,吹皺一池春水,和網際網路、人工智慧相關的公司,不管規模效益如何,都喊出近期上市的口號。學術和市場雙火熱,帶動了更多的年輕人投身其中。
  • 人工智慧TensorFlow(十三)讀懂CNN卷積神經網絡
    ,一般分為輸入層,隱藏層,輸出層    TensorFlow神經網絡  那什麼是卷積神經網絡呢,這就要我們追溯一下人類識別圖像的原理  CNN卷積神經網絡就是來源於此識別過程來實現。  卷積神經網絡  卷積神經網絡依舊是層級網絡,只是層的功能和形式做了變化,可以說是傳統神經網絡的一個改進。比如下圖中就多了許多傳統神經網絡沒有的層次。
  • 用PaddlePaddle 和 Tensorflow 實現經典 CNN 網絡 GoogLeNet
    (本系列所有代碼均在 github:https://github.com/huxiaoman7/PaddlePaddle_code)關於深度網絡的一些思考  在本系列最開始的幾篇文章我們講到了卷積神經網絡,設計的網絡結構也非常簡單,屬於淺層神經網絡,如三層的卷積神經網絡等,但是在層數比較少的時候,有時候效果往往並沒有那麼好,在實驗過程中發現,當我們嘗試增加網絡的層數
  • 什麼是一次性學習 暹羅神經網絡與其他卷積神經網絡的區別
    經典卷積神經網絡深度學習中最重要的架構之一是卷積神經網絡(CNN),這是一種特殊的神經網絡,特別擅長處理可視數據。CNN的經典用法是建立多個卷積層(在卷積層之間以及之後的一些其他重要組件),指定輸出目標,並在許多帶標籤的示例中訓練神經網絡。
  • 讓你的電腦擁有「視力」,用卷積神經網絡就可以!
    卷積神經網絡極大地提升了圖像識別模型的精度,在生活中也有很多的應用。在這篇文章中,我將描述它的工作原理、一些實際應用,以及如何用Python和Keras是實現一個卷積神經網絡。通過這個過程,一個神經網絡可以學習並提高預測的準確度。我不會講述反向傳播過程和損失函數,但是有許多很棒的資源介紹了它們,例如這一篇。卷積神經網絡(Convolutional Neural Networks)是神經網絡的一種特別的類型。它們在圖像數據集上表現的很好。
  • 解析卷積神經網絡的應用
    解析卷積神經網絡的應用 貿澤電子 發表於 2019-08-21 15:29:46 目前,人們對性能強大且結構複雜的計算機已是司空見慣。
  • 揭秘卷積神經網絡熱力圖:類激活映射
    本文將介紹在卷積神經網絡(CNN)中,針對圖像的某些部位可視化從而做出判斷的不同技術。類激活映射(CAM)是一種生成熱力圖的技術,用於突出圖像的類的特定區域。視覺化神經網絡正在查看的位置大有用處,因為它幫助我們理解神經網絡是否在查看圖像的適當部位,或者神經網絡是否在進行誤導。下列是一些神經網絡在做分類決判斷時可能進行誤導和錯誤查看位置的例子:· 卷積神經網絡將一張圖片分類為「火車」,而實際上它是在尋找「火車軌道」(這意味著它會錯誤地將一張火車軌道圖片單獨分類為「火車」)。
  • 一文讀懂卷積神經網絡工作原理
    卷積神經網絡(Convolutional Neural Network, CNN)是人工神經網絡的一種,是當下語音分析和圖像識別領域的研究熱點。這篇文章用最簡明的語言和最直觀的圖像,帶你入門CNN。準備好了嗎?
  • 通俗易懂:圖卷積神經網絡入門詳解
    GCN,圖卷積神經網絡,實際上跟CNN的作用一樣,就是一個特徵提取器,只不過它的對象是圖數據。作者給出了一個由簡入繁的過程來解釋:我們的每一層GCN的輸入都是鄰接矩陣A和node的特徵H,那麼我們直接做一個內積,再乘一個參數矩陣W,然後激活一下,就相當於一個簡單的神經網絡層嘛,是不是也可以呢?實驗證明,即使就這麼簡單的神經網絡層,就已經很強大了。這個簡單模型應該大家都能理解吧,這就是正常的神經網絡操作。
  • 9大主題卷積神經網絡(CNN)的PyTorch實現
    上文聚焦於源碼和論文,對於各種卷積神經網絡模型的實現,本文將介紹它們的 PyTorch 實現,非常有用!這份資源已經開源在了 GitHub 上,連結如下:https://github.com/shanglianlm0525/PyTorch-Networks先來個總結介紹,該系列的卷積神經網絡實現包含了 9 大主題,目錄如下:1. 典型網絡2. 輕量級網絡3. 目標檢測網絡4.
  • 計算機視覺(及卷積神經網絡)簡史
    在這篇文章中,我將會嘗試介紹現代計算機視覺系統是如何通過卷積神經網絡驅動的。我將會從一個二十世紀五十年代出現的,和軟體工程毫不相關的作品開始。計算機視覺中最有影響力的論文之一由兩位神經生理學家David Hubel和Torsten Wiesel於1959年發表。他們的出版物題為「貓的紋狀皮層中單個神經元的感受野」,描述了視覺皮層神經元的核心反應特性。
  • 基於3D數據卷積神經網絡的物體識別
    打開APP 基於3D數據卷積神經網絡的物體識別 退思 發表於 2020-01-16 16:36:00 FusionNet的核心是全新的、應用於3D物體的三維卷積神經網絡(Convolutional Neural Networks, CNN)。我們必須在多個方面調整傳統的CNN以使其有效。為了解釋得清楚些,我們不妨先看一下用於圖像分類的二維CNN。這個思路是,機器學習研究者會構建數個隱層形成的模型,每一層與前一層都以不同的形式連接。