深度學習(Deep learning)綜述

一、深度學習介紹

深度學習是以不少于兩個隱含層的神經網絡對輸入進行非線性變換或表示學習的技術,通過構建深層神經網絡,進行各項分析活動。深層神經網絡由一個輸入層,數(shù)個隱層,以及一個輸出層構成。每層有若干個神經元,神經元之間有連接權重。每個神經元模擬生物的神經細胞,而結點之間的連接模擬神經細胞之間的連接。?

深度學習實踐的四個關鍵要素:計算能力、算法、數(shù)據(jù)和應用場景,就像四大護法神獸一樣保證了深度學習的應用和實踐,缺一不可。

計算能力

首先,深度神經網絡復雜,訓練數(shù)據(jù)多,計算量大。深度神經網絡中神經元多,神經元間連接數(shù)量也相當驚人。從數(shù)學的角度看,每個神經元都要包含數(shù)學計算(如Sigmoid、ReLU或者Softmax函數(shù)),需要估計的參數(shù)量也極大。語音識別和圖像識別應用中,神經元達數(shù)萬個,參數(shù)數(shù)千萬,模型復雜導致計算量大。所以計算能力是深度學習應用的基礎。

計算能力越強,同樣時間內積累的經驗就越多、迭代速度也越快,計算能力這種對于深度學習的支撐與推動作用是不可替代的。

算法

在計算能力變得日益廉價的今天,深度學習試圖建立大得多也復雜得多的神經網絡,我們可以把算法理解為深度學習的神經網絡或是計算思維,這種神經網絡越復雜,捕捉到的信號就越精確,目前比較常見的算法包括深度信念網絡(Deep Belief Networks)、卷積神經網絡(ConvolutionalNeural Networks)、受限玻爾茲曼機(Restricted BoltzmannMachine)和堆棧式自動編碼器(Stacked Auto-encoders),以深度卷積神經網絡為代表的監(jiān)督學習方法目前來說是最有效也是使用最多的。

數(shù)據(jù)

如今深度學習正迅速成為高級數(shù)據(jù)分析領域的熱門話題,而數(shù)據(jù)的絕對量是促進深度學習工具和技術發(fā)展的一個關鍵因素。

應用場景

深度學習技術目前應用的場景不多,最普遍也是最成功的領域就是語音識別和圖像處理這兩個應用場景了,之前提到的三大神獸——計算能力、算法和數(shù)據(jù)屬于開發(fā)端,應用場景則屬于消費端層面,隨著未來深度學習技術的不斷發(fā)展以及用戶的需求提升,深度學習的應用場景將越來越多,比如許多智能手機內置的人臉識別功能來對照片進行分類,已經可以達到相當?shù)臏蚀_率;支付寶等金融工具也很可能采用人臉識別以提高安全性……未來的深度學習一定不僅僅局限于語音識別和圖像識別這兩個領域,還有更多的可能性。


二、模型優(yōu)化

調參方法

1.樣本要隨機化,防止大數(shù)據(jù)淹沒小數(shù)據(jù)

2.樣本要做歸一化。關于歸一化的好處請參考:為何需要歸一化處理

3.激活函數(shù)要視樣本輸入選擇(多層神經網絡一般使用relu)

4.mini batch很重要,幾百是比較合適的(很大數(shù)據(jù)量的情況下)

5.學習速率(learning rate)很重要,比如一開始可以lr設置為0.01,然后運行到loss不怎么降的時候,學習速率除以10,接著訓練

6.權重初始化,可用高斯分布乘上一個很小的數(shù),這個可以看:權值初始化

7.Adam收斂速度的確要快一些,可結果往往沒有sgd + momentum的解好(如果模型比較復雜的話,sgd是比較難訓練的,這時候adam的威力就體現(xiàn)出來了)

8.Dropout的放置位置以及大小非常重要

9.early stop,發(fā)現(xiàn)val_loss沒更新,就盡早停止


模型壓縮與優(yōu)化加速

