اكتشاف الأجسام الصغيرة بتقسيم الصور إلى مربعات في Ultralytics YOLO، من Python إلى Rust
تعرّف على الحالات التي يساعد فيها تقسيم الصور إلى مربعات YOLO على اكتشاف الأجسام الصغيرة، وقارن تكلفته، وشغّل الاستدلال المضمّن على الصور المقسّمة إلى مربعات باستخدام Python أو Rust دون SAHI.
Onuralp Sezer13 دقيقة قراءة
لماذا يفوت كاشف يعمل جيدًا على الصور العادية معظم الأشخاص في لقطة من طائرة مسيّرة؟ غالبًا لأنه لا يراهم بحجمهم الكامل قط. عند القيمة الافتراضية imgsz=640، تصغّر Ultralytics YOLO إطارًا بدقة 1920 x 1080 ثلاث مرات قبل أن ينظر إليه النموذج، فيصبح ارتفاع أحد المشاة البالغ 15 بكسل نحو 5 بكسلات.
يمكن لتقسيم الصورة إلى مربعات الحفاظ على تفاصيل الأجسام الصغيرة هذه، وذلك بتشغيل النموذج على نوافذ متداخلة من الصورة كاملة الدقة ودمج النتائج. في أحد إطارات VisDrone الواردة في وثائقنا، زاد العدد مع Ultralytics YOLO26s من 35 اكتشافًا إلى 161. لكن الثمن هو زيادة العمل لكل إطار: ثمانية مدخلات للمربعات بدلًا من صورة واحدة لذلك الإطار.
أصبح تقسيم الصور إلى مربعات مدمجًا الآن على جانبي النشر. تتضمن حزمة Python وسيط tile منذ Ultralytics 8.4.204 في 6 نوفمبر، وأضافت حزمة Rust علامة --tile في Ultralytics Inference 0.0.57 في 9 نوفمبر. يوضح هذا الدليل متى يستعيد التقسيم إلى مربعات الأجسام الصغيرة، وما تكلفته، وكيفية تشغيله في كل منهما.
التغيير في الحجم هو ما يخفي الأجسام الصغيرة#
يصعب اكتشاف الأجسام الصغيرة لسبب بسيط: لا يملك الجسم إلا وحدات البكسل التي تظهر فيه. يتعلم نموذج اكتشاف الأجسام الأشكال من بضعة بكسلات لكل جسم، وعندما يُصغّر الإطار بأكمله إلى 640 بكسل على أطول أضلاعه، تصبح الأجسام البعيدة، مثل الأشخاص والمركبات والعيوب، أصغر من أن تتمكن الشبكة من تمييزها عن النسيج والضوضاء.
يظهر ذلك بوضوح أكبر في الصور الجوية، وتحليل صور الأقمار الصناعية، وكاميرات المرور والأمن ذات الزاوية الواسعة، وصور الفحص عالية الدقة. تُعد VisDrone معيارًا جويًا عامًا واسع الاستخدام؛ إذ تصف وثائقها أجسامًا لا يتجاوز حجمها غالبًا بضع عشرات من البكسلات في الإطار، ضمن مجموعات كثيفة تحجب فيها الأجسام بعضها بشدة.
يحافظ التقسيم إلى مربعات على وحدات البكسل هذه. عند ضبط tile على حجم إدخال النموذج، يرى النموذج عدة نوافذ بالدقة الأصلية بدلًا من تمريرة واحدة على إطار مصغّر. وهذه هي الفكرة التي تسميها ورقة SAHI الاستدلال الفائق المدعوم بالتقطيع، وقد قيّمها مؤلفوها على مجموعتي البيانات الجويتين VisDrone وxView.
في دليل التقسيم إلى مربعات عالية الدقة، يعيد YOLO26s، عند تطبيقه على إطار VisDrone بدقة 1920 x 1080 وبعتبة الثقة الافتراضية، 35 اكتشافًا للصورة كاملة عند imgsz=640، و161 اكتشافًا مع tile=640، بما فيها المشاة وراكبو الدراجات والسيارات البعيدة. يعرض الدليل الصورتين جنبًا إلى جنب. هذه أعداد تنبؤات وليست تقييمًا محسوب الدرجات. أنتجت الأوزان نفسها العددين؛ كما غيّر التقسيم إلى مربعات السياق الذي تراه كل نافذة.

