RepMLP: Re-parameterizing Convolutions into Fully-connected Layers for Image Recognition
Abstract
我們提出了RepMLP,一個多層感知器風格的圖像識別神經網絡構建塊,它由一系列全連接(FC)層組成。與卷積層相比,FC層更高效,更善於構建長期依賴關系和位置模式,但在捕獲局部結構方面較差,因此通常不太適合用於圖像識別。我們提出了一種結構重參數化(structural re-parameterization)技術,將局部先驗加入到FC中,使其具有強大的圖像識別能力。具體來說,我們在訓練期間在RepMLP中構建卷積層,並將它們合並到FC中進行推理。在CIFAR上,一個簡單的純MLP模型顯示了非常接近CNN的性能。通過在傳統CNN中插入RepMLP,我們將ResNets在ImageNet上的准確率提高了1.8%,在人臉識別上提高了2.9%,在Cityscapes上提高了2.3%,且有着更低的FLOPs。我們有趣的發現強調,將FC的全局表征能力和位置感知與卷積的局部先驗相結合,可以以更快的速度提高神經網絡在具有平移不變性(例如,語義分割)和有着對齊圖像和位置模式(例如,人臉識別)的任務的性能。代碼可見https://github.com/DingXiaoH/RepMLP。
1. Introduction
圖像的局部性(即相對於遠距離的像素,一個像素與其臨近像素相關性更強)造就了卷積神經網絡(Convolutional Neural Network, ConvNet)在圖像識別中的成功。在本文中,我們將這種歸納偏差稱為局部先驗(local prior)。
除此之外,我們還希望能夠捕獲長期依賴關系,這在本文中稱為全局能力(global capacity)。傳統的卷積神經網絡通過深層的卷積神經層[25]形成的大的接收域來構建遠程依賴。然而,重復的局部操作在計算上是低效的,可能會導致優化困難。之前的一些研究通過基於自注意力的模塊增強了global capacity[25,11,23],但沒有local prior。例如,ViT[11]是一個沒有卷積的pure-Transformer模型,它將圖像以序列的形式輸入到Transformers中。由於缺少local prior這一重要的歸納偏差,ViT需要大量的訓練數據(JFT-300M的3 × 108幅圖像)來收斂。
另一方面,一些圖像具有固有的位置先驗,由於不同位置之間的參數是共享的,因此不能被一個卷積層有效利用。例如,當某人試圖通過面部識別解鎖手機時,臉部照片很可能位於中間,眼睛在上面,鼻子在中間。我們把利用位置先驗的能力稱為位置感知(positional perception)。
本文重新討論了全連接(FC)層,為傳統的ConvNet提供global capacity和positional perception。在某些情況下,我們直接使用FC代替卷積層來作為特征映射之間的轉換。通過扁平化特征map,將其輸入FC,然后重新調整大小,我們就可以享受positional perception(因為它的參數與位置相關)和global capacity(因為每個輸出點與每個輸入點相關)。無論從實際速度還是理論FLOPs來看,這種運算都是高效的,如表4所示。對於主要關注點是准確度和吞吐量而不是參數數量的應用場景,人們可能更喜歡基於FC的模型而不是傳統的ConvNets。例如,GPU推斷通常有幾十GBs的內存,因此與計算和內部特征maps所消耗的內存相比,參數所占用的內存很小。
但是,由於空間信息丟失,FC沒有local prior。在本文中,我們提出了一種structural re-parameterization技術,將local prior加入到FC中。具體而言,我們在訓練過程中構造平行於FC的conv和batch normalization (BN)[15]層,然后將訓練后的參數合並到FC中,以減少參數的數量和推理延遲。在此基礎上,我們提出了一種重參數化的多層感知器(RepMLP)。如圖1所示,訓練時間RepMLP有FC層、conv層和BN層,但可以等效轉換為只有三個FC層的推理時的塊。structural re-parameterization的意義在於訓練時間模型有一組參數,推理時模型有另一組參數,我們將訓練時模型的參數轉化為推理時模型的參數。注意,我們不會在每次推理之前推導參數。相反,我們一次性地轉換它,然后就可以丟棄訓練時的模型。

