教你從讀懂詞語開始了解計算機視覺識別最火模型 | CNN入門手冊(中)

2020-12-15 大數據文摘

大數據文摘作品,轉載要求見文末

編譯 | 馬卓群,元元

keiko,錢天培

在上周,我們為大家帶來了一篇卷積神經網絡的入門介紹:《卷積?神經?網絡?教你從讀懂詞語開始了解計算機視覺識別最火模型 | CNN入門手冊(上)》(戳標題直接閱讀),相信大家已經對卷積神經網絡有了初步的了解。這周,我們將更深入地介紹卷積神經網絡(以下簡稱「ConvNets」),解釋上周我們提到卻又沒有細講的一些概念 。

聲明:我在這部分介紹的一些主題非常複雜,完全可以單獨列出來寫成一篇文章。為了在保證內容全面性的同時,保持文章的簡潔明了,我會提供原研究論文的連結供大家參考,這些論文對我討論的主題有更詳細的解釋。 

首先,讓我們回過頭來看看我們的之前介紹的卷積層。還記得過濾器,感受域,卷積嗎?如果不記得的話,請回顧本系列的上集《卷積?神經?網絡?教你從讀懂詞語開始了解計算機視覺識別最火模型 | CNN入門手冊(上)》(戳標題直接閱讀)。

現在,我們可以通過改變2個主要參數來修改每個層的表現行為。在選擇過濾器的尺寸後,還要選擇步長和填充。

步長控制著過濾器如何對輸入量進行卷積。在第一部分的例子中,過濾器是通過一次移動一個單位來對輸入量進行卷積的,而這個器移動單位就是步長。(在這種情況下,步長即為1。)我們通常選擇的步長會確保輸出量是整數,而非分數。讓我們看一個例子,想像我們有一個7×7的輸入量,一個3×3的過濾器(為了更加簡明,這裡我們忽略第三維度),步長為1。這是情況相信大家已經很熟悉了。

老一套,對吧?看看你是否能猜出,隨著步長增加到2,輸出量將會發生什麼變化。

圖為步長為2時卷積的輸出情況

所以,正如你所看到的,感受域現在一次移動了2個單位,輸出量也縮小了。請注意,如果我們試圖將步長設為3,當我們進行到最後一行/列,我們就會遇到感受域無法與輸入量完全重疊、有空白餘留的問題。通常,如果希望在感受域有更少地重疊、保持較小的空間維度,程式設計師們就會增加步長。

現在,讓我們看看填充。在開始之前,讓我們先想一個場景。當你把三個5×5×3個過濾器應用到一個32×32×3輸入量時會發生什麼?輸出量將會是28×28×3。請注意,空間維度會減少。當我們繼續應用卷積層的時候,量的大小將減少得比我們想像的更快。在學習網絡的早期層中,我們希望最大化地保存原始輸入卷的信息,以便我們提取那些低層次的特徵。比如說我們要運用同樣的卷積層,但同時我們想要讓輸出量保持在32 x 32 x 3。要做到這一點,我們可以對該層加一個大小為2的零填充。零填充就是對輸入量在邊界上用零進行填充。如果我們考慮2個零填充,那麼我們就有了一個36×36×3的輸入量。

如果你的步長為1,並且把零填充的大小設置為

其中,K是過濾器大小,那麼輸入量和輸出量將始終保持相同的空間維度。

對於任何一個定卷積層,輸出尺寸的計算公式如下:

其中,O是輸出量的高度/長度,W是輸入量的高度/長度,K是過濾器的大小,P是填充大小,S是步長。

選擇超級變量

那麼,我們要怎麼知道應該用多少神經網絡層、其中有多少卷積層、過濾器的尺寸是什麼,以及步長和填充的值是多少呢?這些都不是無關緊要的問題,但也沒有一套公認的標準。這是因為網絡的選取將在很大程度上依賴於您所擁有的數據類型。數據會因為圖像的大小、複雜度、圖像處理任務的類型不同而變化。當你分析數據的時候,一個選擇超參數的方式就是,尋找能創造出圖像抽象的合適尺寸組合。

修正先行單元層(ReLU)

