論文閱讀筆記集合(持續更新)

文章目錄

深度學習檢測算法選擇

兩種最常用算法比較:

RetinaNet             簡單、精度略低、速度快、fp較多
FPN + Faster R-CNN    較複雜、精度高、fp少、速度較慢

上面兩種爲one stage算法和two stage算法最常用的baseline。yolo和SSD算法因爲檢測精度較低,雖然速度快但是應用較少。
base model的演化:
base model一開始用Alexnet,後來則是VGG和GoogleNet。ResNet出來後,基本採用ResNet作爲base model,以及ResNet的各種變體。
算法開發流程:
一般使用ResNet50或ResNet50 half(channel減半)backbone,使用pretrain model,再fine_tune驗證有效性。之後如果追求速度(算法落地),那麼將basemodel替換爲Xception-145、ShuffleNet、MobileNet、Efficientnet等;如果追求精度(如發論文、打比賽),則將backbone替換爲ResNet-101、ResNet-152、DenseNet等。如果要蒸餾,可以用ResNet-101、ResNet-152 backbone先訓練精度較高的模型,再蒸餾小的backbone,如ResNet50。
當使用當前backbone點數較低時,可以先用大一號的backbone訓一次,觀察點數差距是否爲兩個backbone正常的點數差距,如果是,說明當前backbone從樣本中提取特徵的能力有限,考慮加入一些更容易學習的樣本或者使用大一號backbone蒸餾當前模型;如果不是,可能樣本量偏少了,需要增加和當前樣本同等質量的數據。
如果是爲了做實驗,驗證結果,可以採用一個小一些的backbone,以一天內能夠訓練+測試完爲限,如ResNet50 half這樣的小模型;先解決性能瓶頸,如加載數據時間過長等等;做實驗時先去掉其他trick,以backbone+基本loss來進行實驗。

review or survey of one field paper

Deep Learning for Fine-Grained Image Analysis: A Survey

文章地址:https://arxiv.org/pdf/1907.03069v1.pdf
詳細介紹了細粒度分類的定義,細粒度分類的常見數據集,細粒度分類常見模型方法的種類,還介紹了細粒度檢索的問題。

Imbalance Problems in Object Detection: A Review

文章地址:https://arxiv.org/pdf/1909.00169.pdf
關於目標檢測不平衡問題的綜述文章,文中介紹了四種不平衡類型:類別不平衡,尺度不平衡,目標不平衡和邊界框不平衡。
前景和背景類存在類別不平衡,不同前景類之間也存在類別不平衡;某類物體的不同尺度的樣本數量不同時,發生尺度不平衡,或者特徵尺度也可能不平衡;空間不平衡是迴歸loss不平衡,Iou分佈的不平衡,以及對象位置的不平衡;當存在多個損失函數以最小化時發生目標不平衡,比如分類和迴歸損失的不平衡。
本文對上面四種不平衡問題進行了總結,並列出了今年來對這些問題進行改進的論文和改進思路。

Recent Advances in Deep Learning for Object Detection

文章地址:https://arxiv.org/pdf/1908.03673.pdf
介紹了幾種常見的backbone如VGG16,ResNet,DenseNet,ResNeXt,GoogleNet,Hourglass。目標檢測網絡模型的發展過程中著名的目標檢測網絡模型,學習策略,應用方向和著名benchmark。

A Survey of Deep Learning-based Object Detection

文章地址:https://arxiv.org/pdf/1907.09408.pdf
介紹R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、YOLO、YOLOv2、YOLOv3、RetinaNet、SSD、DSSD、RefineDet、Relation Networks for Object Detection、DCNv2、NAS-FPN、M2Det等目標檢測網絡,介紹了PASCAL VOC dataset、MS COCO benchmark、 ImageNet benchmark等數據集,同時還介紹了一些對基於物體檢測的四個步驟(圖像預處理,特徵提取,分類和迴歸,後處理)中某個步驟進行改進的文章。

Understanding Deep Learning Techniques for Image Segmentation

文章地址:https://arxiv.org/pdf/1907.06119.pdf
介紹了從2013年到2019年,主流的30多種分割算法(含語義/實例分割),50多種數據集。

Deep Learning in Video Multi-Object Tracking: A Survey

文章地址:https://arxiv.org/pdf/1907.12740.pdf
介紹視頻多目標跟蹤技術今年來的發展,介紹了多目標跟蹤模型、度量函數、數據集。

Deep Face Recognition: A Survey

文章地址:https://arxiv.org/pdf/1804.06655.pdf
介紹了人臉識別的分類,人臉檢測的流程,不同的網絡結構和損失函數,人臉處理的一些算法,人臉數據集等等。

The Six Fronts of the Generative Adversarial Networks

文章地址:https://arxiv.org/pdf/1910.13076.pdf
一篇有關GAN的綜述文章,總結了2014年至今GAN網絡的論文,主要從網絡結構、條件信息、歸一化和約束、損失函數、圖像轉換、評估準則六個方面做了簡潔的梳理和回顧。

A Methodological Review of Visual Road Recognition Procedures for Autonomous Driving Applications

文章地址:https://arxiv.org/pdf/1905.01635.pdf
總結了近年來的道路識別和檢測算法。

image classification

image classification backbone model

Deep Residual Learning for Image Recognition

文章地址:https://arxiv.org/pdf/1512.03385.pdf
本文即大名鼎鼎的resnetv1網絡。該網絡是一個通用的特徵提取網絡,可用於分類、檢測、分割等,是目前應用最爲廣泛的網絡之一。
本文先提出更深的網絡性能反而退化這一現象,然後提出瞭解決方法:殘差模塊。每個模塊學習的是殘差F(x)而不是整個H(x)。殘差模塊結構如下:
在這裏插入圖片描述
一般的深層網絡擬合非線性函數H(x),即輸入等於輸出,殘差網絡將H(x)拆分爲兩部分:
H(x)=x+(H(x)x)=x+F(x) H(x)=x+(H(x)-x)=x+F(x)
這樣就變成了優化殘差F(x)。此時深層網路=淺層網絡+附加層,附加層輸入x,去擬合殘差F(x)比擬合H(x)更加容易。另外,如果淺層網絡已經擬合的比較好,附加層學到的殘差數量級也會很小,這樣網絡就對較小數量級的變化更加敏感。
通過在殘差模塊的最後輸出上加上前兩層的輸入,使得中間兩層學習的是輸入與輸出之間的殘差F(x)。在實際創建更深的網絡的時候,爲了減輕訓練負擔,ResNet採用間隔1x1卷積、3x3卷積、1x1的三層網絡,第一層用於降低維度,第三層用於升高維度。這種結構稱爲Bottleneck,並將bottleneck的輸入加在最後1x1卷積的輸出上。使用快捷連接(Shortcut Connections)將輸入加到輸出時要保證輸入和輸出具有相同的維度。如果輸入和輸出尺寸相同,可以直接使用快捷連接。如果不同,則有兩種方式使得輸入和輸出相同:第一種是額外填充零值的行,增加維度;第二種是用1x1卷積核,步長爲2。
resnetv1各網絡結構:
在這裏插入圖片描述
其中18和34的基本結構叫basic block,50、101、152的基本結構叫bottleneck block。即下圖所示:
在這裏插入圖片描述

Identity Mappings in Deep Residual Networks

文章地址:https://arxiv.org/pdf/1603.05027.pdf
這篇文章即resnetv2網絡。本文的改進在於,當前向參數和反向梯度直接從block傳到下一個block,而不必經過relu操作時效果更好。原始的殘差模塊和改進的殘差模塊對比如下:
在這裏插入圖片描述
可以看到改進後的殘差模塊(proposed)將relu全部移動到了主分支上,在快捷連接上不使用relu。
首先給出殘差網絡的公式:
yl=h(xl)+F(xl,Wl)xl+1=f(yl) \begin{aligned} \mathbf{y}_{l}=& h\left(\mathbf{x}_{l}\right)+F\left(\mathbf{x}_{l}, W_{l}\right) \\ & \mathbf{x}_{l+1}=f\left(\mathbf{y}_{l}\right) \end{aligned}
在resnetv1中:
h(xl)=xl h\left(\mathbf{x}_{l}\right)=\mathbf{x}_{l}
上式即恆等映射。f是relu激活函數。
ResNet V2的思想是現在讓這種恆等映射不僅僅發生在單個的殘差模塊中,而是貫穿在整個網絡之中。即同時滿足:
h(xl)=xlf(yl)=yl h\left(\mathbf{x}_{l}\right)=\mathbf{x}_{l} \\\\ f\left(\mathbf{y}_{l}\right)=\mathbf{y}_{l}
然後分析了五種不同的快捷連接情況(b-f),並做了實驗:
在這裏插入圖片描述
b即constant scaling,分爲兩種情況,第一種情況只有shortcut有scale,第二種情況與highway gating相同。前一種情況很容易導致梯度爆炸或梯度衰減,不能收斂,第二種錯誤率比ResNet V1要高;c即exclusive gating,借鑑自Highway Networks的門控機制,我們發現偏置項bg的初始化對於門控模型的訓練至關重要,當bg的初始化不合理時,exclusive gating網絡並不能收斂到一個好的結果;d即shortcut-only gating是exclusive gating的簡化,這種情況下,函數F不進行縮放;只有捷徑連接由1−g(x)進行縮放,偏置項bg的初始值同樣很重要;e即convolutional shortcut,在shortcut上先經過一個1x1的卷積,當疊加了很多個殘差模塊時,即使每個殘差模塊上只有1個1x1卷積模塊,也會對信息傳播造成阻礙,所以110層的ResNet的結果很差,訓練誤差也變得很高;f即Dropout shortcut,在shortcut上做dropout,Dropout在統計學上相當於給捷徑連接強加了一個λ的縮放,這和constant scaling很類似,同樣的阻礙了信號的傳播。
下面研究了激活函數relu的位置安排在哪裏使得f成爲一個恆等映射。同樣設置了幾組實驗:
在這裏插入圖片描述
b是add後再bn+relu,這樣的結果比基本結構的結果要差很多,原因是阻礙了信息在不同殘差模塊之間的恆等映射上的傳遞;c是先bn+relu後再add,這使得本層殘差塊擬合的殘差只有大於0的值,但實際上殘差有可能爲正也有可能爲負,使得擬合更加不準,結果也更差。
接下來作者證明了如果一個新的附加激活f是非對稱的,則後激活和下一個層的預激活是等價的。作者設計了只使用relu的預激活(d),和使用了bn+relu的全預激活(e)。 實驗發現只使用relu預激活的結果與ResNetv1-110/164的很接近。這個relu層不與bn層連接使用,因此無法共享bn所帶來的好處。當bn和relu都用在預激活上,結果得到了很可觀的提高。
由於輸入x在兩個殘差模塊之間能夠很直接的進行傳遞。因此resnetv2-1001網絡的訓練誤差能夠降低的特別快。如果ResNet層數不多時(如164層),f=relu(x)的影響並不是很強烈。在訓練初期,訓練曲線似乎收到了一點影響,但是馬上回歸到良好的狀態。通過監控模型的響應,我們觀測到,這是因爲在經過一定的訓練後,權重被調整到使得yl總是大於0的,因此f並不會截斷它(由於先前relu的存在,xl 總是非負的,因此只有當F是很大的負數時,yl纔會小於0)。當時在使用1000層的模型時,這種截斷就會更加頻繁。

Wide Residual Networks

文章地址:https://arxiv.org/pdf/1605.07146v1.pdf
本文作者認爲,帶有恆等映射的殘差模塊允許訓練非常深的網絡,但同時這也是殘差網絡的弱點。當梯度流過網絡時,沒有什麼可以強迫它通過殘差塊權重,這樣殘差塊就有可能在訓練中學不到東西,因此最終有可能只有少數幾個殘差塊學習到了有用的表示,而絕大多數的殘差塊起到的作用並不大。
作者認爲,與增加殘差網絡的深度相比,ResNet殘差塊在channel上的擴展提供了一種提高殘差網絡性能的更爲有效的方法。例如,作者wrn16-8與resnet1001具有基本相同的精度和參數量,但是訓練速度卻要快幾倍。本文實驗的實驗表明, 適當的增加ResNet中殘差模塊的寬度(channel)比增加網絡深度可以更有效的提升性能 ,這說明殘差網絡的能力主要由殘差模塊提供,網絡深度只有補充性的作用。 由於加寬的殘差模塊中包含大量參數,我們需要使用dropout來防止過擬合。ResNetv2網絡中將dropout加到快捷連接支路上發現性能變差,因此本文作者將dropout添加到殘差支路中,實驗證明該方法可以提升網絡性能。
在ResNet-v2中殘差網絡有兩種形式的block:basic block,即兩個相連的3x3卷積層,預激活(pre-activation)形式,下圖a所示;bottleneck block,即一個3x3卷積層加上前後各一個1x1卷積層,下圖b所示。bottleneck block是爲了在增加層數時減少block的計算量,也就是使得block更窄,而我們要考察的是加寬block的效果,所以不考慮bottleneck block,在本文架構中只使用basic block形式。
在這裏插入圖片描述
提升殘差模塊的表示能力有三種方法:

  • 向每個block中增加更多的卷積層;
  • 通過增加特徵圖數量來加寬卷積層,即增加channel數;
  • 增大卷積層的卷積核尺寸。

在VGG、Inception-v4網絡中表明,小尺寸的卷積核更有效,因此本文不考慮大於3x3的卷積核。
首先作者對方法1嘗試了下列幾種組合:
在這裏插入圖片描述
3表示3x3卷積,1表示1x1卷積。爲了保持總層數不變,當深度因子l(表示一個block中包含的卷積層數量)變化時,殘差塊總數d也要變化,如增大l時應該減小d。寬度因子k表示卷積層輸出特徵圖數量的倍數,即channel的倍數。
當深度因子l或者殘差塊總數d增大時,模型參數量也線性增加;而寬度因子k增大時,參數量和計算複雜度會增加k的平方倍。即使時這樣,計算加寬的網絡也比窄但極深的網絡更加高效,因爲GPU在並行計算大的張量時更加高效。在ResNet之前的網絡架構都是比較寬的,比如Inception和VGG。本文以WRN-n-k表示包含n個卷積層且寬度因子爲k的WRN,也有可能加上block的形式,比如WRN-40-2-B(3,3)。
加寬殘差塊會增加網絡的參數量,所以要使用正則化方法。之前的殘差網絡使用BN來提供正則化的效果,但仍然需要大量的數據增廣操作。本文在殘差函數支路中加入dropout來避免過擬合(即上圖d)。在極深層殘差網絡中這樣應該可以解決特徵重複利用逐漸減少的問題,因爲dropout的加入可以強使不同的殘差block學習表示。
方法1的幾種方案,只要總參數量差不多,則性能也差不多。最後着重選了3x3卷積來做實驗,控制深度因子l發現,B(3,3)比B(3,3,3,3)、B(3,3,3)、B(3)要好,前兩者可能是因爲優化困難。
在這裏插入圖片描述
再考察不同的寬度因子k和網絡深度的組合,網絡性能如下:
在這裏插入圖片描述
在這裏插入圖片描述
最後發現,WRN40-4與ResNet1001結果相似,參數數量相似,但是前者訓練快8倍。
實驗結果總結:

  • 加寬不同深度的殘差網絡都可以提升性能;
  • 在參數量過多和需要更強的正則化方法之前,增加深度和寬度都有助於提升性能;
  • 相同參數時,更寬的網絡比更深的網絡好訓練。此外,更寬網絡可以訓練出數倍於窄網絡參數量的模型,而窄網絡的深度需要加倍才能得到相同的結果,這使得訓練幾乎不可行;
  • dropout可以和加寬方法互補使用來進一步提升模型性能。

Aggregated Residual Transformations for Deep Neural Networks