與conv相比,RepMLP在相同數量的參數下運行得更快,並且具有global capacity和positional perception。與自注意力模塊相比[25,11],它更簡單且可以利用圖像的局部性。實驗結果表明(表4,5,6),RepMLP在各種視覺任務,包括1)一般分類任務(如ImageNet[8])、2)帶有位置先驗的任務(如人臉識別)和3)平移不變任務(如語義分割)中均優於傳統的卷積神經網絡。
我們的貢獻總結如下。
- 我們提出利用FC的global capacity和positional perception,並配備local prior進行圖像識別。
- 我們提出了一個簡單的、平台無關的、可微的算法來將並行的conv和BN合並到FC中,而無需任何推理時間開銷。
- 我們提出了RepMLP,一個高效的構建模塊,並展示了它在多視覺任務上的有效性。
2.Related Work
2.1. Designs for Global Capacity
non-local網絡[25]通過自注意力機制對遠距離依賴進行建模。對於每個查詢位置,non-local模塊首先計算查詢位置與所有位置的成對關系,形成注意力map,然后將所有位置的特征與注意力map中定義的權重進行加權和。然后將聚合特征添加到每個查詢位置的特征中。
GCNet[1]創建了一個基於查詢無關公式的簡化網絡,在保持non-local網絡的准確性的同時,減少了計算量。GC塊的輸入經過全局注意池化、特征轉換(1 × 1 conv)和特征聚合。
與這些工作相比,RepMLP更簡單,因為它不使用自注意力,並且只包含三個FC層。如表4所示,與比Non-local模塊和GC塊相比,RepMLP提高了更多的ResNet-50性能。
2.2. Structural Re-parameterization
在本文中,structural re-parameterization是指構造平行於FC的conv層和BN層進行訓練,然后將參數合並到FC中進行推理。下面的兩項工作也可以歸類為structural re-parameterization。
非對稱卷積塊(Asymmetric Convolution Block,ACB)[9]是常規卷積層的替代,它使用水平(如1 × 3)和垂直(3 × 1)卷積來加強正方形(3 × 3)卷積的“skeleton”。在幾個卷積網絡基准測試中報告了合理的性能改進。
RepVGG[10]是一個類似於vgg的架構,因為它的主體只使用3 × 3的conv和ReLU進行推理。該推理時間體系結構由具有恆等和1 × 1分支的訓練時間體系結構轉化而來。
RepMLP與ACB的關系更密切,因為它們都是神經網絡構建塊,但我們的貢獻不是讓卷積更強,而是讓MLP在圖像識別方面更強大,作為常規conv的替代。此外,RepMLP內部的訓練時的卷積可能會由ACB、RepVGG塊、或者其他形式的卷積來做進一步的改進。
3. RepMLP
訓練時的RepMLP由三個部分組成,分別是Global Perceptron, Partition Perceptron and Local Perceptron(圖1)。在本節中,我們介紹我們的公式,描述每個組件,並展示如何將訓練時的RepMLP轉換為三個FC層進行推理,其中的關鍵是一個簡單的,平台無關且可微的方法,用於合並一個conv到一個FC。
3.1. Formulation
在本文中,特征map被表示為一個張量![]()
,其中N是batch size,C是channels的數量,H和W是高和寬。我們使用F和W分別表示卷積和FC的核。為了簡化和更易於復現,我們使用如PyTorch[20]的相同的數據格式,使用偽代碼表示轉換過程。比如,經過K x K卷積的數據流表示為:
其中
是輸出特征map,
是輸出channels的數量,p是用來填補的像素數量,
是卷積核(我們假設卷積是密集的,即groups的數量為1)。從現在開始,為了簡化我們假設
(步長為1,
)
對於FC,P和Q為輸入和輸出維度,
和
分別是輸入和輸出,核為
且矩陣乘法(MMUL)表示為:
![]()
我們現在關注以
為輸入、以
為輸出的FC。假設FC沒有改變分辨率,即
。我們使用RS(“reshape”的簡稱)作為只改變張量形狀規格,而不改變數據在內存中的順序的函數,這是免費的。輸入首先被flatten為長度為CHW的N個向量,
,乘以核
,然后輸出
,再將其大小轉變為
。為了可讀性,在沒有歧義的情況下,省略RS:
![]()
這樣的FC不能利用圖像的局部性,因為它根據每個輸入點計算每個輸出點,而不知道位置信息。
3.2. Components of RepMLP
我們不以上面的方式去使用FC,因為其不僅缺少了local prior,還有大量的參數(
)。常見設置中,ImageNet中是
,該單個FC就有10G個參數,這是不能接受的。為了減少參數,我們提出了Global Perceptron和Partition Perceptron去分開構建內和外分區依賴(inter- and intra-partition dependencies)。
Global Perceptron 將特征map分割,這樣不同的分區就能共享參數。比如,
大小的輸入可以分成
,我們將每個7x7的塊稱為分區(partition)。我們為該分隔使用一種高效的實現方法,即內存重安排的簡單操作。讓h和w表示每個分區所期望的高和寬(假設H和W能分別被h和w整除,否則就簡單地對輸入進行填補(pad)),輸入
首先被重置大小為
。注意該操作是免費的,因為內存沒有移動數據。然后重新安排軸的順序為
,這里高效地移動了內存中的數據。在PyTorch中僅需要調用一個函數(permute)。然后
張量被重置大小為
(在圖1中被標志為partition map),這個過程也是免費的。在這里,參數數量從
減少到了![]()
但是,分割打破了同一channel的不同分區之間的相關性。換句話說,模型將單獨查看分區,完全不知道它們是並排放置的。為了將相關性添加到每個分區上,Global Perceptron 1)使用平均池化為每個分區獲取一個像素,2)將其輸入BN和一個兩層MLP,然后3)重置大小並將其添加到partition map上。該附加操作能夠通過自動傳播高效實現(即隱式地將
復制到
),這樣每個像素就會和別的分區相關了。然后partition map將被輸入Partition Perceptron 和Local Perceptron。注意如果
,我們直接將特征map輸入Perceptron 和Local Perceptron,而不進行分割,因此這里就不需要Global Perceptron了。
Partition Perceptron 有一個FC和一個BN層,以partition map作為輸入。輸出
以和上面相反的順序進行reshaped, re-arranged和reshaped來變為
。我們受groupwise conv [5, 26]啟發,進一步減少FC3的參數。g表示groups的數量,表示groupwise conv為:
相似地,groupwise FC的核是
,其中有g倍的參數。雖然groupwise FC不直接被想PyTorch的計算框架支持,但其可以使用groupwise 1x1卷積來等價替換。該實現由3步組成:1)重置
為空間大小為1x1的“特征map”; 2)實現g個組的1x1卷積; 3)重置輸出“特征map”為
。我們表示groupwise矩陣乘法(gMMUL)為:

Local Perceptron 將partition map輸入到幾個卷積層中。受[9,10]啟發,這里每個卷積層后跟着一個BN層。圖1展示了一個
且
的例子。理論上,對核大小的唯一限制是
(因為使用大於分辨率的核是沒有意義的),但是在ConvNet的常見實現中我們僅設置奇數核大小。為了簡化,我們標注時使用了K x K,實際上非方形的卷積也是可以的(如1x3,3x1)。卷積的padding用於保持分辨率(即
),且組的數量g應該和Partition Perceptron一樣。所有卷積分支和Partition Perceptron的輸出將加在一起作為最后的輸出。
3.3. A Simple, Platform-agnostic, Differentiable Algorithm for Merging Conv into FC
在將一個RepMLP轉換成一個三層FC層前,我們首先展示如何將一個conv合並到FC。FC核為
、卷積核為![]()
且padding為p,我們期望構建
為:

我們注意到對於與
有着相同大小的任意核
,MMUL的可加性保證了:

所以只要我們能構造和
有一樣大小的
,且滿足下面的式子,這樣就可以將
合並到
:
很明顯,
肯定存在,因為一個卷積可以看作是一個在空間位置中共享參數的稀疏FC,這也是其平移不變性的惡原理,但是怎么使用給定的
和p去構建它就沒有那么顯而易見了。因為當前計算平台使用不同的卷積算法(im2col-[2], Winograd- [17], FFT-[18], MEC-[4], and sliding-window-based)且數據內存分配和padding實現都有所不同,在某個特定平台構建矩陣的方法可能在另一個平台不適用。在本文中,我們提出一個簡單且平台無關的解決方案。
如上所述,對於任意
、conv核
和padding p,存在一個FC核
為:
使用等式2的公式,我們有:

