ResNet-50 結(jié)構(gòu)


ResNet有2個基本的block搓劫,一個是Identity Block塑荒,輸入和輸出的dimension是一樣的党瓮,所以可以串聯(lián)多個浑侥;另外一個基本block是Conv Block姊舵,輸入和輸出的dimension是不一樣的,所以不能連續(xù)串聯(lián)锭吨,它的作用本來就是為了改變特征向量的dimension

因為CNN最后都是要把輸入圖像一點點的轉(zhuǎn)換成很小但是depth很深的feature map蠢莺,一般的套路是用統(tǒng)一的比較小的kernel(比如VGG都是用3*3),但是隨著網(wǎng)絡(luò)深度的增加零如,output的channel也增大(學(xué)到的東西越來越復(fù)雜)躏将,所以有必要在進(jìn)入Identity Block之前,用Conv Block轉(zhuǎn)換一下維度考蕾,這樣后面就可以連續(xù)接Identity Block.

Conv Block:

Identity Block:

其實就是在shortcut path的地方加上一個conv2D layer(1*1 filter size)祸憋,然后在main path改變dimension,并與shortcut path對應(yīng)起來.

ResNetV1-50流程如下, 不使用bottleneck, 且只有resnetv1在initial_conv后面做BN和Relu:

block_sizes=[3, 4, 6, 3]指的是stage1(first pool)之后的4個layer的block數(shù), 分別對應(yīng)res2,res3,res4,res5,
    每一個layer的第一個block在shortcut上做conv+BN, 即Conv Block
inputs: (1, 720, 1280, 3)
initial_conv:
    conv2d_fixed_padding()
    1. kernel_size=7, 先做padding(1, 720, 1280, 3) -> (1, 726, 1286, 3)
    2. conv2d kernels=[7, 7, 3, 64], stride=2, VALID 卷積. 7x7的kernel, padding都為3, 為了保證左上角和卷積核中心點對其
       (1, 726, 1286, 3) -> (1, 360, 640, 64)
    3. BN, Relu (只有resnetv1在第一次conv后面做BN和Relu)
initial_max_pool:
    k=3, s=2, padding='SAME', (1, 360, 640, 64) -> (1, 180, 320, 64)
以下均為不使用bottleneck的building_block
block_layer1:
    (有3個block, layer間stride=1(上一層做pool了), 64個filter, 不使用bottleneck(若使用bottleneck 卷積核數(shù)量需乘4))
    1. 第一個block:
    Conv Block有projection_shortcut, 且strides可以等于1或者2
    Identity Block沒有projection_shortcut, 且strides只能等于1
        `inputs = block_fn(inputs, filters, training, projection_shortcut, strides, data_format)`
        shortcut做[1, 1, 64, 64], stride=1的conv和BN, shape不變
        然后和主要分支里input做3次卷積后的結(jié)果相加, 一起Relu, 注意block里最后一次卷積后只有BN沒有Relu
        input:    conv-bn-relu-conv-bn-relu-conv-bn  和shortcut相加后再做relu
        shortcut: conv-bn                            
        shortcut: [1, 1, 64, 64], s=1, (1, 180, 320, 64) -> (1, 180, 320, 64)
        input做兩次[3, 3, 64, 64], s=1的卷積, shape不變(1, 180, 320, 64) -> (1, 180, 320, 64) -> (1, 180, 320, 64)
        inputs += shortcut, 再relu
    2. 對剩下的2個block, 每個block操作相同:
        `inputs = block_fn(inputs, filters, training, None, 1, data_format)`
        shortcut直接和input卷積結(jié)果相加, 不做conv-bn
        input做兩次[3, 3, 64, 64], s=1的卷積, shape不變(1, 180, 320, 64) -> (1, 180, 320, 64) -> (1, 180, 320, 64)
        inputs += shortcut, 再relu
