Transformers 文件

ViTMatte

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

ViTMatte

PyTorch

概述

ViTMatte 模型由 Jingfeng Yao、Xinggang Wang、Shusheng Yang 和 Baoyuan Wang 在論文 《Boosting Image Matting with Pretrained Plain Vision Transformers》 中提出。ViTMatte 利用普通的 Vision Transformer 來完成影像摳圖任務,即精確估計影像和影片中的前景物件的過程。

論文摘要如下:

摘要:最近,普通視覺 Transformer (ViT) 由於其強大的建模能力和大規模預訓練,在各種計算機視覺任務上表現出了令人印象深刻的效能。然而,它們尚未攻克影像摳圖問題。我們假設影像摳圖也可以透過 ViT 得到提升,並提出了一種新的高效且魯棒的基於 ViT 的摳圖系統,名為 ViTMatte。我們的方法利用 (i) 混合注意力機制與卷積頸部相結合,幫助 ViT 在摳圖任務中實現出色的效能-計算權衡。(ii) 此外,我們引入了細節捕捉模組,該模組僅由簡單的輕量級卷積組成,以補充摳圖所需的詳細資訊。據我們所知,ViTMatte 是首個透過簡潔的適配來釋放 ViT 在影像摳圖方面潛力的工作。它將 ViT 的許多優越特性繼承到了摳圖中,包括各種預訓練策略、簡潔的架構設計和靈活的推理策略。我們在 Composition-1k 和 Distinctions-646 這兩個最常用的影像摳圖基準上評估了 ViTMatte,我們的方法達到了最先進的效能,並大幅超越了先前的摳圖工作。

此模型由 nielsr 貢獻。原始程式碼可在此處找到。

drawing ViTMatte 頂層概覽。圖片來自原始論文

資源

一份官方 Hugging Face 和社群(由 🌎 標識)資源列表,幫助你開始使用 ViTMatte。

該模型期望同時輸入影像和三元圖(trimap)(拼接後)。請使用 ViTMatteImageProcessor 進行此操作。

VitMatteConfig

class transformers.VitMatteConfig

< >

( backbone_config: PretrainedConfig = None backbone = None use_pretrained_backbone = False use_timm_backbone = False backbone_kwargs = None hidden_size: int = 384 batch_norm_eps: float = 1e-05 initializer_range: float = 0.02 convstream_hidden_sizes: list = [48, 96, 192] fusion_hidden_sizes: list = [256, 128, 64, 32] **kwargs )