插入一個單位矩陣
並使用結合律:
![]()
我們注意到因為
是由
構建的,
是與F在特征映射
上的卷積,該特征映射
由
重置大小而來。帶有顯式的RS,式子為:

將等式10與等式13和14相比,得到:
![]()
代碼實現:
def _convert_conv_to_fc(self, conv_kernel, conv_bias): #等式(15) #等式(12) I = torch.eye(self.C * self.h * self.w // self.fc3_groups).repeat(1, self.fc3_groups).reshape(self.C * self.h * self.w // self.fc3_groups, self.C, self.h, self.w).to(conv_kernel.device) fc_k = F.conv2d(I, conv_kernel, padding=conv_kernel.size(2)//2, groups=self.fc3_groups) fc_k = fc_k.reshape(self.O * self.h * self.w // self.fc3_groups, self.C * self.h * self.w).t() fc_bias = conv_bias.repeat_interleave(self.h * self.w) return fc_k, fc_bias
這就是我們使用卷積核
和padding p來構建
的方法。簡而言之,卷積核的等效FC核是對單位矩陣進行適當重置大小后的卷積結果。更好的是,轉換是有效且可微的,所以可以在訓練期間派生FC內核並將其用於目標函數(例如,基於懲罰的pruning[13,19])。groupwise情況的表達式和代碼以類似的方式導出,並在補充材料中提供。
3.4. Converting RepMLP into Three FC Layers
(這里講的是怎么講卷積層和BN層融合在一起,然后再用上面的等式(15)將卷積核轉成FC核,實現Conv+BN -> FC)
為了使用上面提出的理論,我們首先需要通過等價融合BN層到前面的卷積層和FC3中來移除它。
表示卷積核,
是BN累積的均值、標准差、可學習的scaling因子和bias,構造核
和bias
為:
左邊是conv-BN的原始計算流,右邊則是構造后帶有bias的卷積
代碼實現:
def fuse_bn(conv_or_fc, bn): std = (bn.running_var + bn.eps).sqrt() t = bn.weight / std if conv_or_fc.weight.ndim == 4: t = t.reshape(-1, 1, 1, 1) else: t = t.reshape(-1, 1) return conv_or_fc.weight * t, bn.bias - bn.running_mean * bn.weight / std #等式(17) class ConvBN(nn.Module): ... def switch_to_deploy(self): kernel, bias = fuse_bn(self.conv, self.bn) conv = nn.Conv2d(in_channels=self.conv.in_channels, out_channels=self.conv.out_channels, kernel_size=self.conv.kernel_size, stride=self.conv.stride, padding=self.conv.padding, groups=self.conv.groups, bias=True) conv.weight.data = kernel conv.bias.data = bias self.__delattr__('conv') #就是switch后,把以前的刪除 self.__delattr__('bn') self.conv = conv
Partition Perceptron中的一維BN和FC3也以相似的方式融合為
。然后我們使用等式15轉換所有卷積,然后將得到的結果矩陣添加到
。卷積的bias就簡單地復制hw倍(因為相同channel上的所有點共享一個bias),並添加到
。最后我們得到單個FC核和單個bias向量,然后用來參數化推理時的FC3。
Global Perceptron中的BN也被刪除了,因為該刪除等價於在FC1之前應用仿射變換,當兩個序列的MMULs可以合並為一個時,FC1可以吸收這個仿射變換。計算公式和代碼在補充資料中提供。

即:

(這個講的是怎么將FC+BN -> FC)
4. Experiments
4.1. Pure MLP and Ablation Studies
我們首先通過在CIFAR-10上測試一個pure MLP模型來驗證RepMLP的有效性。更准確地說,因為一個FC等價於一個1 × 1的conv,通過“pure MLP”我們意味着不使用大於1 × 1的conv核。我們交錯RepMLP和FC(1×1 conv)去構建三個stages和使用最大池化實現下采樣,如圖2所示,並通過使用3×3 conv替換RepMLPs來構造一個用於比較的ConvNet對照組。在相當的FLOPs下,pure MLP三個stages的channels是16,32,64;ConvNet的則是32,64,128,因此,后者被稱為wide ConvNet。我們采用標准的數據增強方法[14]:padding到40 × 40,隨機裁剪,左右翻轉。該模型的訓練batch size為128個,cos學習率在100個epoch內從0.2退火到0。如表1所示,純MLP模型達到91.11%的精度,只有52.8M的FLOPs。毫無疑問,純MLP模型的性能並不優於Wide ConvNet,這促使我們將RepMLP和傳統的ConvNet結合起來。


然后我們進行了一系列的消融研究。A)我們還報告了MLP在轉換之前的FLOPs,它仍然包含conv層和BN層。雖然多出參數是很少的,但FLOPs卻要高得多,這說明了structural re-parameterization的重要性。B)“w/o Local”是一個沒有Local Perceptron的變體,准確率降低8.5%,說明了Local prior的重要性。C)“w/o Global”是刪除FC1和FC2,並直接將partition map提供給Local Perceptron和partition Perceptron。D)“FC3 conv9”是使用一個conv(K = 9和p = 4,其感受域比FC3大)替換一個FC3,后面跟着BN,用來比較FC3和常規conv的表征能力。雖然比較偏向conv,因為它的接受域較大,但其精度低了3.5%,這驗證了FC比conv更強大,因為conv是一個降級FC。E)“RepMLP as conv9”是直接用9 × 9的conv和BN代替RepMLP。與D相比,它的准確性較低,因為它沒有Global Perceptrons。
4.2. RepMLP-ResNet for ImageNet Classification
我們以ResNet-50 [14] (torchvision版本[21])作為基礎架構來評估作為傳統ConvNet中的一個構建塊的RepMLP。為了進行公平的比較,所有模型都在100個epochs內以相同的設置進行訓練:在8個GPUs上的全局batch size為256,權重衰減為10−4,momentum為0.9,余弦學習率從0.1退火到0。我們使用mixup[27]和Autoaugment[7]的數據增強管道,隨機裁剪和翻轉。所有的模型都用單一的central crop進行評估,在相同的1080Ti GPU上測試速度,batch size為128,並以每秒幾例進行速度測量。為了進行更公平的比較,對RepMLPs進行了轉換,並對每個模型的所有原始conv-BN結構進行了轉換,並對帶有bias的conv層進行了轉換,以便進行速度測試。
通常,我們將ResNet-50的四個殘差階段分別稱為c2, c3, c4, c5。當輸入為224 × 224時,4個stages的輸出分辨率分別為56、28、14、7, 4個stages的3 × 3 conv層分別設置為C = O = 64、128、256、512。為了用RepMLP替換大3 × 3的conv層,我們使用h = w = 7和Local Perceptron中的三個K = 1,3,5的conv分支。我們在RepMLP前進行r倍通道減少,之后通過3 × 3的conv進行r倍通道擴展,進一步減少RepMLP的通道。整個block稱為RepMLP Bottleneck(圖3)。在一個特定的stage,我們將所有的stride-1 bottleneck替換為RepMLP Bottleneck,並保留原來的stride-2(即第一個)bottleneck。

我們首先僅在c4使用RepMLP和變化超參數 r和g來測試他們如何影響准確度、速度和參數的數量(表2)。值得注意的是,通過8倍的reduction(這樣RepMLP的輸入和輸出channels是256/8 = 32),RepMLP-Res50有更少的參數,運行比ResNet-50快10%。比較前兩行可以發現,當前groupwise 1 × 1的conv是低效的,參數增加了59%,但速度只降低了0.7%。進一步對groupwise 1 × 1 conv進行優化可以使RepMLP更有效。在接下來的實驗中,為了更好的權衡效果,我們用r=2 or 4和g=4 or 8。

