شعار زيفيرنت

تدريب نموذج الكشف عن الأشياء YoloV5 الخاص بك

التاريخ:


تم نشر هذه المقالة كجزء من مدونة علوم البيانات

"يمكنك الحصول على بيانات بدون معلومات ولكن لا يمكنك الحصول على معلومات بدون بيانات" - دانيال كيز موران

المُقدّمة

إذا كنت هنا ، فقد تكون مهتمًا بالفعل بالتعلم الآلي أو التعلم العميق ، لذلك لا أحتاج إلى شرح ما هو؟ لذا بدءًا بمقدمة بسيطة للموضوع ، فإن اكتشاف الكائن هو طريقة لاكتشاف الأشياء المرغوبة في الصور أو مقاطع الفيديو ، وفي السنوات القليلة الماضية ، كان هناك الكثير من النماذج التي تم تقديمها لنفسه. يولو في 5 أحد تلك النماذج التي تعتبر من أسرع النماذج وأكثرها دقة. في هذه المقالة ، سأشرح كيف يمكنك تدريب يولو في 5 نموذج على بياناتك الخاصة لكل من الأنظمة المعتمدة على وحدة معالجة الرسومات ووحدة المعالجة المركزية. سأشرح كيف سيتعين عليك إعداد كل من وحدة معالجة الرسومات (GPU) أو وحدة المعالجة المركزية (CPU) حيث يمكن تدريبهما على أي منهما على الرغم من أن GPU مفضل لأنه سيستغرق الأمر ثلاث مرات تقريبًا على وحدة المعالجة المركزية لتدريب نفس الشيء ، إذا لم يكن لديك يعتمد على GPU النظام ولا ترغب في تدريب النموذج الخاص بك على Google Colab ، فلا يزال بإمكانك تدريب النموذج على وحدة المعالجة المركزية.

الخطوات التي سنناقشها في هذا البرنامج التعليمي هي كما يلي:

اختياري: خلق بيئة افتراضية للتدريب.

  1. مستودع الاستنساخ وتثبيت التبعيات لـ YoloV5
  2. أنشئ تعليقات توضيحية لمجموعة بيانات مخصصة باستخدام أداة VIA
  3. تحويل التعليقات التوضيحية إلى تنسيق Coco
  4. إنشاء ملف YAML للتدريب
  5. تدريب YoloV5
  6. الاستدلال YoloV5

يوصى باستخدام Python 3.6 للتدريب.

لنبدأ بإنشاء بيئة افتراضية ، هذه الخطوة اختيارية ، إذا كنت ترغب في تثبيت حزم في بيئة الجذر ، يمكنك تخطي ذلك وإلا إذا كنت تريد الاحتفاظ بهذا الإعداد منفصلاً ، فيمكنك متابعته لإنشاء بيئة افتراضية. ابدأ بالتثبيت virtualenv الحزمة التي تساعد في إنشاء البيئة الافتراضية.

تثبيت Virtualenv

بمجرد تثبيت الحزمة ، يمكنك المضي قدمًا وإنشاء البيئة الافتراضية لتدريب YoloV5:

 $ virtualenv yolov5_training_env

سيبدو إخراج الأمر كما يلي:

بيئة افتراضية
المصدر: محلي

بعد إنشاء بيئة ، سيتعين عليك تنشيطها لتثبيت الحزم المطلوبة.

يونيكس:

المصدر yolov5_training_env / bin / activ

نوافذ:

$ yolov5_training_envScriptsactivate
نوافذ بيئة افتراضية | نموذج الكشف عن كائن YoloV5
المصدر: محلي

مستودع الاستنساخ وتثبيت التبعيات

بادئ ذي بدء ، نحتاج إلى استنساخ المسؤول يولو في 5 المستودع ، إذا كان لديك git مثبتًا بالفعل ، فيمكن استخدام الأمر التالي لاستنساخ المستودع.

استنساخ $ git https://github.com/ultralytics/yolov5
مستودع استنساخ وتثبيت التبعيات
المصدر: محلي

بخلاف ذلك ، يمكنك تنزيل الكود مباشرةً من موقع الويب التالي:

كود YoloV5: https://github.com/ultralytics/yolov5

يأتي مستودع yolov5 هذا بملف "requirements.txt" الذي يحتوي على جميع المكتبات المطلوبة لتدريب النموذج. شيء واحد يجب تذكره هنا هو شعلة مكتبة والتي ستكون مختلفة لكل من بيئات GPU و CPU ، لذلك سيتعين علينا إزالة torch و torchvision من ملفات المتطلبات وتثبيت المكتبات الأخرى. لتثبيت مكتبات أخرى من ملف "requirements.txt" يتم استخدام الأمر التالي.

