圖片的通用簽名

本頁面說明 TF1 Hub 格式中與圖片相關工作模組應實作的通用簽名。(如需 TF2 SavedModel 格式,請參閱類似的 SavedModel API。)

部分模組可用於多項工作 (例如,圖片分類模組往往會在過程中執行一些特徵擷取)。因此,每個模組都會提供:(1) 發布者預期的所有工作的具名簽名,以及 (2) 指定主要工作的預設簽名 output = m(images)

圖片特徵向量

使用摘要

圖片特徵向量是代表完整圖片的密集 1 維張量,通常供消費者模型進行分類。(不同於 CNN 的中繼啟動,它不提供空間分解。不同於 圖片分類,它捨棄發布者模型學習到的分類。)

用於圖片特徵擷取的模組具有預設簽名,可將批次圖片對應到批次特徵向量。其使用方式如下:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  features = module(images)   # A batch with shape [batch_size, num_features].

它也定義了對應的具名簽名。

簽名規格

用於擷取圖片特徵向量的具名簽名會以下列方式叫用:

  outputs = module(dict(images=images), signature="image_feature_vector",
                   as_dict=True)
  features = outputs["default"]

輸入遵循 圖片輸入的一般慣例。

輸出字典包含 dtype 為 float32 且形狀為 [batch_size, num_features]"default" 輸出。batch_size 與輸入中的相同,但在圖形建構時未知。num_features 是已知的模組專屬常數,與輸入大小無關。

這些特徵向量旨在用於搭配簡單的前饋分類器進行分類 (例如,圖片分類的典型 CNN 中最上層卷積層的集區特徵)。

是否對輸出特徵套用 Dropout 應由模組消費者決定。模組本身不應對實際輸出執行 Dropout (即使在其他地方的內部使用 Dropout)。

輸出字典可能會提供進一步的輸出,例如模組內隱藏層的啟動。其鍵和值取決於模組。建議以架構名稱為架構相關鍵加上前置字串 (例如,避免將中繼層 "InceptionV3/Mixed_5c" 與最上層卷積層 "InceptionV2/Mixed_5c" 混淆)。

圖片分類

使用摘要

圖片分類會將圖片的像素對應至分類法的線性分數 (logits),以供模組發布者選取的類別成員資格使用。這可讓消費者從發布者模組學習到的特定分類中得出結論,而不僅僅是其基礎特徵 (參閱 圖片特徵向量)。

用於圖片特徵擷取的模組具有預設簽名,可將批次圖片對應到批次 logits。其使用方式如下:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  logits = module(images)   # A batch with shape [batch_size, num_classes].

它也定義了對應的具名簽名。

簽名規格

用於擷取圖片特徵向量的具名簽名會以下列方式叫用:

  outputs = module(dict(images=images), signature="image_classification",
                   as_dict=True)
  logits = outputs["default"]

輸入遵循 圖片輸入的一般慣例。

輸出字典包含 dtype 為 float32 且形狀為 [batch_size, num_classes]"default" 輸出。batch_size 與輸入中的相同,但在圖形建構時未知。num_classes 是分類中的類別數量,是已知的常數,與輸入大小無關。

評估 outputs["default"][i, c] 會產生預測範例 i 在索引為 c 的類別中的成員資格分數。

這些分數是否要搭配 Softmax (適用於互斥類別)、Sigmoid (適用於正交類別) 或其他項目使用,取決於基礎分類。模組文件應說明這一點,並參閱類別索引的定義。

輸出字典可能會提供進一步的輸出,例如模組內隱藏層的啟動。其鍵和值取決於模組。建議以架構名稱為架構相關鍵加上前置字串 (例如,避免將中繼層 "InceptionV3/Mixed_5c" 與最上層卷積層 "InceptionV2/Mixed_5c" 混淆)。

圖片輸入

所有類型的圖片模組和圖片簽名都通用。

採用批次圖片做為輸入的簽名會將圖片接受為密集 4 維張量,dtype 為 float32,形狀為 [batch_size, height, width, 3],其元素為像素的 RGB 色彩值,已正規化為 [0, 1] 範圍。這是從 tf.image.decode_*() 後面接著 tf.image.convert_image_dtype(..., tf.float32) 取得的結果。

具有正好一個 (或一個主要) 圖片輸入的模組會將名稱 "images" 用於此輸入。

模組接受任何 batch_size,並相應地將 TensorInfo.tensor_shape 的第一個維度設定為「未知」。最後一個維度固定為 RGB 通道的數量 3heightwidth 維度固定為輸入圖片的預期大小。(未來的工作可能會移除完全卷積模組的這項限制。)

模組的消費者不應直接檢查形狀,而應透過在模組或模組規格上呼叫 hub.get_expected_image_size() 來取得大小資訊,並預期會相應地調整輸入圖片大小 (通常在批次處理之前/期間)。

為了簡單起見,TF-Hub 模組使用張量的 channels_last (或 NHWC) 版面配置,並將其留給 TensorFlow 的圖形最佳化工具,在需要時重寫為 channels_first (或 NCHW)。自 TensorFlow 1.7 版以來,預設已執行此操作。