Transformers documentation
DepthPro
نُشر هذا النموذج في أوراق HF في 2024-10-02، وسُهم به في Hugging Face Transformers في 2025-02-10.
DepthPro
نظرة عامة
قُدِّم نموذج DepthPro في Depth Pro: Sharp Monocular Metric Depth in Less Than a Second بواسطة Aleksei Bochkovskii وAmaël Delaunoy وHugo Germain وMarcel Santos وYichao Zhou وStephan R. Richter وVladlen Koltun.
DepthPro هو نموذج أساسي لتقدير العمق أحادي العين بالمقياس في وضع الصفرية (zero-shot)، مصمَّم لتوليد خرائط عمق عالية الدقة مع حدة ملحوظة وتفاصيل دقيقة. يعتمد على بنية متعددة المقاييس مبنية على Vision Transformer (ViT)، حيث يتم تقليل حجم الصور، وقسمتها إلى رقعات (patches)، ومعالجتها باستخدام مُشفِّر Dinov2 مشترك. يتم دمج ميزات مستوى الرقعة المستخرجة، ثم رفع حجمها وتحسينها باستخدام مرحلة دمج تشبه DPT، مما يتيح تقديرًا دقيقًا للعمق.
المستخلص من الورقة البحثية هو كالتالي:
نقدّم نموذجًا أساسيًا لتقدير العمق أحادي العين بالمقياس دون تدريب مسبق. يولّد نموذجنا، Depth Pro، خرائط عمق عالية الدقة مع حدة غير مسبوقة وتفاصيل عالية التردد. التنبؤات مقياسية، ذات مقياس مطلق، دون الاعتماد على توفر بيانات وصفية مثل معاملات الكاميرا الداخلية. كما أن النموذج سريع، إذ ينتج خريطة عمق بدقة 2.25 ميجابكسل في 0.3 ثانية على وحدة معالجة رسومية قياسية. تُمكّن هذه الخصائص من مجموعة من المساهمات التقنية، بما في ذلك محول رؤية متعدد المقاييس فعال للتنبؤ الكثيف، وبروتوكول تدريب يجمع بين مجموعات البيانات الحقيقية والاصطناعية لتحقيق دقة مقياسية عالية إلى جانب تتبع دقيق للحدود، ومؤشرات تقييم مخصصة لدقة الحدود في خرائط العمق المقدّرة، وتقدير طول البؤرة بأحدث التقنيات من صورة واحدة. تحلل التجارب الواسعة اختيارات التصميم المحددة وتُظهر أن Depth Pro يتفوق على الأعمال السابقة على عدة أبعاد.
DepthPro Outputs. Taken from the official code. تمت مساهمة هذا النموذج من قِبل geetu040. يمكن العثور على الكود الأصلي هنا.
نصائح للاستخدام
يعالج نموذج DepthPro صورة الإدخال أولاً عن طريق تقليل حجمها على مستويات متعددة، ثم تقسيم كل نسخة مُصغّرة إلى رقعات. بعد ذلك، يتم ترميز هذه الرقعات باستخدام مُرمّز رقعات Dinov2 المشترك المبني على Vision Transformer (ViT)، بينما تُعالَج الصورة الكاملة بواسطة مُرمّز صور منفصل. تُدمَج ميزات الرقعات المستخرجة في خرائط الميزات، ثم تُوسَّع، وتُدمَج باستخدام مُفكّك يشبه DPT لتوليد تقدير العمق النهائي. إذا تم تفعيله، يعالج مُرمّز مجال الرؤية (FOV) الإضافي الصورة لتقدير مجال رؤية الكاميرا، مما يساهم في دقة تقدير العمق.
import requests
import torch
from PIL import Image
from transformers import DepthProForDepthEstimation, DepthProImageProcessor
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
image_processor = DepthProImageProcessor.from_pretrained("apple/DepthPro-hf")
model = DepthProForDepthEstimation.from_pretrained("apple/DepthPro-hf", device_map="auto")
inputs = image_processor(images=image, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
post_processed_output = image_processor.post_process_depth_estimation(
outputs, target_sizes=[(image.height, image.width)],
)
field_of_view = post_processed_output[0]["field_of_view"]
focal_length = post_processed_output[0]["focal_length"]
depth = post_processed_output[0]["predicted_depth"]
depth = (depth - depth.min()) / depth.max()
depth = depth * 255.
depth = depth.detach().cpu().numpy()
depth = Image.fromarray(depth.astype("uint8"))البنية والتكوين
DepthPro architecture. Taken from the original paper. يستخدم نموذج DepthProForDepthEstimation مُشفِّر DepthProEncoder لتشفير الصورة المدخلة، ومرحلة FeatureFusionStage لدمج الميزات الناتجة عن المُشفِّر.
يستخدم DepthProEncoder بشكل إضافي مشفّرين اثنين:
patch_encoder- يتم تحجيم الصورة المدخلة باستخدام عدة نسب، كما هو محدد في إعداد
scaled_images_ratios. - يتم تقسيم كل صورة مُقيّمة إلى بقع أصغر بحجم
patch_sizeمع تحديد مناطق التداخل بواسطةscaled_images_overlap_ratios. - تُعالَج هذه البُقع بواسطة
patch_encoder
- يتم تحجيم الصورة المدخلة باستخدام عدة نسب، كما هو محدد في إعداد
image_encoder- يتم أيضًا إعادة تحجيم الصورة المدخلة إلى
patch_sizeومعالجتها بواسطةimage_encoder
- يتم أيضًا إعادة تحجيم الصورة المدخلة إلى
يمكن تكوين كلٍّ من هذين المشفّرين عبر patch_model_config وimage_model_config على التوالي، وكلاهما يمثل Dinov2Model منفصلًا افتراضيًا.
تُدمج المخرجات من كلا المشفّرين (last_hidden_state) والحالات الوسيطة المحددة (hidden_states) من patch_encoder بواسطة FeatureFusionStage مبني على DPT لتقدير العمق.
تنبؤ مجال الرؤية (FOV)
يُكمَّل الشبكة برأس لتقدير البعد البؤري. يستهلك رأس تجميعي صغير ميزات مجمّدة من شبكة تقدير العمق وميزات خاصة بالمهمة من مشفّر صور ViT منفصل، وذلك للتقدير على مجال الرؤية الزاوي الأفقي.
يتحكم معامل use_fov_model في DepthProConfig فيما إذا كان تنبؤ FOV مفعلاً أم لا. افتراضياً، يُضبط على False لتوفير الذاكرة والحوسبة. عند التفعيل، يتم إنشاء مشفّر FOV بناءً على معامل fov_model_config، والذي يكون افتراضياً Dinov2Model. كما يمكن تمرير معامل use_fov_model عند تهيئة نموذج DepthProForDepthEstimation.
يستخدم النموذج المُدرَّب مسبقًا عند نقطة التفتيش apple/DepthPro-hf مُشفِّر FOV. لاستخدام النموذج المُدرَّب مسبقًا دون مُشفِّر FOV، اضبط use_fov_model=False عند تحميل النموذج، مما يوفر في الحسابات.
from transformers import DepthProForDepthEstimation
model = DepthProForDepthEstimation.from_pretrained("apple/DepthPro-hf", use_fov_model=False, device_map="auto")لإنشاء نموذج جديد بمشفّر FOV، اضبط use_fov_model=True في الإعدادات.
from transformers import DepthProConfig, DepthProForDepthEstimation
config = DepthProConfig(use_fov_model=True)
model = DepthProForDepthEstimation(config)أو اضبط use_fov_model=True عند تهيئة النموذج، حيث يتجاوز هذا القيمة الموجودة في الإعدادات.
from transformers import DepthProConfig, DepthProForDepthEstimation
config = DepthProConfig()
model = DepthProForDepthEstimation(config, use_fov_model=True)استخدام الانتباه القياسي بنقطة منتج
يتضمن PyTorch مُشغّلًا أصليًا للانتباه بنقطة جدولية مُقيّمة (SDPA) كجزء من torch.nn.functional. تشمل هذه الدالة عدة تطبيقات يمكن تطبيقها اعتمادًا على المدخلات والعتاد المستخدم. راجع التوثيق الرسمي أو صفحة GPU Inference لمزيد من المعلومات.
يُستخدم SDPA افتراضيًا لـ torch>=2.1.1 عندما تكون هناك نسخة تنفيذية متاحة، لكن يمكنك أيضًا تعيين attn_implementation="sdpa" في from_pretrained() لطلب استخدام SDPA بشكل صريح.
from transformers import DepthProForDepthEstimation
model = DepthProForDepthEstimation.from_pretrained("apple/DepthPro-hf", attn_implementation="sdpa", device_map="auto")للحصول على أفضل تسارعات، ننصح بتحميل النموذج بدقة نصفية (مثل torch.float16 أو torch.bfloat16).
في معيار محلي (A100-40GB، PyTorch 2.3.0، نظام التشغيل Ubuntu 22.04) باستخدام float32 ونموذج google/vit-base-patch16-224، لاحظنا التسارعات التالية أثناء الاستدلال.
| حجم الدفعة | متوسط زمن الاستدلال (مللي ثانية)، وضع العاجل | متوسط زمن الاستدلال (مللي ثانية)، نموذج sdpa | تسريع، Sdpa / Eager (x) |
|---|---|---|---|
| 1 | 7 | 6 | 1.17 |
| 2 | 8 | 6 | 1.33 |
| 4 | 8 | 6 | 1.33 |
| 8 | 8 | 6 | 1.33 |
الموارد
قائمة بالموارد الرسمية من Hugging Face وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك على البدء مع DepthPro:
- ورقة البحث: Depth Pro: Sharp Monocular Metric Depth in Less Than a Second
- التنفيذ الرسمي: apple/ml-depth-pro
- دفتر ملاحظات استنتاج DepthPro: استنتاج DepthPro
- DepthPro لرفع الدقة وتجزئة الصور
- اقرأ المدونة على Medium: Depth Pro: Beyond Depth
- الكود على Github: geetu040/depthpro-beyond-depth
إذا كنت مهتمًا بتقديم مورد ليُدرج هنا، فلا تتردد في فتح طلب سحب وسنقوم بمراجعته! يُفضَّل أن يُظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود مسبقًا.
DepthProConfig
فئة transformers.DepthProConfig
< 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 = Nonefusion_hidden_size: int = 256patch_size: int | list[int] | tuple[int, int] = 384initializer_range: float = 0.02intermediate_hook_ids: list[int] | tuple[int, ...] = (11, 5)intermediate_feature_dims: list[int] | tuple[int, ...] = (256, 256)scaled_images_ratios: list[int | float] | tuple[int | float, ...] = (0.25, 0.5, 1)scaled_images_overlap_ratios: list[float] | tuple[float, ...] = (0.0, 0.5, 0.25)scaled_images_feature_dims: list[int] | tuple[int, ...] = (1024, 1024, 512)merge_padding_value: int = 3use_batch_norm_in_fusion_residual: bool = Falseuse_bias_in_fusion_residual: bool = Trueuse_fov_model: bool = Falsenum_fov_head_layers: int = 2image_model_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonepatch_model_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonefov_model_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None )
المعاملات
- fusion_hidden_size (
int، اختياري، القيمة الافتراضية 256) — عدد القنوات قبل الدمج. - patch_size (
Union[int, list[int], tuple[int, int]]، اختياري، القيمة الافتراضية384) — حجم (دقة) كل رقعة. - initializer_range (
float، اختياري، القيمة الافتراضية0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان. - intermediate_hook_ids (
list[int]، اختياري، القيمة الافتراضية[11, 5]) — فهارس حالات الإخفاء الوسيطة من مُشفِّر الباتش (patch encoder) التي تُستخدم للدمج. - intermediate_feature_dims (
list[int]، اختياري، القيمة الافتراضية[256, 256]) — أبعاد حالة الإخفاء أثناء عملية رفع العينات (upsampling) لكل حالة إخفاء وسيطة فيintermediate_hook_ids. - scaled_images_ratios (
list[float]، اختياري، القيمة الافتراضية[0.25, 0.5, 1]) — النسب الخاصة بالصور المُقيَّسة التي سيستخدمها مُشفِّر البُقع (patch encoder). - scaled_images_overlap_ratios (
list[float]، اختياري، القيمة الافتراضية[0.0, 0.5, 0.25]) — نسب التداخل بين البقع لكل صورة مُقيّمة فيscaled_images_ratios. - scaled_images_feature_dims (
list[int]، اختياري، القيمة الافتراضية[1024, 1024, 512]) — أبعاد حالة المخفية أثناء عملية رفع العينة (upsampling) لكل صورة مُقيّمة فيscaled_images_ratios. - merge_padding_value (
int، اختياري، القيمة الافتراضية 3) — عند دمج البقع الأصغر مرة أخرى إلى حجم الصورة، تُزال الأجزاء المتداخلة بهذا الحجم. - use_batch_norm_in_fusion_residual (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام تطبيع الدفعة (batch normalization) في وحدات الباقي (residual) المسبقة التفعيل (pre-activate) داخل كتل الدمج (fusion blocks). - use_bias_in_fusion_residual (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام الانحياز (bias) في وحدات الباقي (residual) قبل التفعيل (pre-activate) في كتل الدمج (fusion blocks). - use_fov_model (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدامDepthProFovModelلتوليد مجال الرؤية. - num_fov_head_layers (
int، اختياري، القيمة الافتراضية 2) — عدد طبقات الالتفاف في رأسDepthProFovModel. - image_model_config (
Union[dict[str, Any], PreTrainedConfig]، اختياري) — إعدادات نموذج مُشفِّر الصور، الذي يتم تحميله باستخدام واجهة AutoModel. افتراضياً، يُستخدم نموذج Dinov2 كهيكل أساسي. - patch_model_config (
Union[dict[str, Any], PreTrainedConfig]، اختياري) — إعدادات نموذج مُشفِّر البقع، الذي يتم تحميله باستخدام واجهة AutoModel. افتراضيًا، يُستخدم نموذج Dinov2 كهيكل أساسي. - fov_model_config (
Union[dict[str, Any], PreTrainedConfig]، اختياري) — إعدادات نموذج مشفّر fov، الذي يتم تحميله باستخدام واجهة AutoModel. افتراضيًا، يُستخدم نموذج Dinov2 كهيكل أساسي.
هذه فئة الإعدادات المخزنة لإعدادات نموذج DepthProModel. تُستخدم لاستحداث نموذج Depth Pro وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ apple/DepthPro
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
مثال:
>>> from transformers import DepthProConfig, DepthProModel
>>> # Initializing a DepthPro apple/DepthPro style configuration
>>> configuration = DepthProConfig()
>>> # Initializing a model (with random weights) from the apple/DepthPro style configuration
>>> model = DepthProModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configDepthProImageProcessor
فئة transformers.DepthProImageProcessor
< source >( **kwargs: *<class 'transformers.processing_utils.ImagesKwargs'> )
المعاملات
- do_convert_rgb (
bool، kwargs، اختياري) — ما إذا كان يجب تحويل الصورة إلى RGB. - do_resize (
bool، kwargs، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تغيير حجم الصورة. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]، kwargs، القيمة الافتراضية{'height' -- 1536, 'width': 1536}): يصف الأبعاد القصوى للمدخلات إلى النموذج. - 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، القيمة الافتراضية2) — مرشّح إعادة العينة (Resampling filter) المستخدم عند تغيير حجم الصورة. يمكن أن يكون أحد قيم التعدادPILImageResampling. لا يكون له أي تأثير إلا إذا كانت قيمةdo_resizeهيTrue. - do_rescale (
bool، kwargs، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إعادة تحجيم الصورة. - rescale_factor (
float، kwargs، اختياري، القيمة الافتراضية0.00392156862745098) — عامل إعادة التحجيم لإعادة تحجيم الصورة إذا كانdo_rescaleمضبوطًا علىTrue. - do_normalize (
bool، kwargs، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تطبيع الصورة. - image_mean (
Union[float, list[float], tuple[float, ...]]، kwargs، اختياري، القيمة الافتراضية[0.5, 0.5, 0.5]) — متوسط الصورة المستخدم للتطبيع. لا يكون له أي تأثير إلا إذا تم تعيينdo_normalizeإلىTrue. - image_std (
Union[float, list[float], tuple[float, ...]]، kwargs، اختياري، القيمة الافتراضية[0.5, 0.5, 0.5]) — الانحراف المعياري للصورة المستخدم للتطبيع. لا يكون له أي تأثير إلا إذا تم تعيينdo_normalizeإلىTrue. - do_pad (
bool، kwargs، اختياري) — ما إذا كان سيتم توسيط الصورة. يتم التوسيط إما إلى أكبر حجم في الدفعة أو إلى حجم مربع ثابت لكل صورة. تعتمد استراتيجية التوسيط الدقيقة على النموذج. - 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، اختياري) — ما إذا كان يجب قص الصورة من المنتصف. - data_format (
Union[str, ~image_utils.ChannelDimension]، kwargs، اختياري) — يُؤمَّن دعمChannelDimension.FIRSTفقط. أُضيف من أجل التوافق مع المعالجات البطيئة. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, اختياري) — تنسيق بُعد القناة للصورة المدخلة. إذا لم يُضبط، يُستنتج تنسيق بُعد القناة من الصورة المدخلة. يمكن أن يكون أحد ما يلي:"channels_first"أوChannelDimension.FIRST: صورة بتنسيق (num_channels, height, width)."channels_last"أوChannelDimension.LAST: صورة بصيغة (الارتفاع، العرض، عدد القنوات)."none"أوChannelDimension.NONE: صورة بصيغة (الارتفاع، العرض).
- 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، فسيتم تعيينها إلى True إذا كانت الصور على وحدة المعالجة المركزية (CPU)، وإلا فستكون False. تستند هذه الخيارات إلى ملاحظات تجريبية، كما هو موضح هنا: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int، kwargs، اختياري) — عدد رموز الصورة التي سيتم استخدامها لكل صورة في المدخلات. تمت إضافته من أجل التوافق مع الإصدارات السابقة، لكن ينبغي ضبطه كخاصية للمعالج في النماذج المستقبلية. يعيد توتورات مكدسة إذا تم ضبطه على'pt'، وإلا فعاد قائمة من التوتورات. - disable_grouping (
bool، kwargs، اختياري) — ما إذا كان سيتم تعطيل تجميع الصور حسب الحجم لمعالجتها بشكل فردي بدلاً من دفعات. إذا كانت القيمة None، فسيتم تعيينها إلى True إذا كانت الصور على وحدة المعالجة المركزية (CPU)، وإلا فستكون False. تستند هذه الخيارات إلى ملاحظات تجريبية، كما هو موضح هنا: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int، kwargs، اختياري) — عدد رموز الصورة التي سيتم استخدامها لكل صورة في المدخلات. تمت إضافته من أجل التوافق مع الإصدارات السابقة، لكن ينبغي ضبطه كخاصية للمعالج في النماذج المستقبلية. - Returns تُعاد كمتجهات مكدّسة إذا كان الإعداد
'pt'، وإلا تُعاد قائمة من المتجهات. —
ينشئ معالج صور DepthPro.
disable_grouping (bool, kwargs, اختياري):
ما إذا كان سيتم تعطيل تجميع الصور حسب الحجم لمعالجتها بشكل فردي بدلاً من دفعات.
إذا كانت القيمة None، فسيتم تعيينها إلى True إذا كانت الصور على وحدة المعالجة المركزية (CPU)، وإلا فستكون False. تستند هذه الخيارات إلى
ملاحظات تجريبية، كما هو موضح هنا: https://github.com/huggingface/transformers/pull/38157 image_seq_length (int, kwargs, اختياري):
عدد رموز الصورة التي سيتم استخدامها لكل صورة في المدخلات.
تمت إضافتها من أجل التوافق مع الإصدارات السابقة، لكن ينبغي تعيينها كخاصية للمعالج في النماذج المستقبلية.
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]*argsimage_like_kwargs: dict[str, typing.Any] | None = None**kwargs: *<class 'transformers.processing_utils.ImagesKwargs'> ) → ~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. - image_like_kwargs (
dict[str, Any], اختياري) — علامة مخصّصة للمطوّرين لإدخال مدخلات إضافية مشابهة للصور ستخضع أيضاً للمعالجة المسبقة. استخدم هذا الخيار فقط إذا لم يعمل تمرير المدخلات كحجج اسمية (kwargs). على سبيل المثال،preprocess(images, masks=masks)هو الخيار المفضّل، لكنه قد يسبّب مشاكل في أولوية الحُجج لبعض النماذج. في تلك الحالات يمكن استخدامpreprocess(images, image_like_inputs={"masks": masks})بدلاً منه. - do_convert_rgb (
bool، kwargs، اختياري) — ما إذا كان يجب تحويل الصورة إلى RGB. - do_resize (
bool، kwargs، اختياري) — ما إذا كان يجب تغيير حجم الصورة. - 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) — مرشّح إعادة العينة (Resampling filter) المستخدم عند تغيير حجم الصورة. يمكن أن يكون أحد قيم التعدادPILImageResampling. لا يكون له أي تأثير إلا إذا تم تعيينdo_resizeإلىTrue. - do_rescale (
bool، kwargs، اختياري) — ما إذا كان يجب إعادة تحجيم الصورة. - rescale_factor (
float، kwargs، اختياري) — معامل إعادة التحجيم لإعادة تحجيم الصورة إذا كانdo_rescaleمضبوطاً علىTrue. - do_normalize (
bool، kwargs، اختياري) — ما إذا كان سيتم تطبيع الصورة. - image_mean (
Union[float, list[float], tuple[float, ...]]، kwargs، اختياري) — متوسط الصورة المستخدم للتطبيع. لا يكون له أي تأثير إلا إذا تم تعيينdo_normalizeإلىTrue. - image_std (
Union[float, list[float], tuple[float, ...]]، kwargs، اختياري) — انحراف المعيار للصورة المستخدم للتطبيع. لا يكون له أي تأثير إلا إذا تم تعيينdo_normalizeإلىTrue. - do_pad (
bool، kwargs، اختياري) — ما إذا كان سيتم توسيط الصورة. يتم التوسيط إما إلى أكبر حجم في الدفعة أو إلى حجم مربع ثابت لكل صورة. تعتمد استراتيجية التوسيط الدقيقة على النموذج. - 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، اختياري) — ما إذا كان يجب قص الصورة من المنتصف. - data_format (
Union[str, ~image_utils.ChannelDimension]، kwargs، اختياري) — يُؤمَّن دعمChannelDimension.FIRSTفقط. أُضيف من أجل التوافق مع المعالجات البطيئة. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, اختياري) — تنسيق بُعد القناة للصورة المدخلة. إذا لم يُضبط، يُستنتج تنسيق بُعد القناة من الصورة المدخلة. يمكن أن يكون أحد ما يلي:"channels_first"أوChannelDimension.FIRST: صورة بتنسيق (num_channels, height, width)."channels_last"أوChannelDimension.LAST: صورة بصيغة (الارتفاع، العرض، عدد القنوات)."none"أوChannelDimension.NONE: صورة بصيغة (الارتفاع، العرض).
- 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، فسيتم تعيينها إلى True إذا كانت الصور على وحدة المعالجة المركزية (CPU)، وإلا فستكون False. تستند هذه الخيارات إلى ملاحظات تجريبية، كما هو موضح هنا: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int، kwargs، اختياري) — عدد رموز الصورة التي سيتم استخدامها لكل صورة في المدخلات. تمت إضافته من أجل التوافق مع الإصدارات السابقة، لكن ينبغي ضبطه كخاصية للمعالج في النماذج المستقبلية.
يعيد
~image_processing_base.BatchFeature
- data (
dict) — قاموس من القوائم/المصفوفات/الموترات التي يعيدها أسلوب call (مثل ‘pixel_values’). - tensor_type (
Union[None, str, TensorType]، اختياري) — يمكنك تحديد tensor_type هنا لتحويل قوائم الأعداد الصحيحة إلى تينسورات PyTorch/Numpy عند التهيئة.
معالجة صورة أو دفعة من الصور مسبقًا.
post_process_depth_estimation
< source >( outputs: DepthProDepthEstimatorOutputtarget_sizes: transformers.utils.generic.TensorType | list[tuple[int, int]] | None = None )
يعالج تنبؤات العمق الخام من النموذج بعد المعالجة.
DepthProModel
فئة transformers.DepthProModel
< source >( config: DepthProConfig )
المعاملات
- config (DepthProConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Depth Pro الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( pixel_values: Tensoroutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DepthProOutput or tuple(torch.Tensor)
المعاملات
- pixel_values (
torch.Tensorمن الشكل(batch_size, num_channels, image_size, image_size)) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسلات باستخدام DepthProImageProcessor. راجع DepthProImageProcessor.call() للتفاصيل (يستخدمprocessor_classDepthProImageProcessor لمعالجة الصور). - output_attentions (
bool، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجعattentionsضمن tensors المُرجعة لمزيد من التفاصيل. - output_hidden_states (
bool، اختياري) — ما إذا كان يجب إرجاع حالات الطبقات المخفية لجميع الطبقات. راجعhidden_statesضمن الموترات المُرجعة للحصول على مزيد من التفاصيل. - return_dict (
bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.
يعيد
DepthProOutput أو tuple(torch.Tensor)
A DepthProOutput 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 (DepthProConfig) and inputs.
تتجاوز طريقة DepthProModel الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
last_hidden_state (
torch.Tensorمن الشكل(batch_size, n_patches_per_batch, sequence_length, hidden_size)) — تسلسل حالات الخفاء عند مخرجات الطبقة الأخيرة من النموذج.الميزات (
Union[torch.Tensor, List[torch.Tensor]]، اختياري) — ميزات من المُشفِّرات. يمكن أن تكون ميزة واحدة أو قائمة من الميزات.hidden_states (
tuple[torch.Tensor, ...]، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) بأبعاد(batch_size, sequence_length, hidden_size).حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
attentions (
tuple[torch.Tensor, ...]، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length).أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
أمثلة:
>>> import torch
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from transformers import AutoProcessor, DepthProModel
>>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> checkpoint = "apple/DepthPro-hf"
>>> processor = AutoProcessor.from_pretrained(checkpoint)
>>> model = DepthProModel.from_pretrained(checkpoint)
>>> # prepare image for the model
>>> inputs = processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
... output = model(**inputs)
>>> output.last_hidden_state.shape
torch.Size([1, 35, 577, 1024])DepthProForDepthEstimation
فئة transformers.DepthProForDepthEstimation
< source >( config: DepthProConfiguse_fov_model = None )
المعاملات
- config (DepthProConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
- use_fov_model (
bool, اختياري) — ما إذا كان سيتم استخدام نموذج مجال الرؤية.
نموذج DepthPro مع رأس لتقدير العمق في الأعلى (يتكون من 3 طبقات تلافيفية).
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( pixel_values: Tensorlabels: typing.Optional[torch.LongTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DepthProDepthEstimatorOutput or tuple(torch.Tensor)
المعاملات
- pixel_values (
torch.Tensorمن الشكل(batch_size, num_channels, image_size, image_size)) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسلات باستخدام DepthProImageProcessor. راجع DepthProImageProcessor.call() للتفاصيل (يستخدمprocessor_classDepthProImageProcessor لمعالجة الصور). - labels (
torch.LongTensorمن الشكل(batch_size, height, width)، اختياري) — خرائط تقدير العمق الصحيحة (Ground truth) لحساب الخسارة. - output_attentions (
bool، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجعattentionsضمن tensors المُرجعة لمزيد من التفاصيل. - output_hidden_states (
bool، اختياري) — ما إذا كان يجب إرجاع حالات الطبقات المخفية لجميع الطبقات. راجعhidden_statesضمن الموترات المُرجعة للحصول على مزيد من التفاصيل. - return_dict (
bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.
يعيد
DepthProDepthEstimatorOutput أو tuple(torch.Tensor)
DepthProDepthEstimatorOutput أو مجموعة (tuple) من
torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر
مختلفة اعتماداً على الإعداد (DepthProConfig) والمدخلات.
تتجاوز طريقة DepthProForDepthEstimation الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
loss (
torch.Tensorمن الشكل(1,)، اختياري، يُعاد عند توفيرlabels) — خسارة التصنيف (أو الانحدار إذا كان config.num_labels==1).predicted_depth (
torch.Tensorمن الشكل(batch_size, height, width)، اختياري) — العمق المتوقع لكل بكسل.field_of_view (
torch.Tensorمن الشكل(batch_size,)، اختياري، يُعاد عند تقديمuse_fov_model) — مُقَيِّم مجال الرؤية.hidden_states (
tuple[torch.Tensor, ...]، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) بأبعاد(batch_size, sequence_length, hidden_size).حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
attentions (
tuple[torch.Tensor, ...]، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length).أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
أمثلة:
>>> from transformers import AutoImageProcessor, DepthProForDepthEstimation
>>> import torch
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> checkpoint = "apple/DepthPro-hf"
>>> processor = AutoImageProcessor.from_pretrained(checkpoint)
>>> model = DepthProForDepthEstimation.from_pretrained(checkpoint)
>>> device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
>>> model.to(device)
>>> # prepare image for the model
>>> inputs = processor(images=image, return_tensors="pt").to(device)
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> # interpolate to original size
>>> post_processed_output = processor.post_process_depth_estimation(
... outputs, target_sizes=[(image.height, image.width)],
... )
>>> # get the field of view (fov) predictions
>>> field_of_view = post_processed_output[0]["field_of_view"]
>>> focal_length = post_processed_output[0]["focal_length"]
>>> # visualize the prediction
>>> predicted_depth = post_processed_output[0]["predicted_depth"]
>>> depth = predicted_depth * 255 / predicted_depth.max()
>>> depth = depth.detach().cpu().numpy()
>>> depth = Image.fromarray(depth.astype("uint8"))