【论文解读】突破置换模块计算瓶颈,MSRA开源轻量版HRNet,超越主流轻量化网络!|CVPR2021...
??作者丨h(huán)appy
審稿丨鄧富城
編輯丨極市平臺
極市導(dǎo)讀
?本文從HRNet與輕量化網(wǎng)絡(luò)ShuffleNet的組合出發(fā),針對置換模塊存在的計算瓶頸問題,提出了一種高效條件通道加權(quán)單元替換1x1卷積,并得到了本文的Lite-HRNet,本文已被CVPR2021收錄。
Lite-HRNet
paper: https://arxiv.org/abs/2104.06403
code: https://github.com/HRNet/Lite-HRNet
本文是MSRA的研究員針對HRNet的輕量化設(shè)計,已被CVPR2021接收。從HRNet與輕量化網(wǎng)絡(luò)ShuffleNet的組合出發(fā),針對置換模塊存在的計算瓶頸問題,提出了一種高效條件通道加權(quán)單元替換1x1卷積,并得到了本文的Lite-HRNet。所提Lite-HRNet在人體姿態(tài)估計方面取得了最佳的精度-速度均衡,比如在COCO數(shù)據(jù)集上,Lite-HRNet-30僅需0.7GFLOPs即可取得69.7AP指標(biāo);Lite-HRNet-30僅需0.42GFLOPs即可取得87.0 PCKh@0.5的指標(biāo)。
Abstract
本文提出一種針對人體姿態(tài)估計的高效高分辨率網(wǎng)絡(luò):Lite-HRNet。我們通過簡單的將ShuffleNet中的高效置換模塊嵌入到HRNet即可比主流輕量化網(wǎng)絡(luò)(比如MobileNet、ShuffleNet、Small HRNet)更強(qiáng)的性能。
我們發(fā)現(xiàn):置換模塊中重度使用的卷積是其計算瓶頸。我們引入一種輕量化單元(條件通道加權(quán))替換置換模塊中計算代價昂貴的卷積。所提通道加權(quán)的復(fù)雜度與通道數(shù)成線性關(guān)系,低于卷積的二次時間復(fù)雜度關(guān)系(比如,在與多分辨率特征方面,所提單元可以減少置換模塊總體計算量的80%)。該方案從多個并行分支的所有通道、所有分辨率學(xué)習(xí)加權(quán)值,采用該權(quán)值進(jìn)行通道、分辨率之間的信息交換,補(bǔ)償卷積所扮演的角色。
實驗表明:在人體姿態(tài)估計應(yīng)用方面,相比主流輕量化網(wǎng)絡(luò),所提Lite-HR具有更強(qiáng)的性能;更重要的是,所提Lite-HRNet可以以相同方式輕易嵌入到語義分割任務(wù)中。
本文主要貢獻(xiàn)包含以下幾點:
通過簡單的將ShuffleNet中的置換模塊嵌入到HRNet即可得到性能優(yōu)于其他輕量化方案的基礎(chǔ)版Lite-HRNet;
通過引入一種高效條件通道加權(quán)單元替換置換模塊的卷積得到本文所提改進(jìn)版高效網(wǎng)絡(luò)Lite-HRNet;
在COCO與MPII人體姿態(tài)估計方面,所提Lite-HR取得了最佳的復(fù)雜度-精度均衡,且可以輕易的推廣到語義分割任務(wù)中。
Method
Naive Lite-HRNet
Shuffle Block 上圖a給出了ShuffleNetV2中的置換模塊示意圖,它將輸入通道拆分為兩部分:一部分經(jīng)過等卷積處理,一部分不做處理,最后對前述兩部分concate結(jié)果進(jìn)行通道置換。
HRNet 上圖給出了Small HRNet的網(wǎng)絡(luò)架構(gòu)示意圖,它采用了漸進(jìn)式添加高-低分辨率特征并進(jìn)行不同分辨率特征的融合。
Simple Combination 我們采用置換模塊替換Small HRNet的stem部分的第二個卷積,替換所有的殘差模塊,多分辨率融合部分的卷積采用分離卷積替換,即可得到了基礎(chǔ)班Lite-HRNet。
Lite-HRNet
convolution is costly ?卷積在每個點進(jìn)行矩陣-向量乘的計算,描述如下:
由于置換模塊中的depthwise卷積(深度卷積)不進(jìn)行通道間信息交換,故它在置換模塊中扮演通道見信息交換的作用。
卷積的計算復(fù)雜度是通道數(shù)的二次關(guān)系,而深度卷積則是線性關(guān)系。在置換模塊中,兩個卷積的復(fù)雜度要比深度卷積的更高:。下表給出了卷積與深度卷積的復(fù)雜度對比。
Conditional Channel Weighting ?我們提出采用元素級加權(quán)操作替換基礎(chǔ)版Lite-HRNet中的卷積。對于第s分辨率分支的元素加權(quán)操作可以描述如下:
該計算單元的復(fù)雜度與通道數(shù)成線性關(guān)系,要低于卷積的復(fù)雜度。實現(xiàn)code如下:
class ConditionalChannelWeighting(nn.Module): def __init__(self, in_channels, stride, reduce_ratio, conv_cfg=None, norm_cfg=dict(type='BN'), with_cp=False): super().__init__() self.with_cp = with_cp self.stride = stride assert stride in [1, 2]branch_channels = [channel // 2 for channel in in_channels]self.cross_resolution_weighting = CrossResolutionWeighting( branch_channels, ratio=reduce_ratio, conv_cfg=conv_cfg, norm_cfg=norm_cfg)self.depthwise_convs = nn.ModuleList([ ConvModule( channel, channel, kernel_size=3, stride=self.stride, padding=1, groups=channel, conv_cfg=conv_cfg, norm_cfg=norm_cfg, act_cfg=None) for channel in branch_channels ])self.spatial_weighting = nn.ModuleList([ SpatialWeighting(channels=channel, ratio=4) for channel in branch_channels ])def forward(self, x):def _inner_forward(x): x = [s.chunk(2, dim=1) for s in x] x1 = [s[0] for s in x] x2 = [s[1] for s in x]x2 = self.cross_resolution_weighting(x2) x2 = [dw(s) for s, dw in zip(x2, self.depthwise_convs)] x2 = [sw(s) for s, sw in zip(x2, self.spatial_weighting)]out = [torch.cat([s1, s2], dim=1) for s1, s2 in zip(x1, x2)] out = [channel_shuffle(s, 2) for s in out]return outif self.with_cp and x.requires_grad: out = cp.checkpoint(_inner_forward, x) else: out = _inner_forward(x)return outCross-resolution weight computation ?考慮到第s階段有s個并行分辨率,我們需要計算s個權(quán)值圖。我們采用輕量函數(shù)對不同分辨率的所有通道計算權(quán)值圖:
我們通過如下方式實現(xiàn)輕量函數(shù):在上先進(jìn)行自適應(yīng)均值池化得到,AAP可以將任意輸入尺寸池化到給定輸出尺寸;我們將上述所得拼接得到,并經(jīng)由卷積、ReLU、卷積、Sigmoid生成不同分辨率的加權(quán)圖。
在這里,每個分辨率每個位置的加權(quán)值依賴于均值池化后多分辨率特征同位置的通道特征。這就是為什么我們將該機(jī)制稱之為跨分辨率權(quán)值計算的原因。上采樣到對應(yīng)的分辨率得到用于后續(xù)的元素級加權(quán)。
這里所提的元素級加權(quán)圖將起著跨分辨率、通道信息交換的作用。每個位置的加權(quán)向量從所有輸入接受信息,并與原始的通道進(jìn)行加權(quán), 描述如下:
換句話說,通道加權(quán)機(jī)制起著與卷積相同的作用:信息交換。另一方面,函數(shù)在是小分辨率上實現(xiàn)的,故而其計算復(fù)雜度非常小。實現(xiàn)code如下:
class CrossResolutionWeighting(nn.Module): def __init__(self, channels, ratio=16, conv_cfg=None, norm_cfg=None, act_cfg=(dict(type='ReLU'),dict(type='Sigmoid'))): super().__init__() if isinstance(act_cfg, dict): act_cfg = (act_cfg, act_cfg) assert len(act_cfg) == 2 assert mmcv.is_tuple_of(act_cfg, dict) self.channels = channels total_channel = sum(channels) self.conv1 = ConvModule( in_channels=total_channel, out_channels=int(total_channel / ratio), kernel_size=1, stride=1, conv_cfg=conv_cfg, norm_cfg=norm_cfg, act_cfg=act_cfg[0]) self.conv2 = ConvModule( in_channels=int(total_channel / ratio), out_channels=total_channel, kernel_size=1, stride=1, conv_cfg=conv_cfg, norm_cfg=norm_cfg, act_cfg=act_cfg[1])def forward(self, x): mini_size = x[-1].size()[-2:] out = [F.adaptive_avg_pool2d(s, mini_size) for s in x[:-1]] + [x[-1]] out = torch.cat(out, dim=1) out = self.conv1(out) out = self.conv2(out) out = torch.split(out, self.channels, dim=1) out = [ s * F.interpolate(a, size=s.size()[-2:], mode='nearest') for s, a in zip(x, out) ] return outSpatial weight computation ?對于每個分辨率,我們同時還計算了空域加權(quán),計算方式如下:
函數(shù)包含(其實就是一個SE,見下面的code)。此時的特征加權(quán)方式將調(diào)整為:
class SpatialWeighting(nn.Module):def __init__(self, channels, ratio=16, conv_cfg=None, act_cfg=(dict(type='ReLU'),dict(type='Sigmoid'))): super().__init__() if isinstance(act_cfg, dict): act_cfg = (act_cfg, act_cfg) assert len(act_cfg) == 2 assert mmcv.is_tuple_of(act_cfg, dict) self.global_avgpool = nn.AdaptiveAvgPool2d(1) self.conv1 = ConvModule( in_channels=channels, out_channels=int(channels / ratio), kernel_size=1, stride=1, conv_cfg=conv_cfg, act_cfg=act_cfg[0]) self.conv2 = ConvModule( in_channels=int(channels / ratio), out_channels=channels, kernel_size=1, stride=1, conv_cfg=conv_cfg, act_cfg=act_cfg[1])def forward(self, x): out = self.global_avgpool(x) out = self.conv1(out) out = self.conv2(out) return x * outInstantiation ?Lite-HRNet包含高分辨率Stem和主體兩部分,stem由一個stride=2的卷積+置換模塊構(gòu)成;主體部分由一些列模塊化的單元構(gòu)成,每個單元包含兩個條件通道加權(quán)模塊與一個多分辨率融合,每個分辨率對應(yīng)特征的通道維度為。Lite-HRNet的架構(gòu)信息見下表。
Connection ?本文所提條件加權(quán)機(jī)制具有與CondConv、動態(tài)濾波器、SE等相似的思想:數(shù)據(jù)自適應(yīng)性。區(qū)別在于:CondConv、動態(tài)濾波器以及SE采用自網(wǎng)絡(luò)學(xué)習(xí)卷積核或者混合權(quán)值并提升模型的容量;而本文方法則探索了額外的作用:采用所學(xué)習(xí)到的權(quán)值對不同分辨率、不同通道見的信息交換進(jìn)行橋接。它可以用于替換輕量化網(wǎng)絡(luò)中的耗時的卷積,除此之外,我們還引入了多分辨率信息提升加權(quán)學(xué)習(xí)。
Experiments
我們在COCO與MPII數(shù)據(jù)集上對所提方法的性能進(jìn)行了評估,參照主流top-down框架,我們直接估計K個熱圖。
Dataset COCO具有200K圖像,250K具有17個關(guān)鍵點的人體示例。我們在train2017數(shù)據(jù)集(包含57K圖像,150K人體示例)上進(jìn)行訓(xùn)練,在val2017與test-dev2017數(shù)據(jù)集上驗證;MPII包含25K個全身姿態(tài)標(biāo)注的圖像,超40K人體示例,其中12K用于測試,其他用于訓(xùn)練。
Training ?人體檢測框擴(kuò)展為比例后裁剪,COCO數(shù)據(jù)的圖像縮放到或者;MPII數(shù)據(jù)的圖像縮放到。此外每個圖像還會進(jìn)行一系列的數(shù)據(jù)增廣:隨機(jī)旋轉(zhuǎn)、隨機(jī)縮放、隨機(jī)鏡像等。
Testing 對于COCO數(shù)據(jù),我們采用雙階段的top-down框架:即先檢測再預(yù)測;對于MPII數(shù)據(jù),我們采用標(biāo)準(zhǔn)的測試策略(預(yù)提供人體框)。
Evaluation 我們采用基于OKS的mAP對COCO進(jìn)行度量:;對于MPII,我們采用標(biāo)準(zhǔn)度量PCKH@0.5進(jìn)行性能評估。
上圖給出了COCO驗證集上的性能對比,從中可以看到:
輸入為條件下,Lite-HRNet-30取得了67.2AP指標(biāo),優(yōu)于其他輕量化方案。
相比MobileNetV2,性能提升2.6AP,且僅需20%GFLOOs與參數(shù)量;
相比ShuffleNetV2,Lite-HRNet-18與Lite-HRNet-30分別獲得了4.9與7.3指標(biāo)提升,同時具有更低的計算量;
相比Small HRNet-W16,Lite-HRNet指標(biāo)提升超10AP;
相比大網(wǎng)絡(luò)(比如Hourglass、CPN),所提方法可以取得相當(dāng)?shù)腁P指標(biāo)且具有極低復(fù)雜度。
輸入為條件下,Lite-HRNet-18與Lite-HRNet-30分別取得了67.6與70.4AP指標(biāo);
受益于所提高效條件通道加權(quán)模塊,Lite-HRNet取得了更佳的精度-計算復(fù)雜度均衡,可參考下圖。
上表給出了COCO-test-dev數(shù)據(jù)集上的性能對比,可以看到:
Lite-HRNet-30取得了69.7AP指標(biāo),顯著優(yōu)于其他輕量網(wǎng)絡(luò),同時具有更低FLOPs和參數(shù)量;
Lite-HRNet-30取得了優(yōu)于Mask-RCNN、G_RMI、IPR等大網(wǎng)絡(luò)的性能;
盡管相比其他大網(wǎng)絡(luò),所提方法仍存在性能差異,但所提方法具有超低的GFLOPs與參數(shù)量。
上表給出了MPII驗證集上的性能對比,可以看到:
相比MobileNet2、MobileNetV3、ShuffleNetV2、Small HRNet等輕量化模型,所提Lite-HRNet-18取得了更高的精度,同時具有更低的計算復(fù)雜度;
繼續(xù)提升模型大小可以進(jìn)一步提升模型的精度,比如Lite-HRNet-30取得了87.0 PCKh@0.5的指標(biāo)。
最后,我們再看一下所提方法遷移到語義分割任務(wù)上的效果,見上表。可以看到:
Lite-HRNet-18以1.95GFLOPs計算量取得72.8%的mIoU指標(biāo);
Lite-HRNet-30以3.02GFLOPs計算量取得了75.3%的mIoU指標(biāo)。
所提方法優(yōu)于手工設(shè)計網(wǎng)絡(luò)(如ICNet、BiSeNet、DFANet等)與NAS網(wǎng)絡(luò)(比如CAS、GAS、FasterSeg等),同時與SwiftNetRN-18性能相當(dāng),但具有更低的計算量(3.02 vs 104)。
全文到此結(jié)束,更多消融實驗與分析建議查看原文。
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯溫州大學(xué)《機(jī)器學(xué)習(xí)課程》視頻 本站qq群851320808,加入微信群請掃碼:總結(jié)
以上是生活随笔為你收集整理的【论文解读】突破置换模块计算瓶颈,MSRA开源轻量版HRNet,超越主流轻量化网络!|CVPR2021...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7系统应用程序安装不了的解决教程
- 下一篇: windows7系统内存占用过高的解决方