分類網絡遷移過來,用作特征提取器(通過在OD數據集上進行微調,並且與后續的網絡的共同訓練,使得它提取出來的特征更適合OD任務),后續的網絡負責從這些特征中,檢測目標的位置和類別。那么,我們就將分類網絡所在的環節稱之為“Backbone”,后續連接的網絡層稱之為“Detection head”。
骨干網絡(backbone)
在現代深度學習算法研究中,通用的骨干網+特定任務網絡head成為一種標准的設計模式。
CNN Backbone往往是各種CNN模型的一個共享結構。
https://zhuanlan.zhihu.com/p/93451942
關於卷積神經網絡(CNN)骨干結構的思考
概念
什么是機器學習、模式識別?
- 機器學習、模式識別、深度學習等等模型的目的,是壓縮。對數據的背誦這不是壓縮,對特征的提取才是壓縮。
傳統手工計算機視覺任務和卷積神經網絡(CNN)共享哪些特性?
- 它們都抓住了、而且必須抓住平移、鏡像、一定程度上的縮放不變性,只要滿足不變性,相似的特征表征能力一定強。CNN的新工作還有旋轉不變性、仿射變換不變性和時間軸上的灰度不變性。設計思路不包含這些不變性的,一般都是逗比。
一般的CNN模型,(比如在ImageNet上訓練的模型)壓縮效果如何?
- 在ImageNet上訓練的不少模型,把2 ^ (224 * 224 * 3 * 8bit)的數據空間中的數據特征用少到幾十萬,大到幾億的參數表征出來,起到了局部或者全局特征的提取,從而用特征進行各種任務。重要的是很多任務可以通過1次定義結構端到端完成。
用於計算機視覺分類的CNN為何重要?
- 它是Object Detection, Scene Parsing, OCR等任務的前導性任務,往往也被稱為Backbone Model。而且在上面快速實驗很多元方法,比如dropout,attention,套用GAN等等是直接、方便的。
CNN存在什么問題?
- 要求概率圖可微分這個假設很強,在CNN里體現為參數連續,而很多超參離散,使用同樣的NN技巧自動連續超參還湊合,離散會碰到各種問題。
重要結構梳理
知道為什么,遠比知道是什么重要。論文是讀不過來的。但是讀論文可以通過多讀好文、瀏覽水文、搭配爛文提高品位。
我們應該關心結構的哪方面
CNN Backbone往往是各種CNN模型的一個共享結構
-
概念中提到,它是Object Detection, Scene Parsing, OCR等任務的前導性任務。
- AlexNet: https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
- VGG: https://arxiv.org/pdf/1409.1556.pdf
- Residual Network: https://arxiv.org/pdf/1512.03385.pdf
- Wide ResNet: https://arxiv.org/pdf/1605.07146.pdf
- FractalNet: https://arxiv.org/pdf/1605.07648.pdf
- ResNeXt: https://arxiv.org/pdf/1611.05431.pdf
- GoogleNet: https://arxiv.org/pdf/1409.4842.pdf
- Inception: https://arxiv.org/pdf/1602.07261.pdf
- DenseNet: https://arxiv.org/pdf/1608.06993.pdf
- SORT: https://arxiv.org/pdf/1703.06993.pdf
- Compact Bilinear: https://arxiv.org/pdf/1511.06062.pdf
-
這個共享結構除了結構性的超參(總深度、總寬度)以外,反復使用了多種技巧,其中包括
- Residual(殘差): 直接elementwise加法。
- Concat(特征拼接): 直接對特征深度作拼接。
- Bottleneck(特征壓縮): 通過Conv(1,1)對稀疏的或者臃腫的特征進行壓縮
- Grouping(分組): fc-softmax分類器從1個觀察點把不同類靠空間球心角分離開,不同類放射狀散開不符合高斯假設。分組改善了這一點。
- Fractal(分形模式): 結構復用,可能帶來好處
- High-Order(高階): 在非分組時,可能帶來好處
- Asymmetric(非對稱): Conv(1,3),Conv(1,5),Conv(1,7)屬於非對稱結構,這個技巧在OCR處理長寬非1:1的字體有用
-
再次的,我們對結構有一個重新的審視
- AlexNet/VGG: 普通
- VGG: 加深
- ResNet: 通過x+F(x)直接加法實現了Residual模塊
- Wide ResNet: 加寬
- FractalNet: 結構復用,使用Concat
- ResNeXt: ResNet基礎上對Conv(3,3)使用了分組,但是如果Conv(1,1)也分組甚至精度不降
- GoogleNet/Inception: 大量的非對稱技巧
- DenseNet: 大量使用壓縮
- SORT: 一個小trick使用elementwise x*F(x)實現高階
- Compact Bilinear: 通過學習矩陣A實現x’Ay實現制造新的特征
CNN Backbone以外的專用結構
- 為Object Detection設計的結構更主要關心多尺度框選准確與否,因此有RPN、SPPNet、上下采樣等設計思想。
- 為Scene Parsing設計的結構更主要關心單位像素點分類正確與否,因此有FCN、上下采樣等設計思想。
本文不作介紹。
結構上的元方法
- 作為模型壓縮的替代方案,XNOR,二值化(Binarization),量子化(Quantization,使用數個比特替代原模型)
本文不作介紹。
如何優化CNN Backbone
我們在DataParallel的語境下面討論這個問題。也就是說,每張顯卡都保存一份參數全集,一份數據+數據形成FeatureMap的子集。
我們知道,就像組裝深度學習服務器一樣,你的預算一定的條件下,如何搭配一台服務器才能讓CPU對數據預處理夠用、內存加載數據夠用、硬盤I/O夠用,以及最重要的是,選擇一塊好的GPU卡。資源不是無限的。這其實是一個線性規划問題。在這里不贅述。
進行CNN Backbone優化同樣有這個問題:
你的顯存利用率和GPU算力利用率如何達到最高?
- 降低Batch-size會減小Feature Map占用緩存,但收斂情況怎么樣,可能飲鴆止渴。
- 加寬直接影響參數數量。
- 加深不僅影響參數數量還影響Feature Map大小。
- 分組極大節省參數,甚至還能提高效果。
- 結構復用、壓縮節省參數,增加計算量。
- 特征拼接、高階操作降低並行效率,尤其不是inplace的那種。在動態圖框架尤為如此。
- Bilinear大量使用額外參數。
- 非對稱帶來額外的代碼工作。
- 任何新穎結構的引入帶來非連續超參,讓模型BP,讓超參優化無B可P。
如何提高CNN Backbone設計品位?
- 美就是簡單
- 美就是復用
- 美就是對稱
- 美就是分形
Inception-ResNet.v2干不過ResNeXt,我一點都不意外。
Mask-RCNN標配ResNeXt101 Backbone,我一點都不意外。
DeepInsight團隊歡迎您來優化CNN Backbone
- 基於個人品位,使用ResNeXt+WideResNet+SORT,強力備選方案是DenseNet修改版。
- 大量超參可調整。
- CIFAR100 top1 acc: 84.2%,可再現。
- 計划使用Compact Bilinear和Attention。
https://blog.csdn.net/u014380165/article/details/78651060
這篇曠視的文章主要是對Faster RCNN、R-FCN算法做加速,取名為Light-Head RCNN,是因為作者將two stage的object detection算法的網絡結構分成兩部分,一部分是region proposal(或者叫ROI)的生成過程(文章中命名為body部分),另一部分是基於ROI預測框的過程(文章中命名為head部分)。對於像Faster RCNN、R-FCN這樣的two stage的object detection算法,第二部分有一些操作耗時且存儲量較大,因此稱為heavy head。而本文的light head RCNN則是通過對第二部分的修改減少了許多復雜操作,所以稱之為light head。
先來感受下Light-Head RCNN算法和其他算法相比的提升情況。Figure1是Light-Head RCNN算法和其他object detection算法在速度和准確率上的直觀對比,可以看出在這兩方面的優勢還是很明顯的。