根據傳統慣例,在每個卷積層後,我們會緊跟著應用一個非線性層(或激化層)。沒有這個非線性轉化,整個系統基本上就是在卷積層中進行線性操作(只是元素頻繁的的乘法和加法)。在過去,我們通常使用的是非線性函數,比如tanh 函數和sigmoid函數,但研究人員發現ReLU層在不犧牲精確度的前提下加快網絡的訓練速度,從而帶來更好的運作效果。同時,它也有助於緩解梯度消失問題。這個問題指的是,在經過每一層後,梯度會指數性地遞減,因而低層的網絡訓練會變得非常慢。(對這個問題的詳細解釋已超出了這篇文章範圍,如果想看進一步的解釋,請參照https://en.wikipedia.org/wiki/Vanishing_gradient_problem 和 https://www.quora.com/What-is-the-vanishing-gradient-problem )

ReLU層將函數f(x)= max(0,x)應用於所有的輸入值。基本上,這一層就是把所有的負激活變為0。這一層提高了模型中的非線性特性和整個網絡,並且不影響感受野的卷積層。

這篇由偉大的Geoffrey Hinton而著(又名深度學習之父)的文章更詳細的闡釋了ReLu的優點(http://www.cs.toronto.edu/~fritz/absps/reluICML.pdf)。

池化層

在應用了一些ReLU層之後,程式設計師可以選擇應用池化層。它也被稱為向下採樣層(downsampling layer)。在不同池化層中,最大值池化(maxpooling)是最受歡迎的。先用一個過濾器(通常大小2x2)和一個相同長度的步長。將其應用於輸入量,然後在每一個分區輸出最大數字 。

另外幾種池化層的類型包括平均池和L2規範池。池化層背後的直觀原理是,一旦我們知道原始輸入量中(這裡將會有一個高激活值)有一個特定的特徵,那麼它的確切位置,就沒有它相對於其他特徵的位置那麼重要了。所以,你可以想像,這一層是如何極大地減少了網絡的空間維度的(長度和寬度的變化,深度不變)。這可以幫助實現兩個目的。首先,參數(或者權重)的數量減少了75%,從而降低了計算成本。其次,我們也可以藉此控制過度擬合。 

過度擬合這個術語指的是,一個模型過於貼近訓練示例,而導致不能很好地擬合驗證集和測試集。過度擬合的一個典型症狀就是,訓練好的一個模型在訓練集上可以達到100% 或 99% 擬合,而在測試集上卻只能達到50%

丟棄層

現在來看看丟棄層。丟棄層對於神經網絡而言有特殊作用 。在上一個部分,我們討論了過度擬合的問題,即訓練之後神經網絡的權重參數過於貼近訓練示例,以至於在新示例上的表現欠佳。丟棄層的想法本質上是很簡單的。在這一層隨機把幾個激發點設置為零,從而「丟棄」他們,如此而已。這樣一個看起來不必要而反常的簡單過程有什麼好處呢?一方面,這個過程促使神經網絡變得「冗餘」。這裡冗餘的意思是指,即使神經網絡失去了一些激發點,還是能夠提供正確的分類結論或者輸出特定的示例。另一方面也確保神經網絡沒有過度擬合訓練集,從而減輕過度擬合的問題。這裡重點強調一下,丟棄層只是在訓練過程中出現,而並不在測試過程中出現。

更多信息請參見Geoffrey Hinton 所著相關文獻。(https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf)

網中網層

網中網層是指一個採用1x1過濾器的卷積層。乍一看你可能會有疑問,感受域的範圍通常要大過輸出值的特徵圖,那麼網中網究竟有什麼作用呢?回想一下,這些1x1的卷積是有一定深度的,我們可以把它設想為1x1xN的卷積,其中N是在這層上過濾器的個數。實際上,網中網層是做了一個N維元素的對應相乘,其中N是層中輸入的深度。 

Min Lin 所著相關文獻對網中網層進行了更詳細地闡述。(https://arxiv.org/pdf/1312.4400v3.pdf)

分類、定位、檢測、細分

在CNN入門手冊(上)(加入連結)中,我們討論過給圖片物體分類這一任務。在這個過程中,我們先輸入一張圖片,然後從一串類別中輸出圖片物體對應類別的序號。但是,對於物體定位這樣的任務而言,我們的目的不僅是得到分類序號,還要在圖片中用邊框指出物體的位置

除此之外,我們還可能碰到物體檢測的任務,這需要對圖片上的所有物體進行物體定位。因此,我們會得到多個邊框以及多個分類標籤。 

最後,我們還有細分物體的任務,其目的是輸出分類標籤和圖片中所有物體的細節輪廓。

在CNN入門手冊(下)中,我們會講更多完整這些任務的細節,如果你已經急不可耐了,可以參閱下面的參考資料。

檢測/定位: https://arxiv.org/pdf/1311.2524v5.pdf細分: http://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf

是的,還有更多的參考材料沒有被列舉出來。

遷移學習

目前,深度學習圈子裡有一個常見的誤區,即如果沒有谷歌式的海量數據,你就不可能做出一個有效的深度學習模型。雖然數據是創建神經網絡的重要部分,但是遷移學習的思路可以減少數據的需求量。遷移學習的做法是採用一個預訓練好的模型(別人用大量數據訓練得到的神經網絡的權重和參數),再用自己的數據微調模型。這個思路利用了預訓練的模型進行特徵提取。你需要把原來神經網絡的最後一層去掉,換成你自己的分類標籤(取決於你的問題空間),接著保持其他層的權重不變,正常地訓練神經網絡模型(保持其他層不變意思是在梯度下降/最優化的過程中不改變其他層的權重)

我們來討論一下為什麼這個方法可行。比如說我們用ImageNet( ImageNet是一個包括了超過1000類1400萬張圖片的數據集)訓練得到預訓練的模型。考慮一下神經網絡模型的低層,我們知道低層部分會檢測到諸如邊緣和曲線這樣的特徵。現在,除非你的問題空間和數據集很獨特,你的神經網絡模型也會需要檢測曲線和邊緣特徵。與其從隨機權重初始值開始訓練整個神經網絡,我們可以採用預訓練模型的權重(並保持這部分權重不變),然後重點對重要層(更高的層)進行訓練。如果你的訓練集數據與ImageNet差異很大,你可以只固定低層部分中的幾層,用自己的數據訓練更多層。

Yoshua Bengio 所著的參考文獻(另一個深度學習的大師):https://arxiv.org/pdf/1411.1792v1.pdf

Ali Sharif Razavian 所著的參考文獻:https://arxiv.org/pdf/1403.6382.pdf

Jeff Donahue 所著的參考文獻:https://arxiv.org/pdf/1310.1531.pdf

數據增強技術

到目前為止,我們對卷積神經網絡中數據的重要性大概還是模糊不清的。事實上,海量的數據對卷積神經網絡的訓練是十分重要的。(當然了,遷移學習可以在一定程度上弱化我們對數據量的要求。)那麼最後,就讓我們來討論如何通過幾個簡單的變換增加已有的數據量吧。正如我們之前提到過的,當一個計算機處理一個圖片輸入時,它會讀入一個像素值數組。如果整個圖片都向左移動了一個單位,對於你我來說,這個變化是感覺不到的。然後,對於一個計算機而言,在分類和圖片標籤不變而像素數組改變的情況下,這個移動可能會造成很大的影響。在改變訓練數據表示的同時固定分類標籤的這種方法,被稱為數據增強技術,這是一種人為擴展數據集的方法。一些常用的數據增強方法有調成灰度(grayscales),水平翻轉(horizontal flips),豎直翻轉(vertical flips,),隨機裁剪(random crops), 顏色抖動(color jitters),平移(translations), 旋轉(rotation)等等。如果對訓練集的數據進行以上這幾種變換,你可以很容易地得到原數據兩至三倍的數據量來訓練模型。

到這裡,我們對卷積神經網絡的

基礎介紹就結束了。

下周我們將帶來該系列的最後一篇,

介紹卷積神經網絡

研究領域最重要的9篇論文

請大家敬請期待!

下周一見!

原文連結:

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks-Part-2/

  

 

相關焦點

  • 教你從讀懂詞語開始了解計算機視覺識別最火模型
    這個名字涉及了生物學、數學,還有一點計算機科學亂入,但它卻是計算機視覺領域最具影響的創新。在2012年,由於Alex Krizhevsky使用神經網絡贏得了ImageNet挑戰賽的冠軍(這個比賽可被看作計算機視覺領域的奧運會),神經網絡第一次嶄露頭角。神經網絡把分類誤差從26%降低到15%,這在當時是一個令人震驚的進步。 從那以後,大量公司在他們的核心業務中使用深度學習。
  • 一文帶你讀懂計算機視覺
    這些是自2000年以來在opencv中出現的舊的計算機視覺方法。然後,這些嵌入可以與任何機器學習模型(甚至簡單的諸如knn)一起使用來識別人。關於facenet和face embeddings非常有趣的事情就是使用它你可以識別只有幾張照片或者只有一張照片的人。
  • 基於人臉識別的計算機模型揭示了大腦是如何迅速產生豐富視覺圖像
    然而,對於我們的大腦是如何能夠快速將這些生動的圖像形成並展現出來的,這仍然是視覺研究中的一個未解之謎。腦科學家們試圖用計算機視覺模型來重現這一現象,但迄今為止,頂尖的模型也只能完成一些簡單的任務,比如在相對混亂的背景下挑選出某一個物體或某一張臉。
  • 計算機視覺:從入門到精通,極限剖析圖像識別學習算法
    本次課程將圍繞著計算機視覺中最常見的RCNN圖像識別算法進行極限剖析,從數學理論, 模型框架到實踐實操,讓你在短時間內從理論到實踐,掌握深度學習的基本知識和學習方法。· 目的:掌握神經網絡的基本原理,知其然亦知其所以然(從數學實踐到代碼的熟練和精通); · 手段:科學的方法。
  • 計算機視覺中的注意力機制
    近些年來,隨著 AlphaGo 的興起,除了在遊戲AI領域,深度學習在計算機視覺領域,機器翻譯和自然語言處理領域也有著巨大的用武之地。在 2014 年,隨著深度學習的進一步發展,seq2seq 的訓練模式和翻譯模式已經開始進入人們的視野。除此之外,在端到端的訓練方法中,除了需要海量的業務數據之外,在網絡結構中加入一些重要的模塊也是非常必要的。
  • 計算機視覺新手指南
    使用計算機視覺等效其準確性幾乎與人眼相同的情況下,可以在眨眼間就進行數百萬次計算。這不僅涉及到將圖片轉換為像素,還包括嘗試通過這些像素去了解圖片中的內容,接下來你將首先來了解如何從這些像素中提取信息並理解其代表的內容。那麼,讓我們了解一下機器如何去看(像人眼一樣)? A. 用數字表示顏色:在計算機科學中,每種顏色都由指定的十六進位值來表示。
  • 入門計算機視覺OpenCV
    同濟子豪兄6節課帶你掌握OpenCV下拉文末,加入課程交流群 計算機視覺顧名思義就是讓計算機或者其他電子設備具有類似人類的視覺系統,可以通過採集的圖片或視頻進行處理,從而獲得場景或事物的三維信息,並進行識別判斷。
  • 計算機視覺基於圖像的三維重建入門介紹
    入門書籍有《視覺SLAM十四講從理論到實踐》《計算機視覺-算法與應用》《計算機視覺中的多視幾何》入門視頻教程有浙江大學譚平教授的計算機視覺課程https://www.bilibili.com/video/BV124411W775高翔博士的視覺SLAM十四講從理論到實踐https
  • 最適合初學者的18個經典開源計算機視覺項目
    (ResNet)人臉識別的開源計算機視覺代碼人臉識別是計算機視覺最廣泛的應用。如果你還不知道如何應用風格轉換模型,這兒是一個tensorflow的教程可以幫助你, 而且, 如果你像更加升入了解這個技術我建議你閱讀接下來的論文。
  • 計算機視覺入門大全:基礎概念、運行原理、應用案例詳解
    計算機視覺解決什麼問題區分計算機視覺與其相關領域行業應用零售業製造業醫療行業自動駕駛保險業農業安防典型的計算機視覺任務圖像分類定位目標檢測目標識別實例分割目標追蹤計算機視覺運行原理通用策略現有數據集訓練目標檢測模型商業用例視覺搜尋引擎Facebook 人臉識別Amazon Go特斯拉自動駕駛微軟 InnerEye計算機視覺在小公司的應用現狀如何實現計算機視覺項目
  • 淺談計算機視覺中的圖像標註_易車網
    更進一步的說,計算機視覺是一門研究如何使機器「看」的科學,就是是指用攝影機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。計算機視覺的應用非常廣泛,從自動駕駛汽車和無人機到醫療診斷技術和面部識別軟體,計算機視覺的應用是巨大的和革命性的。
  • NLP/CV模型跨界,視覺Transformer趕超CNN?
    10 月 2 日,深度學習領域頂級會議 ICLR 2021 論文投稿結束,一篇將 Transformer 應用於圖像識別的論文引起了廣泛關注。特斯拉 AI 負責人 Andrej Karpathy 轉發了該論文,並表示「樂見計算機視覺和 NLP 領域日益融合」。
  • 獨家 | 手把手教你運用深度學習構建視頻人臉識別模型(Python實現)
    本文將展示如何使用開源工具完成一個人臉識別的算法。 引言「計算機視覺和機器學習已經開始騰飛,但是大多數人並不清楚計算機在識別一張圖片的時候,它到底看到了什麼。」——麥克.克裡奇 計算機視覺這個精彩領域在最近幾年突飛猛進,目前已經具備了一定的規模。
  • 從計算機視覺到人臉識別:一文看懂顏色模型、信號與噪聲
    計算機視覺介紹計算機視覺的主要目標是教會計算機如何去獲取圖片信息中的知識,例如人臉識別就是讓計算機去自動獲取與識別人臉圖像中的知識,這個「知識」的範疇可以是「兩張圖片中的人臉是否來自於同一個人」,也可以是「圖片中的人臉是男人還是女人」。
  • 上海交大盧憲凱系列公開課:計算機視覺概述和深度學習簡介 | 分享...
    雷鋒網AI研習社按:計算機視覺是一門研究如何使機器「看」的科學,掌握解決具體計算機視覺任務的方法則會幫助我們解決大規模系統的複雜問題,其應用相當廣泛,最常見的如人臉識別,文字識別等等。這篇文章就來為大家從頭普及一下計算機視覺相關知識,包括計算機視覺的定義、研究方法和應用舉例,還會重點介紹深度學習歷史發展歷史,常見深度學習網絡介紹和開發平臺,幫助計算機視覺入門者和從業者進行有效的基礎夯實和系統梳理。近日,在雷鋒網AI研習社舉辦的線上直播課上,來自上海交通大學的盧憲凱博士為大家分享了計算機視覺領域的入門知識。
  • 計算機視覺:你必須了解的圖像數據底層技術
    對於人類來說,你很難向從沒穿過衣服的原始人解釋什麼是連衣裙或者什麼是鞋。計算機視覺也是如此,如果它並沒有相關輸入,就不會理解上圖的東西都是什麼。 人臉識別 計算機視覺工作流程 計算機視覺工作流程其實是大多數計算機視覺應用程式將經歷的一系列步驟。
  • EasyDL實戰營開啟計算機視覺CV專場,講解多種模型效果提升技巧
    本次課程將分別講解「計算機視覺 CV 算法及應用」和「計算機視覺 CV 模型開發及服務部署實戰」。剛剛加入的小夥伴可以通過前期課程回看,補上前期落下的課程,明晚的課程期待你的加入,一起轉型 AI 工程師!
  • ImageNet冠軍帶你入門計算機視覺:卷積神經網絡
    編輯|Vincent,EmilyAI 前線導語: 在第一篇文章《ImageNet 冠軍帶你入門計算機視覺:監督學習與神經網絡的簡單實現》中,我們介紹了神經網絡的基本概念以及 Tensorflow 的基本用法。 本文為系列的第二篇文章,將會介紹卷積神經網絡。
  • 計算機視覺八大任務全概述:PaddlePaddle工程師詳解熱門視覺模型
    上篇計算機視覺(Computer Vision)是研究如何使機器「看」的科學,更進一步的說,是使用攝像機機和電腦代替人眼對目標進行識別、跟蹤和測量等的機器視覺,並通過電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。形象地說,就是給計算機安裝上眼睛(攝像機)和大腦(算法),讓計算機像人一樣去看、去感知環境。
  • 來了解下計算機視覺的八大應用
    CNNs 算法了這些算法各有各的優缺點和適用的領域,了解熟悉它們是很有必要的,但如何應用它們還需要具體問題具體分析,而機器學習常見的應用方向,包括以下幾個:計算機視覺(CV)自然語言處理(NLP)語音識別推薦系統廣告等等更詳細的可以參考之前推薦過的一個網站:https://