$ تثبيت النقطة -r متطلبات.txt
متطلبات التثبيت | نموذج الكشف عن كائن YoloV5
المصدر: محلي

بعد تثبيت المكتبات الأخرى ، سنقوم بتثبيت torchvision و torchvision التي هي العمود الفقري للتدريب.

تثبيت إصدار Torch CPU:

يمكن استخدام نظام إدارة حزم Python (pip) لتثبيت torch و torchvision لوحدة المعالجة المركزية.

مع نظامي التشغيل Windows و Linux:

مصباح تثبيت $ Pip == 1.7.0 + torchvision == 0.8.0 + cpu torchaudio == 0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

ماك:

$ pip install torch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0

تثبيت إصدار Torch GPU: 

تُفضل Conda لتثبيت مكتبات torchvision و torchvision المستندة إلى وحدة معالجة الرسومات لأنها تقوم بالفعل بتجميعها باستخدام CUDA. أيضًا في حالة مواجهة أي مشكلة في تثبيت conda ، يمكنك استخدام تثبيت النقطة. قبل التثبيت ، تأكد من تثبيت إصدار الشعلة المتوافقة مع CUDA والذي يمكنك العثور عليه هنا https://pytorch.org/get-started/previous-versions/.

مع نظامي التشغيل Windows و Linux:

$ conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=10.1 -c pytorch

or

$ pip install torch==1.7.0+cu101 torchvision==0.8.0+cu101 torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

ماك:

$ conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 -c pytorch

or

$ pip install torch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0
تثبيت نوافذ التبعيات
المصدر: محلي

تأكد من إجراء هذا التثبيت بشكل صحيح وإلا فسيكون هناك الكثير من مشكلات التوافق.

نحتاج أيضًا إلى تنزيل الأوزان المدربة مسبقًا لاستخدام النموذج للبيانات المخصصة. يمكن تنزيل الأوزان من الرابط التالي https://github.com/ultralytics/yolov5/releases. بمجرد تنزيل الأوزان ، نحتاج إلى إنشاء مجلد "Yolov5 / weights" ولصق ملف الأوزان هناك. يمكنك تنزيل أي من النماذج بناءً على حالة الاستخدام الخاصة بك (موصى به: yolov5x.pt or yolov5x6.pt).

قم بإنشاء التعليقات التوضيحية باستخدام أداة VIA

إن جوهر تدريب أي نموذج للكشف عن كائن هو شرح البيانات (إعداد البيانات للتدريب). التعليقات التوضيحية على البيانات هي تقنية نقوم فيها بإنشاء أشكال هندسية مختلفة على الكائنات التي نريد أن يكتشفها نموذج اكتشاف الكائنات الخاص بنا. هناك العديد من أدوات التعليقات التوضيحية على البيانات المتاحة ولكن الأداة التي أجدها سهلة الاستخدام هي أداة VIA (VGG Image Annotator). لقد أجريت بعض التغييرات على الأداة بحيث يمكنك استخدامها على العناصر الخاصة بك. يمكنك تنزيل الأداة من هنا https://drive.google.com/file/d/1rJx0fNgnnhODM7H3GP9RQQ5QEsWdkYEd/view?usp=sharing. هذه الأداة هي مجرد صفحة HTML بسيطة توفر لك العديد من أنواع التعليقات التوضيحية مثل تنسيق بيانات COCO وتنسيق CSV وما إلى ذلك ، تبدو صفحة الأداة كما يلي:

إنشاء التعليقات التوضيحية | نموذج الكشف عن كائن YoloV5
المصدر: محلي

هنا ، إذا رأيت ، هناك 3 أزرار مخصصة للكائنات واحد واثنان وثلاثة قابلة للتخصيص بالفعل ، أي يمكنك تغيير هذه الأزرار وفقًا لأسماء الكائنات الخاصة بك ، للقيام بذلك ، سيتعين عليك فتح ملف HTML في الوضع القابل للتحرير والعثور عليه الأسطر التالية:

أزرار | نموذج الكشف عن كائن YoloV5
المصدر: محلي

يمكنك الحصول على أسماء الكائنات هذه ككائنات مخصصة مثل السيارة والشخص وما إلى ذلك. بمجرد أن تصبح الأداة جاهزة ، تحتاج إلى النقر فوق زر السمة الذي تراه على اللوحة اليسرى وإنشاء سمة اسم تبدو كالتالي:

زر السمة
المصدر: محلي

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

تحميل الصور | نموذج الكشف عن كائن YoloV5
المصدر: محلي

بمجرد الانتهاء من جميع التعليقات التوضيحية ، يمكنك تصديرها بتنسيق CSV إلى الموقع الذي تريده.

تحويل التعليقات التوضيحية بتنسيق CSV إلى تنسيق COCO

يولو في 5 يتطلب النموذج أن تكون البيانات بتنسيق coco:

شكل كوكو
المصدر: محلي

لتحويل التعليقات التوضيحية بتنسيق CSV إلى تنسيق COCO ، يمكنك استخدام مقطع التعليمات البرمجية التالي:

ابدأ باستيراد التبعيات لإنشاء مجموعة بيانات COCO.

استيراد نظام التشغيل استيراد numpy كـ np استيراد الباندا كما pd استيراد shutil كما sh من PIL استيراد صورة من tqdm.auto import tqdm

بمجرد استيراد جميع التبعيات ، نحتاج إلى إنشاء بعض الأعمدة المطلوبة لمجموعة بيانات COCO.

data_path = '/ Users / gouravbais // Final_Cleaned_Dataset /' df = pd.read_csv (data_path + 'train / via_region_export.csv') ## إنشاء x ، y ، w ، h أعمدة x ، y ، w ، h = [] ، [ ]، []، [] للصف في df ['region_shape_attributes']: row = row.replace ('{}'، '') .replace ('}'، '') row = row.split ('،' ) x.append (int (row [1] .split (':') [- 1])) y.append (int (row [2] .split (':') [- 1])) w.append (int (row [3] .split (':') [- 1])) h.append (int (row [4] .split (':') [- 1])) ## حساب x ، y ، إحداثيات العرض والارتفاع df ['x']، df ['y']، df ['w']، df ['h'] = x، y، w، h ## إنشاء اسم عمود image_id به أسماء صور كـ id df ['image_id'] = [name.split ('.') [0] للاسم في df ['filename']] ## إنشاء عمودين لتخزين قيم مركز x و y df ['x_center'] = df ['x'] + df ['w'] / 2 df ['y_center'] = df ['y'] + df ['h'] / 2 ## تحديد عدد تسميات الفئات = df ['region_attributes'] .unique () labels_to_dict =ict (zip (lables، range (0، len (labels)))) print ('Lables Directory:'، labels_to_dict) df ['classes'] = df ['region_attributes'] df.rep الدانتيل ({'classes': labels_to_dict}، inplace = True) df = df [['image_id'، 'x'، 'y'، 'w'، 'h'، 'x_center'، 'y_center'، 'classes' ]] ## مجموعة فهرس الصور = قائمة (مجموعة (df.image_id))

وأخيرًا إنشاء مجموعة البيانات عن طريق نسخ الصور وإنشاء ملفات نصية.

