دليل تفصيلي لتدريب نماذج YOLO11 باستخدام IBM Watsonx
في الوقت الحاضر، أصبحت حلول رؤية الكمبيوتر القابلة للتطوير أكثر شيوعًا وتحول الطريقة التي نتعامل بها مع البيانات المرئية. مثال رائع على ذلك هو IBM Watsonx، وهي منصة متقدمة للذكاء الاصطناعي والبيانات تعمل على تبسيط تطوير ونشر وإدارة نماذج الذكاء الاصطناعي. إنه يوفر مجموعة كاملة لدورة حياة الذكاء الاصطناعي بأكملها والتكامل السلس مع خدمات IBM Cloud.
يمكنك تدريب نماذج Ultralytics YOLO11 باستخدام IBM Watsonx. إنه خيار جيد للمؤسسات المهتمة بتدريب النماذج بكفاءة، والضبط الدقيق لمهام محددة، وتحسين أداء النموذج باستخدام أدوات قوية وإعداد سهل الاستخدام. في هذا الدليل، سنرشدك خلال عملية تدريب YOLO11 باستخدام IBM Watsonx، وتغطية كل شيء بدءًا من إعداد بيئتك وحتى تقييم النماذج المدربة. هيا بنا نبدأ!
ما هو IBM Watsonx؟
Watsonx هو نظام IBM الأساسي المستند إلى السحابة والمصمم للاستخدام التجاري الذكاء الاصطناعي التوليدي والبيانات العلمية. مكونات IBM Watsonx الثلاثة - watsonx.ai
, watsonx.data
، و watsonx.governance
- تجتمع معًا لإنشاء منصة ذكاء اصطناعي شاملة وموثوقة يمكنها تسريع مشاريع الذكاء الاصطناعي التي تهدف إلى حل مشكلات الأعمال. توفر أدوات قوية لبناء وتدريب و نشر نماذج تعلم الآلة ويسهل الاتصال بمصادر البيانات المختلفة.
تعمل واجهته سهلة الاستخدام وقدراته التعاونية على تبسيط عملية التطوير والمساعدة في الإدارة الفعالة للنماذج ونشرها. سواء كان ذلك للرؤية الحاسوبية أو التحليلات التنبؤية أو معالجة اللغة الطبيعية أو تطبيقات الذكاء الاصطناعي الأخرى، يوفر IBM Watsonx الأدوات والدعم اللازمين لدفع الابتكار.
الميزات الرئيسية لـ IBM Watsonx
يتكون IBM Watsonx من ثلاثة مكونات رئيسية: watsonx.ai
, watsonx.data
، و watsonx.governance
. يقدم كل مكون ميزات تلبي جوانب مختلفة من الذكاء الاصطناعي وإدارة البيانات. دعونا نلقي نظرة فاحصة عليها.
Watsonx.ai
يوفر Watsonx.ai أدوات قوية لتطوير الذكاء الاصطناعي ويتيح الوصول إلى نماذج مخصصة مدعومة من IBM ونماذج الطرف الثالث مثل Llama 3 ونماذج Granite الخاصة بـ IBM. يتضمن Prompt Lab لتجربة مطالبات الذكاء الاصطناعي، و Tuning Studio لتحسين أداء النموذج باستخدام البيانات المصنفة، و Flows Engine لتبسيط تطوير تطبيقات الذكاء الاصطناعي التوليدية. كما يوفر أدوات شاملة لأتمتة دورة حياة نموذج الذكاء الاصطناعي والاتصال بواجهات برمجة التطبيقات والمكتبات المختلفة.
Watsonx.data
يدعم Watsonx.data عمليات النشر السحابية والمحلية من خلال تكامل IBM Storage Fusion HCI. توفر وحدة التحكم سهلة الاستخدام وصولاً مركزياً إلى البيانات عبر البيئات وتجعل استكشاف البيانات سهلاً باستخدام SQL الشائع. إنه يحسن أحمال العمل باستخدام محركات استعلام فعالة مثل Presto و Spark، ويسرع رؤى البيانات باستخدام طبقة دلالية مدعومة بالذكاء الاصطناعي، ويتضمن قاعدة بيانات متجهات لأهمية الذكاء الاصطناعي، ويدعم تنسيقات البيانات المفتوحة لسهولة مشاركة تحليلات وبيانات الذكاء الاصطناعي.
Watsonx.governance
يجعل Watsonx.governance الامتثال أسهل من خلال التحديد التلقائي للتغييرات التنظيمية وإنفاذ السياسات. يربط المتطلبات ببيانات المخاطر الداخلية ويوفر صحائف حقائق محدثة للذكاء الاصطناعي. تساعد المنصة في إدارة المخاطر من خلال التنبيهات والأدوات للكشف عن المشكلات مثل التحيز والانحراف. كما أنه يقوم بأتمتة مراقبة وتوثيق دورة حياة الذكاء الاصطناعي، وتنظيم تطوير الذكاء الاصطناعي باستخدام مخزون النماذج، وتعزيز التعاون باستخدام لوحات المعلومات وأدوات إعداد التقارير سهلة الاستخدام.
كيفية تدريب YOLO11 باستخدام IBM Watsonx
يمكنك استخدام IBM Watsonx لتسريع سير عمل تدريب نموذج YOLO11 الخاص بك.
المتطلبات الأساسية
أنت بحاجة إلى حساب IBM Cloud لإنشاء مشروع watsonx.ai، وستحتاج أيضًا إلى حساب Kaggle لتحميل مجموعة البيانات.
الخطوة 1: إعداد البيئة الخاصة بك
أولاً، ستحتاج إلى إعداد حساب IBM لاستخدام Jupyter Notebook. قم بتسجيل الدخول إلى watsonx.ai باستخدام حساب IBM Cloud الخاص بك.
بعد ذلك، قم بإنشاء مشروع watsonx.ai، و Jupyter Notebook.
بمجرد القيام بذلك، ستفتح بيئة دفتر ملاحظات لتحميل مجموعة البيانات الخاصة بك. يمكنك استخدام التعليمات البرمجية من هذا البرنامج التعليمي لمعالجة مهمة تدريب نموذج بسيط للكشف عن الكائنات.
الخطوة الثانية: تثبيت واستيراد المكتبات ذات الصلة
بعد ذلك، يمكنك تثبيت واستيراد مكتبات python الضرورية.
التثبيت
# Install the required packages
pip install torch torchvision torchaudio
pip install opencv-contrib-python-headless
pip install ultralytics==8.0.196
للحصول على إرشادات مفصلة وأفضل الممارسات المتعلقة بعملية التثبيت، راجع دليل تثبيت Ultralytics. أثناء تثبيت الحزم المطلوبة لـ YOLO11، إذا واجهت أي صعوبات، فراجع دليل المشكلات الشائعة للحصول على الحلول والنصائح.
بعد ذلك، يمكنك استيراد الحزم المطلوبة.
استيراد المكتبات ذات الصلة
# Import ultralytics
import ultralytics
ultralytics.checks()
# Import packages to retrieve and display image files
الخطوة الثالثة: تحميل البيانات
في هذا البرنامج التعليمي، سنستخدم مجموعة بيانات القمامة البحرية المتوفرة على Kaggle. باستخدام مجموعة البيانات هذه، سندرب نموذج YOLO11 مخصصًا للكشف عن القمامة والكائنات البيولوجية وتصنيفها في الصور تحت الماء.
يمكننا تحميل مجموعة البيانات مباشرة في دفتر الملاحظات باستخدام Kaggle API. أولاً، قم بإنشاء حساب Kaggle مجاني. بمجرد إنشاء حساب، ستحتاج إلى إنشاء مفتاح API. يمكن العثور على إرشادات إنشاء المفتاح الخاص بك في وثائق Kaggle API تحت قسم "بيانات اعتماد API".
انسخ والصق اسم مستخدم Kaggle ومفتاح API الخاص بك في الكود التالي. ثم قم بتشغيل الكود لتثبيت API وتحميل مجموعة البيانات في Watsonx.
التثبيت
# Install kaggle
pip install kaggle
بعد تثبيت Kaggle، يمكننا تحميل مجموعة البيانات إلى Watsonx.
تحميل البيانات
# Replace "username" string with your username
os.environ["KAGGLE_USERNAME"] = "username"
# Replace "apiKey" string with your key
os.environ["KAGGLE_KEY"] = "apiKey"
# Load dataset
os.system("kaggle datasets download atiqishrak/trash-dataset-icra19 --unzip")
# Store working directory path as work_dir
work_dir = os.getcwd()
# Print work_dir path
print(os.getcwd())
# Print work_dir contents
print(os.listdir(f"{work_dir}"))
# Print trash_ICRA19 subdirectory contents
print(os.listdir(f"{work_dir}/trash_ICRA19"))
بعد تحميل مجموعة البيانات، قمنا بطباعة وحفظ دليل العمل الخاص بنا. لقد قمنا أيضًا بطباعة محتويات دليل العمل الخاص بنا لتأكيد تحميل مجموعة بيانات "trash_ICRA19" بشكل صحيح.
إذا رأيت "trash_ICRA19" ضمن محتويات الدليل، فهذا يعني أنه تم تحميله بنجاح. يجب أن ترى ثلاثة ملفات/مجلدات: a config.yaml
ملف، وهو videos_for_testing
الدليل، و dataset
الدليل. سنتجاهل videos_for_testing
الدليل، لذا لا تتردد في حذفه.
سوف نستخدم config.yaml
ومحتويات دليل مجموعة البيانات لتدريب اكتشاف الكائنات نموذج. إليك نموذج صورة من مجموعة بيانات المخلفات البحرية الخاصة بنا.
الخطوة الرابعة: المعالجة المسبقة للبيانات
لحسن الحظ، جميع التصنيفات في مجموعة بيانات المخلفات البحرية مُنسَّقة بالفعل كملفات YOLO .txt. ومع ذلك، نحتاج إلى إعادة ترتيب بنية دليل الصور والتصنيفات لمساعدة نموذجنا في معالجة الصور والتصنيفات. حاليًا، يتبع دليل مجموعة البيانات المحمّلة لدينا هذا الهيكل:
ولكن، تتطلب نماذج YOLO افتراضيًا صورًا وتسميات منفصلة في الدلائل الفرعية داخل تقسيم التدريب/التحقق/الاختبار. نحتاج إلى إعادة تنظيم الدليل إلى الهيكل التالي:
لإعادة تنظيم دليل مجموعة البيانات، يمكننا تشغيل البرنامج النصي التالي:
المعالجة المسبقة للبيانات
# Function to reorganize dir
def organize_files(directory):
for subdir in ["train", "test", "val"]:
subdir_path = os.path.join(directory, subdir)
if not os.path.exists(subdir_path):
continue
images_dir = os.path.join(subdir_path, "images")
labels_dir = os.path.join(subdir_path, "labels")
# Create image and label subdirs if non-existent
os.makedirs(images_dir, exist_ok=True)
os.makedirs(labels_dir, exist_ok=True)
# Move images and labels to respective subdirs
for filename in os.listdir(subdir_path):
if filename.endswith(".txt"):
shutil.move(os.path.join(subdir_path, filename), os.path.join(labels_dir, filename))
elif filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".jpeg"):
shutil.move(os.path.join(subdir_path, filename), os.path.join(images_dir, filename))
# Delete .xml files
elif filename.endswith(".xml"):
os.remove(os.path.join(subdir_path, filename))
if __name__ == "__main__":
directory = f"{work_dir}/trash_ICRA19/dataset"
organize_files(directory)
بعد ذلك، نحتاج إلى تعديل ملف .yaml الخاص بمجموعة البيانات. هذا هو الإعداد الذي سنستخدمه في ملف .yaml الخاص بنا. تبدأ أرقام معرف الفئة من 0:
path: /path/to/dataset/directory # root directory for dataset
train: train/images # train images subdirectory
val: train/images # validation images subdirectory
test: test/images # test images subdirectory
# Classes
names:
0: plastic
1: bio
2: rov
شغّل البرنامج النصي التالي لحذف المحتويات الحالية لـ config.yaml
واستبداله بالمحتويات أعلاه التي تعكس بنية دليل مجموعة البيانات الجديد الخاص بنا. تأكد من استبدال جزء work_dir من مسار الدليل الجذر في السطر 4 بمسار دليل العمل الخاص بك الذي استرجعناه سابقًا. اترك تعريفات الدليل الفرعي للتدريب والتحقق والاختبار. أيضًا، لا تغير {work_dir} في السطر 23 من التعليمات البرمجية.
تعديل ملف .yaml
# Contents of new config.yaml file
def update_yaml_file(file_path):
data = {
"path": "work_dir/trash_ICRA19/dataset",
"train": "train/images",
"val": "train/images",
"test": "test/images",
"names": {0: "plastic", 1: "bio", 2: "rov"},
}
# Ensures the "names" list appears after the sub/directories
names_data = data.pop("names")
with open(file_path, "w") as yaml_file:
yaml.dump(data, yaml_file)
yaml_file.write("\n")
yaml.dump({"names": names_data}, yaml_file)
if __name__ == "__main__":
file_path = f"{work_dir}/trash_ICRA19/config.yaml" # .yaml file path
update_yaml_file(file_path)
print(f"{file_path} updated successfully.")
الخطوة 5: تدريب نموذج YOLO11
شغّل كود سطر الأوامر التالي لضبط نموذج YOLO11 افتراضي مُدرَّب مسبقًا.
تدريب نموذج YOLO11
!yolo task=detect mode=train data={work_dir}/trash_ICRA19/config.yaml model=yolo11n.pt epochs=2 batch=32 lr0=.04 plots=True
إليك نظرة فاحصة على المعلمات في أمر تدريب النموذج:
- مهمة: تحدد مهمة الرؤية الحاسوبية التي تستخدم من أجلها نموذج YOLO المحدد ومجموعة البيانات.
- الوضع (mode): يشير إلى الغرض الذي تقوم بتحميل النموذج والبيانات المحددة من أجله. نظرًا لأننا نقوم بتدريب نموذج، فقد تم تعيينه على "تدريب". لاحقًا، عندما نختبر أداء نموذجنا، سنقوم بتعيينه على "توقع".
- epochs: هذا يحدد عدد المرات التي ستمر فيها YOLO11 عبر مجموعة البيانات بأكملها.
- batch: تحدد القيمة العددية أحجام الدُفعات التدريبية. الدُفعات هي عدد الصور التي يعالجها النموذج قبل تحديث معلماته.
- lr0: يحدد معدل التعلم الأولي للنموذج.
- المخططات: يوجه YOLO لإنشاء وحفظ مخططات لتدريب وتقييم مقاييس النموذج الخاص بنا.
للحصول على فهم مفصل لعملية تدريب النموذج وأفضل الممارسات، ارجع إلى دليل تدريب نموذج YOLO11. سيساعدك هذا الدليل على تحقيق أقصى استفادة من تجاربك والتأكد من أنك تستخدم YOLO11 بفعالية.
الخطوة 6: اختبار النموذج
يمكننا الآن تشغيل الاستدلال لاختبار أداء النموذج المضبوط بدقة:
اختبار نموذج YOLO11
!yolo task=detect mode=predict source={work_dir}/trash_ICRA19/dataset/test/images model={work_dir}/runs/detect/train/weights/best.pt conf=0.5 iou=.5 save=True save_txt=True
يقوم هذا البرنامج النصي الموجز بإنشاء تسميات متوقعة لكل صورة في مجموعة الاختبار الخاصة بنا، بالإضافة إلى ملفات صور الإخراج الجديدة التي تتراكب المربع المحيط المتوقع أعلى الصورة الأصلية.
يتم حفظ ملصقات .txt المتوقعة لكل صورة عبر save_txt=True
الوسيطة ويتم إنشاء صور الإخراج مع تراكبات المربع المحيط من خلال save=True
وسيطة.
المعلمة conf=0.5
يُعلم النموذج بتجاهل جميع التنبؤات بمستوى ثقة أقل من 50٪.
أخيرًا، iou=.5
يوجه النموذج لتجاهل الصناديق في نفس الفئة التي تتداخل بنسبة 50٪ أو أكثر. يساعد على تقليل الصناديق المكررة المحتملة التي يتم إنشاؤها لنفس الكائن.
يمكننا تحميل الصور مع تراكبات المربعات المحيطة المتوقعة لعرض أداء النموذج الخاص بنا على عدد قليل من الصور.
عرض التوقعات
# Show the first ten images from the preceding prediction task
for pred_dir in glob.glob(f"{work_dir}/runs/detect/predict/*.jpg")[:10]:
img = Image.open(pred_dir)
display(img)
يعرض الكود أعلاه عشر صور من مجموعة الاختبار مع مربعات الإحاطة المتوقعة الخاصة بها، مصحوبة بتسميات أسماء الفئات ومستويات الثقة.
الخطوة 7: تقييم النموذج
يمكننا إنتاج تصورات لـ الدقة والاسترجاع للنموذج لكل فئة. يتم حفظ هذه التصورات في الدليل الرئيسي، ضمن مجلد التدريب. يتم عرض درجة الدقة في P_curve.png:
يوضح الرسم البياني زيادة أسية في الدقة مع زيادة مستوى ثقة النموذج في التنبؤات. ومع ذلك، لم تستقر دقة النموذج بعد عند مستوى ثقة معين بعد حقبتين.
يعرض الرسم البياني للاسترجاع (R_curve.png) اتجاهًا عكسيًا:
على عكس الإحكام، يتحرك الاسترجاع في الاتجاه المعاكس، حيث يُظهر استرجاعًا أكبر مع حالات الثقة الأقل واسترجاعًا أقل مع حالات الثقة الأعلى. هذا مثال مناسب على المفاضلة في الإحكام والاسترجاع لنماذج التصنيف.
الخطوة 8: حساب تقاطع الاتحاد
يمكنك قياس دقة التوقع عن طريق حساب IoU بين مربع إحاطة متوقع ومربع إحاطة مطابق للحقيقة لنفس الجسم. تحقق من دليل IBM التدريبي حول تدريب YOLO11 لمزيد من التفاصيل.
ملخص
لقد استكشفنا الميزات الرئيسية لـ IBM Watsonx، وكيفية تدريب نموذج YOLO11 باستخدام IBM Watsonx. رأينا أيضًا كيف يمكن لـ IBM Watsonx تحسين سير عمل الذكاء الاصطناعي الخاص بك باستخدام أدوات متقدمة لبناء النماذج وإدارة البيانات والامتثال.
لمزيد من التفاصيل حول الاستخدام، تفضل بزيارة وثائق IBM Watsonx الرسمية.
أيضًا، تأكد من الاطلاع على صفحة دليل تكامل Ultralytics، لمعرفة المزيد حول عمليات التكامل المثيرة المختلفة.
الأسئلة الشائعة
كيف يمكنني تدريب نموذج YOLO11 باستخدام IBM Watsonx؟
لتدريب نموذج YOLO11 باستخدام IBM Watsonx، اتبع الخطوات التالية:
- إعداد بيئتك: أنشئ حساب IBM Cloud وقم بإعداد مشروع Watsonx.ai. استخدم Jupyter Notebook لبيئة البرمجة الخاصة بك.
- تثبيت المكتبات: تثبيت المكتبات الضرورية مثل
torch
,opencv
، وultralytics
. - تحميل البيانات (Load Data): استخدم Kaggle API لتحميل مجموعة البيانات الخاصة بك إلى Watsonx.
- المعالجة المسبقة للبيانات: قم بتنظيم مجموعة البيانات الخاصة بك في هيكل الدليل المطلوب وقم بتحديث
.yaml
ملف الإعداد. - تدريب النموذج: استخدم واجهة سطر الأوامر YOLO لتدريب النموذج الخاص بك بمعلمات محددة مثل
epochs
,batch size
، وlearning rate
. - الاختبار والتقييم: قم بتشغيل الاستدلال لاختبار النموذج وتقييم أدائه باستخدام مقاييس مثل الدقة والاسترجاع.
للحصول على إرشادات مفصلة، راجع دليل تدريب نموذج YOLO11 الخاص بنا.
ما هي الميزات الرئيسية لـ IBM Watsonx لتدريب نموذج الذكاء الاصطناعي؟
يوفر IBM Watsonx العديد من الميزات الرئيسية لتدريب نماذج الذكاء الاصطناعي:
- Watsonx.ai: يوفر أدوات لتطوير الذكاء الاصطناعي، بما في ذلك الوصول إلى النماذج المخصصة المدعومة من IBM ونماذج الطرف الثالث مثل Llama 3. يتضمن Prompt Lab و Tuning Studio و Flows Engine لإدارة شاملة لدورة حياة الذكاء الاصطناعي.
- Watsonx.data: يدعم عمليات النشر السحابية والمحلية، ويوفر وصولاً مركزيًا إلى البيانات، ومحركات استعلام فعالة مثل Presto و Spark، وطبقة دلالية مدعومة بالذكاء الاصطناعي.
- Watsonx.governance: يقوم بأتمتة الامتثال، وإدارة المخاطر باستخدام التنبيهات، ويوفر أدوات لاكتشاف المشكلات مثل التحيز والانحراف. كما يتضمن لوحات معلومات وأدوات إعداد تقارير للتعاون.
لمزيد من المعلومات، قم بزيارة الوثائق الرسمية لـ IBM Watsonx.
لماذا يجب عليّ استخدام IBM Watsonx لتدريب نماذج Ultralytics YOLO11؟
يعد IBM Watsonx خيارًا ممتازًا لتدريب نماذج Ultralytics YOLO11 نظرًا لمجموعته الشاملة من الأدوات التي تعمل على تبسيط دورة حياة الذكاء الاصطناعي. تشمل المزايا الرئيسية ما يلي:
- قابلية التوسع: قم بتوسيع نطاق تدريب النموذج الخاص بك بسهولة باستخدام خدمات IBM Cloud.
- التكامل: يمكنك الاندماج بسلاسة مع مصادر البيانات وواجهات برمجة التطبيقات المختلفة.
- واجهة سهلة الاستخدام: تبسط عملية التطوير بواجهة تعاونية وبديهية.
- أدوات متقدمة: الوصول إلى أدوات قوية مثل Prompt Lab و Tuning Studio و Flows Engine لتحسين أداء النموذج.
تعرف على المزيد حول Ultralytics YOLO11 وكيفية تدريب النماذج باستخدام IBM Watsonx في دليل التكامل الخاص بنا.
كيف يمكنني معالجة مجموعة البيانات الخاصة بي لتدريب YOLO11 على IBM Watsonx؟
للمعالجة المسبقة لمجموعة البيانات الخاصة بك لتدريب YOLO11 على IBM Watsonx:
- تنظيم الدلائل: تأكد من أن مجموعة البيانات الخاصة بك تتبع هيكل دليل YOLO مع وجود دلائل فرعية منفصلة للصور والتسميات داخل تقسيم التدريب/التحقق/الاختبار.
- تحديث ملف .yaml: تعديل ال
.yaml
ملف الإعداد ليعكس هيكل الدليل الجديد وأسماء الفئات. - تشغيل برنامج المعالجة المسبقة: استخدم برنامج python لإعادة تنظيم مجموعة البيانات الخاصة بك وتحديث
.yaml
وفقًا لذلك.
إليك نموذج لبرنامج نصي لتنظيم مجموعة البيانات الخاصة بك:
import os
import shutil
def organize_files(directory):
for subdir in ["train", "test", "val"]:
subdir_path = os.path.join(directory, subdir)
if not os.path.exists(subdir_path):
continue
images_dir = os.path.join(subdir_path, "images")
labels_dir = os.path.join(subdir_path, "labels")
os.makedirs(images_dir, exist_ok=True)
os.makedirs(labels_dir, exist_ok=True)
for filename in os.listdir(subdir_path):
if filename.endswith(".txt"):
shutil.move(os.path.join(subdir_path, filename), os.path.join(labels_dir, filename))
elif filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".jpeg"):
shutil.move(os.path.join(subdir_path, filename), os.path.join(images_dir, filename))
if __name__ == "__main__":
directory = f"{work_dir}/trash_ICRA19/dataset"
organize_files(directory)
لمزيد من التفاصيل، راجع دليل معالجة البيانات الأولية الخاص بنا.
ما هي المتطلبات الأساسية لتدريب نموذج YOLO11 على IBM Watsonx؟
قبل البدء في تدريب نموذج YOLO11 على IBM Watsonx، تأكد من توفر المتطلبات الأساسية التالية:
- حساب IBM Cloud: أنشئ حسابًا على IBM Cloud للوصول إلى Watsonx.ai.
- حساب Kaggle: لتحميل مجموعات البيانات، ستحتاج إلى حساب Kaggle ومفتاح API.
- Jupyter Notebook: قم بإعداد بيئة Jupyter Notebook داخل Watsonx.ai للترميز وتدريب النماذج.
لمزيد من المعلومات حول إعداد بيئتك، تفضل بزيارة دليل تثبيت Ultralytics الخاص بنا.