# HGNet-V2

[HGNetV2](https://github.com/PaddlePaddle/PaddleClas/blob/v2.6.0/docs/zh_CN/models/ImageNet1k/PP-HGNetV2.md) هو هيكل عظمي (backbone) لشبكات عصبية تلافية (CNN) من الجيل التالي، مصمَّم لتحقيق التوازن الأمثل بين الدقة وزمن الاستجابة على وحدات معالجة الرسوميات من NVIDIA. وبما أنه مبني على [HGNet](https://github.com/PaddlePaddle/PaddleClas/blob/v2.6.0/docs/en/models/PP-HGNet_en.md) الأصلية، فإن HGNetV2 يوفر دقة عالية مع سرعات استدلال سريعة، ويحقق أداءً قويًا في مهام مثل تصنيف الصور، وكشف الأشياء، والتجزئة (segmentation)، مما يجعله خيارًا عمليًا لتطبيقات الرؤية الحاسوبية المعتمدة على وحدات معالجة الرسوميات.

يمكنك العثور على جميع نماذج HGNet V2 الأصلية تحت منظمة [USTC](https://huggingface.co/ustc-community/models?search=hgnet).

> [!TIP]
> تمت مساهمة هذا النموذج من قِبل [VladOS95-cyber](https://github.com/VladOS95-cyber). انقر على نماذج HGNet V2 في الشريط الجانبي الأيمن لمزيد من الأمثلة على كيفية تطبيق HGNet V2 على مهام مختلفة في مجال رؤية الحاسوب.

يُبيّن المثال أدناه كيفية تصنيف صورة باستخدام [Pipeline](/docs/transformers/main/ar/main_classes/pipelines#transformers.Pipeline) أو فئة [AutoModel](/docs/transformers/main/ar/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)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/configuration_hgnet_v2.py#L35)

**المعاملات:**

num_channels (`int`، *اختياري*، القيمة الافتراضية `3`) : عدد قنوات الإدخال.

embedding_size (`int`, *اختياري*, الافتراضي هو `64`) : أبعاد التضمينات والحالات المخفية.

depths (`Union[list[int], tuple[int, ...]]`، *اختياري*، الافتراضي هو `(3, 4, 6, 3)`) : عمق كل طبقة في Transformer.

hidden_sizes (`Union[list[int], tuple[int, ...]]`, *اختياري*, الافتراضي هو `(256, 512, 1024, 2048)`) : البُعد (حجم الطبقة المخفية) في كل مرحلة من مراحل النموذج.

hidden_act (`str`، *اختياري*، الافتراضي هو `relu`) : دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، `"gelu"`، `"relu"`، `"silu"`، وغيرها.

stem_channels (`list[int]`، *اختياري*، القيمة الافتراضية `[3, 32, 48]`) : أبعاد القنوات لطبقات الجذع: - الرقم الأول (3) هو قنوات صورة الإدخال - الرقم الثاني (32) هو قنوات الجذع الوسيطة - الرقم الثالث (48) هو قنوات الجذع الناتجة

stem_strides (`Sequence[int | list[int] | tuple[int, ...]]`، *اختياري*، القيمة الافتراضية `(2, 1, 1, 2, 1)`) : أنماط التخطي لطبقات الجذع.

stage_in_channels (`list[int]`، *اختياري*، القيمة الافتراضية `[48, 128, 512, 1024]`) : أبعاد قنوات الإدخال لكل مرحلة من مراحل الهيكل العظمي (backbone). يحدد هذا عدد القنوات التي ستحتويها مدخلات كل مرحلة.

stage_mid_channels (`list[int]`، *اختياري*، القيمة الافتراضية `[48, 96, 192, 384]`) : أبعاد القنوات المتوسطة لكل مرحلة من مراحل الهيكل العظمي. يحدد هذا عدد القنوات المستخدمة في الطبقات الوسيطة لكل مرحلة.

stage_out_channels (`list[int]`، *اختياري*، القيمة الافتراضية `[128, 512, 1024, 2048]`) : أبعاد قناة الإخراج لكل مرحلة من مراحل الهيكل العظمي. يحدد هذا عدد القنوات التي ستحتوي عليها مخرجات كل مرحلة.

stage_num_blocks (`list[int]`، *اختياري*، القيمة الافتراضية `[1, 1, 3, 1]`) : عدد الكتل المستخدمة في كل مرحلة من مراحل الهيكل الأساسي. يتحكم هذا في عمق كل مرحلة من خلال تحديد عدد كتل الالتفاف التي سيتم تجميعها.

stage_downsample (`list[bool]`، *اختياري*، القيمة الافتراضية `[False, True, True, True]`) : يحدد ما إذا كان سيتم تقليل حجم خرائط الميزات في كل مرحلة. إذا كانت القيمة `True`، فسيتم تقليل الأبعاد المكانية لخرائط الميزات.

stage_downsample_strides (`Sequence[int | list[int] | tuple[int, ...]]`، *اختياري*، القيمة الافتراضية `(2, 2, 2, 2)`) : أنماط التخطي (Stride) لطبقة كل مرحلة.

stage_light_block (`list[bool]`، *اختياري*، القيمة الافتراضية `[False, False, True, True]`) : يحدد ما إذا كان سيتم استخدام الكتل الخفيفة في كل مرحلة. الكتل الخفيفة هي نسخة من الكتل التلافيفية قد تحتوي على عدد أقل من المعاملات.

stage_kernel_size (`list[int]`، *اختياري*، القيمة الافتراضية `[3, 3, 5, 5]`) : أحجام النواة للطبقات التلافيفية في كل مرحلة.

stage_numb_of_layers (`list[int]`، *اختياري*، القيمة الافتراضية `[6, 6, 6, 6]`) : عدد الطبقات المستخدمة في كل كتلة من المرحلة.

use_learnable_affine_block (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان سيتم استخدام كتل التحويل التوافقي القابلة للتعلم (LAB) في الشبكة. تضيف LAB معاملات مقياس وانحياز قابلة للتعلم بعد عمليات معينة.

initializer_range (`float`، *اختياري*، القيمة الافتراضية `0.02`) : الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.

هذه فئة الإعدادات المخزنة لإعدادات HGNetV2Backbone. تُستخدم لاستحداث نموذج Hgnet V2 وفقًا للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [ustc-community/dfine_x_coco](https://huggingface.co/ustc-community/dfine_x_coco)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

## HGNetV2Backbone[[transformers.HGNetV2Backbone]]

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

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

[المصدر](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)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L356)

**المعاملات:**

pixel_values (`torch.Tensor` من الشكل `(batch_size, num_channels, image_size, image_size)`) : المصفوفات المتناظرة مع الصور المدخلة. يمكن الحصول على قيم البكسل باستخدام `image_processor_class`. راجع `image_processor_class.__call__` للتفاصيل (`processor_class` يستخدم `image_processor_class` لمعالجة الصور).

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** `BackboneOutput` أو `tuple(torch.Tensor)`

A `BackboneOutput` or a tuple of `torch.Tensor` (if `return_dict=False` is passed or when `config.return_dict=False`) comprising various elements depending on the configuration ([HGNetV2Config](/docs/transformers/main/ar/model_doc/hgnet_v2#transformers.HGNetV2Config)) and inputs.

تتجاوز طريقة [HGNetV2Backbone](/docs/transformers/main/ar/model_doc/hgnet_v2#transformers.HGNetV2Backbone) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **feature_maps** (`tuple(torch.Tensor)` من الشكل `(batch_size, num_channels, height, width)`) -- خرائط الميزات للمراحل.
- **hidden_states** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند تعيين `config.output_hidden_states=True`) -- مجموعة من `torch.Tensor` (واحدة لإخراج التضمينات + واحدة لإخراج كل طبقة) بأبعاد `(batch_size, sequence_length, hidden_size)` أو `(batch_size, num_channels, height, width)`، اعتمادًا على الهيكل الأساسي.

  حالات النموذج المخفية عند مخرج كل مرحلة بالإضافة إلى مخرجات التضمين الأولي.
- **attentions** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_attentions=True` أو عند تعيين `config.output_attentions=True`) -- مجموعة من `torch.Tensor` (واحدة لكل طبقة) بأبعاد `(batch_size, num_heads, sequence_length, sequence_length)`. ينطبق فقط إذا كان الهيكل الأساسي يستخدم الانتباه.

  أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

أمثلة:

```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)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L420)

**المعاملات:**

config ([HGNetV2Config](/docs/transformers/main/ar/model_doc/hgnet_v2#transformers.HGNetV2Config)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج HGNetV2 مع رأس تصنيف الصور في الأعلى (طبقة خطية فوق الميزات المجمّعة)، مثلًا لتطبيق ImageNet.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### 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)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L436)

**المعاملات:**

pixel_values (`torch.Tensor` من الشكل `(batch_size, num_channels, image_size, image_size)`، *اختياري*) : المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام `image_processor_class`. راجع `image_processor_class.__call__` للتفاصيل (`processor_class` يستخدم `image_processor_class` لمعالجة الصور).

labels (من نوع `torch.LongTensor` بأبعاد `(batch_size,)`، *اختياري*) : تسميات لحساب خسارة تصنيف/الانحدار للصور. يجب أن تكون الفهارس ضمن `[0, ..., config.num_labels - 1]`. إذا كان `config.num_labels == 1` يتم حساب خسارة الانحدار (خسارة متوسط المربع)، وإذا كان `config.num_labels > 1` يتم حساب خسارة التصنيف (الإنتروبيا المتقاطعة).

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** [ImageClassifierOutputWithNoAttention](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) أو `tuple(torch.Tensor)`

[ImageClassifierOutputWithNoAttention](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([HGNetV2Config](/docs/transformers/main/ar/model_doc/hgnet_v2#transformers.HGNetV2Config)) والمدخلات.

تتجاوز طريقة [HGNetV2ForImageClassification](/docs/transformers/main/ar/model_doc/hgnet_v2#transformers.HGNetV2ForImageClassification) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **loss** (`torch.Tensor` من الشكل `(1,)`, *اختياري*، يُعاد عند تقديم `labels`) -- خسارة التصنيف (أو الانحدار إذا كان config.num_labels==1).
- **logits** (`torch.Tensor` من الشكل `(batch_size, config.num_labels)`) -- درجات التصنيف (أو الانحدار إذا كان config.num_labels==1) (قبل SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند `config.output_hidden_states=True`) -- مجموعة مرتبة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل مرحلة) بشكل `(batch_size, num_channels, height, width)`. حالات النموذج المخفية (المعروفة أيضًا باسم خرائط الميزات) عند مخرجات كل مرحلة.

أمثلة:
```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])
```