模型壓縮算法能夠有效降低參數(shù)冗余,從而減少存儲占用、通信帶寬和計算復雜度,有助于深度學習的應用部署,具體可劃分為如下幾種方法:

1. 線性或非線性量化:1/2bits, int8 和 fp16等;

2. Op-level的快速算法:FFT Conv2d (7x7, 9x9), Winograd Conv2d (3x3, 5x5) 等;

3. Layer-level的快速算法:Sparse-block net [1] 等;

4. 優(yōu)化工具與庫:TensorRT (Nvidia), Tensor Comprehension (Facebook) 和 Distiller (Intel) 等;

5. 通道剪枝(channel pruning):結構或非結構剪枝:deep compression, channel pruning 和 network slimming等; 在CNN網絡中,通過對特征圖中的通道維度進行剪枝,可以同時降低模型大小和計算復雜度,并且壓縮后的模型可以直接基于現(xiàn)有的深度學習框架進行部署。

6. 權重稀疏化(weight sparsification):通過對網絡權重引入稀疏性約束,可以大幅度降低網絡權重中的非零元素個數(shù);壓縮后模型的網絡權重可以以稀疏矩陣的形式進行存儲和傳輸,從而實現(xiàn)模型壓縮。

7. 權重量化(weight quantization):通過對網絡權重引入量化約束,可以降低用于表示每個網絡權重所需的比特數(shù);我們同時提供了對于均勻和非均勻兩大類量化算法的支持,可以充分利用ARM和FPGA等設備的硬件優(yōu)化,以提升移動端的計算效率,并為未來的神經網絡芯片設計提供軟件支持。

8. 網絡蒸餾(network distillation):對于上述各種模型壓縮組件,通過將未壓縮的原始模型的輸出作為額外的監(jiān)督信息,指導壓縮后模型的訓練,在壓縮/加速倍數(shù)不變的前提下均可以獲得0.5%-2.0%不等的精度提升。

9. 多GPU訓練(multi-GPU training):深度學習模型訓練過程對計算資源要求較高,單個GPU難以在短時間內完成模型訓練,因此我們提供了對于多機多卡分布式訓練的全面支持,以加快使用者的開發(fā)流程。無論是基于ImageNet數(shù)據(jù)的Resnet-50圖像分類模型還是基于WMT14數(shù)據(jù)的Transformer機器翻譯模型,均可以在一個小時內訓練完畢。

10. 超參數(shù)優(yōu)化(hyper-parameter optimization)部分可以通過強化學習或者AutoML,在整體壓縮率一定的情況下,搜索出每一層最合適的壓縮比例使得整體的精度最高。多數(shù)開發(fā)者對模型壓縮算法往往了解較少,調節(jié)壓縮算法參數(shù)需要長期的學習和實驗才能有所經驗, 但超參數(shù)取值對最終結果往往有著巨大的影。


三、神經網絡模型

1、卷積神經網絡(CNN)

卷積神經網絡(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網絡(Feedforward Neural Networks),是深度學習(deep learning)的代表算法之一?。卷積神經網絡具有表征學習(representation learning)能力,能夠按其階層結構對輸入信息進行平移不變分類(shift-invariant classification),因此也被稱為“平移不變人工神經網絡。

1)卷積:對圖像元素的矩陣變換,是提取圖像特征的方法,多種卷積核可以提取多種特征。一個卷積核覆蓋的原始圖像的范圍叫做感受野(權值共享)。一次卷積運算(哪怕是多個卷積核)提取的特征往往是局部的,難以提取出比較全局的特征,因此需要在一層卷積基礎上繼續(xù)做卷積計算 ,這也就是多層卷積。

2)池化:降維的方法,按照卷積計算得出的特征向量維度大的驚人,不但會帶來非常大的計算量,而且容易出現(xiàn)過擬合,解決過擬合的辦法就是讓模型盡量“泛化”,也就是再“模糊”一點,那么一種方法就是把圖像中局部區(qū)域的特征做一個平滑壓縮處理,這源于局部圖像一些特征的相似性(即局部相關性原理)。

3) 全連接:softmax分類

訓練過程:

卷積核中的因子(×1或×0)其實就是需要學習的參數(shù),也就是卷積核矩陣元素的值就是參數(shù)值。一個特征如果有9個值,1000個特征就有900個值,再加上多個層,需要學習的參數(shù)還是比較多的。

對卡在局部極小值的處理方法:

1. 調節(jié)步伐:調節(jié)學習速率,使每一次的更新“步伐”不同;

2. 優(yōu)化起點:合理初始化權重(weights initialization)、預訓練網絡(pre-train),使網絡獲得一個較好的“起始點”,如最右側的起始點就比最左側的起始點要好。常用方法有:高斯分布初始權重(Gaussian distribution)、均勻分布初始權重(Uniform distribution)、Glorot 初始權重、He初始權、稀疏矩陣初始權重(sparse matrix)。

淺層VS深層:

淺層神經網絡可以模擬任何函數(shù),但數(shù)據(jù)量的代價是無法接受的。深層解決了這個問題。相比淺層神經網絡,深層神經網絡可以用更少的數(shù)據(jù)量來學到更好的擬合。深層的前提是:空間中的元素可以由迭代發(fā)展而來的。

1.? 為什么神經網絡高效:并行的先驗知識使得模型可用線性級數(shù)量的樣本學習指數(shù)級數(shù)量的變體

2.? 學習的本質是什么:將變體拆分成因素和知識(Disentangle Factors of Variation)

i.? ?為什么深層神經網絡比淺層神經網絡更高效:迭代組成的先驗知識使得樣本可用于幫助訓練其他共用同樣底層結構的樣本。

ii.? 神經網絡在什么問題上不具備優(yōu)勢:不滿足并行與迭代先驗的任務

3.? ? 非迭代:該層狀態(tài)不是由上層狀態(tài)構成的任務(如:很深的CNN因為有max pooling,信息會逐漸丟失。而residual network再次使得迭代的先驗滿足)

詳細內容請參看:

https://blog.csdn.net/sinat_35821976/article/details/81503953#2.1.1%20Padding

2、循環(huán)神經網絡(Recurrent Neural Network,RNN)

盡管從多層感知器(MLP)到循環(huán)神經網絡(RNN)的擴展看起來微不足道,但是這對于序列的學習具有深遠的意義。循環(huán)神經網絡(RNN)的使用是用來處理序列數(shù)據(jù)的。在傳統(tǒng)的神經網絡中模型中,層與層之間是全連接的,每層之間的節(jié)點是無連接的。但是這種普通的神經網絡對于很多問題是無能為力的。比如,預測句子的下一個單詞是什么,一般需要用到前面的單詞,因為一個句子中前后單詞并不是獨立的。循環(huán)神經網絡(RNN)指的是一個序列當前的輸出與之前的輸出也有關。具體的表現(xiàn)形式為網絡會對前面的信息進行記憶,保存在網絡的內部狀態(tài)中,并應用于當前輸出的計算中,即隱含層之間的節(jié)點不再無連接而是有鏈接的,并且隱含層的輸入不僅包含輸入層的輸出還包含上一時刻隱含層的輸出。理論上,循環(huán)神經網絡能夠對任何長度的序列數(shù)據(jù)進行處理,但是在實踐中,為了減低復雜性往往假設當前的狀態(tài)只與前面的幾個狀態(tài)相關。

下圖展示的是一個典型的循環(huán)神經網絡(RNN)結構。


圖1 循環(huán)神經網絡(RNN)結構


將循環(huán)神經網絡(RNN)可視化的一種有效方法是考慮將其在時間上進行展開,得到如圖2結構。


圖2 循環(huán)神經網絡(RNN)在時間上展開


3、雙向長短時記憶循環(huán)神經網絡詳解(Bi-directional LSTM RNN)