source = 'train' إذا كان صحيحًا: للثني في [0]: val_index = index [len (index) * fold // 5: len (index) * (fold + 1) // 5] للاسم ، mini in tqdm ( df.groupby ('image_id')): if name in val_index: path2save = 'val2017 /' else: path2save = 'train2017 /' if not os.path.exists ('convertor / fold {} / labels /' format ('convertor / fold {} / labels /' format ( fold) + path2save): os.makedirs ('convertor / fold {} / labels /'. format (fold) + path2save) with open ('convertor / fold {} / labels /'. format (fold) + path2save + name + ".txt"، 'w +') مثل f: row = mini [['classes'، 'x_center'، 'y_center'، 'w'، 'h']]. astype (float) .values ​​imagename = data_path + "/ {} / {}. jpg ".format (source، name) check_image_width_height = Image.open (imagename) img_width، img_height = check_image_width_height.size لـ r in (row): r [1] = r [1] / img_width r [ 2] = r [2] / img_height r [3] = r [3] / img_width r [4] = r [4] / img_height row = row.astype (str) لـ j في النطاق (len (row)): print (row [j]، 'n') row [j] [0] = str (int (float (row [j] [0]))) text = '' .join (row [j]) f.write (نص) f.write ("n") إن لم يكن os.path.exists ('convertor / fold {} / images / {}' form at (fold، path2save)): os.makedirs ('convertor / fold {} / images / {}'. format (fold، path2save)) sh.copy (data_path + "/ {} / {}. jpg" .format ( source، name)، 'convertor / fold {} / images / {} / {}. jpg'.format (fold، path2save، name))

سوف يقوم الكود التالي بإنشاء مجلد باسم "المحول / fold0" الذي يحتوي الصور و ملصقات المجلدات التي تحتاج إلى نسخها ولصقها داخل مستودع YoloV5 المستنسخ "YoloV5 / coco /" المجلد.

إنشاء ملف YAML للتدريب

بمجرد تثبيت التبعيات وتكون البيانات جاهزة الآن ، نحتاج إلى تكوين ملف YAML ملف لتدريب النموذج. لذلك ، يمكنك فتح أي محرر نصوص وإنشاء ملف "coco.yml" داخل المجلد "YoloV5 / data /". سيكون محتوى الملف كالتالي:

# train and val data as 1) directory: path / images /، 2) file: path / images.txt، or 3) list: [path1 / images /، path2 / images /] train: / Users / gouravbais / yolov5 / coco / images / train2017 val: / Users / gouravbais / yolov5 / coco / images / val2017

# عدد الفصول

ن ج: 3

# اسم فئة

الأسماء: ['object1'، 'object2'، 'object3']

يرجى الاحتفاظ بالفصول بنفس الترتيب الذي تحصل عليه أثناء تحويل مجموعة بيانات CSV إلى مجموعة بيانات COCO.

تدريب Yolov5

لا يترك إعداد ملف YAML الكثير لتفعله بعد ذلك ، والآن نحتاج فقط إلى كتابة الأمر وتزويده بالبيانات والأوزان لتدريب النموذج على مجموعة البيانات المخصصة لدينا. تحتاج إلى الانتقال إلى مجلد YoloV5 من خلال موجه الأوامر الطرفية أو الأناكوندا وتشغيل الأمر التالي:

python train.py --img 416 - الدفعة 12 --epochs 50 --data ./data/coco.yml - weightights ./weights/yolov5x.pt

شرح الأمر:

قطار.py: ملف python يحتوي على رمز التدريب.

صورة: تم ضبط حجم الصورة بشكل افتراضي على 640 ، اعتمادًا على وحدة معالجة الرسومات أو ذاكرة وحدة المعالجة المركزية ، يمكنك تغييرها.

حزمة: حجم الدفعة الذي يعتمد مرة أخرى بشكل مباشر على ذاكرتك.

بيانات: مسار ملف YAML الخاص بك.

الأوزان: مسار ملف الأوزان الذي قمنا بتنزيله في الخطوة 1.

بمجرد تشغيل الأمر المذكور ، سيبدأ تدريب النموذج. يحتوي ملف التدريب الذي نستخدمه على الكود الذي يتحقق من GPU إذا كان متاحًا ، ثم يتم التدريب على GPU وإلا يستمر التدريب على وحدة المعالجة المركزية. لا نحتاج إلى رمز صريح لاستخدام وحدة معالجة الرسومات أو وحدة المعالجة المركزية.

تدريب نموذجي | نموذج الكشف عن كائن YoloV5
المصدر: محلي

بمجرد الانتهاء من التدريب ، يمكنك العثور على الأوزان المدربة في "YoloV5 / الجري / القطار" المجلد ، والذي سيكون له ملفان أوزان "الأفضل.pt" و "last.pt" يمكنك استخدام أي منهما بناءً على تدريبك ("الأفضل.pt" مستحسن). يمكنك نسخ الملف ولصقه داخل ملف "YoloV5 / أوزان" مجلد. هناك شيء واحد يجب عليك ملاحظته هنا وهو أنه إذا استمرت الخسارة في التناقص بعد 50 حقبة ، فيمكنك تشغيلها لمزيد من الحقب اعتمادًا على بياناتك.

استنتاج YoloV5

في الختام ، ما تحتاجه هو نموذج التعلم العميق الذي يعمل على بيانات الاختبار الخاصة بك. لذلك لاختبار النموذج الخاص بك على اختبار البيانات ، سيتعين عليك استخدام ملف "YoloV5 / detect.py" البرنامج النصي موجود في نفس الموقع مثل "train.py". تكون الأوامر لاختبار النموذج على بياناتك كما يلي:

$ python discovery.py --img 416 --source ./detect/test_data - أوزان ./weights/best.pt --conf-thres 0.4

شرح الأمر:

Discover.py: ملف python للاستدلال.

صورة: حجم الصورة الذي يجب أن يكون مطابقًا لحجم صورة التدريب.

مصدر: مسار بيانات الاختبار أو ملف صورة الاختبار.

الأوزان: ملف مسار الاوزان المدربة.

أسيوط- thres: حد الثقة الذي يجب أن يتم اكتشاف الكائن فوقه.

سيؤدي تشغيل الأمر أعلاه إلى إنشاء مجلد "YoloV5 / تشغيل / اكتشاف" والتي من شأنها أن تحتوي على جميع الملفات الناتجة التي قمت بتشغيل النموذج عليها.

أنت الآن جاهز لتطبيق معرفة اكتشاف الكائن على حالة الاستخدام الخاصة بك.

شكرًا لقراءة هذا المقال ، إذا كنت قد تعلمت شيئًا جديدًا ، فلا تتردد في التعليق نراكم في المرة القادمة !!! ❤️ 

الوسائط الموضحة في هذه المقالة ليست مملوكة لشركة Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

أفلاطون. Web3 مُعاد تصوره. تضخيم ذكاء البيانات.
انقر هنا للوصول.

المصدر: https://www.analyticsvidhya.com/blog/2021/08/train-your-own-yolov5-object-detection-model/

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة