本頁說明適用於圖像相關任務的 TF2 SavedModel 應如何實作可重複使用的 SavedModel API。(這取代了現已棄用的 TF1 Hub 格式的「圖像通用簽章」。)
圖像特徵向量
用法摘要
「圖像特徵向量」是一個密集的 1 維張量,代表整個圖像,通常用於消費者模型中的簡單前饋分類器。(就傳統 CNN 而言,這是空間範圍已匯集或展平後的瓶頸值,但在完成分類之前;如需分類,請參閱下方的圖像分類。)
用於圖像特徵擷取的「可重複使用 SavedModel」在根物件上具有 __call__
方法,可將一批圖像對應到一批特徵向量。可以這樣使用
obj = hub.load("path/to/model") # That's tf.saved_model.load() after download.
images = ... # A batch of images with shape [batch_size, height, width, 3].
features = obj(images) # A batch with shape [batch_size, num_features].
在 Keras 中,對等用法如下
features = hub.KerasLayer("path/to/model")(images)
輸入遵循圖像輸入的一般慣例。模型文件會指定輸入的 height
和 width
的允許範圍。
輸出是 dtype 為 float32
且形狀為 [batch_size, num_features]
的單一張量。batch_size
與輸入中的相同。num_features
是模組特定的常數,與輸入大小無關。
API 詳細資訊
「可重複使用 SavedModel API」也提供 obj.variables
清單 (例如,用於在非立即載入時初始化)。
支援微調的模型提供 obj.trainable_variables
清單。可能需要您傳遞 training=True
以在訓練模式下執行 (例如,用於 dropout)。有些模型允許使用選用引數來覆寫超參數 (例如,dropout 率;將在模型文件中說明)。模型也可能提供 obj.regularization_losses
清單。如需詳細資訊,請參閱「可重複使用 SavedModel API」。
在 Keras 中,這由 hub.KerasLayer
處理:使用 trainable=True
初始化以啟用微調,並 (在極少數情況下套用 hparam 覆寫) 使用 arguments=dict(some_hparam=some_value, ...)
)。
注意事項
是否對輸出特徵套用 dropout 應留給模型消費者決定。「SavedModel」本身不應對實際輸出執行 dropout (即使它在其他地方內部使用 dropout)。
範例
用於圖像特徵向量的「可重複使用 SavedModel」用於:
- Colab 教學課程「重新訓練圖像分類器」、
圖像分類
用法摘要
「圖像分類」將圖像的像素對應到線性分數 (logits),以判斷是否屬於模組發布者所選分類系統的類別。這可讓模型消費者從發布者模組學習的特定分類中得出結論。(對於具有一組新類別的圖像分類,常見的做法是改為重複使用「圖像特徵向量」模型和新的分類器。)
用於圖像分類的「可重複使用 SavedModel」在根物件上具有 __call__
方法,可將一批圖像對應到一批 logits。可以這樣使用
obj = hub.load("path/to/model") # That's tf.saved_model.load() after download.
images = ... # A batch of images with shape [batch_size, height, width, 3].
logits = obj(images) # A batch with shape [batch_size, num_classes].
在 Keras 中,對等用法如下
logits = hub.KerasLayer("path/to/model")(images)
輸入遵循圖像輸入的一般慣例。模型文件會指定輸入的 height
和 width
的允許範圍。
輸出 logits
是 dtype 為 float32
且形狀為 [batch_size, num_classes]
的單一張量。batch_size
與輸入中的相同。num_classes
是分類中的類別數量,這是模型特定的常數。
值 logits[i, c]
是預測範例 i
是否屬於索引為 c
的類別的分數。
這些分數是否要與 softmax (用於互斥類別)、sigmoid (用於正交類別) 或其他方法搭配使用,取決於基礎分類。模組文件應說明此點,並參閱類別索引的定義。
API 詳細資訊
「可重複使用 SavedModel API」也提供 obj.variables
清單 (例如,用於在非立即載入時初始化)。
支援微調的模型提供 obj.trainable_variables
清單。可能需要您傳遞 training=True
以在訓練模式下執行 (例如,用於 dropout)。有些模型允許使用選用引數來覆寫超參數 (例如,dropout 率;將在模型文件中說明)。模型也可能提供 obj.regularization_losses
清單。如需詳細資訊,請參閱「可重複使用 SavedModel API」。
在 Keras 中,這由 hub.KerasLayer
處理:使用 trainable=True
初始化以啟用微調,並 (在極少數情況下套用 hparam 覆寫) 使用 arguments=dict(some_hparam=some_value, ...)
)。
圖像輸入
這適用於所有類型的圖像模型。
採用一批圖像作為輸入的模型,會將其接受為 dtype 為 float32
且形狀為 [batch_size, height, width, 3]
的密集 4 維張量,其元素是像素的 RGB 色彩值,已正規化到 [0, 1] 範圍。這就是您從 tf.image.decode_*()
後接 tf.image.convert_image_dtype(..., tf.float32)
取得的結果。
模型接受任何 batch_size
。模型文件會指定 height
和 width
的允許範圍。最後一個維度固定為 3 個 RGB 通道。
建議模型自始至終使用張量的 channels_last
(或 NHWC
) 版面配置,並交由 TensorFlow 的圖形最佳化工具在需要時重寫為 channels_first
(或 NCHW
)。