作者丨Vardan Agarwal、ronghuaiyang(譯)本文介紹了一種高效的網(wǎng)絡(luò)模型EfficientNet,并分析了?EfficientNet B0 至B7的網(wǎng)絡(luò)結(jié)構(gòu)之間的差異。
我在一個(gè)Kaggle競(jìng)賽中翻閱notebooks,發(fā)現(xiàn)幾乎每個(gè)人都在使用EfficientNet 作為他們的主干,而我之前從未聽(tīng)說(shuō)過(guò)這個(gè)。谷歌AI在這篇文章中:https://arxiv.org/abs/1905.11946介紹了它,他們?cè)噲D提出一種更高效的方法,就像它的名字所建議的那樣,同時(shí)改善了最新的結(jié)果。一般來(lái)說(shuō),模型設(shè)計(jì)得太寬,太深,或者分辨率太高。剛開(kāi)始的時(shí)候,增加這些特性是有用的,但很快就會(huì)飽和,然后模型的參數(shù)會(huì)很多,因而效率不高。在EfficientNet中,這些特性是按更有原則的方式擴(kuò)展的,也就是說(shuō),一切都是逐漸增加的。
不明白發(fā)生了什么?不要擔(dān)心,一旦看到了架構(gòu),你就會(huì)明白了。但首先,讓我們看看他們得到了什么結(jié)果。
由于參數(shù)的數(shù)目相當(dāng)少,這個(gè)模型族是非常高效的,也提供更好的結(jié)果?,F(xiàn)在我們知道了為什么這些可能會(huì)成為標(biāo)準(zhǔn)的預(yù)訓(xùn)練模型,但是缺少了一些東西。
共同之處
首先,任何網(wǎng)絡(luò)都以它為主干,在此之后,所有對(duì)架構(gòu)的實(shí)驗(yàn)都以它為開(kāi)始,這在所有8個(gè)模型和最后的層中都是一樣的。之后,每個(gè)主干包含7個(gè)block。這些block還有不同數(shù)量的子block,這些子block的數(shù)量隨著EfficientNetB0到EfficientNetB7而增加。要可視化模型層,代碼如下:
!pip?install?tf-nightly-gpu
import?tensorflow?as?tf
IMG_SHAPE?=?(224,?224,?3)
model0?=?tf.keras.applications.EfficientNetB0(input_shape=IMG_SHAPE,?include_top=False,?weights="imagenet")
tf.keras.utils.plot_model(model0)?#?to?draw?and?visualize
model0.summary()?#?to?see?the?list?of?layers?and?parameters
如果你計(jì)算EfficientNet-B0的總層數(shù),總數(shù)是237層,而EfficientNet-B7的總數(shù)是813層??!但不用擔(dān)心,所有這些層都可以由下面的5個(gè)模塊和上面的主干組成。我們使用這5個(gè)模塊來(lái)構(gòu)建整個(gè)結(jié)構(gòu)。
- 模塊2?— 此模塊用于除第一個(gè)模塊外的所有7個(gè)主要模塊的第一個(gè)子block的起點(diǎn)。
- 模塊4?— 用于將跳躍連接合并到第一個(gè)子block中。
- 模塊5?— 每個(gè)子block都以跳躍連接的方式連接到之前的子block,并使用此模塊進(jìn)行組合。
這些模塊被進(jìn)一步組合成子block,這些子block將在block中以某種方式使用。- 子block1?— 它僅用于第一個(gè)block中的第一個(gè)子block。
- 子block2?— 它用作所有其他block中的第一個(gè)子block。
- 子block3?— 用于所有block中除第一個(gè)外的任何子block。
到目前為止,我們已經(jīng)指定了要組合起來(lái)創(chuàng)建EfficientNet模型的所有內(nèi)容,所以讓我們開(kāi)始吧。模型結(jié)構(gòu)
EfficientNet-B0
EfficientNet-B0架構(gòu)。(x2表示括號(hào)內(nèi)的模塊重復(fù)兩次)EfficientNet-B1
EfficientNet-B1的結(jié)構(gòu)EfficientNet-B2
它的架構(gòu)與上面的模型相同,唯一的區(qū)別是特征圖(通道)的數(shù)量不同,增加了參數(shù)的數(shù)量。EfficientNet-B3
EfficientNet-B3的結(jié)構(gòu)EfficientNet-B4
EfficientNet-B4的結(jié)構(gòu)EfficientNet-B5
EfficientNet-B5的結(jié)構(gòu)EfficientNet-B6
EfficientNet-B6的結(jié)構(gòu)EfficientNet-B7
EfficientNet-B7的結(jié)構(gòu)很容易看出各個(gè)模型之間的差異,他們逐漸增加了子block的數(shù)量。如果你理解了體系結(jié)構(gòu),我鼓勵(lì)你將任意的模型打印出來(lái),并仔細(xì)閱讀它以更徹底地了解它。下面的表表示了EfficientNet-B0中卷積操作的內(nèi)核大小以及分辨率、通道和層。此表已包含在原始論文中。對(duì)于整個(gè)模型族來(lái)說(shuō),分辨率是一樣的。我不確定卷積核的大小是否改變了。層的數(shù)量已經(jīng)在上面的圖中顯示了。通道數(shù)量是不同的,它是根據(jù)從每個(gè)型號(hào)的摘要中看到的信息計(jì)算出來(lái)的,如下所示:
在結(jié)束之前,我附上了另一個(gè)圖像,來(lái)自它的研究論文,顯示了它與其他的SOTA的performance的比較,還有減少的參數(shù)的數(shù)量和所需的FLOPS。
https://towardsdatascience.com/complete-architectural-details-of-all-efficientnet-models-5fd5b736142
往期精彩:
【原創(chuàng)首發(fā)】機(jī)器學(xué)習(xí)公式推導(dǎo)與代碼實(shí)現(xiàn)30講.pdf
【原創(chuàng)首發(fā)】深度學(xué)習(xí)語(yǔ)義分割理論與實(shí)戰(zhàn)指南.pdf

喜歡您就點(diǎn)個(gè)在看!