我們繼續在不同stages測試RepMLP。為了合理的模型尺寸,對c2,c3,c4,c5,我們分別設g = 8和r = 2,2,4,4。從表3中可以看出,用RepMLP Bottleneck替換原來的bottleneck會導致非常小的減速,但准確率會得到顯著提高。僅在c4上使用RepMLP只增加了5M個參數,但准確率提高了0.94%,並且在c3和c4上使用RepMLP提供了最佳的折衷方案。它還建議RepMLP應與傳統的conv結合以獲得最佳性能,因為在所有四個stages中使用RepMLP的精度都低於c2+c3+c4和c3+c4。在接下來的實驗中,我們在c3+c4中使用了RepMLP。

與具有更高輸入分辨率的更大的傳統卷積網絡的比較(表4)進一步證明了RepMLP的有效性,並提供了一些有趣的發現。當使用320 × 320輸入進行訓練和測試時,我們使用了h = w = 10的RepMLP,並且Local Perceptron有4個分支K = 1,3,5,7。我們還改變組的數量來生成三個不同大小的模型。例如,g8/16表示c3 的g= 8, c4的g = 16。作為構建長距離依賴關系的兩個經典模型,我們按照原始論文中的說明構造了Non-local[25]和GC[1]對照組,並且這些模型都使用相同的設置進行訓練。我們還將著名的EfficientNet[22]系列作為一個強大的基線,再次使用相同的設置進行訓練。我們有以下觀察結果。

1)與相同參數數量的傳統卷積網絡相比,RepMLP-Res50的FLOPs要低得多,速度也快得多。例如,與224 × 224輸入的ResNet-101相比,RepMLP-Res50只有50%的FLOPs和少了4M的參數,運行速度快50%,但它們的精度是相同的。輸入為320 × 320時,RepMLP-Res50在精度、速度和FLOPs方面都有很大的優勢。此外,ResNet-50的改進不應該簡單地歸因於深度的增加,因為它仍然比ResNet-101淺。2)增加RepMLPs的參數會導致非常輕微的減速。從RepMLP-Res50-g8/16到RepMLP-Res50-g4/8,參數增加了47%,而FLOPs僅增加了3.6%,速度僅降低了2.2%。這個屬性對於大型服務器上的高吞吐量推斷特別有用,在這種服務器上,吞吐量和准確性是我們主要關注的,而不是模型大小。3)與Nonlocal和GC相比,RepMLP-Res50的檢測速度基本相同,但准確率提高了1%左右。4)與在GPU上效率不高的EfficientNets相比,RepMLP-Res50在速度和精度上都表現得更好。
我們在圖4中可視化了FC3的權值,其中采樣的輸出點(6,6)用一個虛線方塊標記。原始FC3沒有 local prior,因為標記點和其鄰居的值不比其他的大。但是在合並Local Perceptron之后,生成的FC3核在標記點周圍有更大的值,這表明模型更關注鄰域,這是我們所期望得到的效果。此外,global capacity不會丟失,因為最大的conv核(在本例中是7 × 7,用藍色正方形標記)之外的一些點(用紅色矩形標記)的值仍然大於其內部的點。

我們還在附錄記錄了其他bottleneck(RepMLP Light Block)的設計,為8倍的channel reduction/expansion使用1x1的卷積,而不是3x3的卷積。與原始ResNet-50比較,其得到了相當的准確度(77.14% vs 77.19%),FLOPs降低30%,速度提高55%

