EfficientNet模型
一、模型框架
2019年,谷歌新出EfficientNet,網(wǎng)絡(luò)如其名,這個(gè)網(wǎng)絡(luò)非常的有效率,怎么理解有效率這個(gè)詞呢,我們從卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展來看:
從最初的VGG16發(fā)展到如今的Xception,人們慢慢發(fā)現(xiàn),提高神經(jīng)網(wǎng)絡(luò)的性能不僅僅在于堆疊層數(shù),更重要的幾點(diǎn)是:
1、網(wǎng)絡(luò)要可以訓(xùn)練,可以收斂。
2、參數(shù)量要比較小,方便訓(xùn)練,提高速度。
3、創(chuàng)新神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),學(xué)到更重要的東西。
而EfficientNet很好的做到了這一點(diǎn),它利用更少的參數(shù)量(關(guān)系到訓(xùn)練、速度)得到最好的識(shí)別度(學(xué)到更重要的特點(diǎn))
EfficientNet模型具有很獨(dú)特的特點(diǎn),這個(gè)特點(diǎn)是參考其它優(yōu)秀神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)出來的。經(jīng)典的神經(jīng)網(wǎng)絡(luò)特點(diǎn)如下:
1、利用殘差神經(jīng)網(wǎng)絡(luò)增大神經(jīng)網(wǎng)絡(luò)的深度,通過更深的神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)特征提取。
2、改變每一層提取的特征層數(shù),實(shí)現(xiàn)更多層的特征提取,得到更多的特征,提升寬度。
3、通過增大輸入圖片的分辨率也可以使得網(wǎng)絡(luò)可以學(xué)習(xí)與表達(dá)的東西更加豐富,有利于提高精確度。
EfficientNet就是將這三個(gè)特點(diǎn)結(jié)合起來,通過一起縮放baseline模型(MobileNet中就通過縮放α實(shí)現(xiàn)縮放模型,不同的α有不同的模型精度,α=1時(shí)為baseline模型;ResNet其實(shí)也是有一個(gè)baseline模型,在baseline的基礎(chǔ)上通過改變圖片的深度實(shí)現(xiàn)不同的模型實(shí)現(xiàn)),同時(shí)調(diào)整深度、寬度、輸入圖片的分辨率完成一個(gè)優(yōu)秀的網(wǎng)絡(luò)設(shè)計(jì)。
EfficientNet的效果如下:

二、結(jié)構(gòu)層次
在EfficientNet模型中,其使用一組固定的縮放系數(shù)統(tǒng)一縮放網(wǎng)絡(luò)深度、寬度和分辨率。
假設(shè)想使用 2N倍的計(jì)算資源,我們可以簡(jiǎn)單的對(duì)網(wǎng)絡(luò)深度擴(kuò)大αN倍、寬度擴(kuò)大βN 、圖像尺寸擴(kuò)大γN倍,這里的α,β,γ都是由原來的小模型上做微小的網(wǎng)格搜索決定的常量系數(shù)。
如圖為EfficientNet的設(shè)計(jì)思路,從三個(gè)方面同時(shí)拓充網(wǎng)絡(luò)的特性。

EfficientNet一共由Stem + 16個(gè)Blocks + Con2D + GlobalAveragePooling2D + Dense組成,其核心內(nèi)容是16個(gè)Blocks,其它的結(jié)構(gòu)與常規(guī)的卷積神經(jīng)網(wǎng)絡(luò)差距不大。
此時(shí)展示的是EfficientNet-B0也就是EfficientNet的baseline的結(jié)構(gòu):

其中每個(gè)Block的的參數(shù)如下:
DEFAULT_BLOCKS_ARGS = [
{'kernel_size': 3, 'repeats': 1, 'filters_in': 32, 'filters_out': 16,
'expand_ratio': 1, 'id_skip': True, 'strides': 1, 'se_ratio': 0.25},
{'kernel_size': 3, 'repeats': 2, 'filters_in': 16, 'filters_out': 24,
'expand_ratio': 6, 'id_skip': True, 'strides': 2, 'se_ratio': 0.25},
{'kernel_size': 5, 'repeats': 2, 'filters_in': 24, 'filters_out': 40,
'expand_ratio': 6, 'id_skip': True, 'strides': 2, 'se_ratio': 0.25},
{'kernel_size': 3, 'repeats': 3, 'filters_in': 40, 'filters_out': 80,
'expand_ratio': 6, 'id_skip': True, 'strides': 2, 'se_ratio': 0.25},
{'kernel_size': 5, 'repeats': 3, 'filters_in': 80, 'filters_out': 112,
'expand_ratio': 6, 'id_skip': True, 'strides': 1, 'se_ratio': 0.25},
{'kernel_size': 5, 'repeats': 4, 'filters_in': 112, 'filters_out': 192,
'expand_ratio': 6, 'id_skip': True, 'strides': 2, 'se_ratio': 0.25},
{'kernel_size': 3, 'repeats': 1, 'filters_in': 192, 'filters_out': 320,
'expand_ratio': 6, 'id_skip': True, 'strides': 1, 'se_ratio': 0.25}
]
Block的通用結(jié)構(gòu)如下,其總體的設(shè)計(jì)思路依然基于MobileNet中的Inverted residuals結(jié)構(gòu),在3x3網(wǎng)絡(luò)結(jié)構(gòu)前利用1x1卷積升維,在3x3網(wǎng)絡(luò)結(jié)構(gòu)后,利用1x1卷積降維,先進(jìn)行擴(kuò)張,再進(jìn)行壓縮。只是其中增加了一個(gè)先壓縮特征再增加特征的乘法特征提取:

三、代碼實(shí)現(xiàn)(tesorflow2)
https://github.com/weigesdl/Classical_convolution_network_model/blob/master/efficientNet.ipynb
四、原文鏈接:
https://blog.csdn.net/weixin_44791964/article/details/102886367