深度殘差網絡ResNet解析

ResNet在2015年被提出,在ImageNet比賽classification任務上獲得第一名,因為它“簡單與實用”并存,之后很多方法都建立在ResNet50或者ResNet101的基礎上完成的,檢測,分割,識別等領域都紛紛使用ResNet,Alpha zero也使用了ResNet,所以可見ResNet確實很好用。?
下面我們從實用的角度去看看ResNet。

1.ResNet意義
隨著網絡的加深,出現了訓練集準確率下降的現象,我們可以確定這不是由于Overfit過擬合造成的(過擬合的情況訓練集應該準確率很高);所以作者針對這個問題提出了一種全新的網絡,叫深度殘差網絡,它允許網絡盡可能的加深,其中引入了全新的結構如圖1;?
這里問大家一個問題?
殘差指的是什么??
其中ResNet提出了兩種mapping:一種是identity mapping,指的就是圖1中”彎彎的曲線”,另一種residual mapping,指的就是除了”彎彎的曲線“那部分,所以最后的輸出是 y=F(x)+xy=F(x)+x?
identity mapping顧名思義,就是指本身,也就是公式中的xx,而residual mapping指的是“差”,也就是y?xy?x,所以殘差指的就是F(x)F(x)部分。?
為什么ResNet可以解決“隨著網絡加深,準確率不下降”的問題??
除了實驗證明外:?

表1,Resnet在ImageNet上的結果?
理論上,對于“隨著網絡加深,準確率下降”的問題,Resnet提供了兩種選擇方式,也就是identity mapping和residual mapping,如果網絡已經到達最優,繼續加深網絡,residual mapping將被push為0,只剩下identity mapping,這樣理論上網絡一直處于最優狀態了,網絡的性能也就不會隨著深度增加而降低了。

2.ResNet結構
它使用了一種連接方式叫做“shortcut connection”,顧名思義,shortcut就是“抄近道”的意思,看下圖我們就能大致理解:?

圖1 Shortcut Connection?
這是文章里面的圖,我們可以看到一個“彎彎的弧線“這個就是所謂的”shortcut connection“,也是文中提到identity mapping,這張圖也詮釋了ResNet的真諦,當然大家可以放心,真正在使用的ResNet模塊并不是這么單一,文章中就提出了兩種方式:?

圖2 兩種ResNet設計 【ResNet34(左圖)和ResNet50/101/152(右圖)】
這兩種結構分別針對ResNet34(左圖)和ResNet50/101/152(右圖),一般稱整個結構為一個”building block“。其中右圖又稱為”bottleneck design”,目的一目了然,就是為了降低參數的數目,第一個1x1的卷積把256維channel降到64維,然后在最后通過1x1卷積恢復,整體上用的參數數目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的話就是兩個3x3x256的卷積,參數數目: 3x3x256x256x2 = 1179648,差了16.94倍。?
對于常規ResNet,可以用于34層或者更少的網絡中,對于Bottleneck Design的ResNet通常用于更深的如101這樣的網絡中,目的是減少計算和參數量(實用目的)。

問大家一個問題:?
如圖1所示,如果F(x)和x的channel個數不同怎么辦,因為F(x)和x是按照channel維度相加的,channel不同怎么相加呢??
針對channel個數是否相同,要分成兩種情況考慮,如下圖:?
?
圖3 兩種Shortcut Connection方式?
如圖3所示,我們可以清楚的”實線“和”虛線“兩種連接方式,?
實線的的Connection部分(”第一個粉色矩形和第三個粉色矩形“)都是執行3x3x64的卷積,他們的channel個數一致,所以采用計算方式:?
y=F(x)+xy=F(x)+x?
虛線的的Connection部分(”第一個綠色矩形和第三個綠色矩形“)分別是3x3x64和3x3x128的卷積操作,他們的channel個數不同(64和128),所以采用計算方式:?
y=F(x)+Wxy=F(x)+Wx?
其中W是卷積操作,用來調整x的channel維度的;?
下面我們看看兩個實例:?
?
圖4 兩種Shortcut Connection方式實例(左圖channel一致,右圖channel不一樣)

3.ResNet50和ResNet101
這里把ResNet50和ResNet101特別提出,主要因為它們的出鏡率很高,所以需要做特別的說明。給出了它們具體的結構:?

表2,Resnet不同的結構?
首先我們看一下表2,上面一共提出了5中深度的ResNet,分別是18,34,50,101和152,首先看表2最左側,我們發現所有的網絡都分成5部分,分別是:conv1,conv2_x,conv3_x,conv4_x,conv5_x,之后的其他論文也會專門用這個稱呼指代ResNet50或者101的每部分。?
拿101-layer那列,我們先看看101-layer是不是真的是101層網絡,首先有個輸入7x7x64的卷積,然后經過3 + 4 + 23 + 3 = 33個building block,每個block為3層,所以有33 x 3 = 99層,最后有個fc層(用于分類),所以1 + 99 + 1 = 101層,確實有101層網絡;?
注:101層網絡僅僅指卷積或者全連接層,而激活層或者Pooling層并沒有計算在內;?
這里我們關注50-layer和101-layer這兩列,可以發現,它們唯一的不同在于conv4_x,ResNet50有6個block,而ResNet101有23個block,查了17個block,也就是17 x 3 = 51層。

4.基于ResNet101的Faster RCNN
文章中把ResNet101應用在Faster RCNN上取得了更好的結果,結果如下:?


表3,Resnet101 Faster RCNN在Pascal VOC07/12 以及COCO上的結果?
這里有個問題:?
Faster RCNN中RPN和Fast RCNN的共享特征圖用的是conv5_x的輸出么??
針對這個問題我們看看實際的基于ResNet101的Faster RCNN的結構圖:?

圖5 基于ResNet101的Faster RCNN?
圖5展示了整個Faster RCNN的架構,其中藍色的部分為ResNet101,可以發現conv4_x的最后的輸出為RPN和RoI Pooling共享的部分,而conv5_x(共9層網絡)都作用于RoI Pooling之后的一堆特征圖(14 x 14 x 1024),特征圖的大小維度也剛好符合原本的ResNet101中conv5_x的輸入;?
最后大家一定要記得最后要接一個average pooling,得到2048維特征,分別用于分類和框回歸。
---------------------?
作者:懶人元?
來源:CSDN?
原文:https://blog.csdn.net/lanran2/article/details/79057994?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

==========================================================================================

ResNet介紹
1 簡要概括
????ResNet(Residual Neural Network)由微軟研究院的Kaiming He等四名華人提出,通過使用ResNet Unit成功訓練出了152層的神經網絡,并在ILSVRC2015比賽中取得冠軍,在top5上的錯誤率為3.57%,同時參數量比VGGNet低,效果非常突出。ResNet的結構可以極快的加速神經網絡的訓練,模型的準確率也有比較大的提升。同時ResNet的推廣性非常好,甚至可以直接用到InceptionNet網絡中。

????ResNet的主要思想是在網絡中增加了直連通道,即Highway Network的思想。此前的網絡結構是性能輸入做一個非線性變換,而Highway Network則允許保留之前網絡層的一定比例的輸出。ResNet的思想和Highway Network的思想也非常類似,允許原始輸入信息直接傳到后面的層中,如下圖所示。

????這樣的話這一層的神經網絡可以不用學習整個的輸出,而是學習上一個網絡輸出的殘差,因此ResNet又叫做殘差網絡。

2 創新點
????提出殘差學習的思想。傳統的卷積網絡或者全連接網絡在信息傳遞的時候或多或少會存在信息丟失,損耗等問題,同時還有導致梯度消失或者梯度爆炸,導致很深的網絡無法訓練。ResNet在一定程度上解決了這個問題,通過直接將輸入信息繞道傳到輸出,保護信息的完整性,整個網絡只需要學習輸入、輸出差別的那一部分,簡化學習目標和難度。VGGNet和ResNet的對比如下圖所示。ResNet最大的區別在于有很多的旁路將輸入直接連接到后面的層,這種結構也被稱為shortcut或者skip connections。

