Keras 3 API 文件 / Keras 應用 / MobileNet、MobileNetV2 和 MobileNetV3

MobileNet、MobileNetV2 和 MobileNetV3

[原始碼]

MobileNet 函數

keras.applications.MobileNet(
    input_shape=None,
    alpha=1.0,
    depth_multiplier=1,
    dropout=0.001,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    pooling=None,
    classes=1000,
    classifier_activation="softmax",
    name=None,
)

實例化 MobileNet 架構。

參考文獻

此函數會回傳一個 Keras 圖像分類模型,可選擇載入在 ImageNet 上預先訓練的權重。

關於圖像分類的使用案例,請參閱 此頁面以取得詳細範例

關於遷移學習的使用案例,請務必閱讀遷移學習和微調指南

注意:每個 Keras 應用程式都預期特定類型的輸入預處理。對於 MobileNet,請在將輸入傳遞至模型之前,對您的輸入呼叫 keras.applications.mobilenet.preprocess_inputmobilenet.preprocess_input 會將輸入像素縮放至 -1 和 1 之間。

參數

  • input_shape:可選的形狀元組,只有在 include_topFalse 時才需要指定 (否則輸入形狀必須為 (224, 224, 3) (使用 "channels_last" 資料格式) 或 (3, 224, 224) (使用 "channels_first" 資料格式)。它應該恰好有 3 個輸入通道,並且寬度和高度不應小於 32。例如,(200, 200, 3) 會是一個有效的值。預設值為 None。如果提供 input_tensor,則會忽略 input_shape
  • alpha:控制網路的寬度。這在 MobileNet 論文中稱為寬度乘數。
    • 如果 alpha < 1.0,則按比例減少每層中的篩選器數量。
    • 如果 alpha > 1.0,則按比例增加每層中的篩選器數量。
    • 如果 alpha == 1,則在每層中使用論文中的預設篩選器數量。預設值為 1.0
  • depth_multiplier:深度卷積的深度乘數。這在 MobileNet 論文中稱為解析度乘數。預設值為 1.0
  • dropout:Dropout 率。預設值為 0.001
  • include_top:布林值,是否在網路頂部包含完全連接層。預設值為 True
  • weightsNone (隨機初始化)、"imagenet" (在 ImageNet 上預先訓練) 或要載入的權重檔案路徑之一。預設值為 "imagenet"
  • input_tensor:可選的 Keras 張量 (即 layers.Input() 的輸出),用作模型的影像輸入。input_tensor 可用於在多個不同的網路之間共用輸入。預設值為 None
  • pooling:當 include_topFalse 時,用於特徵提取的可選池化模式。
    • None (預設值) 表示模型的輸出將是最後一個卷積區塊的 4D 張量輸出。
    • avg 表示全域平均池化將會套用至最後一個卷積區塊的輸出,因此模型的輸出將會是 2D 張量。
    • max 表示將會套用全域最大池化。
  • classes:可選的類別數量,用於將影像分類成,只有在 include_topTrue 且未指定任何 weights 引數時才需要指定。預設值為 1000
  • classifier_activationstr 或可呼叫物件。「頂層」上要使用的啟用函數。除非 include_top=True,否則會忽略。設定 classifier_activation=None 以回傳「頂層」的 logits。載入預先訓練的權重時,classifier_activation 只能是 None"softmax"
  • name:字串,模型的名稱。

回傳

一個模型實例。


[原始碼]

MobileNetV2 函數

keras.applications.MobileNetV2(
    input_shape=None,
    alpha=1.0,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    pooling=None,
    classes=1000,
    classifier_activation="softmax",
    name=None,
)

實例化 MobileNetV2 架構。

MobileNetV2 與原始 MobileNet 非常相似,只是它使用具有瓶頸特徵的反向殘差區塊。它具有比原始 MobileNet 低得多的參數計數。MobileNets 支援大於 32 x 32 的任何輸入大小,較大的影像大小可提供更好的效能。

參考文獻

此函數會回傳一個 Keras 圖像分類模型,可選擇載入在 ImageNet 上預先訓練的權重。

關於圖像分類的使用案例,請參閱 此頁面以取得詳細範例

關於遷移學習的使用案例,請務必閱讀遷移學習和微調指南

注意:每個 Keras 應用程式都預期特定類型的輸入預處理。對於 MobileNetV2,請在將輸入傳遞至模型之前,對您的輸入呼叫 keras.applications.mobilenet_v2.preprocess_inputmobilenet_v2.preprocess_input 會將輸入像素縮放至 -1 和 1 之間。

參數

  • input_shape:可選的形狀元組,只有在 include_topFalse 時才需要指定 (否則輸入形狀必須為 (224, 224, 3) (使用 "channels_last" 資料格式) 或 (3, 224, 224) (使用 "channels_first" 資料格式)。它應該恰好有 3 個輸入通道,並且寬度和高度不應小於 32。例如,(200, 200, 3) 會是一個有效的值。預設值為 None。如果提供 input_tensor,則會忽略 input_shape
  • alpha:控制網路的寬度。這在 MobileNet 論文中稱為寬度乘數。
    • 如果 alpha < 1.0,則按比例減少每層中的篩選器數量。
    • 如果 alpha > 1.0,則按比例增加每層中的篩選器數量。
    • 如果 alpha == 1,則在每層中使用論文中的預設篩選器數量。預設值為 1.0
  • include_top:布林值,是否在網路頂部包含完全連接層。預設值為 True
  • weightsNone (隨機初始化)、"imagenet" (在 ImageNet 上預先訓練) 或要載入的權重檔案路徑之一。預設值為 "imagenet"
  • input_tensor:可選的 Keras 張量 (即 layers.Input() 的輸出),用作模型的影像輸入。input_tensor 可用於在多個不同的網路之間共用輸入。預設值為 None
  • pooling:當 include_topFalse 時,用於特徵提取的可選池化模式。
    • None (預設值) 表示模型的輸出將是最後一個卷積區塊的 4D 張量輸出。
    • avg 表示全域平均池化將會套用至最後一個卷積區塊的輸出,因此模型的輸出將會是 2D 張量。
    • max 表示將會套用全域最大池化。
  • classes:可選的類別數量,用於將影像分類成,只有在 include_topTrue 且未指定任何 weights 引數時才需要指定。預設值為 1000
  • classifier_activationstr 或可呼叫物件。「頂層」上要使用的啟用函數。除非 include_top=True,否則會忽略。設定 classifier_activation=None 以回傳「頂層」的 logits。載入預先訓練的權重時,classifier_activation 只能是 None"softmax"
  • name:字串,模型的名稱。

回傳

一個模型實例。


[原始碼]

MobileNetV3Small 函數

keras.applications.MobileNetV3Small(
    input_shape=None,
    alpha=1.0,
    minimalistic=False,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    classes=1000,
    pooling=None,
    dropout_rate=0.2,
    classifier_activation="softmax",
    include_preprocessing=True,
    name="MobileNetV3Small",
)

實例化 MobileNetV3Small 架構。

參考文獻

下表描述 MobileNets v3 的效能

MAC 代表乘法累加 (Multiply Adds)

分類檢查點 MAC(M) 參數 (M) 前 1 名準確度 Pixel1 CPU (毫秒)
mobilenet_v3_large_1.0_224 217 5.4 75.6 51.2
mobilenet_v3_large_0.75_224 155 4.0 73.3 39.8
mobilenet_v3_large_minimalistic_1.0_224 209 3.9 72.3 44.1
mobilenet_v3_small_1.0_224 66 2.9 68.1 15.8
mobilenet_v3_small_0.75_224 44 2.4 65.4 12.8
mobilenet_v3_small_minimalistic_1.0_224 65 2.0 61.9 12.2

關於圖像分類的使用案例,請參閱 此頁面以取得詳細範例

關於遷移學習的使用案例,請務必閱讀遷移學習和微調指南

注意:每個 Keras 應用程式都預期特定類型的輸入預處理。對於 MobileNetV3,預設情況下輸入預處理會包含為模型的一部分 (作為 Rescaling 層),因此 keras.applications.mobilenet_v3.preprocess_input 實際上是直通函數。在此使用案例中,MobileNetV3 模型預期它們的輸入是像素值在 [0-255] 範圍內的浮點張量。同時,可以透過將 include_preprocessing 引數設定為 False 來停用作為模型一部分的預處理 (即 Rescaling 層)。停用預處理時,MobileNetV3 模型預期它們的輸入是像素值在 [-1, 1] 範圍內的浮點張量。

參數

  • input_shape:可選的形狀元組,如果您想要使用輸入影像解析度不是 (224, 224, 3) 的模型,則需要指定。它應該恰好有 3 個輸入通道。如果您想要從 input_tensor 推斷 input_shape,您也可以省略此選項。如果您選擇同時包含 input_tensor 和 input_shape,則如果它們符合,將會使用 input_shape,如果形狀不符合,則會擲回錯誤。例如,(160, 160, 3) 會是一個有效的值。
  • alpha:控制網路的寬度。這在 MobileNetV3 論文中稱為深度乘數,但為了與 Keras 中的 MobileNetV1 保持一致而保留此名稱。
    • 如果 alpha < 1.0,則按比例減少每層中的篩選器數量。
    • 如果 alpha > 1.0,則按比例增加每層中的篩選器數量。
    • 如果 alpha == 1,則在每層中使用論文中的預設篩選器數量。
  • minimalistic:除了大型和小型模型之外,此模組還包含所謂的簡約模型,這些模型的每層尺寸特性與 MobilenetV3 相同,但是它們不使用任何進階區塊 (擠壓與激發單元、硬 swish 和 5x5 卷積)。雖然這些模型在 CPU 上的效率較低,但在 GPU/DSP 上的效能要好得多。
  • include_top:布林值,是否在網路頂部包含完全連接層。預設值為 True
  • weights:字串,None (隨機初始化)、"imagenet" (在 ImageNet 上預先訓練) 或要載入的權重檔案路徑之一。
  • input_tensor:可選的 Keras 張量 (即 layers.Input() 的輸出),用作模型的影像輸入。
  • pooling:字串,當 include_topFalse 時,用於特徵提取的可選池化模式。
    • None 表示模型的輸出將是最後一個卷積區塊的 4D 張量輸出。
    • avg 表示全域平均池化將會套用至最後一個卷積區塊的輸出,因此模型的輸出將會是 2D 張量。
    • max 表示將會套用全域最大池化。
  • classes:整數,可選的類別數量,用於將影像分類成,只有在 include_topTrue 且未指定任何 weights 引數時才需要指定。
  • dropout_rate:在最後一層要捨棄的輸入單元比例。
  • classifier_activationstr 或可呼叫物件。「頂層」上要使用的啟用函數。除非 include_top=True,否則會忽略。設定 classifier_activation=None 以回傳「頂層」的 logits。載入預先訓練的權重時,classifier_activation 只能是 None"softmax"
  • include_preprocessing:布林值,是否在網路底部包含預處理層 (Rescaling)。預設值為 True
  • name:字串,模型的名稱。

呼叫引數

  • inputs:浮點數 numpy.array 或後端原生張量,4D 具有 3 個顏色通道,如果 include_preprocessingTrue,則值在 [0, 255] 範圍內,否則在 [-1, 1] 範圍內。

回傳

一個模型實例。


[原始碼]

MobileNetV3Large 函數

keras.applications.MobileNetV3Large(
    input_shape=None,
    alpha=1.0,
    minimalistic=False,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    classes=1000,
    pooling=None,
    dropout_rate=0.2,
    classifier_activation="softmax",
    include_preprocessing=True,
    name="MobileNetV3Large",
)

實例化 MobileNetV3Large 架構。

參考文獻

下表描述 MobileNets v3 的效能

MAC 代表乘法累加 (Multiply Adds)

分類檢查點 MAC(M) 參數 (M) 前 1 名準確度 Pixel1 CPU (毫秒)
mobilenet_v3_large_1.0_224 217 5.4 75.6 51.2
mobilenet_v3_large_0.75_224 155 4.0 73.3 39.8
mobilenet_v3_large_minimalistic_1.0_224 209 3.9 72.3 44.1
mobilenet_v3_small_1.0_224 66 2.9 68.1 15.8
mobilenet_v3_small_0.75_224 44 2.4 65.4 12.8
mobilenet_v3_small_minimalistic_1.0_224 65 2.0 61.9 12.2

關於圖像分類的使用案例,請參閱 此頁面以取得詳細範例

關於遷移學習的使用案例,請務必閱讀遷移學習和微調指南

注意:每個 Keras 應用程式都預期特定類型的輸入預處理。對於 MobileNetV3,預設情況下輸入預處理會包含為模型的一部分 (作為 Rescaling 層),因此 keras.applications.mobilenet_v3.preprocess_input 實際上是直通函數。在此使用案例中,MobileNetV3 模型預期它們的輸入是像素值在 [0-255] 範圍內的浮點張量。同時,可以透過將 include_preprocessing 引數設定為 False 來停用作為模型一部分的預處理 (即 Rescaling 層)。停用預處理時,MobileNetV3 模型預期它們的輸入是像素值在 [-1, 1] 範圍內的浮點張量。

參數

  • input_shape:可選的形狀元組,如果您想要使用輸入影像解析度不是 (224, 224, 3) 的模型,則需要指定。它應該恰好有 3 個輸入通道。如果您想要從 input_tensor 推斷 input_shape,您也可以省略此選項。如果您選擇同時包含 input_tensor 和 input_shape,則如果它們符合,將會使用 input_shape,如果形狀不符合,則會擲回錯誤。例如,(160, 160, 3) 會是一個有效的值。
  • alpha:控制網路的寬度。這在 MobileNetV3 論文中稱為深度乘數,但為了與 Keras 中的 MobileNetV1 保持一致而保留此名稱。
    • 如果 alpha < 1.0,則按比例減少每層中的篩選器數量。
    • 如果 alpha > 1.0,則按比例增加每層中的篩選器數量。
    • 如果 alpha == 1,則在每層中使用論文中的預設篩選器數量。
  • minimalistic:除了大型和小型模型之外,此模組還包含所謂的簡約模型,這些模型的每層尺寸特性與 MobilenetV3 相同,但是它們不使用任何進階區塊 (擠壓與激發單元、硬 swish 和 5x5 卷積)。雖然這些模型在 CPU 上的效率較低,但在 GPU/DSP 上的效能要好得多。
  • include_top:布林值,是否在網路頂部包含完全連接層。預設值為 True
  • weights:字串,None (隨機初始化)、"imagenet" (在 ImageNet 上預先訓練) 或要載入的權重檔案路徑之一。
  • input_tensor:可選的 Keras 張量 (即 layers.Input() 的輸出),用作模型的影像輸入。
  • pooling:字串,當 include_topFalse 時,用於特徵提取的可選池化模式。
    • None 表示模型的輸出將是最後一個卷積區塊的 4D 張量輸出。
    • avg 表示全域平均池化將會套用至最後一個卷積區塊的輸出,因此模型的輸出將會是 2D 張量。
    • max 表示將會套用全域最大池化。
  • classes:整數,可選的類別數量,用於將影像分類成,只有在 include_topTrue 且未指定任何 weights 引數時才需要指定。
  • dropout_rate:在最後一層要捨棄的輸入單元比例。
  • classifier_activationstr 或可呼叫物件。「頂層」上要使用的啟用函數。除非 include_top=True,否則會忽略。設定 classifier_activation=None 以回傳「頂層」的 logits。載入預先訓練的權重時,classifier_activation 只能是 None"softmax"
  • include_preprocessing:布林值,是否在網路底部包含預處理層 (Rescaling)。預設值為 True
  • name:字串,模型的名稱。

呼叫引數

  • inputs:浮點數 numpy.array 或後端原生張量,4D 具有 3 個顏色通道,如果 include_preprocessingTrue,則值在 [0, 255] 範圍內,否則在 [-1, 1] 範圍內。

回傳

一個模型實例。