雙向循環(huán)神經網絡(BRNN)的基本思想是提出每一個訓練序列向前和向后分別是兩個循環(huán)神經網絡(RNN),而且這兩個都連接著一個輸出層。這個結構提供給輸出層輸入序列中每一個點的完整的過去和未來的上下文信息。下圖展示的是一個沿著時間展開的雙向循環(huán)神經網絡。六個獨特的權值在每一個時步被重復的利用,六個權值分別對應:輸入到向前和向后隱含層(w1, w3),隱含層到隱含層自己(w2, w5),向前和向后隱含層到輸出層(w4, w6)。值得注意的是:向前和向后隱含層之間沒有信息流,這保證了展開圖是非循環(huán)的。

圖3 雙向循環(huán)神經網絡(BRNN)在時間上展開

對于整個雙向循環(huán)神經網絡(BRNN)的計算過程如下:向前推算(Forward pass):對于雙向循環(huán)神經網絡(BRNN)的隱含層,向前推算跟單向的循環(huán)神經網絡(RNN)一樣,除了輸入序列對于兩個隱含層是相反方向的,輸出層直到兩個隱含層處理完所有的全部輸入序列才更新:向后推算(Backward pass):雙向循環(huán)神經網絡(BRNN)的向后推算與標準的循環(huán)神經網絡(RNN)通過時間反向傳播相似,除了所有的輸出層δδ項首先被計算,然后返回給兩個不同方向的隱含層。


圖4 32層RNN及對應的展開

?BRNN和LSTM相比,另一個用的最成功的RNN就是BRNN了,該結構中,有2層隱藏層,其中每個隱藏層都連接到輸出和輸入。這2個隱藏層可以微分,且都有自循環(huán)連接,不過一個是朝著下一個時間步連接的,另一個是朝著上一個時間步連接的。


圖5? BRNN示意圖

給定一個輸入序列和一個目標序列,BRNN可以先基于時間維度展開,然后采用傳統(tǒng)的BP方法來訓練。BRNN的訓練相對RNN稍微有點計算量,大致是2倍。BRNN的一個限制是他不能連續(xù)的運行,因為他需要在序列的開始和結束都各有一個固定的占位符,而且該模型也沒法用在ML中的在線環(huán)境,因為你沒法得到未來的數(shù)據(jù)。不過對于如詞性標注任務,或者給定一個句子,用來做其中某個單詞基于其前后單詞基礎上是否合理的評價等任務還是很好的。

4、長短期記憶模型(LSTM)

循環(huán)神經網路(RNN)在工作時一個重要的優(yōu)點在于,其能夠在輸入和輸出序列之間的映射過程中利用上下文相關信息。然而不幸的是,標準的循環(huán)神經網絡(RNN)能夠存取的上下文信息范圍很有限。這個問題就使得隱含層的輸入對于網絡輸出的影響隨著網絡環(huán)路的不斷遞歸而衰退。因此,為了解決這個問題,長短時記憶(LSTM)結構誕生了。與其說長短時記憶是一種循環(huán)神經網絡,倒不如說是一個加強版的組件被放在了循環(huán)神經網絡中。具體地說,就是把循環(huán)神經網絡中隱含層的小圓圈換成長短時記憶的模塊。這個模塊的樣子如下圖所示:

圖4 長短時記憶模塊

5、MLP(多層神經網絡)

MLP(Multi-Layer Perception),即多層感知器,是一種趨向結構的人工神經網絡,映射一組輸入向量到一組輸出向量。MLP可以被看做是一個有向圖,由多個節(jié)點層組成,每一層全連接到下一層。除了輸入節(jié)點,每個節(jié)點都是一個帶有非線性激活函數(shù)的神經元(或稱處理單元)。一種被稱為反向傳播算法的監(jiān)督學習方法常被用來訓練MLP。MLP是感知器的推廣,克服了感知器無法實現(xiàn)對線性不可分數(shù)據(jù)識別的缺點。

具體算法以及數(shù)學公式請參考:

https://www.cnblogs.com/ooon/p/5577241.html

圖5 基本結構圖
圖6 殘差從隱層向前傳遞的傳遞過程

四、深度學習框架