文章地址:https://arxiv.org/pdf/1611.05431.pdf
本文即ResNeXt網絡。傳統模型要提高模型的準確率的改進方式都是通過加深或加寬網絡,但是這樣計算開銷也會增加的很快。而ResNeXt網絡可以在不增加參數量和計算開銷的情況下提高模型準確率。作者同時採用VGG的堆疊思想和Inception的 split-transform-merge的思想,提出在cardinality上進行改進,原文解釋爲"the size of the set of transformations",實際上就是對某一層在channel上進行分組卷積,cardinality就是分組數。作者做的一系列實驗表明增加cardinality比增加深度和寬度更有效,且不增加參數量和計算開銷。
ResNeXt殘差模塊形式:
在這裏插入圖片描述
上圖是ResNet和ResNeXt殘差模塊的對比,可以看到就是將原來的64channel變成現在的32組4channel卷積。
ResNeXt殘差模塊有三種等價形式:
在這裏插入圖片描述
a就是前面所說的aggregated residual transformations,即前面圖中的右圖;b則採用兩層卷積後concatenate,再卷積,有點類似Inception-ResNet,只不過這裏的每條path都是相同的拓撲結構(卷積核大小相同);c採用了分組卷積。作者在文中明確說明這三種結構是嚴格等價的,並且這三種結構的結果一模一樣,但由於分組卷積的速度更快,因此後面採用了分組卷積的形式。
分組卷積最早在alexnet中使用,當時是爲了解決一個GPU中不能處理一個很大channel數的feature map,所以將feature map按channel分了幾組,分別在不同的GPU中卷積,最後再把結果融合。但事實上,即使是在同一個GPU中做分組卷積,也可以有效減少參數量。如:
input_channel=128,output_channel=128,kernel size=3x3時,普通卷積參數量爲3x3x128x128;使用分組卷積時,若group num=32,則每個group的input_channel=4,output_channel=4,每個group參數量爲3x3x4x4,總參數量爲3x3x4x4x32,參數量只有原來的1/32。
論文中的實驗結果表明,在同樣的深度和複雜度下,ResNeXt正確率更高,且ResNeXt-101的性能就超過了ResNet-200。

Densely Connected Convolutional Networks

