Transformers documentation
MobileViTV2
Este modelo foi publicado em HF papers em 2022-06-06 e contribuído para Hugging Face Transformers em 2023-06-02.
MobileViTV2
Visão geral
O modelo MobileViTV2 foi proposto em Separable Self-attention for Mobile Vision Transformers por Sachin Mehta e Mohammad Rastegari.
MobileViTV2 é a segunda versão do MobileViT, construída substituindo a autoatenção multi-cabeça do MobileViT pela autoatenção separável.
O resumo do artigo é o seguinte:
Os Mobile vision transformers (MobileViT) podem alcançar desempenho de estado da arte em várias tarefas de visão móvel, incluindo classificação e detecção. Embora esses modelos tenham menos parâmetros, apresentam alta latência em comparação com modelos baseados em redes neurais convolucionais. O principal gargalo de eficiência no MobileViT é a autoatenção multi-cabeça (MHA) nos transformers, que requer complexidade de tempo O(k2) em relação ao número de tokens (ou patches) k. Além disso, a MHA requer operações custosas (por exemplo, multiplicação de matrizes em lote) para calcular a autoatenção, impactando a latência em dispositivos com recursos limitados. Este artigo introduz um método de autoatenção separável com complexidade linear, ou seja, O(k). Uma característica simples, porém eficaz, do método proposto é que ele usa operações elemento a elemento para calcular a autoatenção, tornando-o uma boa escolha para dispositivos com recursos limitados. O modelo aprimorado, MobileViTV2, é de estado da arte em várias tarefas de visão móvel, incluindo a classificação de objetos no ImageNet e a detecção de objetos no MS-COCO. Com cerca de três milhões de parâmetros, o MobileViTV2 atinge uma precisão top-1 de 75,6% no conjunto de dados ImageNet, superando o MobileViT em cerca de 1% enquanto executa 3,2× mais rápido em um dispositivo móvel.
Este modelo foi contribuído por shehan97. O código original pode ser encontrado aqui.
Dicas de uso
- MobileViTV2 é mais parecido com uma CNN do que com um modelo Transformer. Ele não funciona com dados sequenciais, mas com lotes de imagens. Diferentemente do ViT, não há embeddings. O modelo de backbone produz um mapa de características.
- É possível usar MobileViTImageProcessor para preparar as imagens para o modelo. Observe que, se você fizer o próprio pré-processamento, os checkpoints pré-treinados esperam que as imagens estejam na ordem de pixels BGR (não RGB).
- Os checkpoints de classificação de imagem disponíveis são pré-treinados no ImageNet-1k (também referido como ILSVRC 2012, uma coleção de 1,3 milhão de imagens e 1.000 classes).
- O modelo de segmentação utiliza um cabeçalho DeepLabV3. Os checkpoints de segmentação semântica disponíveis foram pré-treinados no PASCAL VOC.
MobileViTV2Config
classe transformers.MobileViTV2Config
< 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 = Nonenum_channels: int = 3image_size: int | list[int] | tuple[int, int] = 256patch_size: int | list[int] | tuple[int, int] = 2expand_ratio: float = 2.0hidden_act: str = 'swish'conv_kernel_size: int = 3output_stride: int = 32classifier_dropout_prob: float | int = 0.1initializer_range: float = 0.02layer_norm_eps: float = 1e-05aspp_out_channels: int = 512atrous_rates: list[int] | tuple[int, ...] = (6, 12, 18)aspp_dropout_prob: float | int = 0.1semantic_loss_ignore_index: int = 255n_attn_blocks: list[int] | tuple[int, ...] = (2, 4, 3)base_attn_unit_dims: list[int] | tuple[int, ...] = (128, 192, 256)width_multiplier: float | int = 1.0ffn_multiplier: int = 2attn_dropout: float | int = 0.0ffn_dropout: float | int = 0.0 )
Parâmetros
- num_channels (
int, opcional, padrão3) — O número de canais de entrada. - image_size (
Union[int, list[int], tuple[int, int]], opcional, padrão256) — O tamanho (resolução) de cada imagem. - patch_size (
Union[int, list[int], tuple[int, int]], opcional, padrão2) — O tamanho (resolução) de cada patch. - expand_ratio (
float, opcional, padrão2.0) — Razão de expansão para definir as dimensões de saída da expansão - hidden_act (
str, opcional, padrãoswish) — A função de ativação não linear (função ou string) no decodificador. Por exemplo,"gelu","relu","silu", etc. - conv_kernel_size (
int, opcional, padrão3) — O tamanho do kernel de convolução. - output_stride (
int, opcional, padrão32) — A razão entre a resolução espacial dos mapas de características de entrada e de saída. - classifier_dropout_prob (
Union[float, int], opcional, padrão0.1) — A taxa de dropout para o classificador. - initializer_range (
float, opcional, padrão0.02) — O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos. - layer_norm_eps (
float, opcional, padrão1e-05) — O epsilon usado pelas camadas de normalização de camada. - aspp_out_channels (
int, opcional, padrão 512) — Número de canais de saída usados na camada ASPP para segmentação semântica. - atrous_rates (
list[int], opcional, padrão[6, 12, 18]) — Fatores de dilatação (atrous) usados na camada ASPP para segmentação semântica. - aspp_dropout_prob (
float, opcional, padrão 0.1) — A taxa de dropout da camada ASPP para segmentação semântica. - semantic_loss_ignore_index (
int, opcional, padrão255) — O índice que é ignorado pela função de perda do modelo de segmentação semântica. - n_attn_blocks (
list[int], opcional, padrão[2, 4, 3]) — O número de blocos de atenção em cada MobileViTV2Layer - base_attn_unit_dims (
list[int], opcional, padrão[128, 192, 256]) — O multiplicador base para as dimensões dos blocos de atenção em cada MobileViTV2Layer - width_multiplier (
float, opcional, padrão 1.0) — O multiplicador de largura para MobileViTV2. - ffn_multiplier (
int, opcional, padrão 2) — O multiplicador de FFN para MobileViTV2. - attn_dropout (
Union[float, int], opcional, padrão0.0) — A taxa de dropout para as probabilidades de atenção. - ffn_dropout (
float, opcional, padrão 0.0) — O dropout entre as camadas FFN.
Esta é a classe de configuração para armazenar a configuração de um MobileViTV2Model. Ela é usada para instanciar um modelo Mobilevitv2 de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do apple/mobilevitv2-1.0
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Exemplo:
>>> from transformers import MobileViTV2Config, MobileViTV2Model
>>> # Initializing a mobilevitv2-small style configuration
>>> configuration = MobileViTV2Config()
>>> # Initializing a model from the mobilevitv2-small style configuration
>>> model = MobileViTV2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMobileViTV2Model
classe transformers.MobileViTV2Model
< source >( config: MobileViTV2Configexpand_output: bool = True )
Parâmetros
- config (MobileViTV2Config) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
- expand_output (
bool, opcional, padrãoTrue) — Se deve expandir a saída do modelo. SeTrue, o modelo sairá com recursos agregados (pooled features) além dos estados ocultos. SeFalse, apenas os estados ocultos serão retornados.
O modelo Mobilevitv2 puro, que produz estados ocultos brutos sem nenhum cabeçalho específico no topo.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutputWithPoolingAndNoAttention or tuple(torch.Tensor)
Parâmetros
- pixel_values (
torch.Tensorde forma(batch_size, num_channels, image_size, image_size), opcional) — Os tensors correspondentes às imagens de entrada. Os valores de pixels podem ser obtidos usando MobileViTImageProcessor. Consulte MobileViTImageProcessor.call() para mais detalhes (processor_classusa MobileViTImageProcessor para processar as imagens). - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
BaseModelOutputWithPoolingAndNoAttention ou tuple(torch.Tensor)
Um BaseModelOutputWithPoolingAndNoAttention ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (MobileViTV2Config) e das entradas.
O método forward do MobileViTV2Model substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
last_hidden_state (
torch.Tensorde forma(batch_size, num_channels, height, width)) — Sequência de estados ocultos na saída da última camada do modelo.pooler_output (
torch.Tensorde forma(batch_size, hidden_size)) — Estado oculto da última camada após uma operação de pooling nas dimensões espaciais.hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, num_channels, height, width).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
MobileViTV2ForImageClassification
classe transformers.MobileViTV2ForImageClassification
< source >( config: MobileViTV2Config )
Parâmetros
- config (MobileViTV2Config) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
Modelo MobileViTV2 com uma cabeça de classificação de imagem no topo (uma camada linear sobre os recursos agregados), por exemplo, para o ImageNet.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None**kwargs ) → ImageClassifierOutputWithNoAttention or tuple(torch.Tensor)
Parâmetros
- pixel_values (
torch.Tensorde forma(batch_size, num_channels, image_size, image_size), opcional) — Os tensors correspondentes às imagens de entrada. Os valores de pixels podem ser obtidos usando MobileViTImageProcessor. Consulte MobileViTImageProcessor.call() para mais detalhes (processor_classusa MobileViTImageProcessor para processar as imagens). - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - labels (
torch.LongTensorde forma(batch_size,), opcional) — Rótulos para o cálculo da perda de classificação/regressão de imagem. Os índices devem estar em[0, ..., config.num_labels - 1]. Seconfig.num_labels == 1, uma perda de regressão é calculada (perda de erro quadrático médio); seconfig.num_labels > 1, uma perda de classificação é calculada (entropia cruzada). - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
ImageClassifierOutputWithNoAttention ou tuple(torch.Tensor)
Um ImageClassifierOutputWithNoAttention ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (MobileViTV2Config) e das entradas.
O método forward de MobileViTV2ForImageClassification substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
- loss (
torch.Tensorde forma(1,), opcional, retornado quandolabelsé fornecido) — Perda de classificação (ou regressão se config.num_labels==1). - logits (
torch.Tensorde forma(batch_size, config.num_labels)) — Pontuações de classificação (ou regressão, se config.num_labels==1) (antes do SoftMax). - hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada estágio) de forma(batch_size, num_channels, height, width). Hidden-states (também chamados de feature maps) do modelo na saída de cada estágio.
Exemplo:
>>> from transformers import AutoImageProcessor, MobileViTV2ForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("apple/mobilevitv2-1.0")
>>> model = MobileViTV2ForImageClassification.from_pretrained("apple/mobilevitv2-1.0")
>>> inputs = image_processor(image, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...MobileViTV2ForSemanticSegmentation
classe transformers.MobileViTV2ForSemanticSegmentation
< source >( config: MobileViTV2Config )
Parâmetros
- config (MobileViTV2Config) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
Modelo MobileViTV2 com uma cabeça de segmentação semântica no topo, por exemplo, para Pascal VOC.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SemanticSegmenterOutput or tuple(torch.Tensor)
Parâmetros
- pixel_values (
torch.Tensorde forma(batch_size, num_channels, image_size, image_size), opcional) — Os tensors correspondentes às imagens de entrada. Os valores de pixels podem ser obtidos usando MobileViTImageProcessor. Consulte MobileViTImageProcessor.call() para mais detalhes (processor_classusa MobileViTImageProcessor para processar as imagens). - labels (
torch.LongTensorde forma(batch_size, height, width), opcional) — Mapas de segmentação semântica de verdade para o cálculo da perda. Os índices devem estar em[0, ..., config.num_labels - 1]. Seconfig.num_labels > 1, uma perda de classificação é calculada (Cross-Entropy). - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
SemanticSegmenterOutput ou tuple(torch.Tensor)
Um SemanticSegmenterOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (MobileViTV2Config) e das entradas.
O método forward de MobileViTV2ForSemanticSegmentation substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
loss (
torch.Tensorde forma(1,), opcional, retornado quandolabelsé fornecido) — Perda de classificação (ou regressão se config.num_labels==1).logits (
torch.Tensorde forma(batch_size, config.num_labels, logits_height, logits_width)) — Pontuações de classificação para cada pixel.Os logits retornados não necessariamente têm o mesmo tamanho que os
pixel_valuespassados como entradas. Isso é para evitar fazer duas interpolações e perder alguma qualidade quando um usuário precisa redimensionar os logits para o tamanho da imagem original como pós-processamento. Você deve sempre verificar a forma dos seus logits e redimensioná-los conforme necessário.hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, patch_size, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, patch_size, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
Exemplos:
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> import torch
>>> from PIL import Image
>>> from transformers import AutoImageProcessor, MobileViTV2ForSemanticSegmentation
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> image_processor = AutoImageProcessor.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256")
>>> model = MobileViTV2ForSemanticSegmentation.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> # logits are of shape (batch_size, num_labels, height, width)
>>> logits = outputs.logits