1、自動化模型壓縮框架PocketFlow?

如何根據(jù)實際應用場景,選擇合適的模型壓縮與加速算法以及相應的超參數(shù)取值,往往需要較多的專業(yè)知識和實踐經驗,這無疑提高了這項技術對于一般開發(fā)者的使用門檻。

在此背景下,騰訊AI Lab機器學習中心研發(fā)了PocketFlow開源框架,以實現(xiàn)自動化的深度學習模型壓縮與加速,助力AI技術在更多移動端產品中的廣泛應用。通過集成多種深度學習模型壓縮算法,并創(chuàng)新性地引入超參數(shù)優(yōu)化組件,極大地提升了模型壓縮技術的自動化程度。開發(fā)者無需介入具體的模型壓縮算法及其超參數(shù)取值的選取,僅需指定設定期望的性能指標,即可通過PocketFlow得到符合需求的壓縮模型,并快速部署到移動端應用中。

PocketFlow支持通道剪枝的分組finetune/retrain功能,通過實驗我們發(fā)現(xiàn)此方法可以使原本壓縮后的模型精度有明顯的提升。


圖7?PocketFlow基本架構

通過引入超參數(shù)優(yōu)化組件,不僅避免了高門檻、繁瑣的人工調參工作,同時也使得PocketFlow在各個壓縮算法上全面超過了人工調參的效果,PocketFlow對ResNet和MobileNet等多種CNN網絡結構進行有效的模型壓縮與加速。


圖8 不同網絡的模型大小與分類精度對比


圖9?PocketFlow基本模型圖


五、目標檢測與目標識別

????目前可以將現(xiàn)有的基于深度學習的目標檢測與識別算法大致分為以下三大類:?

? ? 1. 基于區(qū)域建議的目標檢測與識別算法,如R-CNN, Fast-R-CNN, Faster-R-CNN;

? ? 2. 基于回歸的目標檢測與識別算法,如YOLO, SSD;

? ? 3. 基于搜索的目標檢測與識別算法,如基于視覺注意的AttentionNet,基于強化學習的算法.

1、R-CNN

基本工作流程:

? ? 1) 接收一個圖像, 使用Selective Search選擇大約2000個從上到下的類無關的候選區(qū)域(proposal)

? ? 2) 將提取出來的候選區(qū)域轉換為統(tǒng)一大小的圖片(拉升/壓縮等方法), 使用CNN模型提取每一個候選區(qū)域的固定長度的特征.

? ? 3) 使用特定類別的線性SVM分類器對每一個候選區(qū)域進行分類.

????4) Bounding Box回歸.

2、SPP Net


圖10 SPP NET網絡架構圖

?SPP Net的金字塔池化

圖11?SPP Net的金字塔池化圖

我們使用三層的金字塔池化層pooling,分別設置圖片切分成多少塊,論文中設置的分別是(1,4,16),然后按照層次對這個特征圖feature A進行分別處理(用代碼實現(xiàn)就是for(1,2,3層)),也就是在第一層對這個特征圖feature A整個特征圖進行池化(池化又分為:最大池化,平均池化,隨機池化),論文中使用的是最大池化,得到1個特征。

????第二層先將這個特征圖feature A切分為4個(20,30)的小的特征圖,然后使用對應的大小的池化核對其進行池化得到4個特征,

????第三層先將這個特征圖feature A切分為16個(10,15)的小的特征圖,然后使用對應大小的池化核對其進行池化得到16個特征.

????最后將這1+4+16=21個特征輸入到全連接層,進行權重計算. 當然了,這個層數(shù)是可以隨意設定的,以及這個圖片劃分也是可以隨意的,只要效果好同時最后能組合成我們需要的特征個數(shù)即可.

3、Fast R-CNN


圖12?Fast R-CNN模型圖


?Fast R-CNN主要作用是實現(xiàn)了對R-CNN的加速, 它在R-CNN的基礎上主要有以下幾個方面的改進:

? ? ① 借鑒了SPP Net的思路, 提出了簡化版的ROI池化層(沒有使用金字塔), 同時加入了候選框映射的功能, 使得網絡能夠進行反向傳播, 解決了SPP的整體網絡訓練的問題.

? ? ② 多任務Loss層. 1) 使用了softmax代替SVM進行多分類. 2) SmoothL1Loss取代了?Bounding Box回歸.

基本工作流程

????1) 接收一個圖像, 使用Selective Search選擇大約2000個從上到下的類無關的候選區(qū)域(proposal).

? ? 2) 對整張圖片進行卷積操作提取特征, 得到feature map.

? ? 3) 找到每個候選框在feature map中的映射patch. 將patch作為每個候選框的特征輸入到ROI池化層及后面的層.

? ? 4) 將提取出的候選框的特征輸入到softmax分類器中進行分類.==>替換了R-CNN的SVM分類.

? ? 5) 使用SmoothL1Loss回歸的方法對于候選框進一步調整位置.


4、Faster R-CNN

圖13?Faster R-CNN網絡架構圖

基本工作流程

????1. 對整張圖片輸進CNN網絡,得到feature map.

????2. 卷積特征輸入到RPN,得到候選框的特征信息.

????3. 對候選框中提取出的特征,使用分類器判別是否屬于一個特定類.

????4. 對于屬于某一特征的候選框,用回歸器進一步調整其位置.

RPN

? ? 用于提取region proposal的神經網絡叫做Region Proposal Network(簡稱RPN).

????RPN網絡的特點在于通過滑動窗口的方式實現(xiàn)候選框的提取,每個滑動窗口位置生成9個候選窗口(不同尺度、不同寬高), 提取對應9個候選窗口(anchor)的特征,用于目標分類和邊框回歸,與FastRCNN類似。目標分類只需要區(qū)分候選框內特征為前景或者背景。


圖14 RPN網絡架構圖

5、Mask R-CNN

Mask R-CNN,它通過在每個感興趣區(qū)域(RoI)上添加一個分支來預測分割掩模,繼承自Faster R-CNN [28],這個分支與現(xiàn)有的分類和邊框回歸并行。如圖1所示:掩模分支是作用于每個感興趣區(qū)域(RoI)的小全卷積神經網絡(FCN),以像素到像素到方式預測分割掩模。Mask R-CNN是基于Faster R-CNN的,它易于實現(xiàn)和訓練,并且為廣泛靈活的架構設計提供了便利。此外,掩模分支只增加了一個小的計算開銷,使快速系統(tǒng)和快速實驗成為可能。?

Mask R-CNN采用相同的兩級,第一級是完全相同的(既RPN)。在第二級,與預測(類和邊框偏移)并行,Mask R-CNN還會為每一個RoI輸出一個二進制掩模。這與最近的其他系統(tǒng)相反,其分類取決于掩模預測(例如,[26,7,20])。我們的方法遵循于Fast R-CNN[9],邊框分類和回歸并行(這在很大程度上簡化了R-CNN[10]的多級流水線)。

圖15 用于實例分割的Mask R-CNN 架構圖

6、YOLO?


圖16 YOLO測試圖

(1) 給個一個輸入圖像,首先將圖像劃分成7*7的網格?

(2) 對于每個網格,我們都預測2個邊框(包括每個邊框是目標的置信度以及每個邊框區(qū)域在多個類別上的概率)?

(3)根據(jù)上一步可以預測出7*7*2個目標窗口,然后根據(jù)閾值去除可能性比較低的目標窗口,最后非極大值抑制去除冗余窗口即可。?

圖17?YOLO 網絡架構圖

7、SSD

首先第一步和其他方法一樣利用卷積操作提取卷積特征,在最后級層卷積時候開始對與每一種尺度上的特征圖運用archor方法進行候選框提取,依據(jù)archor在不同尺度上得到的候選框,進行目標種類和位置的判斷。

圖18?SSD網絡架構圖

8、Residual Attention Network

圖19 RAN網絡架構圖
圖20 RAN模型架構圖