3 網絡結構
????在ResNet網絡結構中會用到兩種殘差模塊,一種是以兩個3*3的卷積網絡串接在一起作為一個殘差模塊,另外一種是1*1、3*3、1*1的3個卷積網絡串接在一起作為一個殘差模塊。他們如下圖所示。

????ResNet有不同的網絡層數,比較常用的是50-layer,101-layer,152-layer。他們都是由上述的殘差模塊堆疊在一起實現的。


---------------------?
作者:dayL_W?
來源:CSDN?
原文:https://blog.csdn.net/u013181595/article/details/80990930?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458100.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle-一個中文漢字占幾個字節?

Oracle 一個中文漢字占用幾個字節 Oracle 一個中文漢字 占用幾個字節,要根據Oracle中字符集編碼決定!!! 1. 如果定義為VARCHAR2(32 CHAR),那么該列最多就可以存儲32個漢字,如果定義字段為VARCHAR2(32) 或VARCHAR2(32 B…

基于深度學習的目標檢測技術演進:R-CNN、Fast R-CNN、Faster R-CNN

object detection我的理解,就是在給定的圖片中精確找到物體所在位置,并標注出物體的類別。object detection要解決的問題就是物體在哪里,是什么這整個流程的問題。然而,這個問題可不是那么容易解決的,物體的尺寸變化范…

iPhone屏幕尺寸/launch尺寸/icon尺寸

屏幕尺寸 6p/6sp 414 X 7366/6s 375 X 6675/5s 320 X 568 4/4s 320 X 480launch尺寸 6p/6sp 1242 X 2208 3x6/6s 750 X 1334 2x5/5s 640 X 1136 2x4/4s 640 X 960 2x仔細觀察會發現l…

CNN的發展歷史(LeNet,Alexnet,VGGNet,GoogleNet,ReSNet)

歡迎轉載,轉載請注明:本文出自Bin的專欄blog.csdn.net/xbinworld。 關于卷積神經網絡CNN,網絡和文獻中有非常多的資料,我在工作/研究中也用了好一段時間各種常見的model了,就想著簡單整理一下,以備查閱之需…

讀取csv格式的數據

1.直接上代碼&#xff0c;關鍵是會用 2.代碼如下&#xff1a; <?php #添加推薦到英文站 $file fopen(code.csv,r); while ($data fgetcsv($file)) { //每次讀取CSV里面的一行內容 //print_r($data); //此為一個數組&#xff0c;要獲得每一個數據&#xff0c;訪問數組下…

如何在VMWare的Ubuntu虛擬機中設置共享文件夾

親測有效&#xff1a;Ubuntu18.04 LTS、虛擬機VMware Workstation 14 Pro 14.1.3 build-9474260、Window7 自己的第一篇博文&#xff0c;由于時&#xff08;shuǐ&#xff09;間&#xff08;png&#xff09;原&#xff08;yǒu&#xff09;因&#xff08;xin&#xff09;&…

容器+AOP實現動態部署(四)

上篇咱們介紹了容器和AOP的結合&#xff0c;結合后怎樣將對象增強服務并沒有過多的說明&#xff0c;這里將詳細說明怎樣將對象 進行增強 &#xff0c;達到一個一對多和多對多的增強方式 先從簡單的方式說起 /** *JDK代理類&#xff0c;實現動態調用對象方法 */ public class JD…

caffe專題五——回歸中——檢測框架

https://blog.csdn.net/runner668/article/details/80436850

深入理解卷積層,全連接層的作用意義

有部分內容是轉載的知乎的&#xff0c;如有侵權&#xff0c;請告知&#xff0c;刪除便是&#xff0c;但由于是總結的&#xff0c;所以不一一列出原作者是who。 再次感謝&#xff0c;也希望給其他小白受益。 首先說明&#xff1a;可以不用全連接層的。 理解1&#xff1a; 卷…

用ionic快速開發hybird App(已附源碼,在下面+總結見解)

用ionic快速開發hybird App&#xff08;已附源碼,在下面總結見解&#xff09; 1.ionic簡介 ionic 是用于敏捷開發APP的解決方案。核心思路是&#xff1a;利用成熟的前端開發技術&#xff0c;來寫UI和業務邏輯。也就是說&#xff0c;就是一個H5網站&#xff0c;這個區別于react-…

為什么要使用工廠模式

工廠的作用相當于幫助我們完成實例化的操作。 優勢1&#xff1a;一般在代碼中&#xff0c;實例化一個類A是直接new A&#xff08;&#xff09;&#xff0c;假如類A是一個完全獨立的類&#xff0c;沒有相似類&#xff0c;則沒有必要使用工廠模式&#xff0c;直接new A&#xff…

css各兼容應該注意的問題

1.div布局在ie瀏覽器和chrome瀏覽器&#xff0c;firefox瀏覽器不同&#xff0c;不如在div里面嵌套3個div&#xff0c;分別左中右&#xff0c;左邊div的pading和margin在ie8以上都是幾乎相同&#xff0c;ie8以下做內邊距x2&#xff0c;在中間的div在chrome和fierfox中默認在左邊…

轉 C++宏定義詳解

來自&#xff1a;傳送門 C宏定義詳解 一、#define的基本用法 #define是C語言中提供的宏定義命令&#xff0c;其主要目的是為程序員在編程時提供一定的方便&#xff0c;并能在一定程度上提高程序的運行效率&#xff0c;但學生在學習時往往不能 理解該命令的本質&#xff0c;總是…

acm之vim的基本配置

http://www.kuangbin.net/archives/vim-acmicpc 轉載于:https://www.cnblogs.com/akrusher/articles/5402426.html

40 個重要的 HTML5 面試問題及答案

2019獨角獸企業重金招聘Python工程師標準>>> 介紹 我是一個ASP.NET MVC開發人員。最近當我找工作的時候&#xff0c;我發現很多問題都是圍繞HTML 5和它的新功能展開的。所以&#xff0c;下面我將列出40個有助于你提高相關HTML 5知識的重要問題。 這些問題并不能保證…

Java常見Jar包的用途

jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用來發現、查找和實現可插入式接口&#xff0c;提供一些一般類實例化、單件的生命周期管理的常用方法. jaxrpc.jar Axis運行所需要的組件包 saaj.jar 創建到端點的點到點連接的方法、創建并處理SOAP消息和附件的方法…

車流檢測之halcon光流法算法實現

* This example program shows how to use optical_flow_mg to compute the optical flow in an image sequence and how to segment the optical flow. *這個示例程序顯示了如何使用._flow_mg來計算圖像序列中的光流&#xff0c;以及如何分割光流。 dev_update_off () dev_…

利用光學流跟蹤關鍵點---30

原創博客:轉載請標明出處:http://www.cnblogs.com/zxouxuewei/ 關鍵點&#xff1a;是多個方向上亮度變化強的區域。 opencv:版本是2.4. 光學流函數&#xff1a;calcOpticalFlowPyrLK()。&#xff08;關鍵點偵測器使用goodFeaturesToTrack()&#xff09;二者結合。 相應的啟動文…

基于Redis、Storm的實時數據查詢實踐

通過算法小組給出的聚合文件&#xff0c;我們需要實現一種業務場景&#xff0c;通過用戶的消費地點的商戶ID與posId&#xff0c;查詢出他所在的商圈&#xff0c;并通過商圈地點查詢出與該區域的做活動的商戶&#xff0c;并與之進行消息匹配&#xff0c;推送相應活動信息到用戶手…