إطار عمل Darknet للكشف عن الكائنات وYOLO
شعارات darknet وhank.ai
Darknet هو إطار عمل للشبكة العصبية مفتوح المصدر مكتوب بلغات C وC++ وCUDA. فهو يوفر أساسًا قويًا لتطوير ونشر نماذج الكشف عن الكائنات.
YOLO (أنت تنظر مرة واحدة فقط) هو نظام متطور للكشف عن الكائنات في الوقت الفعلي ومبني على إطار عمل Darknet. إنه يتميز بالسرعة والدقة، مما يجعله خيارًا شائعًا لمختلف التطبيقات.
هل تريد معرفة المزيد حول كيفية مساهمة Hank.ai في مجتمع Darknet/YOLO؟
استكشف موقع Darknet/YOLO الرسمي:
تعمق في الأسئلة الشائعة الشاملة عن Darknet/YOLO:
انضم إلى مجتمع Darknet/YOLO Discord النابض بالحياة:
أوراق
YOLOv7: رابط إلى الورق
تحجيم-YOLOv4: رابط للورق
YOLOv4: رابط للورقة
YOLOv3: رابط إلى الورق
معلومات عامة
لا يزال إطار عمل Darknet/YOLO رائدًا في اكتشاف الكائنات، حيث يقدم باستمرار مزايا السرعة والدقة مقارنة بأطر العمل الأخرى وإصدارات YOLO.
الميزات الرئيسية:
1. مفتوح المصدر ومجاني: هذا الإطار مجاني تمامًا ومفتوح المصدر، مما يسمح لك بدمجه بسلاسة في مشاريعك دون أي قيود على الترخيص.
2. الأداء العالي: يحقق Darknet V3 ("Jazz")، الذي تم إصداره في أكتوبر 2024، أداءً رائعًا، حيث يصل إلى 1000 إطارًا في الثانية لمجموعة بيانات LEGO باستخدام وحدة معالجة الرسومات NVIDIA RTX 3090.
3. النشر متعدد الاستخدامات: Darknet/YOLO متوافق مع أجهزة مختلفة، بدءًا من Raspberry Pi والخوادم السحابية إلى أجهزة الكمبيوتر المكتبية وأجهزة التدريب المتطورة.
4. دعم عبر الأنظمة الأساسية: من المعروف أنه يعمل بشكل لا تشوبه شائبة على أنظمة التشغيل Linux وWindows وMac.
هل تحتاج إلى مساعدة أو ترغب في مناقشة Darknet/YOLO؟ انضم إلى المجتمع النابض بالحياة على Discord:
نسخة دارك نت
يمكن تتبع تطور Darknet من خلال إصداراته:
1. الإصدار 0.x (2013-2017): كانت أداة Darknet الأصلية التي طورها جوزيف ريدمون تفتقر إلى رقم إصدار رسمي.
2. الإصدار 1.x (2017-2021): تمت صيانة هذا الإصدار بواسطة Alexey Bochkovskiy ويفتقر أيضًا إلى رقم الإصدار.
3. الإصدار 2.x "OAK" (2023): قدّم مستودع Darknet، برعاية Hank.ai ويديره ستيفان شاريت، أمر إصدار. جلب هذا الإصدار تحسينات كبيرة، بما في ذلك:
* خطوات بناء موحدة باستخدام CMake لكل من نظامي التشغيل Windows وLinux.
* التحويل إلى مترجم C++.
* تحسين تصور Chart.png أثناء التدريب.
* إصلاحات الأخطاء وتحسينات الأداء لزيادة كفاءة التدريب.
4. الإصدار 2.1: الفرع الأخير من قاعدة التعليمات البرمجية v2.
5. الإصدار 3.x "JAZZ" (أكتوبر 2024): يقدم هذا الإصدار الأخير:
* تحسينات الأداء لكل من التدريب والاستدلال.
* واجهة برمجة تطبيقات C قديمة معدلة تتطلب تعديلات طفيفة للتطبيقات التي تستخدم واجهة برمجة تطبيقات Darknet الأصلية.
* واجهة برمجة تطبيقات Darknet V3 C وC++ الجديدة.
* تطبيقات جديدة ونموذج التعليمات البرمجية في دليل أمثلة src.
للتوافق مع الإصدارات الأقدم، لا يزال من الممكن الوصول إلى الفرع v2. إذا كنت بحاجة إلى استخدام أوامر محددة من الإصدارات السابقة، فأخبرنا بذلك، وسنستكشف إمكانية إضافتها مرة أخرى.
أوزان MSCOCO المدربة مسبقًا
يتم تدريب العديد من الإصدارات الشائعة من YOLO مسبقًا على مجموعة بيانات MSCOCO، مما يوفر نقطة بداية مناسبة لتجربة إطار العمل. يحتوي MSCOCO على 80 فئة مدرجة في ملف cfg/coco.names.
الأوزان المدربة مسبقا المتاحة:
YOLOv2 (نوفمبر 2016):
* yolov2-tiny.weights
* yolov2-full.weights
YOLOv3 (مايو 2018):
* yolov3-tiny.weights
* yolov3-full.weights
YOLOv4 (مايو 2020):
* yolov4-tiny.weights
* yolov4-full.weights
YOLOv7 (أغسطس 2022):
* yolov7-tiny.weights
* yolov7-full.weights
تذكر: على الرغم من أن هذه الأوزان المدربة مسبقًا مفيدة للعروض التوضيحية، إلا أنه من الضروري تدريب شبكاتك الخاصة للحصول على حلول مخصصة. يتم استخدام MSCOCO بشكل أساسي للتحقق من أن الإعداد الخاص بك يعمل بشكل صحيح.
أمثلة على الأوامر باستخدام الأوزان المدربة مسبقًا:
``باش
عرض الصور المشروحة
wget --no-clobber https://github.com/hank-ai/darknet/releases/download/v2.0/yolov4-tiny.weights
darknet02displayannotatedimages coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
عرض مقاطع الفيديو مع التعليقات التوضيحية
darknet03display_videos coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
استخدم DarkHelp CLI
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
مبنى
تستفيد Darknet من CMake لتبسيط عملية الإنشاء لكل من Windows وLinux. يتطلب C++ 17 أو مترجم أحدث، بالإضافة إلى OpenCV.
تم الآن توحيد تعليمات البناء، لتحل محل الأساليب القديمة والأكثر تعقيدًا.
ملاحظة: إذا كنت تواجه مشكلات في البرامج التعليمية القديمة أو خطوات الإنشاء التي لا تتوافق مع هذا الدليل، فيرجى الرجوع إلى أحدث الإرشادات المتوفرة هنا.
ننصح مطوري البرامج بزيارة https://darknetcv.ai/ للحصول على رؤى حول الأعمال الداخلية لإطار عمل Darknet/YOLO.
جوجل كولاب
تعكس تعليمات Google Colab تعليمات Linux.
استكشف دفاتر الملاحظات في الدليل الفرعي colab، أو اتبع تعليمات Linux أدناه.
طريقة لينكس CMake
1. قم بتثبيت الحزم الضرورية:
``باش
sudo apt-get install build-essential git libopencv-dev cmake
`
2. استنساخ مستودع Darknet:
``باش
مكدير ~/src
مؤتمر نزع السلاح ~/src
استنساخ بوابة https://github.com/hank-ai/darknet
مؤتمر نزع السلاح داركنت
بناء مكدير
بناء القرص المضغوط
`
3. تكوين CMake:
``باش
cmake -DCMAKEBUILDTYPE=إطلاق ..
`
4. بناء الشبكة المظلمة:
``باش
جعل -j4
`
5. باقة داركنت:
``باش
طَرد
sudo dpkg -i darknet-VERSION.deb
`
اختياري: CUDA أو CUDA+cuDNN لتسريع وحدة معالجة الرسومات
تفضل بزيارة https://developer.nvidia.com/cuda-downloads لتنزيل CUDA وتثبيته.
تفضل بزيارة https://developer.nvidia.com/rdp/cudnn-download أو https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview للتنزيل وتثبيت cuDNN.
بعد تثبيت CUDA، تأكد من إمكانية الوصول إلى nvcc وnvidia-smi. قد تحتاج إلى ضبط متغير PATH الخاص بك.
إذا قمت بتثبيت CUDA أو CUDA+cuDNN لاحقًا أو قمت بترقية برنامج NVIDIA:
احذف ملف CMakeCache.txt الموجود في دليل إنشاء Darknet الخاص بك لإجبار CMake على إعادة البحث عن التبعيات.
إعادة بناء داركنت.
لترقية CMake على Ubuntu:
``باش
sudo apt-get purge cmake
Sudo snap install cmake --classic
`
المستخدمون المتقدمون:
لإنشاء ملف تثبيت RPM بدلاً من ملف DEB، قم بتعديل CPACKGENERATOR في CMpackage.cmake إلى "RPM".
بالنسبة لـ Centos وOpenSUSE، قم بتغيير CPACK_GENERATOR إلى "RPM".
بعد إنشاء حزمة التثبيت، استخدم مدير الحزم المناسب لتثبيتها.
تَحَقّق:
قم بتشغيل إصدار darknet من سطر الأوامر لتأكيد التثبيت.
طريقة ويندوز CMake
1. قم بتثبيت البرامج المطلوبة:
``باش
Winget تثبيت Git.Git
تثبيت Winget Kitware.CMake
تثبيت Winget nsis.nsis
تثبيت Winget Microsoft.VisualStudio.2022.Community
`
2. تعديل تثبيت Visual Studio:
* افتح "مثبت Visual Studio".
* انقر على "تعديل".
* حدد "تطوير سطح المكتب باستخدام C++".
* انقر على "تعديل" ثم "نعم".
3. افتح موجه أوامر المطور لـ VS 2022:
* لا تستخدم بوويرشيل.
4. تثبيت مايكروسوفت VCPKG:
``باش
مؤتمر نزع السلاح ج:
مكدير ج:src
مؤتمر نزع السلاح ج: سرك
استنساخ بوابة https://github.com/microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe دمج التثبيت
.vcpkg.exe يدمج بوويرشيل
.vcpkg.exe تثبيت opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5. اختياري: CUDA أو CUDA+cuDNN لتسريع وحدة معالجة الرسومات
* قم بتثبيت CUDA باتباع الإرشادات الموجودة على https://developer.nvidia.com/cuda-downloads.
* قم بتثبيت cuDNN باستخدام الإرشادات الموجودة على https://developer.nvidia.com/rdp/cudnn-download أو https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows.
بعد التثبيت، تأكد من إمكانية الوصول إلى nvcc.exe وnvidia-smi.exe. قد تحتاج إلى تعديل متغير PATH الخاص بك.
إذا قمت بتثبيت CUDA أو CUDA+cuDNN لاحقًا أو قمت بترقية برنامج NVIDIA:
* تأكد من تثبيت CUDA بعد Visual Studio.
* أعد تثبيت CUDA إذا تمت ترقية Visual Studio.
6. استنساخ Darknet وإنشائه:
``باش
مؤتمر نزع السلاح ج: سرك
استنساخ بوابة https://github.com/hank-ai/darknet.git
مؤتمر نزع السلاح داركنت
بناء مكدير
بناء القرص المضغوط
cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;التكوين=إصدار PACKAGE.vcxproj
`
7. انسخ ملفات CUDA DLL (إذا لزم الأمر):
* إذا حصلت على أخطاء بشأن فقدان ملفات CUDA أو cuDNN DLL، فانسخها يدويًا إلى دليل إخراج Darknet. على سبيل المثال:
``باش
انسخ "C: Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
8. أعد تشغيل الأمر msbuild.exe لإنشاء حزمة تثبيت NSIS:
``باش
msbuild.exe /property:Platform=x64;التكوين=إصدار PACKAGE.vcxproj
`
المستخدمون المتقدمون:
يمكنك استخدام ملف الحل Darknet.sln الذي تم إنشاؤه بواسطة CMake داخل واجهة المستخدم الرسومية لـ Visual Studio بدلاً من أدوات سطر الأوامر.
تَحَقّق:
قم بتشغيل الإصدار C:srcDarknetbuildsrc-cliReleasedarknet.exe لتأكيد التثبيت.
لتثبيت Darknet، قم بتشغيل معالج تثبيت NSIS:
ابحث عن ملف darknet-VERSION.exe في دليل الإنشاء.
قم بتشغيل معالج التثبيت لتثبيت تطبيق CLI والمكتبات وتضمين الملفات وملفات DLL الضرورية.
باستخدام دارك نت
سطر الأوامر
ملاحظة: الأوامر التالية ليست شاملة.
بالإضافة إلى Darknet CLI، فكر في استخدام Darknet project CLI، الذي يوفر وظائف بديلة وميزات متقدمة.
تتطلب معظم الأوامر ملف .weights مع ملفات .names و.cfg المقابلة له. يمكنك إما تدريب شبكتك الخاصة أو تنزيل نماذج مدربة مسبقًا من الإنترنت. تشمل الأمثلة ما يلي:
LEGO Gears: اكتشاف الأشياء في الصور.
Rolodex: الكشف عن النص في الصور.
MSCOCO: الكشف القياسي عن الكائنات من فئة 80.
الأوامر:
1. المساعدة:
``باش
مساعدة على الانترنت المظلم
`
2. الإصدار:
``باش
نسخة دارك نت
`
3. التنبؤ باستخدام الصورة:
* الإصدار الثاني:
``باش
اختبار كاشف الانترنت المظلم cars.data Cars.cfg Cars_best.weights image1.jpg
`
* الإصدار 3:
``باش
darknet02displayannotatedimages Cars.cfg image1.jpg
`
* مساعدة الظلام:
``باش
DarkHelp Cars.cfg Cars.cfg Cars_best.weights image1.jpg
`
4. إحداثيات الإخراج:
* الإصدار الثاني:
``باش
اختبار كاشف الشبكة المظلمة للحيوانات. بيانات Animals.cfg Animalbest.weights -extoutput dog.jpg
`
* الإصدار 3:
``باش
darknet01inference_images حيوانات dog.jpg
`
* مساعدة الظلام:
``باش
DarkHelp --json Animals.cfg Animals.names Animal_best.weights dog.jpg
`
5. العمل مع مقاطع الفيديو:
* الإصدار الثاني:
``باش
عرض توضيحي لكاشف الشبكة المظلمة للحيوانات.بيانات الحيوانات.cfg Animalbest.weights -extoutput test.mp4
`
* الإصدار 3:
``باش
darknet03display_videos Animals.cfg test.mp4
`
* مساعدة الظلام:
``باش
DarkHelp Animals.cfg Animals.names Animal_best.weights test.mp4
`
6. القراءة من كاميرا الويب:
* الإصدار الثاني:
``باش
عرض تجريبي لكاشف الشبكة المظلمة Animals.data Animals.cfg Animal_best.weights -c 0
`
* الإصدار 3:
``باش
حيوانات darknet08display_webcam
`
7. حفظ النتائج إلى الفيديو:
* الإصدار الثاني:
``باش
عرض تجريبي للكشف عن darknet للحيوانات.بيانات الحيوانات.cfg Animalbest.weights test.mp4 -outfilename res.avi
`
* الإصدار 3:
``باش
darknet05processvideosحيوانات متعددة الخيوط.cfg حيوانات.أسماء الحيوانات_أفضل.اختبار الأوزان.mp4
`
* مساعدة الظلام:
``باش
DarkHelp Animals.cfg Animals.names Animal_best.weights test.mp4
`
8. إخراج JSON:
* الإصدار الثاني:
``باش
عرض توضيحي لكاشف الشبكة المظلمة للحيوانات.بيانات الحيوانات.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
* الإصدار 3:
``باش
darknet06imagestojson الحيوانات image1.jpg
`
* مساعدة الظلام:
``باش
DarkHelp --json Animals.names Animals.cfg Animal_best.weights image1.jpg
`
9. التشغيل على وحدة معالجة رسومات محددة:
``باش
عرض تجريبي لكاشف الشبكة المظلمة Animals.data Animals.cfg Animal_best.weights -i 1 test.mp4
`
10. التحقق من دقة الشبكة العصبية:
``باش
خريطة كاشف الانترنت المظلم القيادة.بيانات القيادة.cfg القيادة_أفضل.الأوزان ...
`
11. حساب mAP@IoU=75:
``باش
خريطة كاشف Darknet للحيوانات.بيانات الحيوانات.cfg Animalbest.weights -iouthresh 0.75
`
12. إعادة حساب المراسي:
``باش
كاشف الشبكة المظلمة calcanchors Animals.data -عدد_العناقيد 6 -العرض 320 -الارتفاع 256
`
13. تدريب شبكة جديدة:
``باش
كاشف الشبكة المظلمة -خريطة -dont_show تدريب الحيوانات.بيانات الحيوانات.cfg
`
تمرين
لتبسيط التعليقات التوضيحية والتدريب، استخدم DarkMark. إنه النهج الموصى به لإنشاء شبكات عصبية جديدة.
إعداد التدريب اليدوي (إذا كنت تفضل ذلك):
1. قم بإنشاء مجلد المشروع:
* على سبيل المثال، ~/nn/animals/ للكشف عن الحيوانات.
2. انسخ ملف تكوين Darknet كقالب:
* على سبيل المثال، cfg/yolov4-tiny.cfg.
3. قم بإنشاء ملف نصي Animals.names:
* قائمة كل فئة، إدخال واحد في كل سطر، دون أسطر فارغة أو تعليقات. مثال:
`
كلب
قطة
طائر
حصان
`
4. قم بإنشاء ملف نصي Animals.data:
`
الفصول = 4
القطار = /home/username/nn/animals/animals_train.txt
صالح = /home/username/nn/animals/animals_valid.txt
الأسماء = /home/username/nn/animals/animals.names
النسخ الاحتياطي = /home/username/nn/animals
`
5. أنشئ مجلدًا للصور والتعليقات التوضيحية (على سبيل المثال، ~/nn/animals/dataset).
* قم بتعليق الصور باستخدام DarkMark أو برامج مشابهة. تم توضيح تنسيق التعليق التوضيحي YOLO في الأسئلة الشائعة حول Darknet/YOLO.
6. قم بإنشاء ملف Animaltrain.txt و ملف Animalvalid.txt:
* قائمة بجميع الصور المستخدمة للتدريب والتحقق من الصحة، صورة واحدة في كل سطر.
7. قم بتعديل ملف .cfg:
* تعيين الدفعة = 64.
* اضبط التقسيمات الفرعية بناءً على أبعاد الشبكة وذاكرة وحدة معالجة الرسومات. ابدأ بالأقسام الفرعية = 1.
* قم بتعيين max_batches على 2000 ضعف عدد الفئات (على سبيل المثال، 8000 لأربعة فئات).
* اضبط الخطوات على 80% و90% من max_batches.
* اضبط العرض والارتفاع ليتناسب مع أبعاد الشبكة المطلوبة.
* قم بتعديل الفئات لتعكس عدد الفئات الموجودة في ملف الأسماء الخاص بك.
تحديث المرشحات في الأقسام [التلافيفية] قبل كل قسم [yolo]: (numberofclasses + 5) 3.
8. ابدأ التدريب:
``باش
مؤتمر نزع السلاح ~/ن/الحيوانات/
كاشف الشبكة المظلمة -خريطة -dont_show تدريب الحيوانات.بيانات الحيوانات.cfg
`
لمزيد من تفاصيل التدريب والمعلمات المتقدمة، راجع الأسئلة الشائعة حول Darknet/YOLO.
أدوات وروابط أخرى
DarkMark: إدارة مشاريع Darknet/YOLO، وإضافة تعليقات توضيحية إلى الصور، والتحقق من التعليقات التوضيحية، وإنشاء ملفات التدريب.
DarkHelp: يوفر واجهة سطر الأوامر (CLI) بديلة لـ Darknet، مما يتيح تقسيم الصور وتتبع الكائنات وواجهة برمجة تطبيقات C++ قوية للتطبيقات التجارية.
الأسئلة الشائعة حول Darknet/YOLO: مورد شامل للإجابة على أسئلتك.
قناة Stéphane على YouTube: قم بالوصول إلى العديد من البرامج التعليمية وأمثلة مقاطع الفيديو.
Darknet/YOLO Discord Server: تواصل مع المستخدمين الآخرين للحصول على الدعم والمناقشات.
خريطة الطريق
آخر تحديث 2024-10-30:
مكتمل:
تم استبدال qsort() بـ std::sort() حيثما ينطبق ذلك أثناء التدريب.
تمت إزالة check_mistakes وgetchar() وsystem().
تم تحويل Darknet لاستخدام مترجم C++ (g++ على Linux، وVisualStudio على Windows).
بناء ويندوز ثابت.
إعادة تمكين التصنيفات على التنبؤات (رمز "الأبجدية").
تمت إعادة تمكين رمز CUDA/GPU وCUDNN ونصف CUDNN.
تمت إزالة بنية CUDA ذات الترميز الثابت.
تحسين معلومات إصدار CUDA.
إعادة تمكين AVX.
تمت إزالة الحلول القديمة وملفات Makefiles.
جعل OpenCV تبعية غير اختيارية.
تمت إزالة تبعية مكتبة pthread القديمة.
تمت إزالة STB.
إعادة كتابة CMakeLists.txt لتحسين اكتشاف CUDA.
تمت إزالة رمز "الأبجدية" القديم والصور المرتبطة به.
تم تنفيذ البناء خارج المصدر.
تحسين إخراج رقم الإصدار.
تحسين الأداء أثناء التدريب (مستمر).
تحسينات الأداء أثناء الاستدلال (مستمر).
تم تنفيذ التمرير حسب المرجع حيثما أمكن ذلك.
تنظيف ملفات .hpp.
إعادة كتابة darknet.h.
تمت إزالة casting cv::Mat لإبطاله واستخدامه ككائن C++.
تم إصلاح التناقضات في بنية الصورة الداخلية.
تم إصلاح البنية لأجهزة Jetson المستندة إلى ARM (أجهزة Jetson Orin الجديدة تعمل).
تم إصلاح واجهة برمجة تطبيقات Python في الإصدار 3.
الأهداف قصيرة المدى:
استبدل printf() بـ std::cout (قيد التقدم).
قم بإعادة النظر في دعم كاميرا Zed القديمة.
تحسين اتساق تحليل سطر الأوامر (قيد التقدم).
الأهداف المتوسطة المدى:
قم بإزالة كل رموز char واستبدلها بـ std::string.
إزالة تحذيرات المترجم وتحسين وضوح التعليمات البرمجية (قيد التقدم).
تحسين استخدام cv::Mat بدلاً من بنية الصورة المخصصة في لغة C (قيد التقدم).
استبدل وظيفة القائمة القديمة بـ std::vector أو std::list.
أضف دعمًا للصور ذات التدرج الرمادي ذات القناة الواحدة.
توسيع الدعم لصور القنوات N (N > 3، على سبيل المثال، العمق أو القنوات الحرارية).
تنظيف الكود المستمر (قيد التقدم).
الأهداف طويلة المدى:
حل مشكلات CUDA/CUDNN عبر جميع وحدات معالجة الرسومات.
أعد كتابة كود CUDA+cuDNN.
اكتشف الدعم لوحدات معالجة الرسومات غير التابعة لـ NVIDIA.
تنفيذ الصناديق المحيطة المدورة أو دعم "الزاوية".
إضافة نقاط المفاتيح / الهياكل العظمية.
تقديم خرائط الحرارة (قيد التنفيذ).
استكشاف التجزئة.
ترقبوا التحديثات والمساهمات في إطار عمل Darknet/YOLO!