文章地址:https://arxiv.org/pdf/1608.06993.pdf
本文即DenseNet網絡。
介紹這篇文章先先要介紹另一篇文章:Deep networks with stochastic depth(https://arxiv.org/pdf/1603.09382.pdf),這篇文章的作者和DenseNet網絡作者是同一個人,文章的貢獻主要是提出隨機深度,在訓練時隨機在resnet網絡中By pass一些層,而在測試時使用整個網絡,這樣在訓練時時間較少且能夠提高模型性能,思路和dropout很像,只是現在drop的是某些層。在網絡訓練過程中,隨機去掉一些層並沒有影響算法的收斂性,同時去掉中間幾層對最終結果影響也很小,說明ResNet每一層學習的特徵信息都非常少,也就是說,ResNet具有很好的冗餘性。
作者使用殘差塊作爲基本單位,在訓練中,如果一個特定的殘差塊被啓用了,那麼它的輸入就會同時流入shortcut和權重層,否則輸入就只會流入shortcut。在訓練的過程中,每一個層都有一個“生存概率”,並且都會被隨機丟棄。在測試過程中,所有的block都將保持激活狀態,而且block都將根據其在訓練中的生存概率進行調整。這種方法減少了訓練時間,並在四個數據集上(cifar-10, cifar-100, SVHN, imageNet)顯著改善了測試錯誤率。
現在回到DenseNet網絡。DenseNet網絡論文開篇很直白地說:最近的研究表明,如果卷積網絡在接近輸入和接近輸出的層之間包含較短的連接,那麼,該網絡可以顯著地加深,變得更精確並且能夠更有效地訓練。本文基於這個觀察提出了DenseNet網絡。
DenseNet網絡結構:
在這裏插入圖片描述
DenseNet網絡中每兩個層之間都有直接的連接,因此該網絡的直接連接個數爲Lx(L+1)/2。對於每一層,使用前面所有層的特徵圖作爲輸入,並且使用其自身輸出的特徵圖作爲所有後面層的輸入。相比與ResNet,DenseNet的每個shortcut實現的是concate操作,而不是ResNet的add(summation)操作。
受到resnetv2網絡的啓發,現在將殘差模塊中的卷積變爲BN->ReLU->Conv(3x3)的連續操作,稱爲複合函數。當concate時,前面淺層的feature map的hw可能是現在的feature map的兩倍或更大,這時不能直接concate。因此,作者將網絡劃分爲多個密集連接的密集塊(見下圖),將塊之間的層稱爲過渡層,由過渡層進行卷積和池化。實驗中使用的過渡層包括BN和1×1卷積,然後是2×2平均池化。
在這裏插入圖片描述
另外文章引入了一個增長率的概念。如果每個複合函數H輸出k個feature map,那麼第l層有k0+k×(l−1)個輸入的feature map,其中k0是輸入層的通道數,論文裏面將k稱爲增長率(Growth rate)。DenseNet和resnet相比的一個優點是設置很小的k值,使得網絡更窄從而參數更少。在dense block中每個卷積層的輸出feature map的數量k都很小(小於100),而不是像其他網絡一樣動不動就幾百上千的寬度。另外論文還觀察到這種denseblock有正則化的效果,對過擬合有抑制作用。
對應於resnet的bottle neck block,Densenet也設計了bottle neck block,並將其稱爲DenseNet-B,即具有BN-ReLU-Conv(1×1)和BN-ReLU-Conv(3×3)版本的複合函數。這種bottle neck的設計對於DenseNet依然有效。
最後是不同的DenseNet的網絡結構:
在這裏插入圖片描述

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

文章地址:https://arxiv.org/pdf/1704.04861.pdf
本文即MobileNetv1網絡。這篇文章提出了一種可大幅度降低參數量的卷積方式:深度可分離卷積(Depthwise Separable Convolution)。可見下圖:
在這裏插入圖片描述
這種卷積是將普通卷積進行了分解,分解成了一個depthwise convolution和一個1x1的卷積叫做pointwise convolution。depthwise卷積即對每個輸入通道單獨使用一個卷積核處理。pointwise卷積即對depthwise計算出來的結果進行1x1的卷積運算。標準的卷積運算是一步中就包含了filter計算和合並計算,然後直接將輸入變成一個新的尺寸的輸出。Depthwise separable convolution是將這個一步的操作分成了兩層,一層做filter計算,一層做合併計算。這種分解的方式極大的減少了計算量和模型的大小。
舉例:
假設輸入channel=M,輸出channel=N,feature map的h和w卷積前後保持不變,卷積核爲3x3。即輸入的feature map爲(M,h,w),輸出的feature map爲(N,h,w)。
若使用標準卷積,則每個卷積核的尺寸爲3x3xM,每個卷積核都在整個輸入的feature map上卷積,輸出的feature map爲(1,h,w)。要輸出channel=N,則要N個這樣的卷積核,將每個卷積核輸出的feature map在channel上concate起來,得到的feature map爲(N,h,w)。
如果使用深度可分離卷積(Depthwise Separasble Convolution),這個標準卷積運算分成了兩步:首先做Depthwise Convolution,每個 Depthwise Convolution的卷積核爲3x3x1,共有M個卷積核,輸出的feature map爲(M,h,w)。然後做Pointwise Convolution, 每個 Pointwise Convolution卷積核爲1x1xM,共有N個卷積核,得到的feature map爲(N,h,w)。
這樣參數量由3x3xMxN減少到3x3x1xM+1x1xMxN,可以看到減少了接近8/9的計算量。

作者還在文章提出了兩個超參數來控制網絡的大小:寬度因子(Width Multiplier)和分辨率因子(Resolution Multiplier)。寬度因子乘在input channel和output channel前,控制channel數。分辨率因子乘在feature map的寬高前,控制分辨率。

MobileNetV2: Inverted Residuals and Linear Bottlenecks

文章地址:https://arxiv.org/pdf/1801.04381.pdf
本文即MobileNetV2網絡。本文的核心思想:線性瓶頸和倒置殘差。
作者將經過激活層後的張量爲感興趣流形,維度爲H×W×C,C爲channel,文中稱爲寬度。作者說長期以來一直認爲神經網絡中感興趣的流形可以嵌入到低維子空間中,即真實的感興趣流形只是C個channel中的一個低維子空間。也就是說,我們降低C似乎就可以了。但是,由於我們的卷積後都會有ReLU激活函數,對於感興趣流形佔比大的低維子空間,通過relu層有較高的概率使得比較多的輸出置0,這就會丟失許多有用的信息。如果經過relu後參數非0,那麼輸出和輸入必定是經過了一個線性變換,也就是說此時relu僅僅是一個線性分類器。此外,作者認爲如果輸入流形可以嵌入到激活空間的一個子空間裏(這個子空間可以通過Relu的非零部分),Relu可以保留信息並引入一定的複雜性。
由此得到結論:若經過ReLU後感興趣流形都非零,就意味着其僅僅是經過了一個線性變換;若要保持輸入的感興趣流形的完整信息,就必須要讓輸入流形位於輸入空間的低維子空間。
由此就可以給出解決方案,我們不能直接降低維度,因爲channel數較低時通過relu層會有相對高的概率使較多的輸出爲0,要想不爲0,就要使用relu的線性部分,相當於接了個線性分類器。因此使用linear bottleneck,消除了低維空間中relu對特徵的破壞。要想保持輸入的感興趣流形的完整信息,那麼就先升維再降維,即使用Inverted residuals block。
Linear Bottleneck:
在這裏插入圖片描述
即在MobileNetv1深度可分離卷積的基礎上,添加了一個1×1的卷積層,使得feature map的值非零,消除低維空間中relu對特徵的破壞。上圖圖c中是一個完整的Linear Bottleneck,深度卷積(ReLU6激活)->逐點卷積(ReLU6激活)->1×1卷積(Linear激活)。圖d是圖c緊跟着的下一層,即一個循環結構。
Inverted residuals block:
在這裏插入圖片描述
標準的殘差模塊是先降維後升維,但Bottleneck residual block是一個先升維後降維的一個流程,與標準殘差剛好相反,所以叫做倒置殘差。作者在linear bottleneck的第一層和第二層之間設置了一個擴展係數t(expansion factor),該係數用於增加整個linear bottleneck的通道數(即增加輸入的維度,便於興趣流形的恢復)。同時借用殘差網絡的思想,使用shortcut連接輸入和輸出。結合而成就成爲Bottleneck residual block。
Bottleneck residual block具體結構:
逐點卷積(ReLU6激活)->深度卷積(ReLU6激活)->1×1卷積(Linear激活),然後shortcut連接。shortcut連接只在stride=1,輸入輸出維度相同的情況下纔用到,其他情況都不會用到shortcut連接。

Searching for MobileNetV3

文章地址:https://arxiv.org/pdf/1905.02244.pdf
本文即MobileNetV3。MobileNetV3是用NAS搜索出來的。搜索基於NAS搜出來的MnasNet。使用了MobileNetV1的depthwise convolution和pointwise convolution,也使用了MobileNetV2的Inverted residuals block,同時還加入了SE模塊( squeeze and excitation)。使用了新的激活函數HardSwish,對嵌入式環境更友好。HardSwish公式如下:
hswish[x]=xReLU6(x+3)6 \mathrm{h}-\mathrm{swish}[x]=x \frac{\operatorname{ReLU} 6(x+3)}{6}
搜索出的結構有large和small兩種:
在這裏插入圖片描述
在這裏插入圖片描述

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

文章地址:https://arxiv.org/pdf/1707.01083.pdf
本文即ShuffleNetv1網絡。本文采用分組卷積(pointwise group convolution)與通道混合(channel shuffle)操作構造了一個新的輕量級網絡。文中提出使用分組卷積去減少原本1x1卷積的計算複雜度,但是這樣會打斷chanel之間的信息流動,爲此使用通道混合的機制來維持信息的流動性,對於其它的部分是使用深度可分離卷積實現計算量的降低。
ResNeXt網絡中在3X3卷積層使用了分組卷積,但前後的1x1卷積仍然具有較大的計算量。爲解決這個問題,可以在1x1卷積上也使用組卷積,這可以顯著降低計算量。但是如果1x1組卷積和3x3組卷積相互疊加,可能會產生一種副作用:來自某個通道的輸出僅來自一小部分的輸入通道。這會弱化模型的表示能力。
如果我們允許組卷積從不同的組獲得輸入數據,輸入和輸出通道將完全相關。具體來說,對於從前一組卷積層生成的特徵圖,我們可以先將每個組中的通道劃分爲多個子組,然後在下一層中爲每個組提供不同的子組。通過通道shuffle操作可以有效和優雅地實現這一點。假設一個由g個組構成一個卷積層,其輸出有g×n個通道。我們首先將輸出通道尺寸reshape爲(g,n),轉置然後將其展平爲下一層的輸入。即使兩個卷積具有不同的組數,該操作仍然有效。此外,channel shuffle也是可微的,這意味着它可以嵌入網絡結構中進行端到端的訓練。
在這裏插入圖片描述
如上圖,對a,輸入的卷積被分爲三個組,之後再在各個組上疊加捲積,存在的問題就是組間的信息是被阻隔的。由此提出b,將每個子組中的信息也進行劃分,之後相互混合得到組合的信息;在此基礎上使用更有效的方式實現得到c中的結構,這樣shuffle操作之前和之後的group可以不同,且shuffle操作可微,能端到端進行訓練。
由此提出ShuffleNet Unit:
在這裏插入圖片描述
a是使用深度可分離卷積加速之後的殘差塊,其1x1卷積部分的計算量還是比較大的。b是文章提出的Shuffle Unit,對1x1的卷積使用分組卷積進行替換,第一個分組卷積之後經過channel shuffle實現特徵混合,再送入深度可分離卷積(注意這裏沒有使用ReLU)。c是b中stride爲2時的網絡結構。

ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

文章地址:https://arxiv.org/pdf/1807.11164.pdf
本文即ShuffleNet V2網絡。本文提出FLOPs不能作爲衡量目標檢測模型運行速度的標準,因爲內存訪問成本(Memory access cost)也是影響模型運行速度的一大因素。文中提出了四條準則:

  • 輸入通道數與輸出通道數保持相等可以最小化內存訪問成本(memory access cost,MAC);
  • 分組卷積中使用過多的分組數會增加內存訪問成本(MAC);
  • 網絡結構太複雜(分支和基本單元過多)會降低網絡的並行程度;
  • Element-wise 的操作消耗也不可忽略(包括ReLU,Tensor的相加,偏置相加等等操作)。

在這裏插入圖片描述
上圖表示在4種網絡都有相近的FLOPs,但是網絡的速度在不同的平臺上都不相同。因此,只通過FLOPs來衡量不是很準確。因爲一些因素並沒有考慮進去,一個就是內存訪問成本(memory access cost,MAC),如當框架在執行分組卷積等操作時,運算能力強勁時可能可以忽略,但是在一些計算能力有限的平臺上面就無法忽略了。還有就是網絡的並行化程度,在相同的 FLOPs 下,網絡並行化程度更高的網絡速度更快。
作者根據上面的4條準則做了一系列實驗,得到下列結論:

  • 卷積層使用相同的輸入輸出通道數;
  • 意識到使用大的分組數所帶來的壞處;
  • 降低網絡結構的離散程度(減少分支以及所包含的基本單元);
  • 減少element-wise操作。

基於上面的結論,提出了ShuffleNet V2網絡。
在這裏插入圖片描述
在shuffleNet中,depthwise convolution和瓶頸結構增加了MAC,用了太多的group,跨層連接中的element-wise Add 操作也比較多。所以在 shuffleNet V2 中增加了幾種新特性:channel split即將通道數一分爲2,化成兩分支來代替原先的分組卷積結構(圖c),並且每個分支中的卷積層都是保持輸入輸出通道數相同,其中一個分支不採取任何操作減少C,H,W,最後使用concate代替原來的elementy-wise add,並且後面不加ReLU,再加入channel shuffle來增加通道之間的信息交流。 對於下采樣層,在這一層中對通道數進行翻倍。 在網絡結構的最後,即平均值池化層前加入一層 1x1 的卷積層來進一步的混合特徵。

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

文章地址:https://arxiv.org/pdf/1905.11946.pdf
這篇文章先提出了一個觀點,並用實驗證明:單獨放大channel,depth,resolution中的某一個因素,在acc達到80%左右後收益會迅速降低。因此,作者認爲這三者之間存在一定的關係。比如,根據經驗,對於更高分辨率的圖像,應該增加網絡深度,以便較大的接收場可以更好的提取特徵,這些特徵在較大的圖像中包括更多的像素。相應地,當分辨率較高時,還應增加網絡寬度。
因此,channel,depth,resolution應當滿足某種關係一起放大,才能用最少的flops增加帶來最大的acc提升。
作者提出來一種約束關係:
 depth: d=αϕ width: w=βϕ resolution: r=γϕ s.t. αβ2γ22α1,β1,γ1 \begin{aligned} \text { depth: } d &=\alpha^{\phi} \\ \text { width: } w &=\beta^{\phi} \\ \text { resolution: } & r=\gamma^{\phi} \\ \text { s.t. } \alpha \cdot \beta^{2} \cdot \gamma^{2} & \approx 2 \\ \alpha & \geq 1, \beta \geq 1, \gamma \geq 1 \end{aligned}
這樣改變φ時就是2的φ次方。首先作者將φ固定爲1,網格搜索搜出最佳值α= 1.2,β= 1.1,γ= 1.15。這就是EfficientNet-B0。在這裏插入圖片描述
然後將α,β,γ固定爲常數,並使用不同φ值放大,得到EfficientNet-B1至B7。

        # Coefficients:   width,depth,res,dropout
        'efficientnet-b0': (1.0, 1.0, 224, 0.2),
        'efficientnet-b1': (1.0, 1.1, 240, 0.2),
        'efficientnet-b2': (1.1, 1.2, 260, 0.3),
        'efficientnet-b3': (1.2, 1.4, 300, 0.3),
        'efficientnet-b4': (1.4, 1.8, 380, 0.4),
        'efficientnet-b5': (1.6, 2.2, 456, 0.4),
        'efficientnet-b6': (1.8, 2.6, 528, 0.5),
        'efficientnet-b7': (2.0, 3.1, 600, 0.5),

在這裏插入圖片描述
EfficientNet系列相比resnet確實非常高效,如EfficientNet-B1 flops只有res152的1/16,但在imagenet上的top1 acc比res152還要高1.4個點。但要注意的是,flops降低到1/16的原因有很大一部分是因爲採用了group conv(同樣尺寸的卷積用group conv只有regular conv的1/9多一點),而group conv在gpu上的推理速度並不是regular conv的1/9,而是要慢的多。因此,efficientnet實際的推理速度取決於當前框架對group conv的計算效率。另外,論文中的訓練方式非常另外,且包含的trick非常多,這個net在實際fine tune時的效果如何需要進一步驗證(有人反饋在某些數據集上fine tune的效果不如resnet34)。

Res2Net: A New Multi-scale Backbone Architecture

文章地址:https://arxiv.org/pdf/1904.01169.pdf
本文模型可看下圖:
在這裏插入圖片描述
本文對resnet的bottleneck進行了修改,將3×3卷積替換爲分組逐次卷積再element wies add的操作,使得網絡可以學習到multi-scale的feature。同時,修改後的Bottleneck還可以與ResNext和SENet中的基礎block整合在一起。修改後的res2net50和原來的resnet50 flops和Inference time基本一致,模型性能有所提高。

receptive field

如何從前往後計算感受野

從前向後計算感受野的方法:
四個公式:
nout=nin+2pks+1jout=jinsrout=rin+(k1)jinstartout=startin+(k12p)jin \begin{aligned} n_{o u t} &=\left|\frac{n_{i n}+2 p-k}{s}\right|+1 \\\\ j_{o u t} &=j_{i n} * s \\\\ r_{o u t} &=r_{i n}+(k-1) * j_{i n} \\\\ s t a r t_{o u t} &=s t a r t_{i n}+\left(\frac{\mathrm{k}-1}{2}-\mathrm{p}\right) * j_{i n} \end{aligned}
其中n爲h和w的長度,r爲當前層感受野的大小,j爲兩個相鄰特徵跳躍的距離,start爲左上角特徵(第一個特徵)的中心座標。注意feature map第一個特徵的感受野的中心座標就等於這個特徵的中心座標。
當卷積核大小爲k,padding大小爲p,步長爲s時,第一個式子可計算出feature map的h和w長度;第二個式子計算輸出feature map的特徵間的間隔距離j,其等於上一層的間隔值乘以卷積的步長;第三個式子計算輸出的feature map的感受野大小,其等於前一層感受野大小加上(k-1)xjin;第四個式子計算輸出的feature map的第一個特徵的感受野的中心座標。
對於第一層輸入層,n=image_size,r=1,j=1,start=0.5。

上面的計算方式還可以用遞推公式計算:
lk=lk1+((fk1)i=1k1si) l_{k}=l_{k-1}+\left(\left(f_{k}-1\right) * \prod_{i=1}^{k-1} s_{i}\right)
對於第一層輸入層,l0=1,k=1,s=1。計算方式來自這裏:http://shawnleezx.github.io/blog/2017/02/11/calculating-receptive-field-of-cnn/

還有一種更簡單的推算方法:
初始feature map層的感受r=1。每經過一個kxk卷積核、s=1的卷積層感受野 r = r + (k - 1)。每經過一個kxk卷積核、s=2的卷積層或max/avg pooling層,感受野 r = (r x 2) + (k - 2)。1x1卷積核、s=1的卷積層不會改變感受野。對於FC層和GAP層,感受野就是整個輸入的圖像。對於多分支的網絡,按照感受野最大的支路計算。shotcut、ReLU, BN,dropout等操作不影響感受野。整個網絡全局的s等於所有層s的累乘。所有層的padding都可以等效加在輸入圖像,等效值P,直接用卷積的輸入輸出公式反推:
fout=(finr+2P)/S+1 f_{o u t}=\left(f_{i n}-r+2 P\right) / S+1

Understanding the Effective Receptive Field in Deep Convolutional Neural Networks

文章地址:https://arxiv.org/pdf/1701.04128.pdf
本文提出了有效感受野的概念。上面的計算是理論感受野。理論感受野內的所有像素對輸出的影響並不相同,事實上,理論感受野內的像素對輸出的影響是按高斯分佈的,如:
在這裏插入圖片描述
本文中將任何值大於中心點1-95.45%的像素都被視爲有效感受野中的像素。本文的得出下列結論:

  • 卷積核權重均勻分佈和隨機分佈時,有效感受野服從(近似服從)Gaussian分佈;
  • ReLU操作的加入也會使得有效感受野服從(近似服從)Gaussian分佈;
  • dropout的加入不會改變有效感受野的Gaussian分佈;
  • 下采樣和dilation會增加有效感受野的大小,其中下采樣的效果更明顯;
  • skip-connections會減小有效感受野的大小;
  • 只包含卷積層的情況下,隨着卷積層數n的增加有效感受野按√n倍增加。同時,與理論感受野相比,有效感受野按1 /√n倍縮小。

network Visualization

Learning Deep Features for Discriminative Localization

文章地址:https://arxiv.org/pdf/1512.04150.pdf
本文即我們通常所說的CAM方法。在CAM中,要做可視化,需要將最後一層卷積層後先接一個GAP層,然後通過一個全連接層實現相應的分類結果,全連接層的權重稱爲w1,w2…。由於classification score是GAP之後的值與相應權重的乘積,因此可以看成是最後一層卷積的feature map與相應權重的乘積。即全連接層的每個權重代表最後一層卷積的feature map每個channel的feature map對最後的分類結果的貢獻度,我們對其做element-wise muli後求和,就是CAM得到的Class Activation Map。
需要注意的是,在CAM之前已經有人用global max pooling來做類似的Activation Map,過程基本一樣,就是GAP換成了global max pooling。但是GMP標註的結果更限於物體的某個關鍵點,而不能確定物體的完整輪廓。使用GAP會鼓勵網絡識別對象的完整範圍。
CAM的缺點就是需要修改模型,添加GAP層和修改全連接層,並且需要重新訓練,使用起來不太方便。

Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization

文章地址:https://arxiv.org/pdf/1610.02391.pdf
Grad-CAM全稱是Gradient-weighted Class Activation Mapping,直接翻譯是梯度加權分類激活映射。簡單說就是用CNN做圖像分類的時候,到底是根據圖像的哪裏來判斷屬於這個分類的,將模型關注的區域在圖像上明確映射出來。
Grad-CAM是對CAM的推廣,其基本思路和CAM是一致的,也是通過得到每個channel的feature map對應的權重,最後求一個加權和。它與CAM的主要區別在於求權重的過程。CAM通過替換全連接層爲GAP層,重新訓練得到權重,而Grad-CAM用梯度的全局平均來計算權重。計算對某個類C的第k個channel的feature map的權重:
αkc=1Zijglobal average pooling ycAijkgradients via backprop  \alpha_{k}^{c}=\overbrace{\frac{1}{Z} \sum_{i} \sum_{j}}^{\text {global average pooling }} \underbrace{\frac{\partial y^{c}}{\partial A_{i j}^{k}}}_{\text {gradients via backprop }}
yc爲進softmax前的類別c的分數,Z爲feature map像素點個數, Akij表示第k個channel的feature map中(i,j)位置處的值。
LGradCAMc=ReLU(kαkcAklinear contination ) L_{\mathrm{Grad}-\mathrm{CAM}}^{c}=\operatorname{Re} L U(\underbrace{\sum_{k} \alpha_{k}^{c} A^{k}}_{\text {linear contination }})
然後將feature map上每個點用每個channel的權重x值再求和,再經過relu函數。用relu函數是因爲我們僅對當前的類具有正面影響的特徵感興趣,而負值特徵可能屬於圖像中的其他類別,因此我們將其過濾掉。
Grad-CAM的最大好處就是不需要修改模型,也不需要重新訓練模型,可以立即使用。

data augmentation

AutoAugment: Learning Augmentation Strategies from Data

文章地址:https://arxiv.org/pdf/1805.09501.pdf
本文通過NAS搜索得到了一種data augment的方式。搜索時以兩個augment操作作爲一個子策略,每個操作有兩個超參需要搜索:應用操作的prob(0.1-1.0,十個離散值)和操作的level(0-10,11個離散值)。一共搜索了25組子策略,使用時生成一個隨機index選擇一個子策略,然後按順序和操作的prob選擇是否要使用這個子策略中的augment操作。
該搜索方法的搜索空間爲(16×10×11)的10次方(25組子策略是分5次搜索的)。由於搜索空間太大,因此搜索時只用ImageNet的一個子集(120類,6000個sample)來進行搜索。

RandAugment: Practical automated data augmentation with a reduced search space

文章地址:https://arxiv.org/pdf/1909.13719.pdf
由於autoaugment的搜索空間太大,搜索時花的計算代價太大了。本文的搜索方法相當於一種簡化。本文只設立了兩個超參數:做幾次augment操作和augment的level(所有augment操作固定爲同一level),這樣就將參數空間降低到了16x31(16個操作,31個level)。這樣就大大縮短了搜索時間,同時現在可以在imagenet的整個數據集上進行搜索,這樣可以避免在子集上搜索時容易搜索到次優解的問題。

GridMask Data Augmentation

文章地址:https://arxiv.org/pdf/2001.04086.pdf
本文方法效果圖:
在這裏插入圖片描述
本文提出了一種替代autoaugment的data augment方法。該方法使用時用來替代autoaugment。即原本的augment策略是random crop+horizontal flip+autoaugment,使用本方法時爲random crop+horizontal flip+grid mask。
本方法可以看成是生成一個隨機的mask網格陣列。首先設定一個超參數r,r影響網格mask之間的間距。r與數據集的複雜程度密切相關,根據本文實驗,imagenet上r=0.6效果最好,cifar10上r=0.4效果最好。確定r後,根據上式可計算出保留比率k。
k=1(1r)2=2rr2 k=1-(1-r)^{2}=2 r-r^{2}
然後計算l:
l=rd l=r*d
其中d是一個完整單元的邊長,取的是[96,224]間的隨機數,一個完整單元內包含一個(1-r)xd大小的mask。
然後再根據下面的公式隨機生成δx和δy,δx和δy決定了第一個完整單元距離圖像左上角H和w的距離。
δx(δy)=random(0,d1) \delta_{x}\left(\delta_{y}\right)=\text {random}(0, d-1)
確定了r、d、δx和δy後我們就可以計算出一個陣列Mask,然後與原圖相乘做augment。作者的開源代碼中還發現生成mask後還會隨機旋轉(0,360)中某個角度。
本方法的亮點是隻做一種data augmentation就超過了autoaugment的點數。雖然只有一種augment操作,但通過d,δx和δy這個變量的隨機性保證了生成的增強圖像的隨機性。另外,作者認爲一開始網絡沒有過擬合時不需要做augment,因此是逐漸增加augment的頻率的。具體來說,即每張輸入圖像有0.8xmin(1,current_epoch/max_epoch)的概率做augment,否則不做augment。max_epoch是總epoch數×80%。
對於某些特殊任務,如reid任務,由於傳統的顏色、亮度、對比度、旋轉等augment操作都會掉點,只能使用random crop和random erase,本方法可以用來代替random erase。

trick

海康威視研究院ImageNet2016競賽經驗分享

文章地址:https://zhuanlan.zhihu.com/p/23249000
常用的data augmentation方法:

  • Color Jittering:對顏色的數據增強:圖像亮度、飽和度、對比度變化;
  • PCA Jittering:首先按照RGB三個顏色通道計算均值和標準差,再在整個訓練集上計算協方差矩陣,進行特徵分解,得到特徵向量和特徵值,用來做PCA Jittering;
  • Random Scale:尺度變換;
  • Random Crop:採用隨機圖像差值方式,對圖像進行裁剪、縮放;包括Scale Jittering方法(VGG及ResNet模型使用)或者尺度和長寬比增強變換;
  • Horizontal/Vertical Flip:水平/垂直翻轉;
  • Shift:平移變換;
  • Rotation/Reflection:旋轉/仿射變換;
  • Noise:高斯噪聲、模糊處理;

這裏有一篇文章介紹的很細緻:https://www.zhihu.com/question/35339639/answer/406894510

本文使用的data augmentation方法:

  • 對顏色的數據增強,包括色彩的飽和度、亮度和對比度等方面,主要從Facebook的代碼裏改過來的* PCA Jittering,最早是由Alex在他2012年贏得ImageNet競賽的那篇NIPS中提出來的。我們首先按照RGB三個顏色通道計算了均值和標準差,對網絡的輸入數據進行規範化,隨後我們在整個訓練集上計算了協方差矩陣,進行特徵分解,得到特徵向量和特徵值,用來做PCA Jittering。
  • 在圖像進行裁剪和縮放的時候,我們採用了隨機的圖像差值方式。
  • Crop Sampling,就是怎麼從原始圖像中進行縮放裁剪獲得網絡的輸入。比較常用的有2種方法:一是使用Scale Jittering,VGG和ResNet模型的訓練都用了這種方法。二是尺度和長寬比增強變換,最早是Google提出來訓練他們的Inception網絡的。我們對其進行了改進,提出Supervised Data Augmentation方法。

Crop Sampling:
以往的Crop Sampling隨機選取中心點,這樣裁剪得到的圖片可能不包含標籤物體,改進後的方法如下:我先按照通常方法訓練一個模型,然後用這個模型去生成真值標籤的heatmap,這個Map指示了目標物體出現在不同位置的概率,再依據這個概率,在Map上隨機選擇一個位置,然後映射回原圖,在原圖那個位置附近去做Crop。通過引入這種有監督的信息,我們可以利用正確的信息來更好地訓練模型,以提升識別準確率。
Label Shuffling:
一種在線式的類別平衡,即取出一個batch的數據後,對圖像列表按照標籤順序進行排序(比如是三分類問題,標籤爲0,1,2,就按0,1,2的順序排)。然後計算每個類別的樣本數量,並得到樣本最多的那個類別的樣本數。根據這個最多樣本數,對每類隨機都產生一個隨機排列的列表(比如標籤2樣本數最多爲5,那麼就對標籤0,1,2各產生一個打亂的序號爲0-4的列表)。然後用每個類別的列表中的數對各自類別的樣本數求餘,得到一個圖片的索引。用這個索引提取圖像,形成最終的batch(即樣本數少的類別有些圖像會過採樣,但是是上面這種方式來確定哪個圖片要過採樣)。Label Shuffling方法的優點是只需要原始的batch圖片,不需要對整個數據集來做類別平衡。

Bag of Tricks for Convolutional Neural Networks

文章地址:https://arxiv.org/pdf/1812.01187.pdf
高效訓練的trick:

  • Linear scaling learning rate:即增大batchsize時新的lr=lr(new_batch_size/old_batch_size)。關於這個可以看這篇文章:https://blog.csdn.net/zxyhhjs2017/article/details/79144660 。實際取值時可以取的略小,比如在新的lr基礎上開平方,取開方後的值;
  • Learning rate warmup:訓練剛開始時,所有的參數都是隨機值,如果直接使用較大的lr會造成數值的不穩定,所以我們可以先用一個較小的lr,假設我們前m個batches是用來warmup的,我們設置的初始lr爲n,那麼當爲第i個epoch時,學習率設爲n(i/m);
  • Zero γ:即Resnet每一個block最後一層的BN層,BN層首先標準化其輸出,然後進行尺度的變換,我們現在將尺度變換中的參數γ初始化爲0,相當於減少了層數使得初始階段更加易於訓練;
  • No bias decay:指weight decay只用於卷積層和FC的weights,biases和BN層的γ和β都不用。

訓練方法改進的trick:

  • Cosine Learning Rate Decay:Cosine Learning Rate Decay是2016年提出來的,公式如下:
    ηt=12(1+cos(tπT))η \eta_{t}=\frac{1}{2}\left(1+\cos \left(\frac{t \pi}{T}\right)\right) \eta
    其中T是總batch數,t是當前batch索引,η是初始學習率。
    從最後的準確率來看,餘弦衰減似乎並無優勢,也沒有加速收斂。
  • Label Smoothing:公式如下:
    qi={1ε if i=yε/(K1) otherwise  q_{i}=\left\{\begin{array}{ll}{1-\varepsilon} & {\text { if } i=y} \\ {\varepsilon /(K-1)} & {\text { otherwise }}\end{array}\right.
    文中取值ε=0.1,K=1000。
  • Knowledge Distillation:引入與soft target的loss項,p是ground truth,r是student模型的pred,z是teacher模型的pred。
    (p, softmax (z))+T2( softmax (r/T), softmax (z/T)) \ell(p, \text { softmax }(z))+T^{2} \ell(\text { softmax }(r / T), \text { softmax }(z / T))
  • Mixup Training:將兩個樣本及其label做線性加權,得到新樣本。

attention module

Squeeze-and-Excitation Networks

文章地址:https://arxiv.org/pdf/1709.01507.pdf
文章思路用下圖即可說明清楚:
在這裏插入圖片描述
輕量級的attention模塊,參數量和計算量增加很少。作者使用特徵圖GAP再加上全連接層產生每個channel的權重,然後和原特徵圖按channel相乘。如果backbone是resnet網絡,那麼還要將得到的特徵圖再和原特徵圖相加。

Selective Kernel Networks

文章地址:https://arxiv.org/pdf/1903.06586.pdf
文章思路看下圖:
在這裏插入圖片描述
輕量級的attention模塊,參數量和計算量增加很少。作者認爲對於不同任務,使用3x3卷積的特徵得到的表現和使用5x5卷積的特徵的表現並不一樣,有些特徵需要大一些的卷積核提取出的特徵,因此先將兩個卷積核提取的特徵相加,然後做GAP和FC,再分爲兩個FC分支,使用softmax進行約束,這樣對於兩個卷積核的特徵就都產生按channel的權重,且同一個channel的權重和爲1,最後得到的特徵圖爲兩個卷積核的特徵按channel權重相加。

Spatial Group-wise Enhance: Improving Semantic Feature Learning in Convolutional Networks

文章地址:https://arxiv.org/pdf/1905.09646.pdf
文章思路可以看下圖:
在這裏插入圖片描述
輕量級的attention模塊,參數量和計算量增加很少。首先將feature map按channel維度分爲G個group,reshape,然後對每個group進行global average pooling得到g向量。g向量與reshape後的feature map進行element-wise dot,再進行norm(注意每個group要學習兩個縮放偏移參數使得normalize操作可被還原),之後使用sigmoid進行激活,這樣我們得到了這個group的mask,再用這個mask與reshape後的feature map進行element-wise dot即可。最後reshape成(b,c,h,w)。

Non-local Neural Networks

文章地址:https://arxiv.org/pdf/1711.07971.pdf
文章思路可看下圖:
在這裏插入圖片描述
卷積是對局部區域進行的操作,所以它們是典型的local操作。受計算機視覺中經典的非局部均值(non-local means)的啓發,本文提出一種non-local operations用於捕獲長距離依賴(long-range dependencies),即如何建立圖像上兩個有一定距離的像素之間的聯繫,如何建立視頻裏兩幀的聯繫,如何建立一段話中不同詞的聯繫等。
non-local操作在計算某個位置的響應時,是考慮所有位置features的加權,所有位置可以是空間的,時間的,或者空間+時間的。
模塊如上圖,這也是一個即用即插的模塊,可用於分類、檢測、分割等任務。

GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond

文章地址:https://arxiv.org/pdf/1904.11492.pdf
文章思路可看下圖:
在這裏插入圖片描述
在這裏插入圖片描述
作者先將non local block簡化爲simple non local block,然後參考SE block的做法提出了GC block(圖d)。該block前半部分是Non local block,後半部分是SE block的改進。
相比於SNL,SNL中的transform的1x1卷積在res5中是2048x1x1x2048,其計算量較大,所以借鑑SE的方法,加入壓縮因子,爲了更好的優化,還加入了layernorm。
相比於SE,一方面是提取的全局信息更加充分(其實這一點在後續的實驗中說服力不是很強,單獨avg pooling+add,只掉了0.3個點,但是更加簡潔),另一方面則是加號和乘號的區別,而且在實驗結果上,加號比乘號有顯著的優勢。
該block可用於分類、檢測、分割等任務。

CBAM: Convolutional Block Attention Module

文章地址:https://arxiv.org/pdf/1807.06521.pdf
文章思路可看下圖:
在這裏插入圖片描述在這裏插入圖片描述
文章有兩個創新點:一是同時用global average pooling和global max pooling的信息來計算attention模塊的權重,二是既在通道上做attention,又在空間位置上做attention。作者通過實驗證明先進行通道上的attention,再進行空間位置上的attention效果要比並行做兩個attention好。

ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks

文章地址:https://arxiv.org/pdf/1910.03151.pdf
文章思路可看下圖:
在這裏插入圖片描述
作者先研究了senet(r爲壓縮比):
SE(Global average pooling-FC[r]-ReLu-FC[r]-sigmoid)
SE-Var1(Global average pooling-sigmoid)
SE-Var2(Global average pooling-channel個w與gap點乘-sigmoid)
SE-Var3(Global average pooling-FC-sigmoid)
可以發現只有一層FC的Var3比有兩層的SE模塊效果更好,這說明不降維對attention模塊權重的學習更好。另外,作者認爲同其他所有通道交互不如只與附近k個通道的信息進行交互,因此作者設計了ECA模塊。該模塊先通過下式計算k:
k=ψ(C)=log2(C)γ+bγodd k=\psi(C)=\left|\frac{\log _{2}(C)}{\gamma}+\frac{b}{\gamma}\right|_{o d d}
其中γ=2,b=1。
然後先進行global average pooling,再用k作爲卷積核大小對GAP之後的feature map進行一維卷積,最後與原feature map相乘(channel wise)。

dropout

dropout在前幾年往往用在全連接層中,用在卷積層中效果並不明顯,原因是卷積層總是卷積一塊相鄰的空間位置,少掉一兩個特徵影響並不大。在resnet這樣的short cut連接的網絡出現之後,dropout使用的場合就越來越少了。
現在除非是數據集太小容易過擬合,否則一般不考慮使用dropout。

Dropout: A Simple Way to Prevent Neural Networks from Overfitting

文章地址:http://jmlr.org/papers/volume15/srivastava14a.old/srivastava14a.pdf
每次更新參數之前,每個特徵值有一定的概率被丟棄,假設爲p%,p可以設爲20或者根據驗證集的表現來選取,輸入層的p比較小,保留概率接近於1;測試階段不dropout,保留所有特徵值,但是要乘以保留概率1-p%,這是爲了保證輸出期望一致。
對每個樣本都隨機地丟棄一部分特徵值可以使每個神經元不依賴所有其他神經元來做出決策,這樣學習到的特徵更加獨立。由於每個batch都是隨機丟棄特徵值,相當於每個batch訓練的網絡都不一樣。與完整的Bagging集成不同,Dropout並不是在整個數據集上完整的訓練每個網絡架構,而只在一個批次的數據上(min-batch)訓練不同的網絡架構,因此是一種廉價的Bagging集成近似方法。測試時每個單元乘以保留概率1-p%,這樣的效果近似於對多個不同的瘦網絡做平均。
Dropout隨機丟棄部分特徵值,打破了神經元之間相互協作的機制,迫使每個神經元獨立的學習更加魯棒的特徵,避免了某些特徵只有在其它特徵下才有效的情況。因此Dropout類似於L1、L2等正則化效果,通過減少權重提高網絡的魯棒性和泛化能力。

Efficient Object Localization Using Convolutional Networks

文章地址:https://arxiv.org/pdf/1411.4280.pdf
這裏我們只看這篇文章最大的motivation:SpatialDropout。
具體可看下圖:
在這裏插入圖片描述
dropout是在所有維度上完全隨機地丟棄特徵值,而SpatialDropout是指定某個channel,然後按比例直接對某個channel上的一組特徵值全部丟棄。
如:

原始矩陣shape:(1, 7, 5)
[[[ 0.  2.  4.  6.  8.]
  [ 0.  0. 14. 16. 18.]
  [ 0.  0. 24.  0. 28.]
  [ 0. 32. 34.  0.  0.]
  [40.  0.  0.  0. 48.]
  [ 0. 52.  0. 56.  0.]
  [ 0. 62. 64.  0.  0.]]]
dropout:rate=0.5
[[[ 0.  2.  4.  6.  8.]
  [ 0.  0. 14. 16. 18.]
  [ 0.  0. 24.  0. 28.]
  [ 0. 32. 34.  0.  0.]
  [40.  0.  0.  0. 48.]
  [ 0. 52.  0. 56.  0.]
  [ 0. 62. 64.  0.  0.]]]
SpatialDropout:假如設爲(3,1,5),即在第二個維度上進行SpatialDropout,rate=0.5
[[[ 0.  2.  0.  6.  8.]
  [ 0. 12.  0. 16. 18.]
  [ 0. 22.  0. 26. 28.]
  [ 0. 32.  0. 36. 38.]
  [ 0. 42.  0. 46. 48.]
  [ 0. 52.  0. 56. 58.]
  [ 0. 62.  0. 66. 68.]]]

DropBlock: A regularization method for convolutional networks

文章地址:https://arxiv.org/pdf/1810.12890.pdf
卷積層的特徵圖中相鄰位置元素在空間上共享語義信息,而dropout只隨機丟棄單個特徵值,但與其相鄰的特徵值依然可以保有該位置的語義信息,因此dropout對卷積層的效果並不明顯。
DropBlock隨機Drop一個CHW的特徵塊(取一個mask點按block_size大小擴展成塊)。
下面公式中keep_prob可認爲是傳統dropout保留激活單元的概率。有效的seed region 爲 (feat_size - block_size + 1) 的平方,feat_size 爲feature map的size。實際上DropBlock中的dropblock可能存在重疊的區域, 因此上述的公式僅僅只是一個估計。
γ=1keepprobblocksize2featsize2(featsizeblocksize+1)2 \gamma=\frac{1-k e e p_{-} p r o b}{b l o c k_{-} s i z e^{2}} \frac{f e a t_{-} s i z e^{2}}{\left(f e a t_{-} s i z e-b l o c k_{-} s i z e+1\right)^{2}}

Regularization of Neural Networks using DropConnect

文章地址:http://yann.lecun.com/exdb/publis/pdf/wan-icml-13.pdf
文章思路可看下圖:
在這裏插入圖片描述
Dropout在訓練過程中以一定概率p將一部分輸出值置0,在反向傳播更新神經元權重時,由於鏈式求導法則,與該置0輸出值相連的神經元權重不再更新(只是指通過這個輸出值的反向傳播路徑)。
DropConnect與Dropout不同的是,它不是隨機將隱含層節點的輸出值置0,而是將節點中的每個與其相連的輸入權值以p的概率置0。

normalization

四種normalization方法如下圖所示。
在這裏插入圖片描述
batch Normalization是在batch上,對NHW做歸一化,對小batchsize效果不好;
layer Normalization在通道方向上,對CHW歸一化,主要對RNN作用明顯;
instance Normalization在圖像像素上,對HW做歸一化,用在風格化遷移;
Group Normalization是LN和IN的折中,GN在channel方向分group,然後在每個group內歸一化;
Switchable Normalization是將BN、LN、IN結合,賦予權重,讓網絡自己去學習歸一化層應該使用什麼方法。

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

文章地址:https://arxiv.org/pdf/1502.03167.pdf
深度學習都遵循獨立同分布假設,即假設訓練數據和測試數據是滿足相同分佈的,那麼通過訓練數據獲得的模型能夠在測試集獲得同樣的效果。
Batch Normalization用來解決“Internal Covariate Shift”問題。深層神經網絡在做非線性變換前的激活輸入值(y=wx+b)y隨着網絡深度加深或者在訓練過程中,其分佈會逐漸發生偏移或者變動,比如整體分佈逐漸往非線性函數的取值區間的上下限兩端靠近。如果激活函數是sigmoid函數,此時會導致反向傳播時的梯度非常小,即導致梯度消失。
Batch Normalization就是通過一定的規範化,把每層神經網絡輸入值的分佈強行拉回到均值爲0方差爲1的標準正態分佈,這樣使得激活輸入值落在非線性函數對輸入比較敏感的區域,這樣輸入的小變化就會導致損失函數較大的變化,意思是這樣讓梯度變大,避免梯度消失問題產生,而且梯度變大意味着學習收斂速度快,能大大加快訓練速度。
BN是在batch上,對N、H、W做歸一化,而保留通道C的維度。BN對batchsize的大小比較敏感,由於每次計算均值和方差是在一個batch上,所以如果batchsize太小,則計算的均值、方差不足以代表整個數據分佈;BN實際使用時需要計算並且保存某一層神經網絡batch的均值和方差等統計信息,對於對一個固定深度的前向神經網絡(DNN,CNN)使用BN很方便,但對於RNN來說計算很麻煩。
算法流程:

  • 沿着通道計算每個batch的均值u;
  • 沿着通道計算每個batch的方差σ^2;
  • 對x做歸一化;
    x^(k)xi(k)μβ(k)σβ(k)2+ϵ \hat{x}^{(k)} \leftarrow \frac{x_{i}^{(k)}-\mu_{\beta}^{(k)}}{\sqrt{\sigma_{\beta}^{(k)^{2}}+\epsilon}}
  • 加入縮放和平移變量γ和β,注意這是兩個可學習的參數,歸一化後的值爲:
    yi(k)γ(k)x^i(k)+β(k) y_{i}^{(k)} \leftarrow \gamma^{(k)} \hat{x}_{i}^{(k)}+\beta^{(k)}

Layer Normalization

文章地址:https://arxiv.org/pdf/1607.06450.pdf
上面說了BN的兩個缺點:對batchsize的大小比較敏感和不能用在RNN上。LN是針對深度網絡的某一層的所有神經元的輸入按以下公式進行normalize操作。
μl=1Hi=1Hailσl=1Hi=1H(ailμl)2 \mu^{l}=\frac{1}{H} \sum_{i=1}^{H} a_{i}^{l} \quad \sigma^{l}=\sqrt{\frac{1}{H} \sum_{i=1}^{H}\left(a_{i}^{l}-\mu^{l}\right)^{2}}
layerNorm在通道方向上,對CHW歸一化,可以使用在RNN上。
LN中同層神經元輸入擁有相同的均值和方差,Layer Normalization在單條數據內部就能歸一化,不同的輸入樣本有不同的均值和方差;BN中則針對不同神經元輸入計算均值和方差,同一個batch中的輸入擁有相同的均值和方差;LN不依賴於batch size和輸入sequence的長度,因此可以用於batch size爲1和RNN中。LN用於RNN效果比較明顯,但是在CNN上,效果不如BN。

Instance Normalization:The Missing Ingredient for Fast Stylization

文章地址:https://arxiv.org/pdf/1607.08022.pdf
Instance NormalizationIN針對圖像像素做normalization,最初用於圖像的風格化遷移。在圖像風格化中,生成結果主要依賴於某個圖像實例,feature map 的各個channel的均值和方差會影響到最終生成圖像的風格。所以對整個batch歸一化不適合圖像風格化遷移任務,因此對H、W做歸一化。可以加速模型收斂,並且保持每個圖像實例之間的獨立。
ytijk=xtijkμtiσti2+ϵ,μti=1HWl=1Wm=1Hxtilm,σti2=1HWl=1Wm=1H(xtilmmuti)2 y_{t i j k}=\frac{x_{t i j k}-\mu_{t i}}{\sqrt{\sigma_{t i}^{2}+\epsilon}}, \quad \mu_{t i}=\frac{1}{H W} \sum_{l=1}^{W} \sum_{m=1}^{H} x_{t i l m}, \quad \sigma_{t i}^{2}=\frac{1}{H W} \sum_{l=1}^{W} \sum_{m=1}^{H}\left(x_{t i l m}-m u_{t i}\right)^{2}

Group Normalization

文章地址:https://arxiv.org/pdf/1803.08494.pdf
Group Normalization是爲了解決BN對較小的mini-batch size效果差的問題。GN適用於佔用顯存比較大的任務,例如圖像分割。對這類任務,可能batch size只能是個位數,再大顯存就不夠用了。當batch size是個位數時,BN的表現很差,因爲沒辦法通過幾個樣本的數據量,來近似總體的均值和標準差。GN也是獨立於batch的,它是LN和IN的折中。
Group Normalization在channel方向分group,然後在每個group內做Norm,計算(C//G)HW的均值和方差,這樣就與batch size無關,不受其約束。

Differentiable Learning-to-Normalize via Switchable Normalization

文章地址:https://arxiv.org/pdf/1806.10779.pdf
目前已有的Normalization方法:BN是沿着所有樣本的同一個通道計算,它首先應用在圖像分類任務中,有助於提高收斂速度和泛化性;LN是對單個樣本的特徵進行計算,它首先應用在RNN中,使得RNN的優化更容易;IN是對每個樣本的每個通道計算,首先應用在風格轉換任務上,基於它可以解決任意風格的轉換的問題;GN與LN類似,只是在對通道進行了分組,它解決了BN對於batch size的依賴問題。
作者提出自適配歸一化方法——Switchable Normalization(SN),將BN、LN、IN結合,賦予權重,讓網絡自己去學習每一個歸一化層應該使用什麼方法。
SN算法是爲三組不同的uk和σk分別學習三個總共6個標量值wk和wk’, 最後計算的是它們的加權和:
h^ncij=γhncijkΩwkμkkΩwkσk2+ϵ+β \hat{h}_{n c i j}=\gamma \frac{h_{n c i j}-\sum_{k \in \Omega} w_{k} \mu_{k}}{\sqrt{\sum_{k \in \Omega} w_{k}^{\prime} \sigma_{k}^{2}+\epsilon}}+\beta
Ω={in,ln,bn} \Omega=\{i n, l n, b n\}
μin=1HWi,jH,Whncij,σin2=1HWi,jH,W(hncijμin)2 \mu_{i n}=\frac{1}{H W} \sum_{i, j}^{H, W} h_{n c i j}, \quad \sigma_{i n}^{2}=\frac{1}{H W} \sum_{i, j}^{H, W}\left(h_{n c i j}-\mu_{i n}\right)^{2}
μln=1Cc=1Cμin,σln2=1Cc=1C(σin2+μin2)μln2 \mu_{l n}=\frac{1}{C} \sum_{c=1}^{C} \mu_{i n}, \quad \sigma_{l n}^{2}=\frac{1}{C} \sum_{c=1}^{C}\left(\sigma_{i n}^{2}+\mu_{i n}^{2}\right)-\mu_{l n}^{2}
μbn=1Nn=1Nμin,σbn2=1Nn=1N(σin2+μin2)μbn2 \mu_{b n}=\frac{1}{N} \sum_{n=1}^{N} \mu_{i n}, \quad \sigma_{b n}^{2}=\frac{1}{N} \sum_{n=1}^{N}\left(\sigma_{i n}^{2}+\mu_{i n}^{2}\right)-\mu_{b n}^{2}
wk是通過softmax計算得到的激活函數:
wk=eλkzin,ln,bneλz and k{in,ln,bn} w_{k}=\frac{e^{\lambda_{k}}}{\sum_{z \in i n, l n, b n} e^{\lambda_{z}}} \quad \text { and } \quad k \in\{i n, l n, b n\}
λin,λbn,λln需要優化的3個參數,可以通過BP調整它們的值。同理我們也可以計算wk’對應的三個參數。
在BN的測試過程中,爲了計算其歸一化統計量,傳統的BN方法是從訓練過程中利用滑動平均的方法得到的均值和方差。在SN的BN部分,它使用的是一種叫做批平均(batch average)的方法,它分成兩步:

  • 固定網絡中的SN層,從訓練集中隨機抽取若干個批量的樣本,將輸入輸入到網絡中;
  • 計算這些批量在特定SN層的μ和σ的平均值,它們將會作爲測試階段的均值和方差。

實驗結果表明,在SN中批平均的效果略微優於滑動平均。

Two at Once: Enhancing Learning and Generalization Capacities via IBN-Net

文章地址:https://arxiv.org/pdf/1807.09441.pdf
模塊結構可看下圖:
在這裏插入圖片描述
在cross domain問題中,在淺層的bn層替換爲in+bn層,這是因爲in層可以保留feature的外觀差異性,而bn層保證了樣本總體數據分佈的一致性。在網絡深層時,由於此時特徵主要是高級語義信息,此時只用bn層,不用in層。IBN-a即在resnet的每一個block的第一個conv中加上in,並保留一半的bn,且只加載前三個block中。最後一個stage的block仍然只使用bn;IBN-b即在resnet的每一個block的residual做了element wise add後加入in,且只在第一個conv和前兩個block後。
本方法適合用在reid這類跨域問題中。

knowledge distillation

Do Deep Nets Really Need to be Deep?

文章地址:https://arxiv.org/pdf/1312.6184.pdf
深層網絡真的需要很深嗎?對於參數一樣的深層網絡和淺層網絡,如果都是從頭開始訓練,深層網絡的性能通常比淺層網絡好,但是當我們使用深層網絡蒸餾淺層網絡時,最終性能基本相同。
如何蒸餾?淺層網絡不使用one hot label,而使用深層網絡生成的logit作爲訓練目標, 這是softmax之前的值。爲什麼不用softmax之後的值呢?因爲不同的logit softmax之後的值可能一樣,而且可能會讓網絡把注意力集中在較大的值上,忽略了對較小值的學習。

Distilling the Knowledge in a Neural Network

文章地址:https://arxiv.org/pdf/1503.02531.pdf
我們使用交叉熵損失函數讓模型學習樣本時,由於樣本標籤是one hot編碼,因此不是1就是0,模型從樣本上學習不到一個樣本中不同類之間的關係。
softmax公式:
qi=exp(zi/T)jexp(zj/T) q_{i}=\frac{\exp \left(z_{i} / T\right)}{\sum_{j} \exp \left(z_{j} / T\right)}
溫度參數T通常設置爲1,T越大可以得到更“軟”的概率分佈。
本文提出的蒸餾方法是先訓練一個點數較高的大模型。然後訓練小模型時,使用兩項損失函數,一項是樣本和小模型預測的交叉熵,另一項是大模型預測(按溫度係數T)和小模型預測的交叉熵函數,將一般按0.5比0.5分配權重,不同任務可能比例不同。
實際實現時往往採用這種形式:第一項爲小模型本身的交叉熵函數,第二項爲KL散度:
DKL(pq)=i=1Np(xi)log(p(xi)q(xi)) D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right)
即大模型和小模型的最後一個fc層輸出先過按溫度係數T的softmax層,然後按上式計算KL散度。最後,KL散度前要乘以T的平方。

FITNETS: HINTS FOR THIN DEEP NETS

文章地址:https://arxiv.org/pdf/1412.6550.pdf
本文說明了如何從一個wide and deep的網路蒸餾成一個thin and deeper的網絡。在使用kd loss的基礎上,同時使用L2 loss蒸餾中間層feature map。

Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer

文章地址:https://arxiv.org/pdf/1612.03928.pdf
文章提出用attention map代替feature map,再使用l2 loss進行蒸餾。有兩種attention map:activation-based and gradient-based。文中實驗中認爲有效的是activation-based attention map。
有三種形式:
 sum of absolute values: Fsum (A)=i=1CAi sum of absolute values raised to the power of p( where p>1):Fsum p(A)=i=1CAip max of absolute values raised to the power of p( where p>1):Fmax p(A)=maxi=1,CAip \begin{array}{l}{\bullet \text { sum of absolute values: } F_{\text {sum }}(A)=\sum_{i=1}^{C}\left|A_{i}\right|} \\ {\bullet \text { sum of absolute values raised to the power of } p(\text { where } p>1): F_{\text {sum }}^{p}(A)=\sum_{i=1}^{C}\left|A_{i}\right|^{p}} \\ {\bullet \text { max of absolute values raised to the power of } p(\text { where } p>1): F_{\text {max }}^{p}(A)=\max _{i=1, C}\left|A_{i}\right|^{p}}\end{array}
三種形式在不同任務中往往有一到兩種可以比直接使用feature map取得更好的蒸餾效果。

Like What You Like: Knowledge Distill via Neuron Selectivity Transfer

文章地址:https://arxiv.org/pdf/1707.01219.pdf
本文的創新點在於將l2 loss更改爲以下形式:
LMMD2(X,Y)=1Ni=1Nϕ(xi)1Mj=1Mϕ(yj)22 \mathcal{L}_{\mathrm{MMD}^{2}}(\mathcal{X}, \mathcal{Y})=\left\|\frac{1}{N} \sum_{i=1}^{N} \phi\left(\boldsymbol{x}^{i}\right)-\frac{1}{M} \sum_{j=1}^{M} \phi\left(\boldsymbol{y}^{j}\right)\right\|_{2}^{2}
φ(·)爲核函數,文中實驗表明二項式核函數的效果最好。

Knowledge Transfer via Distillation of Activation Boundaries Formed by Hidden Neurons

文章地址:https://arxiv.org/pdf/1811.03233.pdf
本文提出一種新的蒸餾方法:只蒸餾激活位置(大於0的值的位置),而不是像l2 loss各個位置值分佈保持一致。
核心公式:
L(I)=ρ(T(I))ρ(S(I))1 \mathcal{L}(\boldsymbol{I})=\|\rho(\mathcal{T}(\boldsymbol{I}))-\rho(\mathcal{S}(\boldsymbol{I}))\|_{1}
由於這個公式不可微分,所以改成下面這種形式:
L(I)=ρ(T(I))σ(μ1S(I))+(1ρ(T(I)))σ(μ1+S(I))22 \begin{aligned} \mathcal{L}(\boldsymbol{I})=& \| \rho(\mathcal{T}(\boldsymbol{I})) \odot \sigma(\mu \mathbf{1}-\mathcal{S}(\boldsymbol{I})) +(\mathbf{1}-\rho(\mathcal{T}(\boldsymbol{I}))) \odot \sigma(\mu \mathbf{1}+\mathcal{S}(\boldsymbol{I})) \|_{2}^{2} \end{aligned}

A Comprehensive Overhaul of Feature Distillation

文章地址:https://arxiv.org/pdf/1904.01866v1.pdf
這篇文章討論了蒸餾的位置,以前蒸餾總是蒸餾ReLU之後的feature map,這篇文章選擇蒸餾每個stage最後一個bolck ReLU之前的feature map。
由於教師feature map的特徵值是ReLU之前的值,因此正值是有價值的信息,而負值不是。如果教師中的特徵值爲正,則學生必須產生與教師中相同的特徵值。相反,如果教師的特徵值爲負,則學生也應產生小於零的值。同時作者提出教師的特徵值蒸餾前需要過一個margin ReLU激活函數,這個函數會將小於一定值的負值轉爲臨界的負值。對於教師margin ReLU後的負值,如果學生的特徵值高於該值,則應該減少,但如果學生的特徵值低於該值,則不需要增加,因爲經過ReLU後都會變成0。

On the Efficacy of Knowledge Distillation

文章地址:https://arxiv.org/pdf/1910.01348.pdf
本文證明了一些觀點:

  • 更好的老師不一定能教出更好的學生,老師和學生之間的gap增大到一定程度後,學生無法更準確的模仿老師,表現出來就是KD損失變得更大,蒸餾效果變差;
  • 在蒸餾後期,早一些停止蒸餾,僅使用分類loss進行最後一個階段的模型訓練有助於使分類loss最小化,使得模型最終準確率更高。如果KD loss和CE loss一起使用,在後期KD loss會干擾CE loss的最小化,使模型效果變差;
  • 如果學生和老師差距太大,可以先用老師訓一個更小一點的老師,再用這個老師訓練學生。

REVISIT KNOWLEDGE DISTILLATION: A TEACHERFREE FRAMEWORK

文章地址:https://arxiv.org/pdf/1909.11723.pdf
本文提出了一些觀點:

  • 知識蒸餾是一種可學習的標籤平滑,是一種正則化;
  • 標籤平滑可以看成一種生硬的知識蒸餾;
  • 隨着溫度T的增大,知識蒸餾中教師soft label的分佈越來越接近標籤平滑的均勻分佈。

A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning

文章地址:http://openaccess.thecvf.com/content_cvpr_2017/papers/Yim_A_Gift_From_CVPR_2017_paper.pdf
本文不使用KD loss,也不蒸餾中間層feature map,而是蒸餾每個stage開始的feature map和每個stage結束時的feature map之間的相關性,這個相關性用一個gram矩陣來表示,稱爲FSP矩陣。
實現方式是大模型先使用FSP矩陣蒸餾小模型,然後小模型只用CE loss進行訓練。

Similarity-Preserving Knowledge Distillation

文章地址:https://arxiv.org/pdf/1907.09682.pdf
本文將feature map reshape爲(b,chw),然後乘以其轉置,得到一個gram矩陣,這個矩陣表示兩兩樣本間的相似性。由於gram矩陣不太穩定,所以對其每一行做l2 norm,然後對teacher和student的gram矩陣做l2 loss進行蒸餾。因此本文蒸餾的是樣本間的相關性。
事實上,這個loss也可以和KD loss配合使用。

Correlation Congruence for Knowledge Distillation

文章地址:https://arxiv.org/pdf/1904.01802.pdf
和上文比較類似,使用gram矩陣樣本間相關性,使用KD loss蒸餾每個樣本信息,兩者配合使用,gram矩陣再使用一個非線性核映射一下,彌補樣本間的非線性關係。從實驗結果來看,這樣蒸餾後類內更緊密,但這依賴於教師網絡是否能學習到更緊密的類內關係。

When Does Label Smoothing Help?

文章地址:https://arxiv.org/pdf/1906.02629.pdf
本文研究了label smooth。
label smooth會使倒數第二層的激活函數與正確分類間的差值減小,並使其與正確和錯誤分類的距離等同;label smooth能夠有效防止模型過擬合;如果對教師網絡進行標籤平滑,雖然教師網絡的性能提升了,但是蒸餾得到的學生網絡性能會變得更差,這可能是因爲標籤平滑減少了類間相互信息。

cnn module

卷積計算與全連接計算的異同

3x3卷積與全連接計算的異同:
假設輸入10x10x3的特徵圖,輸出10x10x1的特徵圖。batchsize爲1。
全連接層輸入10x10x3的特徵圖,首先將其reshape成一維的300個輸入值,然後輸出reshape成10x 10x1的形狀。全連接層的參數爲(300,100)的矩陣。
如果我們要使卷積層完全等價於全連接層,我們需要使用100個10x10x3的卷積核,卷積後得到100個輸出值,再reshape成10x10x1的形狀。卷積核參數共100x10x10x3個。因此全連接層可以看成是核很大的卷積層。
如果我們使用3x3x3大小的卷積核,stride = 1, 爲了輸出分辨率不變padding用SAME方式。輸出通道數爲1,即只有一個3x3x3大小的卷積核,輸出也爲10x10x1的特徵圖。全連接層輸入10x10x3=300個神經元,而3x3卷積的時候每次卷積只是連接了其中的一個3x3x3=27的子集,那麼可以在做全連接的時候,除了這27個神經元設置非零鏈接係數,其餘的300-27=273個連接係數直接設置爲0就可以了。做10x10x1=100次這樣的全連接,就可以得到100個輸出神經元,再reshape成10x10x1的形狀。
也就是說,卷積層可以看成是一種稀疏的全連接層。
1x1卷積與全連接計算的異同:
假設輸入10x10x3的特徵圖,輸出10x10x1的特徵圖。batchsize爲1。
全連接層輸入10x10x3的特徵圖,首先將其reshape成一維的300個輸入值,然後輸出reshape成10x 10x1的形狀。全連接層的參數爲(300,100)的矩陣。
1x1卷積層輸入10x10x3的特徵圖,使用1x1x3的卷積核,輸出爲10x10x1的特徵圖,只需要1個1x1x3的卷積核,結論與上面類似。
假設輸入爲1x1x512的特徵圖,輸出1x1x3的特徵圖。batchsize爲1。
全連接層輸入1x1x512的特徵圖,首先將其reshape成一維的512個輸入值,然後輸出reshape成1x1x3的形狀。全連接層的參數爲(512,3)的矩陣。
使用1x1x512的卷積核,一共需要3個這樣的卷積核,得到輸出也是1x1x3的特徵圖。1x1卷積的參數量爲512x3。

Network In Network

文章地址:https://arxiv.org/pdf/1312.4400.pdf
global average pooling:
最後一層輸出的特徵圖對每個通道上的特徵圖做全局池化,得到一個(channels,1)的特徵向量,再送入softmax中進行計算。使用global average pooling來代替全連接層,是爲了使最後一個卷積層獲得的每一個特徵圖能夠對應於一個輸出類別。全連接層非常容易導致過擬合,極度依賴dropout。global average pooling沒有參數需要進行優化,因此可以避免在這一層出現Overfitting。
例如CIFAR-100分類任務,直接將最後一層卷積層channel設爲100,對每個feature map(共100個)進行global average pooling得到100維的輸出向量,對應100種圖像分類。
1x1卷積:
實質上是在不改變feature map的h和w的同時進行跨channel的信息融合,可以在減少channel的數量的同時將原本所有channel的信息融合到更少的channel中。

Making Convolutional Networks Shift-Invariant Again

文章地址:https://arxiv.org/pdf/1904.11486.pdf
不具有平移不變性一直是CNN存在的問題,這是由於pooling和stride conv下采樣帶來的問題。目前大多數的解決方法是靠數據增廣來緩解,但是數據增強不可能覆蓋所有平移幅度的樣本空間。這篇Adobe的工作通過引入Blur conv來緩解CNN對平移的混淆問題。
舉例:假如輸入爲(0,0,1,1,0,0,1,1,0,0),如果max pooling的size爲2,得到的結果是(0,1,0,1,0),如果輸入平移一格,輸出則爲(1,1,1,1)。經過多次pool之後,平移等方差的偏差會變得越來越大。故網絡越深,降採樣越多,對平移越敏感。
作者創造了一種blurpool來解決這個問題。先使用2x1的窗口取max操作,然後使用一個模糊濾波器作爲卷積覈對特徵圖做一次卷積操作,最後再進行下采樣。如下圖所示:
在這裏插入圖片描述

Adaptively Connected Neural Networks

文章地址:https://arxiv.org/pdf/1904.03579.pdf
本文提出了一種新的網絡模塊:ACnet。ACNet考慮了三種信息:自映射、局部信息、全局信息。ACnet給三種信息賦予相同的初始化權重(通過softmax約束),然後通過網絡的訓練來學習這些權重。
ACnet公式如下:
yi=αij=ixjuij+βijN(i)xjvij+γijxjwij \mathbf{y}_{i}=\alpha_{i} \sum_{j=i} \mathbf{x}_{j} \mathbf{u}_{i j}+\beta_{i} \sum_{j \subseteq N(i)} \mathbf{x}_{j} \mathbf{v}_{i j}+\gamma_{i} \sum_{\forall j} \mathbf{x}_{j} \mathbf{w}_{i j}
其中xj表示輸入數據。α,β和γ在所有通道中共享,且α+β+γ=1。第一項代表自信息(CNN網絡後接1x1卷積),第二項代表CNN網絡信息(CNN網絡後接3x3卷積),第三項代表全局信息(CNN輸出後接全連接結果)。
三項分別是CNN網絡輸出結果通過一個1x1的卷積,CNN網絡輸出結果通過一個3x3的卷積,和CNN網絡輸出結果通過一個經過全局平均池化的全連接,分別乘上一個可學習的權重後得到最終的結果。
第三項全連接非常耗費計算量,因此首先通過全局平均池化操作對x進行變換。最後,上式獲得的y可以通過非線性函數f激活,例如BatchNorm + ReLU。
α是通過使用具有λα作爲控制參數的softmax函數來計算的,其可以通過標準反向傳播(BP)來學習:
α=eλαeλα+eλβ+eλγ \alpha=\frac{e^{\lambda_{\alpha}}}{e^{\lambda_{\alpha}}+e^{\lambda_{\beta}}+e^{\lambda_{\gamma}}}
類似地,β和γ分別通過使用另一個參數λβ和λγ來定義。

Deep Layer Aggregation

文章地址:https://arxiv.org/pdf/1707.06484.pdf
作者研究了類似resnet這樣由許多結構相似的block堆疊成的網絡在block和stage級別的特徵融合方式。一種方式是IDA(iterative deep aggregation)迭代深度融合,即不同stage輸出的特徵的融合(往往channel、height、width都不相同),另一種方式是HDA(hierarchical deep aggregation)分層深度聚合,即輸出了同樣的channel、height、width的feature map之間的融合,往往是一個stage內前後不同block輸出的feature map之間的融合。
融合結構如下:
在這裏插入圖片描述
作者在ResNet、ResNeXT、DenseNet上均作了實驗,都取得了增益效果。

Deformable Convolutional Networks

文章地址:https://arxiv.org/pdf/1703.06211.pdf
Deformable Convolution的結構可看下圖:
在這裏插入圖片描述
在這裏插入圖片描述
本文提出了可變形卷積和可變形ROI poling。其原理就是學習一個偏移變量(x,y),使卷積核在採樣點發生偏移,從而改變了感受野的範圍。
具體來說,使用deformable convolution時,先用一個卷積層得到一個2N的offset field,N就是通道數,field的H和W和feature map相同,這樣HxWxN的feature map就得到了一個HxWx2N的offset filed,對應與feature map上每個點有兩個偏移量(x,y)。在實際當中,因爲添加的這個偏移量往往是小數,導致比較難處理,作者採用的辦法是用雙線性差值來計算。當然這種卷積的計算速度比平常的卷積要慢。

classification loss

Focal Loss for Dense Object Detection

文章地址:https://arxiv.org/pdf/1708.02002.pdf
文章最大的創新在於Focal loss的提出及 one stage目標檢測網絡RetinaNet(Resnet + FPN + FCN)。
二分類的交叉熵公式:
CE(p,y)={log(p) if y=1log(1p) otherwise  \mathrm{CE}(p, y)=\begin{cases}{-\log (p)} & {\text { if } y=1} \\\\ {-\log (1-p)} & {\text { otherwise }}\end{cases}
現在假設一個pt變量來代替上面交叉熵公式的兩種情況:
pt={p if y=11p otherwise  p_{\mathrm{t}}=\begin{cases}{p} & {\text { if } y=1} \\\\ {1-p} & {\text { otherwise }}\end{cases}
則:
CE(pt)=log(pt) \mathrm{CE}\left(p_{\mathrm{t}}\right)=-\log \left(p_{\mathrm{t}}\right)
這個公式和上面的交叉熵公式其實是一樣的。
再進一步對公式進行改造,得到focal loss公式:
FL(pt)=(1pt)γlog(pt) \mathrm{FL}\left(p_{\mathrm{t}}\right)=-\left(1-p_{\mathrm{t}}\right)^{\gamma} \log \left(p_{\mathrm{t}}\right)
這個時候的pt就具有了控制易分類樣本和難分類樣本的權重的作用。 pt越大代表越容易分類,那麼1-pt越小,y是一個整數指數,指數化之後就更小了。這樣越簡單的樣本loss的權重就越小。實際上我們一般使用focal loss時採用的是這個形式。
論文中最後還給focal loss再加上一個αt來控制正負樣本的比重:
FL(pt)=αt(1pt)γlog(pt) \mathrm{FL}\left(p_{\mathrm{t}}\right)=-\alpha_{\mathrm{t}}\left(1-p_{\mathrm{t}}\right)^{\gamma} \log \left(p_{\mathrm{t}}\right)
當y=1時,αt=α; 當y=0時,αt=1-α。這樣當y=0(即背景類)時,隨着α的增大,會對損失進行很大懲罰(降低權重),從而減輕背景類樣本太多對訓練的影響。

Gradient Harmonized Single-stage Detector

文章地址:https://arxiv.org/pdf/1811.05181.pdf
在focal loss的基礎上改進的GHM-C loss。focal loss爲難樣本和簡單樣本賦予了不同的權重,但是在不同的數據集中,難樣本和簡單樣本的數據分佈不一定是一致的,這使得我們在用focal loss時需要對超參數γ進行調參,很不方便。本文提出了一種GHM-C loss,它通過計算每個batch中難樣本和簡單樣本的梯度(label-pred),通過梯度的數量分佈爲難樣本和簡單樣本賦予一個權重,這樣就不需要超參數γ了。
公式如下:
梯度的絕對值:
g=pp={1p if p=1p if p=0 g=\left|p-p^{*}\right|=\begin{cases}{1-p} & {\text { if } p^{*}=1} \\ {p} & {\text { if } p^{*}=0}\end{cases}
梯度密度函數:
GD(g)=1lϵ(g)k=1Nδϵ(gk,g) G D(g)=\frac{1}{l_{\epsilon}(g)} \sum_{k=1}^{N} \delta_{\epsilon}\left(g_{k}, g\right)
梯度密度函數表示一個batch的樣本中梯度落在某個梯度區間內的樣本數量。
協調參數:
βi=NGD(gi) \beta_{i}=\frac{N}{G D\left(g_{i}\right)}
N表示一個batch的樣本數。
則有:
LGHMC=1Ni=1NβiLCE(pi,pi)=i=1NLCE(pi,pi)GD(gi) \begin{aligned} L_{G H M-C} &=\frac{1}{N} \sum_{i=1}^{N} \beta_{i} L_{C E}\left(p_{i}, p_{i}^{*}\right) \\ &=\sum_{i=1}^{N} \frac{L_{C E}\left(p_{i}, p_{i}^{*}\right)}{G D\left(g_{i}\right)} \end{aligned}
該函數直接計算所有的樣本的梯度密度分佈的時間複雜度爲O(N2),而通過先排序再統計梯度的方式,時間複雜度爲O(NlogN)。本篇論文通過簡化求出近似的梯度密度分佈來加快計算,實驗表明,性能上只有極其微小損失。
把X軸劃分爲M個區域,落在每個區域內的樣本採用同一個權重X軸的梯度分爲M個區間,每個區間長度爲ε,第j個區域爲rj,用Rj表示落在第j個區域內的樣本數量。定義ind(g)表示梯度爲g的樣本所落區域的序號,即可得出新的參數 [公式] 和新的GHM-C loss函數。
GD^(g)=Rind(g)ϵ=Rind(g)M \hat{G D}(g)=\frac{R_{i n d(g)}}{\epsilon}=R_{i n d(g)} M
β^i=NGD(gi) \hat{\beta}_{i}=\frac{N}{G D\left(g_{i}\right)}
L^GHMC=1Ni=1Nβ^iLCE(pi,pi)=i=1NLCE(pi,pi)GD(gi) \begin{aligned} \hat{L}_{G H M-C} &=\frac{1}{N} \sum_{i=1}^{N} \hat{\beta}_{i} L_{C E}\left(p_{i}, p_{i}^{*}\right) \\ &=\sum_{i=1}^{N} \frac{L_{C E}\left(p_{i}, p_{i}^{*}\right)}{G D\left(g_{i}\right)} \end{aligned}
由於樣本的梯度密度是訓練時根據batch計算出來的,通常情況下batch較小,直接計算出來的梯度密度可能不穩定,所以採用滑動平均的方式處理梯度計算。
Sj(t)=αSj(t1)+(1α)Rj(t) S_{j}^{(t)}=\alpha S_{j}^{(t-1)}+(1-\alpha) R_{j}^{(t)}
GD^(g)=Sind(g)ϵ=Sind(g)M \hat{G D}(g)=\frac{S_{i n d(g)}}{\epsilon}=S_{i n d(g)} M
GHM的思想同樣可以用於anchor的座標迴歸,這裏就不細說了。

Class-Balanced Loss Based on Effective Number of Samples

文章地址:https://arxiv.org/pdf/1901.05555.pdf
一種用於多類別平衡的loss函數,適用於類別比較多(大於等於100類)的情況。在類別比較多的時候,各個類別的樣本數量分佈接近於長尾分佈。
傳統的類別平衡方法有如類平衡損失與樣本量成反比,但是表現並不是太好;還有與類別數量的平方根成反比,相比於前者則更加平滑;如果爲難樣本分配更高權重,則更容易學習到有害樣本(如噪音,錯標的數據)。
本文公式如下:
β=(N1)/N \beta=(N-1) / N
CBfocal(z,y)=1β1βnyi=1C(1pit)γlog(pit) \mathrm{CB}_{\mathrm{focal}}(\mathbf{z}, y)=-\frac{1-\beta}{1-\beta^{ny} } \sum_{i=1}^{C}\left(1-p_{i}^{t}\right)^{\gamma} \log \left(p_{i}^{t}\right)
其實就是在focal loss前加了一個平衡類別的權重,ny爲每個類別的樣本數量。對於樣本量比較多的類別,得到的權重接近1/類別數;對於樣本量很少的類別,得到的權重會被一定程度上放大。這個loss適合100類以上的多分類問題。

A New Loss Function for CNN Classifier Based on Pre-defined Evenly-Distributed Class Centroids

文章地址:https://arxiv.org/ftp/arxiv/papers/1904/1904.06008.pdf
預先生成一組類中心(代替原來的全連接層,也就是說全連接層初始化成某個特徵的參數,然後凍結,只train網絡其他部分)。預定義最優隨機聚類中心的方式是一個超球體上人爲地設定很多均勻分佈的點,假設這些點是不同的類,這些聚類中心的距離都是最遠的,每個點是高維的。然後只train網絡其他部分,把不同類別的樣本分別映射到這些預定義類的中心,然後對它們進行聚類。這樣可以最大限度地分離不同類之間的距離。
論文中生成預定義類中心的方法:基於球面上的同性電荷能量最低的物理模型,即假設超球面上的n個電荷點相互之間有排斥力,排斥力隨點間的距離增加而減少,當運動最後平衡,超球上的點停止運動時,由於斥力的存在,N個點最後會在超球面上均勻分佈,達到平衡狀態時就可以使超球面上的 N個點相距最遠。我們定義中心點的每一維都有一個Vi運動量,來描述運動狀態,每一步計算更新所有點的運動狀態。
我們用預定義的以類爲中心(PEDCC權重)替換卷積神經網絡的最後一層,並且在訓練階段,僅更新先前層的權重。loss函數爲兩部分,一部分是全連接後softmax後計算cosface loss,另一部分是平方誤差函數,n=1。
PEDCC loss:
LPEDCCAM=1Niloges(cosθyim)es(cosθyim)+j=1,jyicescosθj L_{P E D C C-A M}=-\frac{1}{N} \sum_{i} \log \frac{e^{s \cdot\left(\cos \theta_{y_{i}}-m\right)}}{e^{s \cdot\left(\cos \theta_{y_{i}}-m\right)}+\sum_{j=1, j \neq y_{i}}^{c} e^{s \cdot \cos \theta_{j}}}
LPEDCCMSE=12i=1mxipedccyi2 L_{P E D C C-M S E}=\frac{1}{2} \sum_{i=1}^{m}\left\|x_{i}-\operatorname{pedcc}_{y_{i}}\right\|^{2}
L=LPEDCCAM+LPEDCCMSEn L=L_{P E D C C-A M}+\sqrt[n]{L_{P E D C C-M S E}}

CosFace: Large Margin Cosine Loss for Deep Face Recognition

文章地址:https://arxiv.org/pdf/1801.09414.pdf
對於原始的softmax函數,最後softmax的每個神經元權重乘以特徵向量可以分解爲如下形式:
WjTx=Wjxcosθj W_{j}^{T} x=\left\|W_{j}\right\|\|x\| \cos \theta_{j}
即神經元的權重向量的模和特徵向量的模相乘,再乘以兩個向量夾角的餘弦值,這是簡單的向量點積的基本定義公式。該公式表明,向量的範數和角度都有助於後驗概率。
在測試階段,通常根據兩個特徵向量之間的餘弦相似度來計算測試面對的面部識別得分。這表明特徵向量x的範數對loss函數沒有貢獻。因此在訓練階段乘以一個s來進行補償。固定x的範數s可以去除直徑方向的變化,所以得到的模型學習到在角度空間中可分離的特徵。然後我們要讓餘弦值減去一個m,使得模型學習到的不同類別的特徵空間相互分離的更遠。
最後的損失函數公式:
Llmc=1Niloges(cos(θyi,i)m)es(cos(θyi,i)m)+jyiescos(θj,i) L_{l m c}=\frac{1}{N} \sum_{i}-\log \frac{e^{s\left(\cos \left(\theta_{y_{i}, i}\right)-m\right)}}{e^{s\left(\cos \left(\theta_{y_{i}, i}\right)-m\right)}+\sum_{j \neq y_{i}} e^{s \cos \left(\theta_{j, i}\right)}}
W=WWx=xxcos(θj,i)=WjTxi \begin{aligned} W &=\frac{W^{*}}{\left\|W^{*}\right\|} \\ x &=\frac{x^{*}}{\left\|x^{*}\right\|} \\ \cos \left(\theta_{j}, i\right) &=W_{j}^{T} x_{i} \end{aligned}

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition

文章地址:http://www.cbsr.ia.ac.cn/users/xiangyuzhu/papers/2019adaptiveface.pdf
reading+1
將softmax中的margin由原來的超參數變爲可學習的參數。
之前的margin-based softmax loss如cosface中設置margin參數確實可以減小類內方差,擴大類間方差,但是沒有考慮到樣本不均衡的問題。對於一個二分類問題,假設類1的樣本量較小,類2的樣本量較大,那麼類1樣本的樣本方差必然與類1的實際方差差距較大(樣本方差較小)。由於cosface對所有類別使用同一個margin,對於樣本量較少且類內方差較小的類,loss對該類的特徵空間壓縮的不夠。因爲該類的樣本量少,樣本的方差小,但也由於樣本量少,其樣本方差比實際方差要小,也就是說該類真實的特徵空間要更大一些。但模型只能通過樣本學習,學習到的是樣本的特徵空間分佈,因此與真實的特徵空間分佈差距較大。
作者提出的AdaM-Softmax分配更大的margin來進一步壓縮樣本量少的類1的特徵空間,其真實的特徵空間被進一步壓縮了。
原始cosface公式:
Llmc=1Mj=1Mloges(cos(θy(j)j)m)es(cos(θy(j)j)m)+i=1,iyNescos(θij) L_{l m c}=-\frac{1}{M} \sum_{j=1}^{M} \log \frac{e^{s\left(\cos \left(\theta_{y}(j)_{j}\right)-m\right)}}{e^{s\left(\cos \left(\theta_{y}(j)_{j}\right)-m\right)}+\sum_{i=1, i \neq y}^{N} e^{s \cos \left(\theta_{i j}\right)}}
改進後:
Lad=1Mj=1Mloges(cos(θy(j)j)my(j))es(cos(θy(j)j)my(j))+i=1,iyNescos(θij) L_{a d}=-\frac{1}{M} \sum_{j=1}^{M} \log \frac{e^{s\left(\cos \left(\theta_{y}(j)_{j}\right)-m_{y}(j)\right)}}{e^{s\left(\cos \left(\theta_{y}(j)_{j}\right)-m_{y}(j)\right)}+\sum_{i=1, i \neq y}^{N} e^{s \cos \left(\theta_{i j}\right)}}
即每個類別有一個可學習的margin。
由於自己學出來的margin有可能爲0,而m希望得到一個更大的值,作者對損失函數也進行了改進:
Lm=1Ni=1Nmi L_{m}=-\frac{1}{N} \sum_{i=1}^{N} m_{i}
LAdaM=Lad±λLm L_{A d a M}=L_{a d} \pm \lambda * L_{m}

Sharpen Focus: Learning with Attention Separability and Consistency

文章地址:https://arxiv.org/pdf/1811.07484.pdf
因爲我們預測一張圖片中只有一個類,因此我們將預測的最大值代表的類和次大值代表的類(最容易混淆的類)它們兩個的Grad-CAM heatmap區域分離開,並保持中間層和最後層中heatmap的定位儘量一致。
loss函數:
L=LC+LASin+LASla+LAC L=L_{C}+L_{A S}^{i n}+L_{A S}^{l a}+L_{A C}
Lc即普通的交叉熵函數。
LAS=2ij(min(AijT,AijConf)Maskij)ij(AijT+AijConf) L_{A S}=2 \cdot \frac{\sum_{i j}\left(\min \left(\mathcal{A}_{i j}^{T}, \mathcal{A}_{i j}^{C o n f}\right) \cdot \operatorname{Mask}_{i j}\right)}{\sum_{i j}\left(\mathcal{A}_{i j}^{T}+\mathcal{A}_{i j}^{C o n f}\right)}
Maskij=11+exp(ω(AijTσ)) \operatorname{Mask}_{i j}=\frac{1}{1+\exp \left(-\omega\left(\mathcal{A}_{i j}^{T}-\sigma\right)\right)}
LAC=θij(AijinMaskij)ijAijin L_{A C}=\theta-\frac{\sum_{i j}\left(\mathcal{A}_{i j}^{i n} \cdot \operatorname{Mask}_{i j}\right)}{\sum_{i j} \mathcal{A}_{i j}^{i n}}
σ爲0.55,ω爲100,θ爲0.8。

object detection

object detection model

Feature Pyramid Networks for Object Detection

文章地址:https://arxiv.org/pdf/1612.03144v2.pdf
FPN結構用下面兩張圖就可以說明白:
在這裏插入圖片描述
在這裏插入圖片描述
將backbone網絡每個block的最後一層特徵圖命名爲C2,C3,C4,C5,將高層特徵做2倍的上採樣(最近鄰上採樣法),然後和前一層特徵圖做element-wise add。得到的M2,M3,M4,M5再經過3x3卷積得到P2,P3,P4,P5。每個P層只處理單一的尺度信息。對32、64、128、256、512這五種尺度的anchor,分別對應到P2、P3、P4、P5、P6這五個特徵層上。每個特徵層都處理1:1、1:2、2:1三種長寬比例的候選框。
訓練中,把重疊率(IoU)高於0.7的作爲正樣本,低於0.3的作爲負樣本。

Bottom-up Object Detection by Grouping Extreme and Center Points

文章地址:https://arxiv.org/pdf/1812.01187.pdf
文章模型可看下圖:
在這裏插入圖片描述
本文檢測的不是目標框(長方形)的四個對角線端點,而是四個極值點和一箇中心點。中心點很好理解就是目標框的中心點。由於我們的框應當恰好框住物體,所以框的每一條邊上應該有一部分與物體的外邊緣重合,所謂的四個極值點就是每條邊上在物體的外邊緣上的點。這樣避免了類似Cornernet這類網絡在檢測角點時目標框的角點落在背景中的問題。
首先和Cornernet一樣使用hourglass作爲backbone網絡提取特徵圖,然後對要預測的四個極值點和一箇中心點並行地預測五個heatmap,並對四個極值點分別還預測一個offset分支擬合前面特徵圖下采樣時下取整產生的誤差。然後暴力枚舉所有四種極值點的組合,計算每種組合中心點的位置,如果中心點的heatmap上對應位置上的響應超過預設閾值,則將這一組5個點作爲一個備選,該備選組合的score爲5個對應點的score平均值。
暴力枚舉的時間複雜度O(n^4),不過n一般非常小,所以影響不大。
文中提到一種問題:處理三個共線且尺度相同的目標時,是產生三個正確的小框還是一個錯誤的大框呢?比如在三車道上並行地平行行駛的汽車。
作者使用soft NMS來處理這種情況:如果某個邊框中包含的所有框的分數之和超過其本身得分的3倍,則將其得分除以2。
基於四個極值點的實例分割:
文中提出了一個簡單的八邊形逼近目標的方法,將一個極值點左右各延長1/8形成線段,如果遇到矩形框的角時則截斷。將這四個線段的端點連接起來,形成八邊形。

Matrix Nets: A New Deep Architecture for Object Detection

文章地址:https://arxiv.org/pdf/1908.04646.pdf
文章模型可看下圖:
在這裏插入圖片描述
在這裏插入圖片描述
該網絡由三部分組成。首先用backbone提取特徵圖,然後使用Matrix Net網絡得到不同寬高比和尺寸的特徵圖,再後面和centernet類似,預測左上角點、右下角點、中心點和offset,最終計算出目標位置。
Matrix Net中每向右一層特徵圖寬度減半,每向下一層特徵圖高度減半。對角線層則寬高都減半。每個特徵圖的寬高比和尺寸均不同,這使得方形卷積核可以收集不同寬高比的信息。

Receptive Field Block Net for Accurate and Fast Object Detection

文章地址:https://arxiv.org/pdf/1711.07767.pdf
本文作者主要是創建了一種新的模塊來代替現有的卷積層。模塊結構如下:
在這裏插入圖片描述
人類的視覺系統是由多個具有不同感受野的部分複合而成的。而不同的感受野對於整個圖像上的信息敏感度並不是平均的,越靠近中心的部分越重要。作者從中得到靈感,設計了Receptive Field Block。
該block採用多個不同大小卷積核層並行的機構,這與Inception模塊類似,但是與Inception模塊不同的是,Inception中所有的不同大小的卷積核其採樣中心點是相同的。而作者認爲卷積核越大,則採樣點應該離中心點越遠,應該儘可能地分佈的比較散而不是像Inception一樣不同大小的卷積核其採樣中心都一樣。作者通過調節空洞卷積的rate來調節不同大小的卷積核的離心率實現了這一點,比如5x5卷積層的採樣點和到中心的距離就比3x3和1x1的更遠。
1x1的卷積和Inception中作用類似,也是用於減少計算量和進行跨通道信息融合。1x3和3x1的卷積也是用於減少計算量的。RFBs使用了較多的小卷積核,除了運算量方面的考慮,也更適合關注比較局部的信息,適合用在比較淺的層。

Deep High-Resolution Representation Learning for Human Pose Estimation

文章地址:https://arxiv.org/pdf/1902.09212.pdf
本文即HRnetv1網絡。網絡結構如下:
在這裏插入圖片描述
在整個過程中保持高分辨率的特徵表示,逐步增加High-to-Low的子網,並將多分辨率的子網並行連接;在並行的多分辨率子網之間反覆交換信息,進行多尺度融合,高分辨率特徵與低分辨率特徵之間相互增強。整個網絡分爲4個stage,每個stage比上一個stage多一條分支,新增分支是對上一個stage所有特徵圖進行strided convolution融合後的結果,分辨率大小是上一個分支分辨率大小的一半,通道數翻倍,每個stage由mutil-resolution block組成。 每一個mutil-resolution block又分爲兩部分:multi-resolution group convolution是若干條並行的分支,每條分支上包含4個殘差單元;multi-resolution convolution進行多尺度特徵融合。對於HRNetV1,最後只輸出高分辨率特徵圖。

High-Resolution Representations for Labeling Pixels and Regions

文章地址:https://arxiv.org/pdf/1904.04514.pdf
本文即HRNetv2網絡。網絡結構如下:
在這裏插入圖片描述
HRNet即high resolution Net(高分辨率網絡)。low resolution net就是之前的分類網絡,通過stride逐步減少分辨率,獲取語義信息,最終得到分類,比如resnet。但是這種low-resolution net對於目標檢測或者語義分割來說是不可兼容的,因爲語義分割最終需要的結果是high-resolution的,也就是每個pixel的class。
目前獲得high-resolution的網絡有兩種方式:

  • 第一種是類似於encoder-decoder的網絡,如U-net,SegNet等,就是先使用down-sampling降低resolution獲取語義信息,再通過upsample增加resolution獲得空間信息;
  • 第二種是整個網絡都保持high-resolution,並且使用平行線路來得到low-resolution,如GrideNet,HRnet。

HRNet是一個通用的特徵提取網絡,可以用於分類、檢測、分割等。網絡在前向計算時隨着stage改變不斷增加更低分辨率的分支,並且在每個stage結束時並行的高低分辨率網絡以類似全連接的方式進行信息融合。
在HRNetv1中,在最後一個stage時,只有最高分辨率的特徵圖被輸出。這意味着只有高分辨率子通道的信息被利用,其他通道的信息被捨去了。在HRNetv2中,作者對低分辨率的特徵圖進行雙線性上採樣,然後在channel上concate起來,這樣就利用了所有分辨率的特徵圖的信息。

IoU

什麼是IoU

IoU即交併比,是目標檢測中最常用的指標,用來衡量預測框和ground-truth的差別有多大。公式如下:
IoU=ABAB I o U=\frac{|A \cap B|}{|A \cup B|}
它反映了預測框與真實框的差別有多大,另外IoU有一個特性就是對框的尺度大小不敏感。
但是,作爲損失函數,它也有缺點。一是如果預測框和真實框完全不相交,IoU=0,不能反映兩者的距離遠近。而是相同的重合度下,框的重合效果也是不一樣的,如:
在這裏插入圖片描述
上圖中三種情況下IoU都相等,但顯然左邊的圖檢測框效果最好,右邊的圖效果最差。

Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression

文章地址:https://arxiv.org/pdf/1902.09630.pdf
本文即GIOU。由於IoU對框的尺度不敏感,但是檢測任務中的BBox迴歸損失(MSE loss, l1-smooth loss等)的優化和IoU優化不是完全等價的,且Ln範數對物體的尺度也比較敏感,傳統的IoU無法直接優化沒有重疊的部分。本文提出可以把GIoU作爲迴歸的loss。GIoU公式如下:
GIoU=IoUAcUAc G I o U=I o U-\frac{\left|A_{c}-U\right|}{\left|A_{c}\right|}
Ac爲同時包含預測框和真實框的最小閉包框的面積,然後計算Ac中不覆蓋預測框或檢測框的面積佔Ac的比值,再用IoU減去這個比值得到GIoU。
與IoU類似,GIoU也可以作爲一個距離,loss可以用下式來計算:
LGIoU=1GIoU L_{G I o U}=1-G I o U
GIoU同樣對框的尺度不敏感。同時,在兩個框完全不重合時,IoU=GIoU=0。IoU取值爲[0,1],GIoU取值範圍[-1,1]。在兩者完全重合的時候取最大值1,在兩者無交集且無限遠的時候取最小值-1,因此GIoU是一個非常好的距離度量指標。與IoU只關注重疊區域不同,GIoU不僅關注重疊區域,還關注其他的非重合區域,能更好的反映兩者的重合度。

Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression

文章地址:https://arxiv.org/pdf/1911.08287.pdf
IoU loss和GIoU loss仍然存在收斂速度慢和迴歸不準確的問題。當IoU爲0時,GIoU會先儘可能讓預測框和目標框產生相交,產生相交後GIoU loss退化爲IoU loss,此時會和IoU loss一樣存在收斂速度慢和迴歸不準確的問題。
基於上面的問題,本文提出直接最小化預測框和真實框之間的歸一化距離,即DIoU loss:
DIoU=IoUρ2(b,bgt)c2 D I o U=I o U-\frac{\rho^{2}\left(b, b^{g t}\right)}{c^{2}}
其中b和bgt分別代表了預測框和真實框的中心點,p代表兩個中心點的歐式距離,c代表同時包含預測框和真實框的最小閉包框的對角線距離。因此,DIoU中對預測框和真實框之間的歸一化距離進行了建模。
和GIoU Loss類似,DIoU Loss在預測框和真實框不重疊時,仍然可以儘快讓預測框和真實框相交。由於DIoU Loss可以直接最小化兩個框的距離,因此比GIoU Loss收斂快得多。對於當預測框包含在目標框內(在水平方向和垂直方向上)的情況,DIoU Loss可以使迴歸Loss下降的很快,而GIoU Loss此時退化爲IoU Loss。DIoU還可以在NMS中替換普通的IoU,使NMS的結果更加合理。
那麼,如何使迴歸 loss在預測框與真實框相交或包含時收斂的更快更準呢?作者提出了CIoU Loss(Complete-IoU Loss)。作者認爲一個預測框與真實框的差距應該從三個方面進行考慮:相交面積、中心距離、長寬比。GIoU解決了IoU爲0時不能優化的問題。DIoU考慮了相交面積和中心點距離。作者在DIoU的基礎上再考慮了預測框長寬比和真實框長寬比之間的差距,得到了CIoU Loss:
LCIoU=1IoU+ρ2(b,bgt)c2+αv \mathcal{L}_{C I o U}=1-I o U+\frac{\rho^{2}\left(\mathbf{b}, \mathbf{b}^{g t}\right)}{c^{2}}+\alpha v
v=4π2(arctanwgthgtarctanwh)2 v=\frac{4}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{g t}}-\arctan \frac{w}{h}\right)^{2}
α=v(1IoU)+v \alpha=\frac{v}{(1-\operatorname{IoU})+v}
其中a是用來平衡比例的係數,v用來衡量預測框長寬比和真實框長寬比之間的差距。
對w和h求導公式如下:
vw=8π2(arctanwgthgtarctanwh)×hw2+h2 \frac{\partial v}{\partial w}=\frac{8}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{g t}}-\arctan \frac{w}{h}\right) \times \frac{h}{w^{2}+h^{2}}
vh=8π2(arctanwgthgtarctanwh)×ww2+h2 \frac{\partial v}{\partial h}=-\frac{8}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{g t}}-\arctan \frac{w}{h}\right) \times \frac{w}{w^{2}+h^{2}}
由於w、h取值範圍是[0,1],求導時最後一項的分母會很小,因此論文直接將分母設爲常數1,這樣不會導致梯度的方向改變,但可以加快收斂。