إطار تحقق ثانٍ من VisDrone بدقة 1920 x 1080؛ YOLO26s عند عتبة الثقة الافتراضية: 8 اكتشافات على الإطار كاملًا عند imgsz=640، و128 عند tile=640. لقطة مقصوصة للطريق، والمربعات بلا تسميات للفئات.
يضيف التقسيم إلى مربعات إدخالًا واحدًا للنموذج لكل نافذة#
يحدد الدليل آلية تقسيم النوافذ بدقة. تتداخل النوافذ بنسبة أساسية قدرها 20%، ويُحاذى الصف والعمود الأخيران مع حدود الصورة، ولذلك قد يكون التداخل أكبر عند النوافذ الطرفية. وإذا كانت الصورة أصغر من النافذة، تُستخدم نافذة واحدة للصورة كاملة.
وهذا يجعل تقدير التكلفة سهلًا. يعالج الإطار ذو الدقة 1920 x 1080 عند tile=640 ثماني نوافذ، أربعًا أفقيًا واثنتين عموديًا. ويعالج إطار بدقة 3840 x 2160 عند tile=1280 ثماني نوافذ أيضًا. أما تطبيق قاعدة التداخل نفسها، البالغة 20%، على إطار بدقة 3840 x 2160 عند tile=640 فينتج ثمانية أعمدة وأربعة صفوف، أي 32 نافذة؛ لذا فإن تقليل حجم النافذة إلى النصف في إطار 4K يضاعف مدخلات المربعات أربع مرات.

النوافذ الثماني التي يستخدمها tile=640 في إطار بدقة 1920 x 1080: تبدأ الأعمدة عند x = 0 و512 و1024 و1280، والصفوف عند y = 0 و440. تظهر النطاقات المظللة في أكثر من نافذة واحدة.
يغيّر التجميع كيفية وصول هذه المدخلات إلى النموذج. في Python، يحدد batch عدد النوافذ التي تمر عبر النموذج معًا في استدعاء استدلال واحد، وتفعل حزمة Rust الشيء نفسه باستخدام --batch مع تصدير الدفعات الديناميكية. قد يحسّن التجميع معدل النقل، لكن قِس زمن الاستجابة على أجهزتك؛ يشرح دليلنا حول الاستدلال بالدفعات باستخدام Ultralytics YOLO السبب.
إليك مقارنة التقسيم إلى مربعات بالطرق الأخرى لمنح الأجسام الصغيرة مزيدًا من وحدات البكسل:
| النهج | مدخلات النموذج لإطار بدقة 1920 x 1080 | ما يراه النموذج | متى يكون الأنسب |
|---|---|---|---|
الصورة كاملة، imgsz=640 | 1 | الإطار مصغّر 3 مرات | تظل الأجسام واضحة بعد تغيير الحجم |
الصورة كاملة، imgsz=1280 | 1، بحوسبة تعادل نحو 4 أضعاف ما يتطلبه حجم 640 | الإطار مصغّر 1.5 مرة | تسمح الذاكرة وزمن الاستجابة باستخدام إدخال أكبر |
tile=True مع imgsz=640 | 8 | نوافذ بحجم 640 بكسل وبدقة الصورة الأصلية | صور أكبر بعدة مرات من حجم إدخال النموذج |
tile=400 مع imgsz=640 | أكثر من 8 | تكبير النوافذ إلى 640 | أجسام لا يتجاوز عرضها بضعة بكسلات حتى بالدقة الأصلية |
كل مربع هو إدخال عادي الحجم للنموذج، لذا يعالج التقسيم إلى مربعات الصور الكبيرة جدًا دون رفع imgsz. ومع ذلك، تظل المخرجات بحجم المصدر، مثل الأقنعة وخرائط العمق، بحاجة إلى ذاكرة تتناسب مع حجم الصورة الأصلية، كما يحد max_det من عدد أقنعة المثيلات التي يتم الاحتفاظ بها.
متى يفيد التقسيم إلى مربعات ومتى يضر#
يفيد التقسيم إلى مربعات عندما تكون الأجسام صغيرة مقارنة بالإطار، ويكون الإطار أكبر بكثير من حجم إدخال النموذج. ويناسب ذلك الصور الملتقطة بالطائرات المسيّرة والأقمار الصناعية، والمرور من الأعلى، والحشود، ورفوف البيع بالتجزئة المصوّرة بزاوية واسعة، وصور الفحص البصري للوحات أو الألواح كاملة.
ويضر عندما تكون الأجسام كبيرة. فالنافذة لا ترى سوى جزء من شاحنة تملأ نصف الإطار، والدليل واضح في هذا الشأن: قد تُقسّم الأجسام الأكبر من نطاق التداخل، إذ لا ترى أي نافذة الجسم كاملًا، كما أن الدمج لا يصل الأجزاء المنفصلة بعضها ببعض. كذلك، يزيل التقسيم السياق العام، وهو أمر مهم خصوصًا للتصنيف والعمق، حيث قد لا تتفق مخرجات المربعات على امتداد الصورة.
تأتي النوافذ الأصغر بمفاضلة إضافية. إن تكبير نافذة بحجم 400 بكسل إلى 640 يساعد مع الأجسام التي لا يتجاوز عرضها بضعة بكسلات، لكنه يكبّر أيضًا الفوضى في الخلفية، ما قد يؤدي إلى نتائج إيجابية كاذبة. قارن حجمين أو ثلاثة أحجام للمربعات على مجموعة التحقق الخاصة بك، وراقب الدقة وكذلك الاستدعاء.
كيفية دمج المربعات مجددًا في نتيجة واحدة#
تنتج كل نافذة تنبؤاتها الخاصة بإحداثيات النافذة. يعيد تقسيم المربعات إسقاطها على إحداثيات الصورة المصدر، ويُرجع كائن Results واحدًا لكل صورة أصلية، لذا يعمل أي كود لاحق يقرأ result.boxes دون تغيير.
قد يُكتشف الجسم القريب من حد فاصل مرتين بسبب التداخل. في الاكتشاف، تُحذف التكرارات باستخدام الكبت غير الأقصى مع إعدادات iou وagnostic_nms وmax_det، لذا ينطبق مباشرةً دليلنا حول ضبط عتبة IoU في NMS على المخرجات المقسّمة إلى مربعات. يُسقط المربع الذي يقطعه حد النافذة عندما ترى نافذة أخرى الجسم بعيدًا عن حدودها ويغطيه مربع محتفَظ به، وبذلك يحتفظ الحد الفاصل بالتنبؤ الأكثر اكتمالًا. أما المربع المقطوع الذي لا يطابقه مربع أفضل، فيُحتفَظ به.

رسم توضيحي لمعالجة الحد الفاصل عند y = 640 في الإطار نفسه. تقطع المربعات السماوية الحافة السفلية لنوافذ الصف العلوي، وتأتي المربعات الأرجوانية من نوافذ الصف السفلي، وتُظهر اللوحة اليمنى المربع الأكثر اكتمالًا المحتفَظ به لكل سيارة بعد الدمج.
تدمج كل مهمة من مهام Ultralytics YOLO النتائج بطريقتها الخاصة:
- الاكتشاف والتجزئة والوضعية وOBB تعيد المربعات أو الأقنعة أو النقاط المفتاحية أو المربعات المدارة إلى إحداثيات المصدر، وتطبّق اختيار المربعات، مع استخدام NMS المدارة لـ OBB.
- التجزئة الدلالية تصل خرائط الفئات، وتختار المربع الأكثر تمركزًا عند تداخل النوافذ.
- العمق يدمج خرائط العمق المتداخلة بأوزان تزداد كلما اقتربت من مركز كل مربع.
- التصنيف يحسب متوسط احتمالات المربعات.
تدعم عملية التنبؤ في Python أيضًا تقسيم تنبؤات YOLO-World وYOLOE وRT-DETR وFastSAM إلى مربعات. أما SAM فيستخدم مسار القص الخاص به، ولا يقبل tile.
الاستدلال على الصور المقسّمة إلى مربعات في Python باستخدام وسيط tile#
يتطلب التقسيم إلى مربعات Ultralytics 8.4.204 أو إصدارًا أحدث، ولا يحتاج إلى أي حزمة إضافية. في وضع التنبؤ، مرّر tile=True لاستخدام imgsz بوصفه حجم النافذة، أو مرّر عددًا صحيحًا لتعيين حجم النافذة بشكل منفصل:
from ultralytics import YOLO
model = YOLO("yolo26s.pt")
# خط أساس: تمريرة واحدة على الإطار بعد تصغيره إلى 640 بكسل
full = model.predict("intersection.jpg", imgsz=640)
# مقسّم إلى مربعات: نوافذ بحجم 640 بكسل بالدقة الأصلية، و8 نوافذ لكل دفعة
tiled = model.predict("intersection.jpg", imgsz=640, tile=640, batch=8)
print(len(full[0].boxes), len(tiled[0].boxes))يعمل الوسيط نفسه من CLI باستخدام yolo predict model=yolo26s.pt source=large-image.tif tile=640 imgsz=640 batch=8. للفيديو، مرّر stream=True للحد من استهلاك الذاكرة. في وضع التتبع، يعمل المتعقّب مرة واحدة لكل إطار على التنبؤات المدمجة.
لا يقتصر التقسيم إلى مربعات على التنبؤ. عندما تكون الصور أكبر بكثير من imgsz، درّب النموذج وتحقق منه بالإعداد نفسه:
- درّب على المربعات باستخدام
model.train(data="aerial.yaml", tile=True, imgsz=640). تُقصّ التسميات لتناسب كل نافذة، وتُزال المثيلات التي يتبقى أقل من 10% من مساحة مربعها الأصلية، وتظل النوافذ الفارغة ضمن البيانات بوصفها أمثلة سلبية. - تحقّق من النتائج المدمجة باستخدام
model.val(data="aerial.yaml", tile=True, imgsz=640). تُدمج التنبؤات قبل تقييمها مقارنةً بالتعليقات التوضيحية الأصلية، لذا يعكس mAP ما ستنشره فعليًا. - خزّن المصادر الكبيرة مؤقتًا باستخدام
cache="ram"، لأن التدريب يخلط ترتيب المربعات، ومن دون ذلك سيُفك ترميز الصورة الكبيرة نفسها مرات عديدة. - قارن بخط أساس للصورة كاملة على قسم التحقق نفسه قبل اعتماد النموذج المقسّم إلى مربعات. ولمزيد من الطرق لتحسين النتائج على الأجسام الصغيرة جدًا، راجع قائمة التحقق من mAP للأجسام الصغيرة.
يُظهر التدريب على المربعات للنموذج الأجسام بالمقياس الذي سيراه أثناء التنبؤ المقسّم إلى مربعات. يشرح دليل مجموعة بيانات اكتشاف الأجسام بالطائرات المسيّرة دورة التدريب والتقسيم والتقييم كاملةً على إطارات 4K.
تُقسّم النماذج المصدّرة إلى مربعات أيضًا. يُنفّذ التقسيم ضمن مسار التنبؤ في Python، لذا يحتفظ النموذج المصدّر إلى ONNX أو TensorRT برسم الإدخال المعتاد، ويعمل YOLO("yolo26s.onnx").predict(source, tile=640) كالمعتاد، بما في ذلك أحجام دفعات التصدير الثابتة والدفعة الجزئية الأخيرة.

مجموعة بيانات VisDrone في Ultralytics Platform، وهي معيار جاهز لاختبار أحجام المربعات قبل وسم بياناتك الخاصة.
لتجربة أحجام المربعات على بيانات عامة أولًا، ابدأ من مجموعة بيانات VisDrone على Ultralytics Platform. لتتبع تشغيل مقسّم إلى مربعات إلى جانب خط الأساس، انسخ أمر التدريب المحلي من نافذة التدريب في Platform، واضبط project على مشروع Platform لخط الأساس، وأضف tile=True لإرسال مقاييس التشغيل المقسّم إلى مربعات إليه.
الاستدلال على الصور المقسّمة إلى مربعات في Rust باستخدام العلامة الجديدة --tile#
Ultralytics Inference هي حزمة Rust وCLI الخاصة بنا لتشغيل نماذج ONNX المصدّرة عبر ONNX Runtime، ونماذج OpenVINO IR مباشرةً، من دون بيئة تشغيل Python وقت الاستدلال. وهي تستهدف الخوادم والحاويات والأجهزة الطرفية التي تستخدم CPU أو CUDA أو TensorRT أو CoreML أو OpenVINO أو غيرها من موفّرات التنفيذ. يجلب الإصدار 0.0.57 أسلوب التقسيم نفسه المستخدم في Python: تداخل أساسي للنوافذ بنسبة 20%، وإعادة النتائج إلى إحداثيات الصورة المصدر، وإزالة التكرارات لكل فئة.