block_layer2/3/4同block_layer1, 只是每個layer的identity block數(shù)量不同, 卷積核數(shù)量和layer間stride也不同, 不過仍然只有第一個conv block的shortcut做conv-bn
block_layer2: 4個block, 128個filter, layer間stride=2 (因為上一層出來后沒有pool)
    1. 第一個block:
        對shortcut做kernel=[1, 1, 64, 128], s=2的conv和BN, (1, 180, 320, 64) -> (1, 90, 160, 128)
        對主要分支先做kernel=[3, 3, 64, 128], s=2的卷積, padding='VALID', (1, 180, 320, 64) -> (1, 90, 160, 128)
                再做kernel=[3, 3, 128, 128], s=1的卷積, padding='SAME', (1, 90, 160, 128) -> (1, 90, 160, 128)
    2. 剩下的3個block, 每個block操作相同:
        shortcut不操作直接和結(jié)果相加做Relu
        對主要分支做兩次[3, 3, 128, 128], s=1的卷積, padding='SAME', (1, 90, 160, 128) -> (1, 90, 160, 128) -> (1, 90, 160, 128)
block_layer3: 6個block, 256個filter, layer間stride=2
    1. 第一個block:
        對shortcut做kernel=[1, 1, 128, 256], s=2的conv和BN, (1, 90, 160, 128) -> (1, 45, 80, 256)
        對主要分支先做kernel=[3, 3, 128, 256], s=2的卷積, padding='VALID', (1, 90, 160, 128) -> (1, 45, 80, 256)
                再做kernel=[3, 3, 256, 256], s=1的卷積, padding='SAME', (1, 45, 80, 256) -> (1, 45, 80, 256)
    2. 剩下的5個block, 每個block操作相同:
        shortcut不操作直接和結(jié)果相加做Relu
        對主要分支做兩次[3, 3, 256, 256], s=1的卷積, padding='SAME', (1, 45, 80, 256) -> (1, 45, 80, 256) -> (1, 45, 80, 256)
block_layer4: 3個block, 512個filter, layer間stride=2
    1. 第一個block:
        對shortcut做kernel=[1, 1, 256, 512], s=2的conv和BN, (1, 45, 80, 256) -> (1, 23, 40, 512)
        對主要分支先做kernel=[3, 3, 256, 512], s=2的卷積, padding='VALID', (1, 45, 80, 256) -> (1, 23, 40, 512)
                再做kernel=[3, 3, 512, 512], s=1的卷積, padding='SAME', (1, 23, 40, 512) -> (1, 23, 40, 512)
    2. 剩下的2個block, 每個block操作相同:
        shortcut不操作直接和結(jié)果相加做Relu
        對主要分支做兩次[3, 3, 512, 512], s=1的卷積, padding='SAME', (1, 23, 40, 512) -> (1, 23, 40, 512)
avg_pool, 7*7
FC, output1000
softmax
輸出prediction

Keras版結(jié)構(gòu)如下, res2a代表stage2的第1個block, branch1是shortcut path, branch2是main path, branch2a代表是main path的第1個卷積:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肖卧,一起剝皮案震驚了整個濱河市蚯窥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塞帐,老刑警劉巖拦赠,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異葵姥,居然都是意外死亡荷鼠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門榔幸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來允乐,“玉大人,你說我怎么就攤上這事削咆‰故瑁” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵拨齐,是天一觀的道長鳞陨。 經(jīng)常有香客問我,道長奏黑,這世上最難降的妖魔是什么炊邦? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任编矾,我火速辦了婚禮,結(jié)果婚禮上馁害,老公的妹妹穿的比我還像新娘窄俏。我一直安慰自己,他們只是感情好碘菜,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布凹蜈。 她就那樣靜靜地躺著,像睡著了一般忍啸。 火紅的嫁衣襯著肌膚如雪仰坦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天计雌,我揣著相機與錄音悄晃,去河邊找鬼。 笑死凿滤,一個胖子當(dāng)著我的面吹牛妈橄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翁脆,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼眷蚓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了反番?” 一聲冷哼從身側(cè)響起沙热,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罢缸,沒想到半個月后篙贸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡枫疆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年歉秫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片养铸。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轧膘,靈堂內(nèi)的尸體忽然破棺而出钞螟,到底是詐尸還是另有隱情,我是刑警寧澤谎碍,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布鳞滨,位于F島的核電站,受9級特大地震影響蟆淀,放射性物質(zhì)發(fā)生泄漏拯啦。R本人自食惡果不足惜澡匪,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望褒链。 院中可真熱鬧唁情,春花似錦、人聲如沸甫匹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兵迅。三九已至抢韭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恍箭,已是汗流浹背刻恭。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扯夭,地道東北人鳍贾。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像勉抓,于是被迫代替她去往敵國和親贾漏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349