NMS

什麼是NMS

將所有檢測結果(設爲集合A)中score最大的結果取出來加入到最後的檢測結果集合(設爲集合B),然後將A中其它檢測結果i中與該結果進行比較,如果如該結果的相似度(往往使用IoU)超過一個閾值就將i從A中去掉。重複上述操作,直到A爲空集。
NMS閾值一般設爲0.5,閾值太大則起不到抑制作用,產生FP;閾值過小,則抑制作用太強,容易產生漏檢。當兩個同類目標臨近時,也易造成漏檢。

Soft-NMS:Improving Object Detection With One Line of Code

文章地址:https://arxiv.org/pdf/1704.04503.pdf
Soft-NMS的思想是當重疊度滿足一定閾值後,不是直接將其抑制,而是將其confidence score 降低進入下一次迭代選擇。通過overlap的大小降低候選框的置信度來改善上述缺陷,重疊度越大,score降低越多,因爲它們更有可能成爲FP。
公式如下:
si={si,iou(M,bi)<Nt0,iou(M,bi)Nt s_{i}=\left\{\begin{array}{ll}{s_{i},} & {\operatorname{iou}\left(\mathcal{M}, b_{i}\right)<N_{t}} \\ {0,} & {\operatorname{iou}\left(\mathcal{M}, b_{i}\right) \geq N_{t}}\end{array}\right.
si=sieima(M,bi)2σ,biD s_{i}=s_{i} e^{-\frac{\operatorname{ima}\left(M, b_{i}\right)^{2}}{\sigma}}, \forall b_{i} \notin \mathcal{D}

Adaptive NMS Refining Pedestrian Detection in a Crowd

文章地址:https://arxiv.org/pdf/1904.03629.pdf
將所有檢測結果(設爲集合A)中score最大的結果取出來加入到最後的檢測結果集合(設爲集合B),然後將A中其它檢測結果i中與該結果進行比較,如果如該結果的相似度(往往使用IoU)超過一個閾值就將i從A中去掉。重複上述操作,直到A爲空集。
但是如果兩個目標本身有部分重疊(overlap),且部分重疊部分還比較大時,要想能檢測出兩個gt,只能設置較大的閾值來保證較小score的結果不被抑制。但是在人羣中進行人臉檢測時,人羣有時候密集有時候稀疏,高的閾值又會導致對於稀疏的情況下產生過多的False Positive(即被錯認爲positive的結果)。
之前的soft-NMS已經嘗試在解決這個問題的思想是,即NMS所謂的“抑制”可以看做將檢測結果的分數置0了,soft-NMS不直接將檢測分數置0,而是逐漸減小,IoU越大,score減小的越多。
本文定義了第i個物體處的密度如下:
di:=maxbjG,ijiou(bi,bj) d_{i} :=\max _{b_{j} \in \mathcal{G}, i \neq j} \operatorname{iou}\left(b_{i}, b_{j}\right)
則adaptive NMS的公式如下:
NM:=max(Nt,dM)si={si,iou(M,bi)<NMsif(iou(M,bi)),iou(M,bi)NM {N_{\mathcal{M}} :=\max \left(N_{t}, d_{\mathcal{M}}\right)} \\\\ {s_{i}=\left\{\begin{array}{ll}{s_{i},} & {\operatorname{iou}\left(\mathcal{M}, b_{i}\right)<N_{\mathcal{M}}} \\ {s_{i} f\left(\operatorname{iou}\left(\mathcal{M}, b_{i}\right)\right),} & {\operatorname{iou}\left(\mathcal{M}, b_{i}\right) \geq N_{\mathcal{M}}}\end{array}\right.}
不過看起來不太好調參。

FeatureNMS: Non-Maximum Suppression by Learning Feature Embeddings

文章地址:https://arxiv.org/pdf/2002.07662.pdf
NMS算法存在兩個假設:重疊度高的邊界框可能屬於同一對象;重疊率低的邊界框可能屬於不同的對象。但是,在某些情況下,如具有大量對象和部分遮擋的圖像(比如人羣),存在許多重疊的邊界框,它們屬於不同的對象。因此作者提出了FeatureNMS。
FeatureNMS在NMS算法上進行了改進。流程上和NMS基本一致。首先仍然在每輪先選一個置信度最高的檢測框加入最終檢測結果隊列,然後計算其他框和它的IoU。如果IoU小於等於N1=0.1,則假定檢測框屬於不同的對象。若IoU大於等於N2=0.9,則假定檢測框屬於同一對象。而若IoU值大於0.1且小於0.9時,爲兩個框計算嵌入特徵的L2距離。如果該距離大於閾值T=1.0時,則假設邊界框屬於不同的對象。否則,它們屬於同一對象。
嵌入特徵如何得到呢?使用detection backbone增加一個Head,這個Head輸出一個長度爲32的嵌入特徵。這個head頭由四個相同的Block組成,每個block由channel=512的conv+bn+relu組成。最後一個Block的輸出沿特徵嵌入維度(由32個值組成)進行L2歸一化。

semantic segmentation

semantic segmentation model

Fully Convolutional Networks for Semantic Segmentation

文章地址:https://arxiv.org/pdf/1411.4038.pdf
模型結構可看下圖:
在這裏插入圖片描述
FCN網絡結構:
image經過多個conv和+一個max pooling變爲pool1 feature,寬高變爲1/2;pool1 feature再經過多個conv+一個max pooling變爲pool2 feature,寬高變爲1/4;pool2 feature再經過多個conv+一個max pooling變爲pool3 feature,寬高變爲1/8。依此類推,直到pool5 feature,寬高變爲1/32。
對於FCN-32s,直接對pool5 feature進行32倍上採樣獲得32x upsampled feature,再對32x upsampled feature每個點做softmax prediction獲得32x upsampled feature prediction(即分割圖);
對於FCN-16s,首先對pool5 feature進行2倍上採樣獲得2x upsampled feature,再把pool4 feature和2x upsampled feature逐點相加,然後對相加的feature進行16倍上採樣,並softmax prediction,獲得16x upsampled feature prediction;對於FCN-8s,首先進行pool4+2x upsampled feature逐點相加,然後又進行pool3+2x upsampled逐點相加,即進行更多次特徵融合。具體過程與16s類似。

U-Net: Convolutional Networks for Biomedical Image Segmentation

文章地址:https://arxiv.org/pdf/1505.04597.pdf
模型結構可看下圖:
在這裏插入圖片描述
網絡輸入後進行多層下采樣,每次下采樣使用2個3x3卷積層(無padding)、ReLU層和一個2x2max pooling層(stride爲2)。每一次下采樣後channel翻倍;下采樣到1024個channel後使用反捲積進行上採樣,每次使用反捲積都將channel數量減半,特徵圖大小加倍。反捲積過後,將反捲積的結果與下采樣同層的feature map concate起來,對拼接後的feature map再進行2次3x3卷積。最後一層卷積核大小爲1x1,將64通道的特徵圖轉化爲特定類別數量(比如二分類爲2)的結果。

person reid

ECCV2018: Beyond Part Models: Person Retrieval with Refined Part Pooling

文章地址:http://openaccess.thecvf.com/content_ECCV_2018/html/Yifan_Sun_Beyond_Part_Models_ECCV_2018_paper.html
文章模型可看下圖:
在這裏插入圖片描述
由於行人的特點,行人reid的圖像中總是頭在上面,腳在下面。針對這種特點,本文將最後一個卷積層輸出的feature map水平劃分成6塊進行分片global average pooling,然後使用1x1卷積降維得到6個不同部位的part feature。然後加入RPP層在pooling前對part feature的區域進行微調。測試時將part feature拼接起來變成ReID特徵。

Learning Discriminative Features with Multiple Granularities for Person Re-Identification

文章地址:https://arxiv.org/pdf/1804.01438.pdf
文章模型可看下圖:
在這裏插入圖片描述
真個網絡結構是multi branch的結構,從resnet conv4_2開始分成global branch和兩個local branch,global branch獲取global feature,local branch獲取local feature。每個branch採用不同的Pooling方式,使用triplet loss和softmax Loss共同約束。不同的pooling方式使得關注區域會發生變化,會關注到不同的點上。
global和local分支開始的位置不宜太淺或太深,因爲local和global優化的方向不太一致,會有一些相互干擾。作者這個conv4_2的位置應該是實驗得出的結果。該方法計算代價增加較多。

A Strong Baseline and Batch Normalization Neck for Deep Person Re-identification

文章地址:https://arxiv.org/pdf/1906.08332.pdf
文章模型可看下圖:
在這裏插入圖片描述
(b)即本文結構。本文使用了一些基本trick得到一個還不錯的person reid baseline。文章中探索了Warmup、Random Erasing Augmentation、Label Smoothing、Last Stride、BNNeck等trick的影響。最重要的是BNNeck的應用。一般在reid任務中會使用ID loss(分類loss)和triplet loss一起優化。分類Loss實際上是在整個特徵空間中學習超平面,將不同類別的特徵約束到不同的子空間內。這裏的ID loss使用cosface softmax loss(即把特徵歸一化到超球面)比原始的ce loss要更好。但是triplet loss更適合在歐式空間中約束。因此如果使用cosface softmax loss+triplet loss一起優化結果往往會更差。原因是cosface softmax loss把特徵約束到超球面上後特徵分佈的區域會大大減小,此時再用triplet loss做優化時triplet loss把正負樣本對推開的難度增大了。也就是說有可能發生ID loss和triplet loss不同步收斂的現象。
因此,本文增加了BNNeck。global average pooling之後的feature是在歐式空間中的,因此我們對這個feature直接用triplet loss做優化。同時global average pooling之後的feature再接一個BNNeck,這實際上是一個batchnormalization,只是在線性變換時令b=0。經過BNNeck的歸一化得到的feature近似地在超球面上分佈,所以我們將這個feature用cosface softmax loss進行優化。
此外,本文還嘗試了center loss,由於triplet loss只考慮了正負樣本對的相對距離(正樣本對距離-負樣本對距離+margin),其loss的大小與正樣本對的絕對距離無關。center loss可以使正樣本之間聚集更緊密。即增加模型對正樣本的聚類性能。在某些場景下,聚類性能會明顯影響性能,如卡閾值區分正負樣本對的tracking任務。

In Defense of the Classification Loss for Person Re-Identification

文章地址:https://arxiv.org/pdf/1809.05864v1.pdf
文章模型可看下圖:
在這裏插入圖片描述
本文將最後一層卷積層的global feature劃分爲多個channel group,通過一個共享參數的卷積層,再在每個group後接一個fc層,通過每個fc層的ce loss約束學習出有區分性的channal group feature。1x1卷積層的參數共享很重要,因爲參數共享可以在在訓練過程中給每個channel組更多的約束,同時發現不同channel組之間的相關聯信息。通過實驗發現使用了參數共享可穩定漲2個點。對於通道的劃分,本文同時研究了重疊劃分和不重疊劃分兩種方式,重疊劃分的表現不低於不重疊劃分的表現。對每個分支,本文發現使用ce losss進行優化(加和,不平均)帶來的增益遠大於triplet loss。前者+6%,而後者+0.5%。
在Inference時有兩種方式:第一種是使用所有channel組的一部分作爲推斷用的feature,另一種是用所有channel組,即全局特徵F。實驗發現第一種相對於第二種的精度下降很小,但推斷速度要快得多。
對於分組的數量,本文實驗結果表明分組爲8或16的效果最好。當單獨使用本方法時模型表現略優於PCB,但本方法和PCB方法一起用時也可以繼續組合漲點。本方法計算代價增加很少,對模型速度影響不大。

vehicle reid

Deep Feature Fusion with Multiple Granularity for Vehicle Re-identification

文章地址:http://openaccess.thecvf.com/content_CVPRW_2019/html/AI_City/Huang_Deep_Feature_Fusion_with_Multiple_Granularity_for_Vehicle_Re-identification_CVPRW_2019_paper.html
文章模型可看下圖:
在這裏插入圖片描述本文是個加強版的MGN網絡(Learning Discriminative Features with Multiple Granularities for Person Re-Identification)。由於車是剛體,在角度變化時形變更大,因此作者使用了更多的local branch和更多的pooling劃分方式來獲得更有表現力的local feature。具體來說,從水平和豎直方向都做split=2、3的分片pooling。同時,local branch均使用了RPP(RPP:ECCV2018: Beyond Part Models: Person Retrieval with Refined Part Pooling)的方法,對分片特徵圖區域做微調。每個Branch同樣使用softmax loss+triplet loss做約束。本文計算代價增加較大,適合打比賽。

Small, Accurate, and Fast Vehicle Re-ID on the Edge: the SAFR Approach

文章地址:https://arxiv.org/pdf/2001.08895.pdf
本文是一種attention類的方法。文章提出了micro、small、medium、large四種種大小的vehicle reid模型,並和現有方法比較了param和flops,四種SAFR模型的mAP均高於之前的其他方法,且最小和最大模型的mAP相差不到10%。
從結構上來看,large、medium、small、micro四種Model分別使用了四種backbone:res50、res34、res18、ShuffleNet-v2+,通過更換backbone實現了param和flops的降低,但相應的mAP並沒有出現斷崖式的下跌。
文章中提出了global feature和local feature的概念,實際上就是經過global attention和local attention加權後的feature。作者發現,第一個conv層的kernel的激活十分稀疏,且有許多如陰影等不相關的特徵的激活。根據文章:The state of sparsity in deep neural networks,第一個conv層kernel稀疏度應較低,稀疏度隨網絡深度的增加而增加。因此,作者通過使用global attention模塊降低第一個conv層kernel的稀疏度,增加其激活密度。具體來說,是在第一個conv層後使用global attention模塊。該模塊是兩個3x3帶leaky relu的卷積層。使用兩個3x3卷積是用來代替一個5x5卷積並降低計算量。由於leaky relu允許一定的負值通過,因此可以降低稀疏度。然後使用sigmoid來生成attention權重。由於pooling會導致特徵丟失,因此作者使用element-wise乘法來代替channel和 spatial attention。
在後面的每個bottleneck裏,作者使用了DBAM模塊(由CBAM模塊改進而來),DBAM和CBAM的區別是DBAM學習的spatial attention權重是(b,c,h,w)的。由於只使用local attention容易導致過擬合,因此作者採用global feature+local feature的形式,並且這兩種feature的權重是可學習的(兩個權重用softmax函數約束):
F(L+G)=MCFL+(1MC)FG F_{(L+G)}=M_{C} \odot F_{L}+\left(1-M_{C}\right) \odot F_{G}
實驗結果表明global feature+local feature的形式在後面的conv層可以更快的提高kernel的稀疏度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章