論文筆記Densely Connected Convolutional Networks
1. 標題及來源
Dense Connected Convolutional Networks. CVPR_2017
該論文一共有5個版本,這是第一個版本
2. 閱讀目的
1. 瞭解DenseNet的設計思想
2. 瞭解如何優化網絡結構(目標識別或者分類的難度不同,並不需要將它們都在網絡的最後一層輸出)
3. 領域
網絡結構設計
4. 擬解決的問題
1. 設計更深的網絡結構
2. 設計更深網絡結構出現的梯度消失/爆炸問題
5. 提出的方法
5.1 整體網絡結構
每個Dense Block之間都通過transition層連接,在transition層中有一個1x1卷積和一個池化,1x1卷積的輸出通道數量和輸入特徵數量相同。通過加transition層的方式實現池化操作。
第層的輸入通道數是表示輸出的通道數。爲了防止網絡過寬,k通常取12(L=40),24(L=100)
5.2 Dense Block
每一層都接收之前所有層的特徵圖並且把自身的特徵圖傳給後面所有的層。
假設當前層是L,那麼L層會接收1, 2, …, L - 1層所有的特徵,這些特徵都作爲單獨的輸入(concat)輸入到第L層中,,表示對這些特徵圖進行concat
ResNet是將特徵進行相加,
5.3 版本對比
v1:初始版本
v2:在transition layer中加入了Batch Normalization
版本號 | 改變 |
---|---|
V1 | 1. dense connectivity 2. composite function 3. Pooling layers(transition layer) 4.Growth rate |
V2 | 1. composite function: 加入bottleneck layer,即每次進行3x3卷積之前先進行1x1卷積,降維到4k個channel,記爲DenseNet-B 2. transition layer: 加入Batch Normalization 加入compression,即輸出通道數變爲,記爲DenseNet-C,實驗時 3. 加入ImageNet分類任務的結果 4. 簡單討論Stochastic Depth Networks與DenseNets之間的聯繫 5. 替換V1版本的heat map 6. 移除V1版本中DenseNets和Partial DenseNets的對比試驗 |
V3、V4、V5 | 和V2相比沒有變化 |
6. 結果
6.1 DenseNet_v1實驗結果
在100層的DenseNet網絡中,k從12增加到24,在C10上的表現降低,不一定是由過擬合問題引起的。因爲作者針對這點,作了另外一個實驗,使用DenseNet(L=100, k=12),然後不使用Dropout,在C10和C100上的結果分別是8.85%和32.53%,幾乎超過了表中所有方法(除FractalNet with dropout)。當k從12增加到24時,這種誤差波動在波動範圍內,所以無法判斷是否是由過擬合引起。
The weight norm serves as an approximate for the dependency of a convolutional layer on its preceding layers(權重範數是卷積層在其前層上的依賴性的近似值)
圖中每列表示layer,每行表示對應的特徵圖,每個像素點表示卷積層與特徵圖關聯的權重的範數。
點越偏近黃色,該層越充分利用該特徵圖;點越偏近深藍色,表明該層未利用該特徵圖。
6.2 DenseNet_v2實驗結果
對比DenseNet(L=100, k=24)和DenseNet-BC可以發現,隨着網絡深度的增加,網絡的性能並沒有得到提升, 這是因爲SVHN是一個相對簡單的任務,使用更深的網絡會導致模型過擬合
DenseNet(L=100, k=12)在C10上的5.77到DenseNet(L=100, k=24)的5.83,是因爲過擬合引起的,解決V1版本中該問題引起原因
(l, s)處的紅點表示l層充分利用了s層之前生成的特徵
- 所有層都將其權重分佈在同一塊中的多個輸入上,表明淺層提取的特徵實際上直接被同一Dense Block的深層所利用
- transition layer的權重也將其權重分佈在前一Dense Block內的所有層上,表明少量信息流間接從DenseNet的第一層流向最後一層
- Dense Block2和Dense Block3的層一致地將最小權重分配給transition layer(三角形的頂行)的輸出,這表明transition layer輸出許多冗餘特徵(平均權重較低)
- 最後的分類層也使用了整個密集塊的權重,但似乎集中在最終特徵圖上,這表明網絡中後期可能會產生一些更高級別的特徵
6.6 DenseNet不同版本性能對比
版本 | (L, K) | Params | C10 | C10+ | C100 | C100+ | SVHN |
---|---|---|---|---|---|---|---|
V1 | 40, 12 | 1.0M | 7.00 | 5.24 | 27.55 | 24.42 | 1.79 |
V1 | 100, 12 | 7.0M | 5.77 | 4.10 | 23.79 | 20.20 | 1.67 |
V1 | 100, 24 | 27.2M | 5.83 | 3.74 | 23.42 | 19.25 | 1.59 |
V2 | 100, 12 | 0.8M | 5.92 | 4.51 | 24.15 | 22.27 | 1.76 |
V2 | 250, 24 | 15.3M | 5.19 | 3.62 | 19.64 | 17.60 | 1.74 |
V2 | 190, 40 | 25.6M | - | 3.46 | - | 17.18 | - |
L表示網絡深度,K表示Growth Rate,不同數據集中的數據是error rate(%),數據集後面有個+表示使用data augmentation,即the images are first zero-padded with 4 pixels on each side, then randomly cropped to again, produce 32x32 images; half of the images are then horizontally mirrored
7. 改進&存在的問題
8. 可借鑑的點
1. 特徵的reuse方式
2. 網絡結構的設計思想(將不同層特徵直接進行重用,並且重用每一層的特徵)
3. DenseNet中,網絡的低層特徵會流向高層並被高層充分利用
4. 該層的平均權重小,說明特徵冗餘。因爲當有大量重複特徵時,網絡再使用的時候並不需要全部使用它們,而是使用它們中的一部分(有點類似與PCA),剩餘的部分幾乎不被使用,所以權重會相對較低,因此該層的平均權重會偏小。
9. 知識補充
9.1 對論文的個人理解
9.1.1 DenseNet_V1
DenseNet中每一層都可以和損失函數有直接"交流"(可以直接通過損失函數計算梯度,而不需要層層回傳,也正是因爲這點,所以避免了梯度消失和梯度爆炸)。
DenseNet每一層都很"窄"(channel數量非常少,只有12或者24),然後每層學習一些特徵,每層都會接收之前所有層的特徵,相當於對這些特徵進行了重組,充分利用這些特徵。舉個不是很恰當的例子:例如貓的識別,在第一層網絡中,學習了貓的毛髮特徵,可能是一些點或者線,然後在第二層網絡中,學習了貓的一些輪廓信息,在第三層中,學習了貓的身體信息,第四層中,學習了貓的頭部信息。在分類時,分類器會接收所有的這些特徵,然後基於這些特徵來判斷是否是一個貓。ps:實際的學習過程可能並沒有這麼快,此處只是一個假設,用於理解該網絡的設計理念
9.1.2 DenseNet_v2
DenseNet中,網絡的低層特徵會流向高層並被高層充分利用,這說明低層的特徵對於網絡的貢獻是不可忽略的。
該層的平均權重小,說明特徵冗餘。因爲當有大量重複特徵時,網絡再使用的時候並不需要全部使用它們,而是使用它們中的一部分(有點類似與PCA),剩餘的部分幾乎不被使用,所以權重會相對較低,因此該層的平均權重會偏小。
9.2 高低層特徵融合
參考博客:https://blog.csdn.net/xys430381_1/article/details/88370733