引數

  • backbone_config (PretrainedConfigdict, 可選, 預設為 VitDetConfig()) — 主幹模型的配置。
  • backbone (str, 可選) — 當 backbone_configNone 時使用的主幹名稱。如果 use_pretrained_backboneTrue,將從 timm 或 transformers 庫中載入相應的預訓練權重。如果 use_pretrained_backboneFalse,將載入主幹的配置並用其初始化具有隨機權重的主幹。
  • use_pretrained_backbone (bool, 可選, 預設為 False) — 是否為主幹使用預訓練權重。
  • use_timm_backbone (bool, 可選, 預設為 False) — 是否從 timm 庫載入 `backbone`。如果為 `False`,則從 transformers 庫載入主幹。
  • backbone_kwargs (dict, 可選) — 從檢查點載入時傳遞給 AutoBackbone 的關鍵字引數,例如 `{'out_indices': (0, 1, 2, 3)}`。如果設定了 `backbone_config`,則不能指定此引數。
  • hidden_size (int, 可選, 預設為 384) — 解碼器的輸入通道數。
  • batch_norm_eps (float, 可選, 預設為 1e-05) — 批歸一化層使用的 epsilon 值。
  • initializer_range (float, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。
  • convstream_hidden_sizes (list[int], 可選, 預設為 [48, 96, 192]) — ConvStream 模組的輸出通道數。
  • fusion_hidden_sizes (list[int], 可選, 預設為 [256, 128, 64, 32]) — Fusion 模組的輸出通道數。

這是用於儲存 VitMatteForImageMatting 配置的配置類。它用於根據指定的引數例項化一個 ViTMatte 模型,定義模型架構。使用預設值例項化一個配置將產生與 ViTMatte hustvl/vitmatte-small-composition-1k 架構類似的配置。

配置物件繼承自 PretrainedConfig,可用於控制模型輸出。更多資訊請閱讀 PretrainedConfig 的文件。

示例

>>> from transformers import VitMatteConfig, VitMatteForImageMatting

>>> # Initializing a ViTMatte hustvl/vitmatte-small-composition-1k style configuration
>>> configuration = VitMatteConfig()

>>> # Initializing a model (with random weights) from the hustvl/vitmatte-small-composition-1k style configuration
>>> model = VitMatteForImageMatting(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

to_dict

< >

( )

將此例項序列化為 Python 字典。覆蓋預設的 to_dict()。返回:dict[str, any]:構成此配置例項的所有屬性的字典。

VitMatteImageProcessor

class transformers.VitMatteImageProcessor

< >

( do_rescale: bool = True rescale_factor: typing.Union[int, float] = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None do_pad: bool = True size_divisibility: int = 32 **kwargs )

引數

  • do_rescale (bool, 可選, 預設為 True) — 是否按指定的比例 rescale_factor 重新縮放影像。可在 `preprocess` 方法中透過 `do_rescale` 引數覆蓋。
  • rescale_factor (intfloat, 可選, 預設為 1/255) — 如果對影像進行重新縮放,則使用的縮放因子。可在 `preprocess` 方法中透過 `rescale_factor` 引數覆蓋。
  • do_normalize (bool, 可選, 預設為 True) — 是否對影像進行歸一化。可在 `preprocess` 方法中透過 `do_normalize` 引數覆蓋。
  • image_mean (floatlist[float], 可選, 預設為 IMAGENET_STANDARD_MEAN) — 如果對影像進行歸一化,則使用的均值。這是一個浮點數或浮點數列表,長度與影像中的通道數相同。可在 `preprocess` 方法中透過 `image_mean` 引數覆蓋。
  • image_std (floatlist[float], 可選, 預設為 IMAGENET_STANDARD_STD) — 如果對影像進行歸一化,則使用的標準差。這是一個浮點數或浮點數列表,長度與影像中的通道數相同。可在 `preprocess` 方法中透過 `image_std` 引數覆蓋。
  • do_pad (bool, 可選, 預設為 True) — 是否對影像進行填充,以使寬度和高度可被 `size_divisibility` 整除。可在 `preprocess` 方法中透過 `do_pad` 引數覆蓋。
  • size_divisibility (int, 可選, 預設為 32) — 影像的寬度和高度將被填充,以能被此數字整除。

構建一個 ViTMatte 影像處理器。

preprocess

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] trimaps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_rescale: typing.Optional[bool] = None rescale_factor: typing.Optional[float] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None do_pad: typing.Optional[bool] = None size_divisibility: typing.Optional[int] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: typing.Union[str, transformers.image_utils.ChannelDimension] = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None )