للتوضيح. كاميرا على جانب الطريق مع حاسوب طرفي، وهو نوع النشر المستهدف لحزمة Rust دون Python.
تحقق الفريق من المخرجات المقسّمة إلى مربعات بمقارنتها مع Ultralytics Python على ONNX Runtime باستخدام CPU، وOpenVINO باستخدام CPU، ووحدة GPU وNPU، وCUDA وTensorRT، للصور والفيديو وكاميرا الويب. وجميع نماذج الاكتشاف والتجزئة والتجزئة الدلالية والعمق والتصنيف والوضعية وOBB مدعومة.
من CLI، أضف --tile مع تحديد حجم النافذة، أو مرّره دون قيمة لاستخدام --imgsz. تصدير النموذج خطوة تُنفّذ مرة واحدة باستخدام Python؛ أما الاستدلال نفسه فلا يحتاج إلا إلى الملف التنفيذي لـ Rust:
# One-time export in Python: a dynamic-batch ONNX model so several windows run per call
pip install -U "ultralytics[export-base]>=8.4.204"
yolo export model=yolo26s.pt format=onnx dynamic=True
# Install the Rust CLI
cargo install ultralytics-inference
# Tiled inference on a large image: 640-pixel windows, 8 per batch
ultralytics-inference predict --model yolo26s.onnx --source aerial.jpg --tile 640 --batch 8بوصفها مكتبة، اضبط التقسيم إلى مربعات مرة واحدة في InferenceConfig، وستُقسّم كل استدعاءات predict إلى مربعات. يستخدم with_tile(0) حجم الاستدلال:
use ultralytics_inference::{InferenceConfig, YOLOModel};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = InferenceConfig::new().with_tile(640);
let mut model = YOLOModel::load_with_config("yolo26s.onnx", config)?;
let results = model.predict("aerial.jpg")?;
if let Some(ref boxes) = results[0].boxes {
println!("{} detections", boxes.len());
}
Ok(())
}تُزال المربعات المكررة بين النوافذ باستخدام NMS لكل فئة عند قيمة --iou المضبوطة، والتي يبلغ إعدادها الافتراضي 0.5 منذ الإصدار نفسه، بما يتوافق مع الإعدادات الافتراضية للتنبؤ في Ultralytics. يظل التقسيم إلى مربعات معطّلًا افتراضيًا، لأن كل نافذة تمثل إدخالًا إضافيًا للنموذج. فعّله عندما تكون التفاصيل مهمة، وقِس زمن استدلال الجهاز المستهدف، واختر موفّر التنفيذ المناسب له؛ تساعدك مقارنة ONNX وTensorRT على أجهزة NVIDIA، ويشرح دليل NVIDIA Jetson الإعداد على الجهاز.
يمكن لمستخدمي SAHI الانتقال إلى وسيط تقسيم الصور المضمّن#
إذا كنت تقسّم الصور بالفعل باستخدام مكتبة SAHI، فإن الوسيط المضمّن يؤدي المهمة نفسها داخل Ultralytics، من دون حزمة إضافية أو تنسيق منفصل للنتائج. أصبح دليل تكامل SAHI مهملًا الآن لصالح tile.
لا يتطلب نقل سكربت SAHI سوى تغيير الوسائط في معظمه:
| SAHI | التقسيم المضمّن إلى مربعات |
|---|---|
AutoDetectionModel.from_pretrained(model_type="ultralytics", ...) | YOLO("yolo26s.pt") |
get_sliced_prediction(image, model, slice_height=256, slice_width=256, ...) | model.predict(image, tile=256) |
overlap_height_ratio, overlap_width_ratio | تداخل أساسي ثابت بنسبة 20%، مع محاذاة النوافذ الطرفية إلى حدود الصورة |
PredictionResult في SAHI | Results القياسي في Ultralytics |
النوافذ مربعة، ويتبع التداخل والدمج القواعد الموضحة أعلاه بدلًا من المعالجة اللاحقة القابلة للضبط في SAHI، لذا توقّع مربعات متشابهة لا متطابقة. أعد التحقق من العتبات باستخدام مجموعة تحقق بعد الانتقال.
الفرق العملي هو التكامل. يتكامل tile مع التدريب والتحقق والتنبؤ والتتبع في Ultralytics باستخدام الوسيط نفسه، ويُرجع كائنات Results القياسية، ويتوفر له خيار مماثل في حزمة Rust؛ لذا يمكن نقل حجم المربع الذي تحققت من صلاحيته في دفتر ملاحظات إلى ملف Rust تنفيذي على الجهاز الطرفي.
من ينبغي له تفعيل التقسيم إلى مربعات؟#
فعّل التقسيم إلى مربعات إذا كنت تشغّل Ultralytics YOLO على صور أكبر بعدة مرات من حجم إدخال النموذج، وأظهرت نتائج التحقق لديك تفويت أجسام صغيرة: مثل فرق الطائرات المسيّرة والأقمار الصناعية، ومتكاملي أنظمة المرور والأمن الذين يستخدمون كاميرات واسعة الزاوية، وفرق الفحص التي تصوّر لوحات أو ألواحًا أو رفوفًا كاملة. ويحصل مستخدمو Rust على أسلوب التقسيم نفسه للأجهزة الطرفية من دون بيئة تشغيل Python.
اتركه معطّلًا عندما تكون الأجسام كبيرة مقارنةً بالإطار، أو عندما يستعيدها حجم أكبر لـimgsz في تمريرة واحدة، أو عندما لا تسمح ميزانية زمن الاستجابة بإضافة عدة مدخلات للمربعات في كل إطار. في جميع الحالات، قارن نتائج التقسيم إلى مربعات بنتائج الصورة كاملة على قسم التحقق نفسه وعند عتبة الثقة نفسها، مع فحص الاستدعاء والنتائج الإيجابية الكاذبة وزمن الاستجابة، ولا تُبقِ التقسيم مفعّلًا إلا عندما تستحق مكاسبه العمل الإضافي.
تتيح Ultralytics Platform إجراء هذه المقارنة في مكان واحد: ضع تسميات لصورك عالية الدقة أو ابدأ من VisDrone، ودرّب خط أساس للصورة كاملة على وحدات GPU سحابية، ودرّب خط أساس آخر باستخدام قيمة أكبر لـimgsz، وسجّل تشغيلًا مقسّمًا إلى مربعات من جهازك في المشروع نفسه. يوضّح دليل التقسيم إلى مربعات عالية الدقة خيارات التقسيم، وتغطي وثائق Ultralytics Inference النشر باستخدام Rust.
تتوفر كل من حزمة Python وحزمة Rust بموجب AGPL-3.0. إذا كان الاكتشاف المقسّم إلى مربعات سيُستخدم في منتج مغلق المصدر أو جهاز طرفي تشحنه إلى العملاء، فإن ترخيص Ultralytics Enterprise يتيح الاستخدام التجاري لبرامج Ultralytics المشمولة دون متطلبات الإفصاح عن المصدر بموجب AGPL-3.0، وفقًا لشروطه.
الأسئلة الشائعة
يقسّم تقسيم الصور إلى مربعات الصورة الكبيرة إلى نوافذ متداخلة، ويشغّل الكاشف على كل نافذة، ثم يدمج المربعات مجددًا على الصورة الأصلية. عندما يتطابق حجم النافذة مع حجم إدخال النموذج، تحتفظ الأجسام الصغيرة بوحدات بكسل كانت ستفقدها لو أُعيد تغيير حجم الصورة كاملة. وفي Ultralytics YOLO، ينفّذ وسيط
tileذلك بتداخل أساسي قدره 20%، ويُرجع نتيجة واحدة لكل صورة.تحقق أولًا مما إذا كان تغيير الحجم هو المشكلة: إذا تقلّصت الأجسام إلى بضعة بكسلات عند
imgsz=640، فاختبر قيمة أكبر لـimgszأوtile=True. درّب بالإعداد نفسه الذي ستستخدمه للتنبؤ، كي يتعلم النموذج الأجسام بمقياسها عند النشر، وتحقق من الأداء بحسب الحجم والفئة. يناسب التقسيم إلى مربعات الصور الأكبر بعدة مرات من حجم إدخال النموذج.فهو يضيف إدخالًا واحدًا للنموذج لكل نافذة: إذ ينتج عن إطار بدقة 1920 x 1080 عند
tile=640ثمانية مدخلات للمربعات بدلًا من صورة واحدة. ويمكن أن يؤدي تشغيل عدة مربعات في استدعاء مجمّع واحد، باستخدامbatchفي Python أو--batchمع تصدير الدفعات الديناميكية في Rust، إلى تحسين معدل النقل. قِس زمن الاستجابة على الأجهزة المستهدفة.لا. فمنذ Ultralytics 8.4.204، يتولى الوسيط المضمّن
tileالاستدلال بالتقطيع دون حزمة إضافية، كما يتيح تقسيم التدريب والتحقق والتتبع إلى مربعات. أصبح دليل SAHI في وثائقنا مهملًا لصالحtile.نعم. في Python، تحتفظ النماذج المصدّرة برسم الإدخال المعتاد، وتمرّر
tileإلىpredictكالمعتاد. وفي Rust، يضيف Ultralytics Inference 0.0.57 الخيار--tileإلى CLI وwith_tileإلىInferenceConfig، وقد جرى التحقق منه بمقارنته مع Python على ONNX Runtime باستخدام CPU وOpenVINO وCUDA وTensorRT.ابدأ بـ
tile=True، الذي يستخدمimgszحجمًا للنافذة. استخدم نافذة أصغر، مثلtile=400معimgsz=640، عندما لا يتجاوز عرض الأجسام بضعة بكسلات حتى بالدقة الأصلية، واستخدم نافذة أكبر عندما تكون الأجسام معرضة للاقتطاع عند الفواصل. قارن بين بضعة أحجام على مجموعة التحقق، مع مراقبة كلٍّ من الاستدعاء والإيجابيات الكاذبة.
بقلم
التعليقات
اطرح سؤالًا، أو شارك نتائجك، أو ساعد شخصًا آخر.