4.3. Face Recognition
與conv不同,FC不是平移不變的,這使得RepMLP對於具有位置先驗的圖像(即人臉)特別有效。我們用於訓練的數據集是MS1M-V2,這是一個大規模的人臉數據集,包含了來自85k個名人的5.8M張圖像。它是MS-Celeb-1M數據集[12]的半自動改進版本,該數據集由來自100k個身份的1M張照片組成,有許多噪聲圖像和錯誤的ID標簽。我們使用MegaFace[16]進行評估,其中使用60k個身份的1M張圖像作為gallery集,使用來自FaceScrub的530個身份的1M圖像作為probe集。它也是手動清除的改進版本。我們使用96 × 96輸入進行訓練和評估。
除了MobileFaceNet[3]作為一個眾所周知的基線,它最初是為低功耗設備設計的,我們還使用定制的ResNet(在本文中稱為FaceResNet)作為一個更強的基線。與常規的ResNet-50相比,c2、c3、c4、c5中的塊數從3,4,6,3減少到3,2,2,2,寬度從256、512、1024、2048減少到128、256、512、1024,3 × 3的channels從64、128、256、512增加到128、256、512、1024。換句話說,殘差塊中的1 × 1 conv層不會減少或擴大channels。由於輸入分辨率為96 × 96, c2、c3、c4、c5的空間大小分別為24、12、6、3。對於RepMLP的對照組,我們修改了FaceResNet,將c2,c3,c4的stride-1 bottlenecks(即c2的最后兩個bottlenecks和c3,c4的最后兩個bottlenecks)替換為RepMLP Bottlenecks,h = w = 6, r = 2, g = 4。
對於訓練,我們使用的batch size為512,momentum為0.9,使用AM-Softmax loss[24],遵循[3]的權重衰減值。以0.1的學習率對所有模型進行420k次迭代訓練,並在252k、364k和406k次迭代時將學習率除以10。為了進行評估,我們報告了MegaFace的top-1准確性。表5顯示FaceResNet比MobileFaceNet提供更高的准確性,但運行速度較慢,而RepMLP-FaceRes在准確性和速度方面都優於前兩者。與MobileFaceNet相比,RepMLP-FaceRes的准確率提高了4.91%,運行速度提高了8%(盡管它有2.5倍的FLOPs),這顯然更適合高功率設備。
4.4. Semantic Segmentation
語義分割是一項具有平移不變性的代表性任務,因為汽車可能發生在左邊或右邊。我們驗證了imagenet預訓練的RepMLP-Res50在Cityscapes[6]上的泛化性能,該數據集包含5K個精細注釋的圖像和19個類別。我們使用RepMLP-Res50-g4/8和在ImageNet上使用320 × 320預訓練的原始ResNet-50作為backbone。為了更好的再現,我們只采用了PSPNet[29]框架的官方實現和默認配置[28]:在8個GPUs上訓練200個epochs,使用base為0.01和power為0.9的poly學習率策略,權重衰減為10−4和全局batch size為16。遵循PSPNet-50,我們在兩個模型的c5和原ResNet-50的c4中使用dilated conv。我們在RepMLP-Res50-g4/8的c4中不使用dilated conv,因為它的感受域已經很大了。由於c3和c4的分辨率變成90 × 90, Global Perceptron的每個channels將有81個分區,因此FC1和FC2中有更多的參數。我們通過將FC1的輸出維數和FC2的輸入維數分別減少4倍 (c3)和8倍 (c4)來解決這個問題。FC1和FC2使用隨機初始化,所有其他參數都從ImageNet 預訓練模型中繼承。
表6顯示RepMLP-Res50-g4/8的PSPNet在mIoU中比Res-50 backbone性能好2.21%。雖然它有更多的參數,但FLOPs更低,速度更快。值得注意的是,我們的PSPNet基線比報告的PSPNet-50低,因為后者是為語義分割定制的(在最大池化之前增加了兩層),但我們的不是。

5. Conclusion
一個FC比一個conv具有更強的表示能力,因為后者可以被視為一個具有共享參數的稀疏FC。然而,一個FC沒有 local prior,這使得它不適合圖像識別。在本文中,我們提出了RepMLP,它利用了FC的global capacity和positional perception,並通過一種簡單的平台無關的算法重新參數化卷積,將 local prior整合到FC中。從理論角度看,將卷積網絡視為FC的退化情況,開辟了一個新的視角,可以加深我們對傳統卷積網絡的理解。不應該忽視的是,RepMLP是為主要關注點為推斷時的吞吐量和准確性,而不太關心參數數量的應用程序場景設計的。
