iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
AI & Data

AI Facial Expression Recognition: Data, Model, Application系列 第 10

[Day 10] 從 tensorflow.keras 開始的 ResNet 生活

0. 前言

https://ithelp.ithome.com.tw/upload/images/20210924/2014129428vWFRZ0n4.png

01
02
有一說一,VGG19跟ResNet34比起來真的很淺(上圖)。
ResNet全名為Deep Residual Neural Network,
光看翻譯可能不太能理解甚麼是「殘差網路」,
所以今天師爺我就來翻譯翻譯,什麼叫「殘差網路」。


1. ResNet50 網路架構詳細圖解

以下表格中,最中間的就是resnet50的結構,
可以分成幾個部分:

  1. conv1:7x7卷積核(共1層)
  2. conv2_x:由三種卷積核(1x1,3x3,1x1)組成一個block,疊3次。(共9層)
  3. conv3_x:由三種卷積核(1x1,3x3,1x1)組成一個block,疊4次。(共12層)
  4. conv4_x:由三種卷積核(1x1,3x3,1x1)組成一個block,疊6次。(共18層)
  5. conv5_x:由三種卷積核(1x1,3x3,1x1)組成一個block,疊3次。(共9層)
  6. output:由pooling+全連接層+softmax組成。(共1層)
    這六個部分加給來共50層,
    第2.到5.部分是ResNet的創新重點!
    03

1.1 ResNet優點

  1. ResNet在VGG的基礎上,新增直連通路(skip connection),不會新增任何參數,
    但是可以解決梯度消失的問題
  2. 直連通路與卷積層進行元素點(element-wise)相加,而非直接連接。
    這使某一層模型只需要學習輸入與輸出之間的殘差(residual),大幅度降低了模型學習的難度。
    直連通路
  3. 殘差塊使用bottleneck形式,將一個3x3卷積核拆分成一組(1x1,3x3,1x1)卷積核,
    可減少模型參數使用量。
  4. 綜合前面3點,ResNet保障了深度神經網路的可訓練性,
    並且在深度模型上也可以避免使用過多參數量。

1.2 ResNet缺點

  1. 模型推論速度慢:ResNet50比VGG16還慢。

1.3 「成也深度、敗也深度」

04
ResNet-152在ImageNet上達到了5.71% top-5 error,
狠狠甩開VGG-16和GoogLeNet,
上表看起來也是152 > 101 > 50。
那為何不要直疊一個1000層的神經網路呢?
cifar10
上圖為ResNet作者在CIFAR-10上的實驗結果,
ResNet-1202的表現甚至比ResNet-56還差。


2. tf.keras 程式碼

沒錯,就是這麼簡單/images/emoticon/emoticon07.gif
其實就是import不同的模組XD

from tensorflow.keras.applications import ResNet50

def build_model(preModel=ResNet50, num_classes=7):

    
    pred_model = preModel(include_top=False, weights='imagenet',
                          input_shape=(48, 48, 3),
                          pooling='max', classifier_activation='softmax')
    output_layer = Dense(
        num_classes, activation="softmax", name="output_layer")

    model = tf.keras.Model(
        pred_model.inputs, output_layer(pred_model.output))

    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss=tf.keras.losses.CategoricalCrossentropy(), metrics=['accuracy'])

    return model

3. 結語

ResNet帶給我的啟示是這樣的:
人們知道模型加深可以提高準確率,
但是加深會有許多困難要克服,
例如:1.參數量變大、2.推論時間變久、3.梯度消失嚴重、4.硬體設備不足。
這些困難導致模型無法訓練成功。
而殘差網路+bottleneck看似解決了1.和3.,
但也只是減緩模型加深的帶來的困難,而非完全解決。
但是ResNetv2對ResNetv1做了改善,
讓模型疊到1001層(ResNet-1001[ours])也能夠成功訓練。
如下圖所示:
cifar10v2


參考資料

  1. https://arxiv.org/abs/1512.03385 (ResNetv1)
  2. https://arxiv.org/abs/1603.05027 (ResNetv2)

上一篇
[Day 09] 從 tensorflow.keras 開始的 VGG Net 生活 (第二季)
下一篇
[Day 11] 從零開始的 DenseNet 生活
系列文
AI Facial Expression Recognition: Data, Model, Application30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言