# HGNet-V2

[HGNetV2](https://github.com/PaddlePaddle/PaddleClas/blob/v2.6.0/docs/zh_CN/models/ImageNet1k/PP-HGNetV2.md) es un backbone de red neuronal convolucional (CNN) de próxima generación diseñado para lograr el mejor equilibrio entre precisión y latencia en GPUs de NVIDIA. Basándose en el [HGNet](https://github.com/PaddlePaddle/PaddleClas/blob/v2.6.0/docs/en/models/PP-HGNet_en.md) original, HGNetV2 ofrece alta precisión con velocidades de inferencia rápidas y rinde de forma destacada en tareas como clasificación de imágenes, detección de objetos y segmentación, lo que lo convierte en una opción práctica para aplicaciones de visión por computadora basadas en GPU.

Puedes encontrar todos los modelos originales de HGNet V2 bajo la organización [USTC](https://huggingface.co/ustc-community/models?search=hgnet).

> [!TIP]
> Este modelo fue aportado por [VladOS95-cyber](https://github.com/VladOS95-cyber). Haz clic en los modelos HGNet V2 de la barra lateral derecha para ver más ejemplos de cómo aplicar HGNet V2 a diferentes tareas de visión por computadora.

El siguiente ejemplo demuestra cómo clasificar una imagen con [Pipeline](/docs/transformers/main/es/main_classes/pipelines#transformers.Pipeline) o la clase [AutoModel](/docs/transformers/main/es/model_doc/auto#transformers.AutoModel).

```python
from transformers import pipeline

pipeline = pipeline(
    task="image-classification",
    model="ustc-community/hgnet-v2",
    device=0
)
pipeline("http://images.cocodataset.org/val2017/000000039769.jpg")
```

```python
import requests
import torch
from PIL import Image

from transformers import AutoImageProcessor, HGNetV2ForImageClassification

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

model = HGNetV2ForImageClassification.from_pretrained("ustc-community/hgnet-v2", device_map="auto")
processor = AutoImageProcessor.from_pretrained("ustc-community/hgnet-v2")

inputs = processor(images=image, return_tensors="pt").to(model.device)
with torch.no_grad():
    logits = model(**inputs).logits
predicted_class_id = logits.argmax(dim=-1).item()

class_labels = model.config.id2label
predicted_class_label = class_labels[predicted_class_id]
print(f"The predicted class label is: {predicted_class_label}")
```

## HGNetV2Config[[transformers.HGNetV2Config]]

#### transformers.HGNetV2Config[[transformers.HGNetV2Config]]

```python
transformers.HGNetV2Config(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, num_channels: int = 3, embedding_size: int = 64, depths: list[int] | tuple[int, ...] = (3, 4, 6, 3), hidden_sizes: list[int] | tuple[int, ...] = (256, 512, 1024, 2048), hidden_act: str = 'relu', _out_features: list[str] | None = None, _out_indices: list[int] | None = None, stem_channels: list[int] | tuple[int, ...] = (3, 32, 48), stem_strides: Sequence = (2, 1, 1, 2, 1), stage_in_channels: list[int] | tuple[int, ...] = (48, 128, 512, 1024), stage_mid_channels: list[int] | tuple[int, ...] = (48, 96, 192, 384), stage_out_channels: list[int] | tuple[int, ...] = (128, 512, 1024, 2048), stage_num_blocks: list[int] | tuple[int, ...] = (1, 1, 3, 1), stage_downsample: list[bool] | tuple[bool, ...] = (False, True, True, True), stage_downsample_strides: Sequence = (2, 2, 2, 2), stage_light_block: list[bool] | tuple[bool, ...] = (False, False, True, True), stage_kernel_size: list[int] | tuple[int, ...] = (3, 3, 5, 5), stage_numb_of_layers: list[int] | tuple[int, ...] = (6, 6, 6, 6), use_learnable_affine_block: bool = False, initializer_range: float = 0.02)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/configuration_hgnet_v2.py#L35)

**Parámetros:**

num_channels (`int`, *opcional*, valor predeterminado `3`) : El número de canales de entrada.

embedding_size (`int`, *opcional*, valor predeterminado `64`) : Dimensionalidad de las incrustaciones y los estados ocultos.

depths (`Union[list[int], tuple[int, ...]]`, *opcional*, valor predeterminado `(3, 4, 6, 3)`) : Profundidad de cada capa en el Transformer.

hidden_sizes (`Union[list[int], tuple[int, ...]]`, *opcional*, valor predeterminado `(256, 512, 1024, 2048)`) : Dimensionalidad (tamaño oculto) en cada etapa del modelo.

hidden_act (`str`, *opcional*, valor predeterminado `relu`) : La función de activación no lineal (función o cadena) en el decodificador. Por ejemplo, `"gelu"`, `"relu"`, `"silu"`, etc.

stem_channels (`list[int]`, *opcional*, valor predeterminado `[3, 32, 48]`) : Dimensiones de los canales para las capas del tallo: - El primer número (3) son los canales de la imagen de entrada - El segundo número (32) son los canales intermedios del tallo - El tercer número (48) son los canales de salida del tallo

stem_strides (`Sequence[int | list[int] | tuple[int, ...]]`, *opcional*, valor predeterminado `(2, 1, 1, 2, 1)`) : Patrones de paso para las capas del tallo.

stage_in_channels (`list[int]`, *opcional*, valor predeterminado `[48, 128, 512, 1024]`) : Dimensiones de los canales de entrada para cada etapa del backbone. Esto define cuántos canales tendrá la entrada de cada etapa.

stage_mid_channels (`list[int]`, *opcional*, valor predeterminado `[48, 96, 192, 384]`) : Dimensiones de los canales intermedios para cada etapa del backbone. Esto define el número de canales utilizados en las capas intermedias de cada etapa.

stage_out_channels (`list[int]`, *opcional*, valor predeterminado `[128, 512, 1024, 2048]`) : Dimensiones de los canales de salida para cada etapa del backbone. Esto define cuántos canales tendrá la salida de cada etapa.

stage_num_blocks (`list[int]`, *opcional*, valor predeterminado `[1, 1, 3, 1]`) : Número de bloques que se usarán en cada etapa del backbone. Esto controla la profundidad de cada etapa especificando cuántos bloques convolucionales apilar.

stage_downsample (`list[bool]`, *opcional*, valor predeterminado `[False, True, True, True]`) : Indica si se debe reducir la resolución de los mapas de características en cada etapa. Si es `True`, las dimensiones espaciales de los mapas de características se reducirán.

stage_downsample_strides (`Sequence[int | list[int] | tuple[int, ...]]`, *opcional*, valor predeterminado `(2, 2, 2, 2)`) : Patrones de salto para cada capa de etapa.

stage_light_block (`list[bool]`, *opcional*, valor predeterminado `[False, False, True, True]`) : Indica si se deben usar bloques ligeros en cada etapa. Los bloques ligeros son una variante de los bloques convolucionales que pueden tener menos parámetros.

stage_kernel_size (`list[int]`, *opcional*, valor predeterminado `[3, 3, 5, 5]`) : Tamaños de los núcleos para las capas convolucionales en cada etapa.

stage_numb_of_layers (`list[int]`, *opcional*, valor predeterminado `[6, 6, 6, 6]`) : Número de capas que se utilizarán en cada bloque de la etapa.

use_learnable_affine_block (`bool`, *opcional*, valor predeterminado `False`) : Indica si se deben usar bloques afines aprendibles (LAB) en la red. LAB añade parámetros de escala y sesgo aprendibles después de ciertas operaciones.

initializer_range (`float`, *opcional*, valor predeterminado `0.02`) : La desviación estándar de truncated_normal_initializer para inicializar todas las matrices de pesos.

Esta es la clase de configuración para almacenar la configuración de un HGNetV2Backbone. Se utiliza para instanciar un modelo Hgnet V2 según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de [ustc-community/dfine_x_coco](https://huggingface.co/ustc-community/dfine_x_coco)

Los objetos de configuración heredan de [PreTrainedConfig](/docs/transformers/main/es/main_classes/configuration#transformers.PreTrainedConfig) y se pueden utilizar para controlar las salidas del modelo. Consulte la documentación de [PreTrainedConfig](/docs/transformers/main/es/main_classes/configuration#transformers.PreTrainedConfig) para obtener más información.

## HGNetV2Backbone[[transformers.HGNetV2Backbone]]

#### transformers.HGNetV2Backbone[[transformers.HGNetV2Backbone]]

```python
transformers.HGNetV2Backbone(config: HGNetV2Config)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L343)

#### forward[[transformers.HGNetV2Backbone.forward]]

```python
forward(pixel_values: Tensor, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L356)

**Parámetros:**

pixel_values (`torch.Tensor` de forma `(batch_size, num_channels, image_size, image_size)`) : Los tensores correspondientes a las imágenes de entrada. Los valores de píxeles se pueden obtener mediante `image_processor_class`. Consulte `image_processor_class.__call__` para más detalles (`processor_class` utiliza `image_processor_class` para procesar las imágenes).

output_hidden_states (`bool`, *opcional*) : Indica si se deben devolver los estados ocultos de todas las capas. Consulte `hidden_states` en los tensores devueltos para obtener más detalles.

return_dict (`bool`, *opcional*) : Indica si se debe devolver un [ModelOutput](/docs/transformers/main/es/main_classes/output#transformers.utils.ModelOutput) en lugar de una tupla simple.

**Devuelve:** `BackboneOutput` o `tuple(torch.Tensor)`

Un `BackboneOutput` o una tupla de `torch.Tensor` (si se pasa `return_dict=False` o cuando `config.return_dict=False`) que comprende varios elementos según la configuración ([HGNetV2Config](/docs/transformers/main/es/model_doc/hgnet_v2#transformers.HGNetV2Config)) y las entradas.

El método forward de [HGNetV2Backbone](/docs/transformers/main/es/model_doc/hgnet_v2#transformers.HGNetV2Backbone) sobrescribe el método especial `__call__`.

Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de `Module` después, en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de preprocesamiento y posprocesamiento, mientras que la segunda los ignora silenciosamente.

- **feature_maps** (`tuple(torch.Tensor)` de forma `(batch_size, num_channels, height, width)`) -- Mapas de características de las etapas.
- **hidden_states** (`tuple(torch.Tensor)`, *opcional*, se devuelve cuando se pasa `output_hidden_states=True` o cuando `config.output_hidden_states=True`) -- Tupla de `torch.Tensor` (una para la salida de los embeddings + una para la salida de cada capa) de forma `(batch_size, sequence_length, hidden_size)` o `(batch_size, num_channels, height, width)`, dependiendo del backbone.

  Estados ocultos del modelo en la salida de cada etapa más las salidas de la incrustación inicial.
- **attentions** (`tuple(torch.Tensor)`, *opcional*, se devuelve cuando se pasa `output_attentions=True` o cuando `config.output_attentions=True`) -- Tupla de `torch.Tensor` (una por cada capa) de forma `(batch_size, num_heads, sequence_length, sequence_length)`. Solo aplicable si el backbone utiliza atención.

  Pesos de atención tras el softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.

Ejemplos:

```python
>>> from transformers import HGNetV2Config, HGNetV2Backbone
>>> import torch

>>> config = HGNetV2Config()
>>> model = HGNetV2Backbone(config)

>>> pixel_values = torch.randn(1, 3, 224, 224)

>>> with torch.no_grad():
...     outputs = model(pixel_values)

>>> feature_maps = outputs.feature_maps
>>> list(feature_maps[-1].shape)
[1, 2048, 7, 7]
```

## HGNetV2ForImageClassification[[transformers.HGNetV2ForImageClassification]]

#### transformers.HGNetV2ForImageClassification[[transformers.HGNetV2ForImageClassification]]

```python
transformers.HGNetV2ForImageClassification(config: HGNetV2Config)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L420)

**Parámetros:**

config ([HGNetV2Config](/docs/transformers/main/es/model_doc/hgnet_v2#transformers.HGNetV2Config)) : Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método [from_pretrained()](/docs/transformers/main/es/main_classes/model#transformers.PreTrainedModel.from_pretrained) para cargar los pesos del modelo.

Modelo HGNetV2 con una cabeza de clasificación de imágenes en la parte superior (una capa lineal sobre las características agrupadas), por ejemplo, para ImageNet.

Este modelo hereda de [PreTrainedModel](/docs/transformers/main/es/main_classes/model#transformers.PreTrainedModel). Consulte la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).

Este modelo también es una subclase de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.

#### forward[[transformers.HGNetV2ForImageClassification.forward]]

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L436)

**Parámetros:**

pixel_values (`torch.Tensor` de forma `(batch_size, num_channels, image_size, image_size)`, *opcional*) : Los tensores correspondientes a las imágenes de entrada. Los valores de píxeles se pueden obtener usando `image_processor_class`. Consulte `image_processor_class.__call__` para obtener más detalles (`processor_class` utiliza `image_processor_class` para procesar las imágenes).

labels (`torch.LongTensor` de forma `(batch_size,)`, *opcional*) : Etiquetas para calcular la pérdida de clasificación/regresión de imagen. Los índices deben estar en `[0, ..., config.num_labels - 1]`. Si `config.num_labels == 1` se calcula una pérdida de regresión (pérdida de error cuadrático medio), si `config.num_labels > 1` se calcula una pérdida de clasificación (entropía cruzada).

output_hidden_states (`bool`, *opcional*) : Indica si se deben devolver los estados ocultos de todas las capas. Consulte `hidden_states` en los tensores devueltos para obtener más detalles.

return_dict (`bool`, *opcional*) : Indica si se debe devolver un [ModelOutput](/docs/transformers/main/es/main_classes/output#transformers.utils.ModelOutput) en lugar de una tupla simple.

**Devuelve:** [ImageClassifierOutputWithNoAttention](/docs/transformers/main/es/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) o `tuple(torch.Tensor)`

Un [ImageClassifierOutputWithNoAttention](/docs/transformers/main/es/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) o una tupla de `torch.Tensor` (si se pasa `return_dict=False` o cuando `config.return_dict=False`) que comprende varios elementos según la configuración ([HGNetV2Config](/docs/transformers/main/es/model_doc/hgnet_v2#transformers.HGNetV2Config)) y las entradas.

El método forward de [HGNetV2ForImageClassification](/docs/transformers/main/es/model_doc/hgnet_v2#transformers.HGNetV2ForImageClassification) reemplaza el método especial `__call__`.

Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de `Module` después, en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de preprocesamiento y posprocesamiento, mientras que la segunda los ignora silenciosamente.

- **loss** (`torch.Tensor` de forma `(1,)`, *opcional*, se devuelve cuando se proporciona `labels`) -- Pérdida de clasificación (o de regresión si config.num_labels==1).
- **logits** (`torch.Tensor` de forma `(batch_size, config.num_labels)`) -- Puntuaciones de clasificación (o de regresión si config.num_labels==1) (antes de SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`, *opcional*, devuelto cuando se pasa `output_hidden_states=True` o cuando `config.output_hidden_states=True`) -- Tupla de `torch.Tensor` (una para la salida de las incrustaciones, si el modelo tiene una capa de incrustaciones, + una para la salida de cada etapa) de forma `(batch_size, num_channels, height, width)`. Estados ocultos (también llamados mapas de características) del modelo en la salida de cada etapa.

Ejemplos:
```python
>>> import torch
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from transformers import HGNetV2ForImageClassification, AutoImageProcessor
>>> from PIL import Image

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> model = HGNetV2ForImageClassification.from_pretrained("ustc-community/hgnet-v2")
>>> processor = AutoImageProcessor.from_pretrained("ustc-community/hgnet-v2")

>>> inputs = processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)
>>> outputs.logits.shape
torch.Size([1, 2])
```

