深度学习(二十)——Ultra Deep Network, 图像超分辨率算法
http://antkillerfarm.github.io/
Ultra Deep Network
FractalNet
論文:
《FractalNet: Ultra-Deep Neural Networks without Residuals》
Resnet in Resnet
論文:
《Resnet in Resnet: Generalizing Residual Architectures》
Highway
論文:
《Training Very Deep Networks》
Resnet對于殘差的跨層傳遞是無條件的,而Highway則是有條件的。這種條件開關被稱為gate,它也是由網絡訓練得到的。
DenseNet
DenseNet是康奈爾大學博士后黃高(Gao Huang)、清華大學本科生劉壯(Zhuang Liu)、Facebook人工智能研究院研究科學家Laurens van der Maaten 及康奈爾大學計算機系教授Kilian Q. Weinberger于2016年提出的。論文當選CVPR 2017最佳論文。
論文:
《Densely Connected Convolutional Networks》
代碼:
https://github.com/liuzhuang13/DenseNet
原始版本是Torch寫的,官網上列出了其他框架的實現代碼的網址。
上圖是DenseNet的整體網絡結構圖。從整體層面來看,DenseNet主要由3個dense block組成。
上圖就是dense block的結構圖。與Resnet的跨層加法不同,這里采用的是Concatenation,也就是將不同層的幾個tensor組合成一個大的tensor。
這里的Concatenation是作用在channel上的,即dense block中的所有層的feature map都是等大的,只不過在channel數上,不僅包含本層生成的channel,還包含上層的channel。
這實際上帶來了兩個問題:
1.feature map的縮小問題。檢測網絡最后的FC是一定無法接收原始尺寸的feature map的。
2.channel數只增不減顯然也是問題。
因此,在兩個dense block之間,DenseNet還定義了一個transition layer。該layer包含兩個操作:
1.1x1的conv用于降維。
2.avg pool用于縮小feature map。
DenseNet的設計思想
以下是原作者的訪談片段:
DenseNet的想法很大程度上源于我們去年發表在ECCV上的一個叫做隨機深度網絡(Deep networks with stochastic depth)工作。當時我們提出了一種類似于Dropout的方法來改進ResNet。我們發現在訓練過程中的每一步都隨機地“扔掉”(drop)一些層,可以顯著的提高ResNet的泛化性能。這個方法的成功至少帶給我們兩點啟發:
首先,它說明了神經網絡其實并不一定要是一個遞進層級結構,也就是說網絡中的某一層可以不僅僅依賴于緊鄰的上一層的特征,而可以依賴于更前面層學習的特征。想像一下在隨機深度網絡中,當第l層被扔掉之后,第l+1層就被直接連到了第l-1層;當第2到了第l層都被扔掉之后,第l+1層就直接用到了第1層的特征。因此,隨機深度網絡其實可以看成一個具有隨機密集連接的DenseNet。
其次,我們在訓練的過程中隨機扔掉很多層也不會破壞算法的收斂,說明了ResNet具有比較明顯的冗余性,網絡中的每一層都只提取了很少的特征(即所謂的殘差)。實際上,我們將訓練好的ResNet隨機的去掉幾層,對網絡的預測結果也不會產生太大的影響。既然每一層學習的特征這么少,能不能降低它的計算量來減小冗余呢?
DenseNet 的設計正是基于以上兩點觀察。我們讓網絡中的每一層都直接與其前面層相連,實現特征的重復利用;同時把網絡的每一層設計得特別“窄”,即只學習非常少的特征圖(最極端情況就是每一層只學習一個特征圖),達到降低冗余性的目的。這兩點也是DenseNet與其他網絡最主要的不同。需要強調的是,第一點是第二點的前提,沒有密集連接,我們是不可能把網絡設計得太窄的,否則訓練會出現欠擬合(under-fitting)現象,即使 ResNet 也是如此。
DenseNet的優點
省參數。在 ImageNet 分類數據集上達到同樣的準確率,DenseNet 所需的參數量不到 ResNet 的一半。對于工業界而言,小模型可以顯著地節省帶寬,降低存儲開銷。
省計算。達到與 ResNet 相當的精度,DenseNet 所需的計算量也只有 ResNet 的一半左右。
**抗過擬合。**DenseNet 具有非常好的抗過擬合性能,尤其適合于訓練數據相對匱乏的應用。這一點從論文中 DenseNet 在不做數據增強(data augmentation)的 CIFAR 數據集上的表現就能看出來。
由于DenseNet不容易過擬合,在數據集不是很大的時候表現尤其突出。在一些圖像分割和物體檢測的任務上,基于DenseNet的模型往往可以省略在ImageNet上的預訓練,直接從隨機初始化的模型開始訓練,最終達到相同甚至更好的效果。由于在很多應用中實際數據跟預訓練的ImageNet自然圖像存在明顯的差別,這種不需要預訓練的方法在醫學圖像,衛星圖像等任務上都具有非常廣闊的應用前景。
DenseNet的優化問題
當前的深度學習框架對DenseNet的密集連接沒有很好的支持,我們只能借助于反復的拼接(Concatenation)操作,將之前層的輸出與當前層的輸出拼接在一起,然后傳給下一層。對于大多數框架(如Torch和TensorFlow),每次拼接操作都會開辟新的內存來保存拼接后的特征。這樣就導致一個L層的網絡,要消耗相當于L(L+1)/2層網絡的內存(第l層的輸出在內存里被存了(L-l+1)份)。
解決這個問題的思路其實并不難,我們只需要預先分配一塊緩存,供網絡中所有的拼接層(Concatenation Layer)共享使用,這樣DenseNet對內存的消耗便從平方級別降到了線性級別。
參考
https://www.leiphone.com/news/201708/0MNOwwfvWiAu43WO.html
CVPR 2017最佳論文作者解讀:DenseNet 的“what”、“why”和“how”
https://zhuanlan.zhihu.com/p/28124810
為什么ResNet和DenseNet可以這么深?一文詳解殘差塊為何有助于解決梯度彌散問題
https://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&mid=2651988934&idx=2&sn=0e5ffa195ef67a1371f3b5b223519121
ResNets、HighwayNets、DenseNets:用TensorFlow實現超深度神經網絡
Dual Path Networks
DPN是馮佳時和顏水成團隊的Yunpeng Chen的作品。
馮佳時,中國科學技術大學自動化系學士,新加坡國立大學電子與計算機工程系博士?,F任新加坡國立大學電子與計算機工程系助理教授。
論文:
《Dual Path Networks》
代碼:
https://github.com/cypw/DPNs
這篇論文首先從拓撲關系的角度分析了ResNet、DenseNet和HORNN(Higher Order RNN)之間的聯系。
如上所示,RNN相當于共享權值的串聯的ResNet,而DenseNet則相當于并聯的RNN。
更進一步的,上述三者都可表述為以下通式:
hk=gk[∑t=0k?1fkt(ht)]hk=gk[∑t=0k?1ftk(ht)]
其中,htht表示t時刻的隱層狀態;索引k表示當前時刻;xtxt表示t時刻的輸入;fkt(?)ftk(?)表示特征提取;gkgk表示對提取特征做輸出前的變換。
如果fkt(?)ftk(?)和gk(?)gk(?)每個Step都共享,那么就是HORNN,如果只有fkt(?)ftk(?)共享,那么就是ResNet,兩者都不共享,那就是DenseNet。
上圖展示的是ResNet和DenseNet的示意圖。圖中用線填充的柱狀體,表示的是主干結點的tensor的大小。
ResNet由于跨層和主干之間是element-wise的加法運算,因此每個主干結點的tensor都是一樣大的。
而DenseNet的跨層和主干之間是Concatenation運算,因此主干越往下,tensor越大。
通過上面的分析,我們可以認識到 :
ResNet: 側重于特征的再利用,但不善于發掘新的特征;
DenseNet: 側重于新特征的發掘,但又會產生很多冗余;
為了綜合二者的優點,作者設計了DPN網絡:
參考:
http://blog.csdn.net/scutlihaoyu/article/details/75645551
《Dual Path Networks》筆記
http://www.cnblogs.com/mrxsc/p/7693316.html
Dual Path Networks
http://blog.csdn.net/u014380165/article/details/75676216
DPN(Dual Path Network)算法詳解
圖像超分辨率算法
如上圖所示,一張低分辨率的小圖(Low Resolution,LR)如果采用簡單的插值算法進行圖片放大的話,圖像中物體的邊緣會比較模糊。如何用算法將這種LR的圖片放大成HR的圖片,這就是Super Resolution(SR)的目標了。
SR目前主要有兩個用途:
1.提升設備的測量精度。這個在天文和醫療圖像方面用的比較多,比如Google和NASA利用AI探測太陽系外的行星,還有癌癥的早期診斷。
2.Image Signal Processor。上面的兩個應用比較高端,SR最主要的用途恐怕還是相機的ISP領域。ISP的基本概念參見《圖像處理理論(四)》。
這里主要討論DL在SR領域的應用。
總結
以上是生活随笔為你收集整理的深度学习(二十)——Ultra Deep Network, 图像超分辨率算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像处理理论(四)——HOG, Haar
- 下一篇: 深度学习(二十一)——SRCNN, DR