最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

誰才是輕量級CNN的王者?7個維度全面評測mobilenet/shufflenet/ghostnet

2020-12-13 14:02 作者:理工堆堆星  | 我要投稿

? ? ? ? ? ? ? ? ? ? ? ? ? ?

目錄結構

1、輕量級網(wǎng)絡概述

2、官方數(shù)據(jù)對比

3、實驗對比

4、實驗結論

如果嫌累,直接跳到第4部分,看實驗結論

?


1、輕量級網(wǎng)絡概述

????????常規(guī)的CNN推理,由于需要很大的計算量,很難應用在移動端,物聯(lián)網(wǎng)等資源受限的場景中。只有通過復雜的裁剪,量化才有可能勉強部署到移動端。從Squeezenet,MobileNet v1開始,CNN的設計開始關注資源受限場景中的效率問題。經(jīng)過幾年的發(fā)展,目前比較成熟的輕量級網(wǎng)絡有:google的MobileNet系列,EfficientNet?Lite系列,曠世的ShuffleNet系列,華為的GhostNet等。

?

MobileNet系列

??????MobileNet v1?最大的成就在于提出了depthwise卷積(DW)+pointwise卷積(PW),將普通卷積的計算量近乎降低了一個數(shù)量級,成為第一個在輕量級領域取得成功的網(wǎng)絡。如下圖所示,對于一個常規(guī)的3*3卷積,使用dw+PW,計算量降低為原來的 1/(3*3)=1/9, 接近于降低了一個數(shù)量級。

????????MobileNet v2借鑒了resnet的殘差結構,引入了inverted resdual模塊(倒置殘差模塊),進一步提升了MobileNet的性能。因為inverted resdual一方面有利于網(wǎng)絡的學習,因為畢竟學的是殘差(這也是resnet的精髓),另一方面,也降低了原來的PW卷積的計算量。在MobileNet v1的dw+pw卷積中,計算量主要集中在PW卷積上。使用了inverted resdual模塊之后,原來的一個PW卷積,變成了一個升維PW+一個降維PW,其計算量有所下降,如下圖所示:


ShuffleNet系列

???????DW卷積或者分組卷積雖然能夠有效的降低計算量,但是缺少通道間的信息交互與整合,勢必會影響網(wǎng)絡的特征提取能力,MobileNet中使用PW卷積來解決這個問題,但是PW卷積的計算量比較大(相對dw卷積),大約是dw卷積的 C_out / K*k 倍。假設C_out=128, k=3, 那么pw卷積的計算量是dw卷積的14倍!所以MobileNet的計算量主要集中在point wise卷積上面。ShuffleNet v1使用了一種更加經(jīng)濟的方式,channel shuffe,使得不需要卷積操作,也能實現(xiàn)不同通道間的信息融合。如下圖所示:


ShuffleNetv2從輕量級網(wǎng)絡的本質(zhì)出發(fā),提出不應該只看計算量,而需要同時兼顧MAC(內(nèi)存訪問代價),并提出了4條輕量級網(wǎng)絡設計的準則

并以此為依據(jù),更新了ShuffleNet v1的基本結構,得到了ShuffleNet v2,如下圖所示:



GhostNet網(wǎng)絡

GhostNet通過對傳統(tǒng)卷積得到的特征圖進行觀察,發(fā)現(xiàn)有很多相似的特征圖。那么是否可以通過改造讓卷積這種重量級的OP只生成一些具有高度差異性的特征圖,然后基于這些特征圖,再用一些廉價的OP(相對于卷積)進行變換,得到傳統(tǒng)卷積中的那些相似特征圖。如下圖所示。Ghostnet就是基于下圖中的這種ghots module進行構建的輕量級網(wǎng)絡。



2、官方數(shù)據(jù)對比

對上述網(wǎng)絡的官方數(shù)據(jù)進行整理,提取精度(imagenet top1精度)與計算量FLOPS進行統(tǒng)計,如下表格所示:

對上述信息進行可視化,使用matploblib打印各個網(wǎng)絡的精度與計算量的關系,如下圖所示:


從圖中明顯可以看到,GhostNet的性能是最好的,MobileNetv3次之,而ShuffleNetv2與MobileNetv2顯然要差一些。

?

3、實驗對比

通過官方數(shù)據(jù)的整理,可以大致得出如下的性能排序(只考慮精度和計算量)

GhostNet>MobileNetv3>ShuffleNetv2>MobileNetv2

這和論文的發(fā)表時間一致,越是后面發(fā)表的論文,在官方列出的數(shù)據(jù)中越好(否則論文也發(fā)不出來),那么真實使用場景下,性能是否還會如官方數(shù)據(jù)那樣呢?這個是不一定的。首先是上述網(wǎng)絡官方數(shù)據(jù)都是計算量,但是在移動端部署深度學習網(wǎng)絡,不只是考慮計算量這一維度,例如內(nèi)存消耗,訪存延時,是否容易優(yōu)化,網(wǎng)絡的泛化性能如何,在小數(shù)據(jù)集上的表現(xiàn)如何,以及應用于檢測的時候,特征是否容易提取等很多維度。

