Transformers documentation
SegGPT
このモデルは2023年4月6日にHF papersで公開され、2024年2月26日にHugging Face Transformersに貢献されました。
SegGPT
概要
SegGPTモデルは、Xinlong Wang、Xiaosong Zhang、Yue Cao、Wen Wang、Chunhua Shen、Tiejun Huang による SegGPT: Segmenting Everything In Context で提案されました。SegGPTは、入力画像、プロンプト画像、およびそれに対応するプロンプトマスクが与えられたときにセグメンテーションマスクを生成できる、デコーダーのみで構成されるTransformerを採用しています。このモデルは、COCO-20で56.1 mIoU、FSS-1000で85.6 mIoUという、ワンショット条件下での優れた結果を達成しています。
論文の抄録は以下の通りです。
我々は、コンテキスト内であらゆるものをセグメンテーションする汎用モデルであるSegGPTを提案します。SegGPTは、異なる種類のセグメンテーションデータを同一形式の画像に変換することでそれらを収容する汎用的なインコンテキスト学習フレームワークに、多様なセグメンテーションタスクを統合します。SegGPTの学習は、各データサンプルに対してランダムなカラーマッピングを用いたインコンテキストカラーリング問題として定式化されます。その目的は、特定のカラーに依存するのではなく、コンテキストに基づいて多様なタスクを達成することです。学習後、SegGPTは、オブジェクトインスタンス、スタフ、パーツ、輪郭、テキストなどのインコンテキスト推論を通じて、画像や動画における任意のセグメンテーションタスクを実行できます。SegGPTは、フェューショットセマンティックセグメンテーション、ビデオオブジェクトセグメンテーション、セマンティックセグメンテーション、パノプティックセグメンテーションを含む幅広いタスクで評価されます。我々の結果は、ドメイン内およびドメイン外のセグメンテーションにおける強力な能力を示しています。
ヒント:
- SegGptImageProcessor を使用して、モデルへの画像入力、プロンプト、マスクを準備できます。
- プロンプトマスクとして、セグメンテーションマップまたはRGB画像のいずれかを使用できます。後者を使用する場合は、
preprocessメソッド内でdo_convert_rgb=Falseを設定してください。 - It’s highly advisable to pass
num_labelswhen usingsegmentation_maps(not considering background) during preprocessing and postprocessing with SegGptImageProcessor for your use case. - SegGptForImageSegmentation を用いて推論を行う場合、
batch_sizeが 1 より大きい場合は、forward メソッドにfeature_ensemble=Trueを渡すことで、画像間のフィーチャーアンサンブルを利用できます。
ワンショットセマンティックセグメンテーションにモデルを使用する方法は以下の通りです。
import torch
from datasets import load_dataset
from transformers import SegGptForImageSegmentation, SegGptImageProcessor
checkpoint = "BAAI/seggpt-vit-large"
image_processor = SegGptImageProcessor.from_pretrained(checkpoint)
model = SegGptForImageSegmentation.from_pretrained(checkpoint, device_map="auto")
dataset_id = "EduardoPacheco/FoodSeg103"
ds = load_dataset(dataset_id, split="train")
# Number of labels in FoodSeg103 (not including background)
num_labels = 103
image_input = ds[4]["image"]
ground_truth = ds[4]["label"]
image_prompt = ds[29]["image"]
mask_prompt = ds[29]["label"]
inputs = image_processor(
images=image_input,
prompt_images=image_prompt,
segmentation_maps=mask_prompt,
num_labels=num_labels,
return_tensors="pt"
)
with torch.no_grad():
outputs = model(**inputs)
target_sizes = [image_input.size[::-1]]
mask = image_processor.post_process_semantic_segmentation(outputs, target_sizes, num_labels=num_labels)[0]このモデルはEduardoPachecoによって提供されました。 元のコードはこちらで確認できます。
SegGptConfig
クラス transformers.SegGptConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 1024num_hidden_layers: int = 24num_attention_heads: int = 16hidden_act: str = 'gelu'hidden_dropout_prob: float | int = 0.0initializer_range: float = 0.02layer_norm_eps: float = 1e-06image_size: int | list[int] | tuple[int, ...] = (896, 448)patch_size: int | list[int] | tuple[int, int] = 16num_channels: int = 3qkv_bias: bool = Truemlp_dim: int | None = Nonedrop_path_rate: float | int = 0.1pretrain_image_size: int | list[int] | tuple[int, int] = 224decoder_hidden_size: int = 64use_relative_position_embeddings: bool = Truemerge_index: int = 2intermediate_hidden_state_indices: list[int] | tuple[int, ...] = (5, 11, 17, 23)beta: float = 0.01 )
パラメータ
- hidden_size (
int、任意、デフォルトは1024) — 隠れ表現の次元数。 - num_hidden_layers (
int、任意、デフォルトは24) — Transformer デコーダーの隠れ層の数。 - num_attention_heads (
int、任意、デフォルトは16) — Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。 - hidden_act (
str、任意、デフォルトはgelu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、"relu"、"silu"など。 - hidden_dropout_prob (
Union[float, int]、任意、デフォルト値は0.0) — embeddings、encoder、pooler 内のすべての全結合層における dropout 確率です。 - initializer_range (
float、任意、デフォルトは0.02) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。 - layer_norm_eps (
float、任意、デフォルトは1e-06) — レイヤーノーマル層で使用する epsilon です。 - image_size (
Union[int, list[int], tuple[int, ...]]、任意、デフォルトは(896, 448)) — 各画像のサイズ(解像度)です。 - patch_size (
Union[int, list[int], tuple[int, int]]、任意、デフォルトは16) — 各パッチのサイズ(解像度)です。 - num_channels (
int、任意、デフォルトは3) — 入力チャネル数。 - qkv_bias (
bool、省略可、デフォルトはTrue) — クエリ、キー、バリューにバイアスを追加するかどうか。 - mlp_dim (
int, 省略可) — TransformerエンコーダーにおけるMLP層の次元数です。設定されていない場合、デフォルト値はhidden_size* 4です。 - drop_path_rate (
Union[float, int]、省略可、デフォルトは0.1) — パッチ融合におけるドロップパス率。 - pretrain_image_size (
int、任意、デフォルトは 224) — 絶対位置埋め込みの事前学習サイズです。 - decoder_hidden_size (
int、任意、デフォルトは64) — 隠れ表現の次元数。 - use_relative_position_embeddings (
bool、任意、デフォルトはTrue) — アテンション層で相対位置埋め込みを使用するかどうか。 - merge_index (
int、任意、デフォルトは 2) — 埋め込みをマージするエンコーダ層のインデックスです。 - intermediate_hidden_state_indices (
list[int]、任意、デフォルトは[5, 11, 17, 23]) — デコーダー用の特徴として保存するエンコーダー層のインデックスです。 - beta (
float、任意、デフォルト値は 0.01) — SegGptLoss(smooth-l1 loss)の正則化係数。
これはSegGptModelの設定を保存するための設定クラスです。指定された引数に基づいてSeggptモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、BAAI/seggpt-vit-largeと類似した設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
例:
>>> from transformers import SegGptConfig, SegGptModel
>>> # Initializing a SegGPT seggpt-vit-large style configuration
>>> configuration = SegGptConfig()
>>> # Initializing a model (with random weights) from the seggpt-vit-large style configuration
>>> model = SegGptModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configSegGptImageProcessor
クラス transformers.SegGptImageProcessor
< source >( **kwargs: *<class 'transformers.models.seggpt.image_processing_seggpt.SegGptImageProcessorKwargs'> )
パラメータ
- do_convert_rgb (
bool、kwargs、optional、デフォルトはTrue) — 画像を RGB に変換するかどうか。 - do_resize (
bool、kwargs、任意、デフォルトはTrue) — 画像をリサイズするかどうか。 - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs、デフォルトは{'height' -- 448, 'width': 448}): モデルへの最大入力サイズを指定します。 - default_to_square (
bool、kwargs、任意、デフォルトはTrue) — size が int の場合、リサイズ時に正方形の画像をデフォルトとするかどうかを指定します。 - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) —center_cropを適用した後の出力画像のサイズ。 - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs、デフォルトは3) — 画像のリサイズ時に使用するリサンプリングフィルタです。PILImageResamplingの列挙型のいずれかを使用できます。do_resizeがTrueに設定されている場合のみ、効果が現れます。 - do_rescale (
bool、kwargs、任意、デフォルトはTrue) — 画像をリスケールするかどうかを指定します。 - rescale_factor (
float、kwargs、任意、デフォルト値は0.00392156862745098) —do_rescaleがTrueに設定されている場合、画像をリスケールするための係数です。 - do_normalize (
bool、kwargs、optional、デフォルトはTrue) — 画像を正規化するかどうかを指定します。 - image_mean (
Union[float, list[float], tuple[float, ...]]、kwargs、optional、デフォルト値は[0.485, 0.456, 0.406]) — 正規化に使用する画像の平均値。do_normalizeがTrueに設定されている場合のみ有効です。 - image_std (
Union[float, list[float], tuple[float, ...]]、kwargs、optional、デフォルト値は[0.229, 0.224, 0.225]) — 正規化に使用する画像の標準偏差。do_normalizeがTrueに設定されている場合のみ有効です。 - do_pad (
bool, kwargs, optional) — 画像をパディングするかどうかを指定します。パディングは、バッチ内の最大サイズに合わせるか、画像ごとに固定の正方形サイズに合わせるかのいずれかで行われます。具体的なパディング戦略はモデルによって異なります。 - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 画像をパディングする{"height": int, "width" int}のサイズです。前処理に提供されるすべての画像サイズより大きくなければなりません。pad_sizeが指定されない場合、バッチ内の最大の幅と高さにパディングされます。do_pad=True.の場合のみ適用されます。 - do_center_crop (
bool, kwargs, optional) — 画像を中央クロップするかどうかを指定します。 - data_format (
Union[str, ~image_utils.ChannelDimension]、kwargs、任意) — サポートされているのはChannelDimension.FIRSTのみです。slow processors との互換性のために追加されました。 - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 省略可) — 入力画像のチャネル次元の形式です。設定されていない場合、入力画像からチャネル次元の形式が推測されます。次のいずれかになります:"channels_first"またはChannelDimension.FIRST: (num_channels, height, width) 形式の画像。"channels_last"またはChannelDimension.LAST: (高さ, 幅, チャネル数) 形式の画像。"none"またはChannelDimension.NONE: (height, width) 形式の画像。
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — 動画を処理するデバイスです。未設定の場合、入力動画からデバイスが推論されます。 - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) —'pt'に設定されている場合はスタックされたテンソルを返し、それ以外の場合はテンソルのリストを返します。 - disable_grouping (
bool、kwargs、任意) — サイズごとに画像をグループ化してバッチ処理するのではなく、個別に処理するためにグループ化を無効にするかどうか。None の場合、画像が CPU にある場合は True、それ以外の場合は False に設定されます。この選択は、https://github.com/huggingface/transformers/pull/38157 に詳しく記載されている経験則に基づいています。 - image_seq_length (
int、kwargs、任意) — 入力内の各画像に使用される画像トークンの数です。 後方互換性のために追加されましたが、将来のモデルではプロセッサの属性として設定されるべきです。 - num_labels (
int, kwargs, optional) — セグメンテーションタスクにおけるクラス数(背景を除く)。指定された場合、class_idx 0 が背景であると仮定して、プレーンなセグメンテーションマップのプロンプトマスクを3チャネルのRGB画像にマッピングするためのパレットが構築されます。これを指定しない場合、do_convert_rgbがTrueのとき、プロンプトマスクはチャネル次元に沿って複製されます。
SegGptImageProcessor イメージプロセッサを構築します。
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneprompt_images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneprompt_masks: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None**kwargs: *<class 'transformers.models.seggpt.image_processing_seggpt.SegGptImageProcessorKwargs'> ) → ~image_processing_base.BatchFeature
パラメータ
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], 任意) — 前処理対象の画像です。ピクセル値が 0 から 255 の範囲にある単一の画像またはバッチを想定しています。ピクセル値が 0 から 1 の範囲にある画像を渡す場合は、do_rescale=Falseを設定してください。 - prompt_images (
ImageInput、任意) — 前処理を行うプロンプト画像。ピクセル値が0から255の範囲にある単一の画像またはバッチの画像を想定しています。 - prompt_masks (
ImageInput、任意) — 前処理を行うプロンプトマスクです。セグメンテーションマップ(チャネルなし)または RGB 画像の形式で指定できます。 RGB 画像の形式の場合、do_convert_rgbはFalseに設定する必要があります。 セグメンテーションマップの形式の場合、プロンプトマスクを 1 チャネルから 3 チャネルの RGB にマッピングするためのパレットを構築するために、num_labelsの指定が推奨されます。num_labelsが指定されない場合、プロンプトマスクはチャネル次元に沿って複製されます。 - do_convert_rgb (
bool、kwargs、任意) — 画像を RGB に変換するかどうかを指定します。 - do_resize (
bool、kwargs、optional) — 画像をリサイズするかどうか。 - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — モデルへの最大入力次元を記述します。 - default_to_square (
bool、kwargs、任意) — サイズが整数の場合、リサイズ時に正方形の画像をデフォルトとするかどうか。 - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) —center_cropを適用した後の出力画像のサイズ。 - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — 画像のリサイズ時に使用するリサンプリングフィルタ。PILImageResamplingの列挙型のいずれかを使用できます。do_resizeがTrueに設定されている場合のみ有効です。 - do_rescale (
bool、kwargs、optional) — 画像をリスケールするかどうかを指定します。 - rescale_factor (
float、kwargs、任意) —do_rescaleがTrueに設定されている場合、画像をリスケールするための係数。 - do_normalize (
bool, kwargs, optional) — 画像を正規化するかどうかを指定します。 - image_mean (
Union[float, list[float], tuple[float, ...]]、kwargs、optional) — 正規化に使用する画像の平均値。do_normalizeがTrueに設定されている場合のみ有効です。 - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — 正規化に使用する画像の標準偏差。do_normalizeがTrueに設定されている場合のみ有効です。 - do_pad (
bool, kwargs, optional) — 画像をパディングするかどうかを指定します。パディングは、バッチ内の最大サイズに合わせるか、画像ごとに固定の正方形サイズに合わせるかのいずれかで行われます。具体的なパディング戦略はモデルによって異なります。 - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 画像をパディングする{"height": int, "width" int}のサイズです。前処理に提供されるすべての画像サイズより大きくなければなりません。pad_sizeが指定されない場合、バッチ内の最大の幅と高さにパディングされます。do_pad=True.の場合のみ適用されます。 - do_center_crop (
bool, kwargs, optional) — 画像を中央クロップするかどうかを指定します。 - data_format (
Union[str, ~image_utils.ChannelDimension]、kwargs、任意) — サポートされているのはChannelDimension.FIRSTのみです。slow processors との互換性のために追加されました。 - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 省略可) — 入力画像のチャネル次元の形式です。設定されていない場合、入力画像からチャネル次元の形式が推測されます。次のいずれかになります:"channels_first"またはChannelDimension.FIRST: (num_channels, height, width) 形式の画像。"channels_last"またはChannelDimension.LAST: (高さ, 幅, チャネル数) 形式の画像。"none"またはChannelDimension.NONE: (height, width) 形式の画像。
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — 動画を処理するデバイスです。未設定の場合、入力動画からデバイスが推論されます。 - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) —'pt'に設定されている場合はスタックされたテンソルを返し、それ以外の場合はテンソルのリストを返します。 - disable_grouping (
bool、kwargs、任意) — サイズごとに画像をグループ化してバッチ処理するのではなく、個別に処理するためにグループ化を無効にするかどうか。None の場合、画像が CPU にある場合は True、それ以外の場合は False に設定されます。この選択は、https://github.com/huggingface/transformers/pull/38157 に詳しく記載されている経験則に基づいています。 - image_seq_length (
int、kwargs、任意) — 入力内の各画像に使用される画像トークンの数です。 後方互換性のために追加されましたが、将来のモデルではプロセッサの属性として設定されるべきです。 - num_labels (
int, kwargs, optional) — セグメンテーションタスクにおけるクラス数(背景を除く)です。指定した場合、class_idx 0 が背景であると仮定して、プレーンなセグメンテーションマップのプロンプトマスクを3チャネルのRGB画像にマッピングするためのパレットが構築されます。これを指定しない場合、do_convert_rgbがTrueのとき、プロンプトマスクはチャネル次元に沿って複製されます。
戻り値
~image_processing_base.BatchFeature
- data (
dict) — call メソッド(‘pixel_values’ など)によって返される、リスト/配列/テンソルの辞書。 - tensor_type (
Union[None, str, TensorType]、省略可) — 初期化時に PyTorch/Numpy の Tensor 内の整数リストを変換するために、ここで tensor_type を指定できます。
post_process_semantic_segmentation
< source >( outputstarget_sizes: list[tuple[int, int]] | None = Nonenum_labels: int | None = Nonereturn_segmentation_scores: bool = False ) → list[torch.Tensor] or list[SemanticSegmentationPostProcessorOutput]
パラメータ
- outputs (
SegGptImageSegmentationOutput) — モデルの生出力です。 - target_sizes (
list[tuple[int, int]]、任意) —batch_size個の長さを持つリストで、各要素は各予測の要求される最終サイズ(height, width)に対応します。Noneの場合、予測はリサイズされません。 - num_labels (
int, 任意) — セグメンテーションタスクにおけるクラス数(背景を除く)。指定した場合、予測マスクの RGB 値をクラスインデックスに逆変換するためのパレットが構築されます。前処理で使用した値と一致させる必要があります。 - return_segmentation_scores (
bool、任意、デフォルトはFalse) — セグメンテーションマップとともにセグメンテーションスコアを返すかどうか。Trueの場合、返されるリストの各要素はSemanticSegmentationPostProcessorOutputであり、segmentation(クラス ID、形状(height, width))とsegmentation_scores(各パレットカラーへの負の二乗 L2 距離の形状(num_labels+1, height, width)、またはnum_labelsが指定されていない場合はNone)というフィールドを持ちます。
戻り値
list[torch.Tensor] または list[SemanticSegmentationPostProcessorOutput]
return_segmentation_scores=False(デフォルト)の場合、長さが batch_size のリストが返され、各要素はクラス ID を持つ形状 (height, width) のセグメンテーションマップです。return_segmentation_scores=True の場合、フィールド segmentation(クラス ID、形状 (height, width))と segmentation_scores(形状 (num_labels+1, height, width))を持つ SemanticSegmentationPostProcessorOutput のリストが返されます。どちらの場合も、(height, width) はターゲットサイズ(target_sizes が指定されている場合)に対応します。
SegGptImageSegmentationOutputの出力をセグメンテーションマップに変換します。PyTorchのみサポートしています。
SegGptImageProcessorPil
クラス transformers.SegGptImageProcessorPil
< source >( **kwargs: *<class 'transformers.models.seggpt.image_processing_pil_seggpt.SegGptImageProcessorKwargs'> )
パラメータ
- do_convert_rgb (
bool、kwargs、optional、デフォルトはTrue) — 画像を RGB に変換するかどうか。 - do_resize (
bool、kwargs、任意、デフォルトはTrue) — 画像をリサイズするかどうか。 - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs、デフォルトは{'height' -- 448, 'width': 448}): モデルへの最大入力サイズを指定します。 - default_to_square (
bool、kwargs、任意、デフォルトはTrue) — size が int の場合、リサイズ時に正方形の画像をデフォルトとするかどうかを指定します。 - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) —center_cropを適用した後の出力画像のサイズ。 - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs、デフォルトは3) — 画像のリサイズ時に使用するリサンプリングフィルタです。PILImageResamplingの列挙型のいずれかを使用できます。do_resizeがTrueに設定されている場合のみ、効果が現れます。 - do_rescale (
bool、kwargs、任意、デフォルトはTrue) — 画像をリスケールするかどうかを指定します。 - rescale_factor (
float、kwargs、任意、デフォルト値は0.00392156862745098) —do_rescaleがTrueに設定されている場合、画像をリスケールするための係数です。 - do_normalize (
bool、kwargs、optional、デフォルトはTrue) — 画像を正規化するかどうかを指定します。 - image_mean (
Union[float, list[float], tuple[float, ...]]、kwargs、optional、デフォルト値は[0.485, 0.456, 0.406]) — 正規化に使用する画像の平均値。do_normalizeがTrueに設定されている場合のみ有効です。 - image_std (
Union[float, list[float], tuple[float, ...]]、kwargs、optional、デフォルト値は[0.229, 0.224, 0.225]) — 正規化に使用する画像の標準偏差。do_normalizeがTrueに設定されている場合のみ有効です。 - do_pad (
bool, kwargs, optional) — 画像をパディングするかどうかを指定します。パディングは、バッチ内の最大サイズに合わせるか、画像ごとに固定の正方形サイズに合わせるかのいずれかで行われます。具体的なパディング戦略はモデルによって異なります。 - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 画像をパディングする{"height": int, "width" int}のサイズです。前処理に提供されるすべての画像サイズより大きくなければなりません。pad_sizeが指定されない場合、バッチ内の最大の幅と高さにパディングされます。do_pad=True.の場合のみ適用されます。 - do_center_crop (
bool, kwargs, optional) — 画像を中央クロップするかどうかを指定します。 - data_format (
Union[str, ~image_utils.ChannelDimension]、kwargs、任意) — サポートされているのはChannelDimension.FIRSTのみです。slow processors との互換性のために追加されました。 - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 省略可) — 入力画像のチャネル次元の形式です。設定されていない場合、入力画像からチャネル次元の形式が推測されます。次のいずれかになります:"channels_first"またはChannelDimension.FIRST: (num_channels, height, width) 形式の画像。"channels_last"またはChannelDimension.LAST: (高さ, 幅, チャネル数) 形式の画像。"none"またはChannelDimension.NONE: (height, width) 形式の画像。
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — 動画を処理するデバイスです。未設定の場合、入力動画からデバイスが推論されます。 - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) —'pt'に設定されている場合はスタックされたテンソルを返し、それ以外の場合はテンソルのリストを返します。 - disable_grouping (
bool、kwargs、任意) — サイズごとに画像をグループ化してバッチ処理するのではなく、個別に処理するためにグループ化を無効にするかどうか。None の場合、画像が CPU にある場合は True、それ以外の場合は False に設定されます。この選択は、https://github.com/huggingface/transformers/pull/38157 に詳しく記載されている経験則に基づいています。 - image_seq_length (
int、kwargs、任意) — 入力内の各画像に使用される画像トークンの数です。 後方互換性のために追加されましたが、将来のモデルではプロセッサの属性として設定されるべきです。 - num_labels (
int, kwargs, optional) — セグメンテーションタスクにおけるクラス数(背景を除く)。指定された場合、class_idx 0 が背景であると仮定して、プレーンなセグメンテーションマップのプロンプトマスクを3チャネルのRGB画像にマッピングするためのパレットが構築されます。これを指定しない場合、do_convert_rgbがTrueのとき、プロンプトマスクはチャネル次元に沿って複製されます。
SegGptImageProcessor イメージプロセッサを構築します。
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneprompt_images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Noneprompt_masks: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None**kwargs: *<class 'transformers.models.seggpt.image_processing_pil_seggpt.SegGptImageProcessorKwargs'> ) → ~image_processing_base.BatchFeature
パラメータ
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], 任意) — 前処理対象の画像です。ピクセル値が 0 から 255 の範囲にある単一の画像またはバッチを想定しています。ピクセル値が 0 から 1 の範囲にある画像を渡す場合は、do_rescale=Falseを設定してください。 - prompt_images (
ImageInput、任意) — 前処理を行うプロンプト画像。ピクセル値が0から255の範囲にある単一の画像またはバッチの画像を想定しています。 - prompt_masks (
ImageInput、任意) — 前処理を行うプロンプトマスクです。セグメンテーションマップ(チャネルなし)または RGB 画像の形式で指定できます。 RGB 画像の形式の場合、do_convert_rgbはFalseに設定する必要があります。 セグメンテーションマップの形式の場合、プロンプトマスクを 1 チャネルから 3 チャネルの RGB にマッピングするためのパレットを構築するために、num_labelsの指定が推奨されます。num_labelsが指定されない場合、プロンプトマスクはチャネル次元に沿って複製されます。 - do_convert_rgb (
bool、kwargs、任意) — 画像を RGB に変換するかどうかを指定します。 - do_resize (
bool、kwargs、optional) — 画像をリサイズするかどうか。 - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — モデルへの最大入力次元を記述します。 - default_to_square (
bool、kwargs、任意) — サイズが整数の場合、リサイズ時に正方形の画像をデフォルトとするかどうか。 - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) —center_cropを適用した後の出力画像のサイズ。 - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — 画像のリサイズ時に使用するリサンプリングフィルタ。PILImageResamplingの列挙型のいずれかを使用できます。do_resizeがTrueに設定されている場合のみ有効です。 - do_rescale (
bool、kwargs、optional) — 画像をリスケールするかどうかを指定します。 - rescale_factor (
float、kwargs、任意) —do_rescaleがTrueに設定されている場合、画像をリスケールするための係数。 - do_normalize (
bool, kwargs, optional) — 画像を正規化するかどうかを指定します。 - image_mean (
Union[float, list[float], tuple[float, ...]]、kwargs、optional) — 正規化に使用する画像の平均値。do_normalizeがTrueに設定されている場合のみ有効です。 - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — 正規化に使用する画像の標準偏差。do_normalizeがTrueに設定されている場合のみ有効です。 - do_pad (
bool, kwargs, optional) — 画像をパディングするかどうかを指定します。パディングは、バッチ内の最大サイズに合わせるか、画像ごとに固定の正方形サイズに合わせるかのいずれかで行われます。具体的なパディング戦略はモデルによって異なります。 - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 画像をパディングする{"height": int, "width" int}のサイズです。前処理に提供されるすべての画像サイズより大きくなければなりません。pad_sizeが指定されない場合、バッチ内の最大の幅と高さにパディングされます。do_pad=True.の場合のみ適用されます。 - do_center_crop (
bool, kwargs, optional) — 画像を中央クロップするかどうかを指定します。 - data_format (
Union[str, ~image_utils.ChannelDimension]、kwargs、任意) — サポートされているのはChannelDimension.FIRSTのみです。slow processors との互換性のために追加されました。 - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 省略可) — 入力画像のチャネル次元の形式です。設定されていない場合、入力画像からチャネル次元の形式が推測されます。次のいずれかになります:"channels_first"またはChannelDimension.FIRST: (num_channels, height, width) 形式の画像。"channels_last"またはChannelDimension.LAST: (高さ, 幅, チャネル数) 形式の画像。"none"またはChannelDimension.NONE: (height, width) 形式の画像。
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — 動画を処理するデバイスです。未設定の場合、入力動画からデバイスが推論されます。 - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) —'pt'に設定されている場合はスタックされたテンソルを返し、それ以外の場合はテンソルのリストを返します。 - disable_grouping (
bool、kwargs、任意) — サイズごとに画像をグループ化してバッチ処理するのではなく、個別に処理するためにグループ化を無効にするかどうか。None の場合、画像が CPU にある場合は True、それ以外の場合は False に設定されます。この選択は、https://github.com/huggingface/transformers/pull/38157 に詳しく記載されている経験則に基づいています。 - image_seq_length (
int、kwargs、任意) — 入力内の各画像に使用される画像トークンの数です。 後方互換性のために追加されましたが、将来のモデルではプロセッサの属性として設定されるべきです。 - num_labels (
int, kwargs, optional) — セグメンテーションタスクにおけるクラス数(背景を除く)。指定された場合、class_idx 0 が背景であると仮定して、プレーンなセグメンテーションマップのプロンプトマスクを3チャネルのRGB画像にマッピングするためのパレットが構築されます。これを指定しない場合、do_convert_rgbがTrueのとき、プロンプトマスクはチャネル次元に沿って複製されます。
戻り値
~image_processing_base.BatchFeature
- data (
dict) — call メソッド(‘pixel_values’ など)によって返される、リスト/配列/テンソルの辞書。 - tensor_type (
Union[None, str, TensorType]、省略可) — 初期化時に PyTorch/Numpy の Tensor 内の整数リストを変換するために、ここで tensor_type を指定できます。
post_process_semantic_segmentation
< source >( outputstarget_sizes: list[tuple[int, int]] | None = Nonenum_labels: int | None = Nonereturn_segmentation_scores: bool = False ) → list[torch.Tensor] or list[SemanticSegmentationPostProcessorOutput]
パラメータ
- outputs (
SegGptImageSegmentationOutput) — モデルの生出力です。 - target_sizes (
list[tuple[int, int]]、任意) —batch_size個の長さを持つリストで、各要素は各予測の要求される最終サイズ(height, width)に対応します。Noneの場合、予測はリサイズされません。 - num_labels (
int, 任意) — セグメンテーションタスクにおけるクラス数(背景を除く)。指定した場合、予測マスクの RGB 値をクラスインデックスに逆変換するためのパレットが構築されます。前処理で使用した値と一致させる必要があります。 - return_segmentation_scores (
bool、任意、デフォルトはFalse) — セグメンテーションマップとともにセグメンテーションスコアを返すかどうか。Trueの場合、返されるリストの各要素はSemanticSegmentationPostProcessorOutputであり、フィールドsegmentation(クラス ID、形状(height, width))とsegmentation_scores(各パレットカラーへの負の二乗 L2 距離の形状(num_labels+1, height, width)、またはnum_labelsが指定されていない場合はNone)を持ちます。
戻り値
list[torch.Tensor] または list[SemanticSegmentationPostProcessorOutput]
return_segmentation_scores=False(デフォルト)の場合、各要素がクラス ID を持つ (height, width) の形状のセグメンテーションマップである、長さ batch_size のリストが返されます。return_segmentation_scores=True の場合、フィールド segmentation(クラス ID、形状 (height, width))と segmentation_scores(形状 (num_labels+1, height, width))を持つ SemanticSegmentationPostProcessorOutput のリストが返されます。どちらの場合も、(height, width) はターゲットサイズ(target_sizes が指定されている場合)に対応します。
SegGptImageSegmentationOutputの出力をセグメンテーションマップに変換します。PyTorchのみサポートしています。
SegGptModel
クラス transformers.SegGptModel
< source >( config: SegGptConfig )
パラメータ
- config (SegGptConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
Seggptのベースモデルで、特定のヘッドを付加せずに生のhidden-statesを出力します。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( pixel_values: Tensorprompt_pixel_values: Tensorprompt_masks: Tensorbool_masked_pos: typing.Optional[torch.BoolTensor] = Nonefeature_ensemble: bool | None = Noneembedding_type: str | None = Nonelabels: typing.Optional[torch.FloatTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SegGptEncoderOutput or tuple(torch.FloatTensor)
パラメータ
- pixel_values (
torch.Tensor、形状(batch_size, num_channels, image_size, image_size)) — 入力画像に対応するテンソルです。ピクセル値は SegGptImageProcessor を使用して取得できます。詳細は SegGptImageProcessor.call() を参照してください(processor_classは画像の処理に SegGptImageProcessor を使用します)。 - prompt_pixel_values (
torch.FloatTensor、shape(batch_size, num_channels, height, width)) — プロンプトのピクセル値です。AutoImageProcessor を使用して取得できます。詳細は SegGptImageProcessor.call() を参照してください。 - prompt_masks (
torch.FloatTensor、shape(batch_size, num_channels, height, width)) — プロンプトマスク。AutoImageProcessor を使用して取得できます。詳細は SegGptImageProcessor.call() を参照してください。 - bool_masked_pos (
torch.BoolTensor、shape(batch_size, num_patches)、任意) — Boolean masked positions。どの patch がマスクされているか(1)、されていないか(0)を示します。 - feature_ensemble (
bool, 任意) — 特徴量アンサンブルを使用するかどうかを示すブール値です。Trueの場合、プロンプトが 2 つ以上ある場合にモデルは特徴量アンサンブルを使用します。Falseの場合、モデルは特徴量アンサンブルを使用しません。この引数は、同一の入力画像に対して複数のプロンプトを用いるフェューショット推論を行う際に考慮すべきです。 - embedding_type (
str, 任意) — 埋め込みの種類。プロンプトがセマンティック埋め込みかインスタンス埋め込みかを指定します。instance または semantic のいずれかを指定できます。 - labels (
torch.FloatTensor、形状(batch_size, num_channels, height, width)、optional) — 入力画像の正解マスクです。 - output_attentions (
bool, 省略可) — すべてのアテンション層のアテンションテンソルを返すかどうかを指定します。詳細は、返されるテンソルのattentionsを参照してください。 - output_hidden_states (
bool, 省略可) — すべての層の hidden states を返すかどうかを指定します。詳細は、返されるテンソルのhidden_statesを参照してください。 - return_dict (
bool, 任意) — プレーンなタプルではなく ModelOutput を返すかどうか。
戻り値
SegGptEncoderOutput または tuple(torch.FloatTensor)
SegGptEncoderOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(SegGptConfig)や入力に応じて、さまざまな要素で構成されます。
SegGptModelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
- last_hidden_state (
torch.FloatTensor、shape(batch_size, patch_height, patch_width, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。 - hidden_states (
tuple[torch.FloatTensor]、optional、config.output_hidden_states=Trueの場合のみ返されます) —torch.FloatTensorのタプル(埋め込みの出力用 1 つ + 各層の出力用 1 つ)で、形状は(batch_size, patch_height, patch_width, hidden_size)です。 - attentions (
tuple[torch.FloatTensor]、optional、config.output_attentions=Trueの場合に返されます)— torch.FloatTensor のタプル(各レイヤーごとに1つ)で、形状は(batch_size, num_heads, seq_len, seq_len)です。 - intermediate_hidden_states (
tuple[torch.FloatTensor]、任意、config.intermediate_hidden_state_indicesが設定されている場合に返されます)— 形状が(batch_size, patch_height, patch_width, hidden_size)のtorch.FloatTensorのタプルです。 タプルの各要素は、config.intermediate_hidden_state_indicesで指定された層の出力に対応します。 また、各特徴量はLayerNormを通過します。
例:
>>> from transformers import SegGptImageProcessor, SegGptModel
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> image_input_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_2.jpg"
>>> image_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1.jpg"
>>> mask_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1_target.png"
>>> with httpx.stream("GET", image_input_url) as response:
... image_input = Image.open(BytesIO(response.read()))
>>> with httpx.stream("GET", image_prompt_url) as response:
... image_prompt = Image.open(BytesIO(response.read()))
>>> with httpx.stream("GET", mask_prompt_url) as response:
... mask_prompt = Image.open(BytesIO(response.read())).convert("L")
>>> checkpoint = "BAAI/seggpt-vit-large"
>>> model = SegGptModel.from_pretrained(checkpoint)
>>> image_processor = SegGptImageProcessor.from_pretrained(checkpoint)
>>> inputs = image_processor(images=image_input, prompt_images=image_prompt, prompt_masks=mask_prompt, return_tensors="pt")
>>> outputs = model(**inputs)
>>> list(outputs.last_hidden_state.shape)
[1, 56, 28, 1024]SegGptForImageSegmentation
クラス transformers.SegGptForImageSegmentation
< source >( config: SegGptConfig )
パラメータ
- config (SegGptConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
ワンショット画像セグメンテーションのために、デコーダーを上に配置したSegGptモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( pixel_values: Tensorprompt_pixel_values: Tensorprompt_masks: Tensorbool_masked_pos: typing.Optional[torch.BoolTensor] = Nonefeature_ensemble: bool | None = Noneembedding_type: str | None = Nonelabels: typing.Optional[torch.FloatTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SegGptImageSegmentationOutput or tuple(torch.FloatTensor)
パラメータ
- pixel_values (
torch.Tensor、形状(batch_size, num_channels, image_size, image_size)) — 入力画像に対応するテンソルです。ピクセル値は SegGptImageProcessor を使用して取得できます。詳細は SegGptImageProcessor.call() を参照してください(processor_classは画像の処理に SegGptImageProcessor を使用します)。 - prompt_pixel_values (
torch.FloatTensor、shape(batch_size, num_channels, height, width)) — プロンプトのピクセル値です。AutoImageProcessor を使用して取得できます。詳細は SegGptImageProcessor.call() を参照してください。 - prompt_masks (
torch.FloatTensor、shape(batch_size, num_channels, height, width)) — プロンプトマスク。AutoImageProcessor を使用して取得できます。詳細は SegGptImageProcessor.call() を参照してください。 - bool_masked_pos (
torch.BoolTensor、shape(batch_size, num_patches)、任意) — Boolean masked positions。どの patch がマスクされているか(1)、されていないか(0)を示します。 - feature_ensemble (
bool, 任意) — 特徴量アンサンブルを使用するかどうかを示すブール値です。Trueの場合、プロンプトが 2 つ以上ある場合にモデルは特徴量アンサンブルを使用します。Falseの場合、モデルは特徴量アンサンブルを使用しません。この引数は、同一の入力画像に対して複数のプロンプトを用いるフェューショット推論を行う際に考慮すべきです。 - embedding_type (
str, 任意) — 埋め込みの種類。プロンプトがセマンティック埋め込みかインスタンス埋め込みかを指定します。instance または semantic のいずれかを指定できます。 - labels (
torch.FloatTensor、形状(batch_size, num_channels, height, width)、optional) — 入力画像の正解マスクです。 - output_attentions (
bool, 省略可) — すべてのアテンション層のアテンションテンソルを返すかどうかを指定します。詳細は、返されるテンソルのattentionsを参照してください。 - output_hidden_states (
bool, 省略可) — すべての層の hidden states を返すかどうかを指定します。詳細は、返されるテンソルのhidden_statesを参照してください。 - return_dict (
bool, 任意) — プレーンなタプルではなく ModelOutput を返すかどうか。
戻り値
SegGptImageSegmentationOutput または tuple(torch.FloatTensor)
SegGptImageSegmentationOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(SegGptConfig)や入力に応じて、さまざまな要素で構成されます。
SegGptForImageSegmentationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
- loss (
torch.FloatTensor、任意、labelsが指定された場合に返されます) — 損失値。 - pred_masks (
torch.FloatTensor、shape(batch_size, num_channels, height, width)) — 予測されたマスクです。 - hidden_states (
tuple[torch.FloatTensor]、optional、config.output_hidden_states=Trueの場合のみ返されます) —torch.FloatTensorのタプル(埋め込みの出力用 1 つ + 各層の出力用 1 つ)で、形状は(batch_size, patch_height, patch_width, hidden_size)です。 - attentions (
tuple[torch.FloatTensor]、optional、config.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(レイヤーごとに1つ)で、形状は(batch_size, num_heads, seq_len, seq_len)です。
例:
>>> from transformers import SegGptImageProcessor, SegGptForImageSegmentation
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> image_input_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_2.jpg"
>>> image_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1.jpg"
>>> mask_prompt_url = "https://raw.githubusercontent.com/baaivision/Painter/main/SegGPT/SegGPT_inference/examples/hmbb_1_target.png"
>>> with httpx.stream("GET", image_input_url) as response:
... image_input = Image.open(BytesIO(response.read()))
>>> with httpx.stream("GET", image_prompt_url) as response:
... image_prompt = Image.open(BytesIO(response.read()))
>>> with httpx.stream("GET", mask_prompt_url) as response:
... mask_prompt = Image.open(BytesIO(response.read())).convert("L")
>>> checkpoint = "BAAI/seggpt-vit-large"
>>> model = SegGptForImageSegmentation.from_pretrained(checkpoint)
>>> image_processor = SegGptImageProcessor.from_pretrained(checkpoint)
>>> inputs = image_processor(images=image_input, prompt_images=image_prompt, prompt_masks=mask_prompt, return_tensors="pt")
>>> outputs = model(**inputs)
>>> result = image_processor.post_process_semantic_segmentation(outputs, target_sizes=[(image_input.height, image_input.width)])[0]
>>> print(list(result.shape))
[170, 297]