9、RetinaNet檢測框架

背景

one stage系

代表性算法 YOLOv1、SSD、YOLOv2、YOLOv3?

檢測精度 低 但速度快

two stage系??R-CNN、SPPNet、Fast R-CNN、Faster R-CNN??

檢測速度 慢但精度高

這種魚(speed)與熊掌(accuracy)不可兼得的局面一直成為Detection的瓶頸。

究其原因,就是因為one-stage受制于萬惡的 “類別不平衡” 。

1、什么是“類別不平衡”呢?

檢測算法在早期會生成一大波的bbox。而一幅常規(guī)的圖片中,頂多就那么幾個object。這意味著,絕大多數(shù)的bbox屬于background。

2、“類別不平衡”又如何會導致檢測精度低呢?

因為bbox數(shù)量爆炸。

正是因為bbox中屬于background的bbox太多了,所以如果分類器無腦地把所有bbox統(tǒng)一歸類為background,accuracy也可以刷得很高。于是乎,分類器的訓練就失敗了。分類器訓練失敗,檢測精度自然就低了。

3、那為什么two-stage系就可以避免這個問題呢?

因為two-stage系有RPN罩著。

第一個stage的RPN會對anchor進行簡單的二分類(只是簡單地區(qū)分是前景還是背景,并不區(qū)別究竟屬于哪個細類)。經過該輪初篩,屬于background的bbox被大幅砍削。雖然其數(shù)量依然遠大于前景類bbox,但是至少數(shù)量差距已經不像最初生成的anchor那樣夸張了。就等于是 從 “類別 極 不平衡” 變成了 “類別 較 不平衡” 。

不過,其實two-stage系的detector也不能完全避免這個問題,只能說是在很大程度上減輕了“類別不平衡”對檢測精度所造成的影響。

接著到了第二個stage時,分類器登場,在初篩過后的bbox上進行難度小得多的第二波分類(這次是細分類)。這樣一來,分類器得到了較好的訓練,最終的檢測精度自然就高啦。但是經過這么兩個stage一倒騰,操作復雜,檢測速度就被嚴重拖慢了。

4、那為什么one-stage系無法避免該問題呢?

因為one stage系的detector直接在首波生成的“類別極不平衡”的bbox中就進行難度極大的細分類,意圖直接輸出bbox和標簽(分類結果)。而原有交叉熵損失(CE)作為分類任務的損失函數(shù),無法抗衡“類別極不平衡”,容易導致分類器訓練失敗。因此,one-stage detector雖然保住了檢測速度,卻喪失了檢測精度。


“類別不平衡”是one-stage detector在精度上遜于two-stage detector的病結所在。

那么,只要通過將原先訓練 回歸任務 慣用的 交叉熵誤差 (CE(pt)=?αtlog(pt)CE(pt)=?αtlog?(pt)) 改為 FL (focal loss) 即可。


RetinaNet本質上是Resnet + FPN + 兩個FCN子網絡。

以下為RetinaNet目標框架框架圖。RetinaNet的detector部分是兩條平行pipe-line,且 設計相同 (除了尾部的output不一樣) 但 參數(shù)不共享 (Faster R-CNN中第一層的參數(shù)是共享的) 。

reg_pipe-line直接輸出target,所以是采用了無分類的bbox regressior(Faster R-CNN是每個類各一個bbox regressor)。2

圖21??RetinaNet與各種網絡架構的比較圖

10、目標檢測方法最新進展

1、結合上下文特征進行目標檢測。對于某一類物體,它的周圍出現(xiàn)的內容將很好的對其位置進行鎖定。

2、多特征融合。除了利用高維的卷積操作之后的特征之外,同時應該結合低維的卷積特征進行目標檢測檢測,以便更好的利用細節(jié)信息。

3、使用循環(huán)神經網絡(RNN)進行目標檢測。目前主流的圖像處理方法一般都是基于cnn的,其實RNN的很多特性或許能在目標檢測問題上產生意想不到的效果。例如Girshick的Inside-Outside-Net。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容