引數

  • images (ImageInput) — 要預處理的影像。接受單個或一批畫素值範圍為 0 到 255 的影像。如果傳入畫素值在 0 到 1 之間的影像,請設定 `do_rescale=False`。
  • trimaps (ImageInput) — 要預處理的三元圖(Trimap)。
  • do_rescale (bool, 可選, 預設為 self.do_rescale) — 是否將影像值重新縮放到 [0 - 1] 之間。
  • rescale_factor (float, 可選, 預設為 self.rescale_factor) — 如果 `do_rescale` 設定為 `True`,則用於重新縮放影像的縮放因子。
  • do_normalize (bool, 可選, 預設為 self.do_normalize) — 是否對影像進行歸一化。
  • image_mean (floatlist[float], 可選, 預設為 self.image_mean) — 如果 `do_normalize` 設定為 `True`,則使用的影像均值。
  • image_std (floatlist[float], 可選, 預設為 self.image_std) — 如果 `do_normalize` 設定為 `True`,則使用的影像標準差。
  • do_pad (bool, 可選, 預設為 self.do_pad) — 是否對影像進行填充。
  • size_divisibility (int, 可選, 預設為 self.size_divisibility) — 如果 `do_pad` 設定為 `True`,則將影像填充到的尺寸可除性。
  • return_tensors (strTensorType, 可選) — 要返回的張量型別。可以是以下之一:
    • 未設定:返回一個 `np.ndarray` 列表。
    • TensorType.TENSORFLOW'tf':返回一個 `tf.Tensor` 型別的批處理。
    • TensorType.PYTORCH'pt':返回一個 `torch.Tensor` 型別的批處理。
    • TensorType.NUMPY'np':返回一個 `np.ndarray` 型別的批處理。
    • TensorType.JAX'jax':返回一個 `jax.numpy.ndarray` 型別的批處理。
  • data_format (ChannelDimensionstr, 可選, 預設為 ChannelDimension.FIRST) — 輸出影像的通道維度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:影像格式為 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST:影像格式為 (height, width, num_channels)。
    • 未設定:使用輸入影像的通道維度格式。
  • input_data_format (ChannelDimensionstr, 可選) — 輸入影像的通道維度格式。如果未設定,則從輸入影像中推斷通道維度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:影像格式為 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST:影像格式為 (height, width, num_channels)。
    • "none"ChannelDimension.NONE:影像格式為 (height, width)。

預處理一張或一批影像。

VitMatteImageProcessorFast

class transformers.VitMatteImageProcessorFast

< >

( **kwargs: typing_extensions.Unpack[transformers.models.vitmatte.image_processing_vitmatte_fast.VitMatteFastImageProcessorKwargs] )

構建一個快速 VitMatte 影像處理器。

preprocess

< >

( images: list trimaps: list **kwargs: typing_extensions.Unpack[transformers.models.vitmatte.image_processing_vitmatte_fast.VitMatteFastImageProcessorKwargs] ) <class 'transformers.image_processing_base.BatchFeature'>

引數

  • images (list) — 要預處理的影像。需要單個或一批畫素值範圍為 0 到 255 的影像。如果傳入的影像畫素值在 0 和 1 之間,請設定 do_rescale=False
  • trimaps (list) — 要預處理的三分圖(trimap)。
  • do_resize (bool, optional) — 是否調整影像大小。
  • size (dict[str, int], optional) — 描述模型的最大輸入尺寸。
  • default_to_square (bool, optional) — 當 size 是一個整數時,是否在調整大小時預設使用正方形影像。
  • resample (Union[PILImageResampling, F.InterpolationMode, NoneType]) — 如果調整影像大小,使用的重取樣濾波器。可以是列舉 PILImageResampling 中的一個。僅當 do_resize 設定為 True 時有效。
  • do_center_crop (bool, optional) — 是否對影像進行中心裁剪。
  • crop_size (dict[str, int], optional) — 應用 center_crop 後輸出影像的大小。
  • do_rescale (bool, optional) — 是否對影像進行縮放。
  • rescale_factor (Union[int, float, NoneType]) — 如果 do_rescale 設定為 True,用於縮放影像的比例因子。
  • do_normalize (bool, optional) — 是否對影像進行歸一化。
  • image_mean (Union[float, list[float], NoneType]) — 用於歸一化的影像均值。僅當 do_normalize 設定為 True 時有效。
  • image_std (Union[float, list[float], NoneType]) — 用於歸一化的影像標準差。僅當 do_normalize 設定為 True 時有效。
  • do_convert_rgb (bool, optional) — 是否將影像轉換為 RGB 格式。
  • return_tensors (Union[str, ~utils.generic.TensorType, NoneType]) — 如果設定為 `pt`,則返回堆疊的張量,否則返回一個張量列表。
  • data_format (~image_utils.ChannelDimension, optional) — 僅支援 ChannelDimension.FIRST。為與慢速處理器相容而新增。
  • input_data_format (Union[str, ~image_utils.ChannelDimension, NoneType]) — 輸入影像的通道維度格式。如果未設定,則從輸入影像中推斷通道維度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:影像格式為(通道數, 高度, 寬度)。
    • "channels_last"ChannelDimension.LAST:影像格式為(高度, 寬度, 通道數)。
    • "none"ChannelDimension.NONE:影像格式為(高度, 寬度)。
  • device (torch.device, optional) — 用於處理影像的裝置。如果未設定,則從輸入影像中推斷裝置。
  • disable_grouping (bool, optional) — 是否停用按尺寸分組影像,以單獨處理而非批次處理。如果為 None,如果影像在 CPU 上,則設定為 True,否則設定為 False。此選擇基於經驗觀察,詳情見:https://github.com/huggingface/transformers/pull/38157
  • do_pad (bool, optional, 預設為 True) — 是否填充影像,使寬度和高度可被 size_divisibility 整除。可被 preprocess 方法中的 do_pad 引數覆蓋。
  • size_divisibility (int, optional, 預設為 32) — 影像的寬度和高度將被填充,以能被該數字整除。

返回

<class 'transformers.image_processing_base.BatchFeature'>

  • data (dict) — 由 call 方法返回的列表/陣列/張量字典(“pixel_values”等)。
  • tensor_type (Union[None, str, TensorType], 可選) — 您可以在此處提供一個`tensor_type`,以便在初始化時將整數列表轉換為PyTorch/TensorFlow/Numpy張量。

VitMatteForImageMatting

class transformers.VitMatteForImageMatting

< >

( config )

引數

  • config (VitMatteForImageMatting) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請查閱 from_pretrained() 方法來載入模型權重。

ViTMatte 框架利用任何視覺骨幹網路,例如用於 ADE20k、CityScapes。

該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。

該模型也是一個 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None )

引數

  • pixel_values (torch.Tensor,形狀為 (batch_size, num_channels, image_size, image_size)optional) — 與輸入影像對應的張量。畫素值可以使用 {image_processor_class} 獲得。詳情請參見 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 處理影像)。
  • output_attentions (bool, optional) — 是否返回所有注意力層的注意力張量。更多細節請參見返回張量下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有層的隱藏狀態。更多細節請參見返回張量下的 hidden_states
  • labels (torch.LongTensor,形狀為 (batch_size, height, width)optional) — 用於計算損失的真實影像摳圖(ground truth image matting)。
  • return_dict (bool, optional) — 是否返回一個 ModelOutput 而不是一個普通的元組。

VitMatteForImageMatting 的前向方法,覆蓋了 `__call__` 特殊方法。

儘管前向傳遞的流程需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會靜默忽略它們。

示例

>>> from transformers import VitMatteImageProcessor, VitMatteForImageMatting
>>> import torch
>>> from PIL import Image
>>> from huggingface_hub import hf_hub_download

>>> processor = VitMatteImageProcessor.from_pretrained("hustvl/vitmatte-small-composition-1k")
>>> model = VitMatteForImageMatting.from_pretrained("hustvl/vitmatte-small-composition-1k")

>>> filepath = hf_hub_download(
...     repo_id="hf-internal-testing/image-matting-fixtures", filename="image.png", repo_type="dataset"
... )
>>> image = Image.open(filepath).convert("RGB")
>>> filepath = hf_hub_download(
...     repo_id="hf-internal-testing/image-matting-fixtures", filename="trimap.png", repo_type="dataset"
... )
>>> trimap = Image.open(filepath).convert("L")

>>> # prepare image + trimap for the model
>>> inputs = processor(images=image, trimaps=trimap, return_tensors="pt")

>>> with torch.no_grad():
...     alphas = model(**inputs).alphas
>>> print(alphas.shape)
torch.Size([1, 1, 640, 960])
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.