所以本次實驗為了有一個較為全面的對比,針對上述四類網(wǎng)絡(ShuffleNet v2 0.5、ShuffleNet v2 1.0、ShuffleNet v2 1.5、MobileNet v2 0.5、MobileNet v2 1.0、MobileNet v2 1.4、GhostNet 0.5、GhostNet 1.0、GhostNet 1.3、MobileNetv3 small、MobileNetv3 large)在cifar10數(shù)據(jù)集中進行如下維度測試:

Top1精度對比

首先在cifar10數(shù)據(jù)集上訓練得到的top1精度,最意外的是GhostNet和mobilentv3,在官方數(shù)據(jù)中,top1的精度都很高,但是在cifar10上面的精度卻不盡如人意。精度表現(xiàn)最好的是MobileNetv2。其次是ShuffleNetv2。


實測flops對比

使用torchstate工具統(tǒng)計,與官方給出的flops基本一致,。Mobilnetv3和GhostNet稍具優(yōu)勢。Mobilentv2的flops最大。


參數(shù)規(guī)模對比

使用的是torchstate工具統(tǒng)計,與官方能查詢到的參數(shù)規(guī)模基本一致。ShuffleNetv2的參數(shù)規(guī)模最小,MobileNetv3的參數(shù)規(guī)模最大。


內(nèi)存消耗對比

使用的是torchstate工具統(tǒng)計,ShuffleNetv2表現(xiàn)最好,GhostNet次之,最差的是MobileNetv2。


模型文件大小對比

使用pytorch保存的模型的state_dict大小,與參數(shù)規(guī)模大致為4倍的關系(1個float參數(shù)需要4個字節(jié)保存)。結論也和參數(shù)規(guī)模一致。ShuffleNetv2的模型文件最小,MobileNetv3的模型文件最大。


推理延時對比

再來看看推理延時指標,這個可能是很多人最關心的問題。因為推理延時直接決定了能否產(chǎn)品化。由于訓練模型無法直接進行推理,這里我使用了開源的NCNN推理庫作為推理框架,將pytorch訓練出來的模型,首先轉換到ncnn上面,然后使用ncnn在樹莓派4B(CPU:CM2711(ARM Cortex-A72 1.5GHz四核))上面進行推理測試,每個網(wǎng)絡使用100次測試平均值作為最后的推理延時,結果如下圖:


表現(xiàn)最好的是ShuffleNetv2,這個符合預期,因為ShuffleNetv2在設計的時候就考慮了推理延時的問題,沒有只看重flops,因此能夠做的比較好。最差的是MobileNetv2以及GhostNet。

?

訓練時間對比

訓練時間其實對推理沒有影響,但是還是有必要看一下各個網(wǎng)絡的訓練時間。除了mobilentv3 large訓練時間稍長,其余網(wǎng)絡的訓練時間差別相差不大,但是ShuffleNetv2的整體訓練時間最低。


3、實驗結論

通過上面各個維度的測試分析,不同的網(wǎng)絡有不同的側重點。例如MobileNet v2在精度上確實最好,但是在很多其他指標中也是最差的。下面對兩個最重要的指標進行可視化分析,推理延時與精度。這兩個指標應該是所有指標中起到?jīng)Q定性作用的。如下圖所示:

從圖中可以看出,表現(xiàn)最好的是ShuffleNetv2,其曲線整體位于左側,表現(xiàn)最差的是GhostNet,其曲線完全被其他模型碾壓。因此本次測試中的輕量級網(wǎng)絡之王稱號,頒發(fā)給ShuffleNet V2網(wǎng)絡。

備注:由于實驗基于cifar10訓練,推理框架使用的是ncnn,測試硬件使用的是樹莓派4B。以上結論是基于這些條件測試得到的。

?



誰才是輕量級CNN的王者?7個維度全面評測mobilenet/shufflenet/ghostnet的評論 (共 條)

分享到微博請遵守國家法律
枣强县| 英德市| 宁化县| 龙南县| 科技| 门源| 宣城市| 建始县| 措勤县| 射洪县| 二连浩特市| 安国市| 开江县| 宽甸| 沙河市| 宁阳县| 喀喇沁旗| 阿鲁科尔沁旗| 中宁县| 穆棱市| 新龙县| 泽库县| 德钦县| 博罗县| 石门县| 岳阳市| 甘肃省| 宁乡县| 黑山县| 香河县| 阜阳市| 民乐县| 贵德县| 余庆县| 浮梁县| 阿拉尔市| 卢氏县| 石首市| 田阳县| 田林县| 上高县|