Darknet Object Detection Framework وYOLO
Darknet هو إطار شبكة عصبية مفتوح المصدر مكتوب بشكل أساسي بلغة C وC++، مع بعض أكواد CUDA لتسريع GPU. وهو معروف بسرعته وكفاءته، مما يجعله خيارًا شائعًا لتطبيقات الكشف عن الكائنات في الوقت الفعلي.
YOLO (أنت تنظر مرة واحدة فقط) هو نظام قوي للكشف عن الأشياء في الوقت الفعلي مصمم للعمل ضمن إطار عمل Darknet. إنه يتفوق في السرعة والدقة، ويتفوق باستمرار على أنظمة الكشف عن الأشياء الأخرى في المعايير.
تعمق أكثر في عالم Darknet/YOLO:
مساهمات Hank.ai: اكتشف كيف يدعم Hank.ai بنشاط مجتمع Darknet/YOLO.
الموقع الرسمي: استكشف موقع Darknet/YOLO الرسمي للحصول على معلومات شاملة.
الأسئلة المتداولة: ابحث عن إجابات للأسئلة الشائعة حول Darknet/YOLO.
Discord Server: انضم إلى مجتمع Darknet/YOLO Discord النابض بالحياة لإجراء المناقشات والمساعدة.
أوراق
تم توثيق تطور YOLO في العديد من الأوراق البحثية:
1. YOLOv7: تجاوز حدود التعلم العميق لاكتشاف الكائنات
2. تحجيم YOLOv4: توسيع نطاق YOLOv4 للتطبيقات الصناعية
3. YOLOv4: السرعة والدقة المثلى في اكتشاف الأشياء
4. YOLOv3: تحسين تدريجي
معلومات عامة
لا يزال إطار عمل Darknet/YOLO في طليعة اكتشاف الكائنات، حيث يتميز بالسرعة والدقة. هذا الإطار مجاني تمامًا ومفتوح المصدر، مما يسمح للمطورين بدمجه بسلاسة في مشاريعهم دون أي ترخيص أو قيود على الرسوم.
يحقق Darknet V3، الذي يحمل الاسم الرمزي "Jazz"، والذي تم إصداره في أكتوبر 2024، أداءً رائعًا باستخدام وحدة معالجة الرسوميات NVIDIA RTX 3090. يمكنه معالجة مقاطع فيديو مجموعة بيانات LEGO بسرعة تصل إلى 1000 إطارًا في الثانية، مما يعني أنه يتم تحليل كل إطار في 1 مللي ثانية فقط أو أقل.
ابق على اتصال:
Discord: انضم إلى خادم Darknet/YOLO Discord للحصول على الدعم والمناقشات: https://discord.gg/zSq8rtW.
Darknet/YOLO قابل للتكيف ويعمل على منصات مختلفة، بدءًا من Raspberry Pi والخوادم السحابية وحتى أجهزة الكمبيوتر المكتبية وأنظمة التدريب المتطورة. بينما يعمل إصدار وحدة المعالجة المركزية (CPU) على مجموعة واسعة من الأجهزة، فإن إصدار وحدة معالجة الرسومات (GPU) يتطلب وحدة معالجة رسومات (GPU) قادرة على تشغيل CUDA من NVIDIA.
نسخة دارك نت
لقد تطور إطار عمل Darknet بشكل ملحوظ منذ بدايته، مع العديد من الإصدارات الرئيسية:
1. الإصدار 0.x: هذه النسخة الأصلية، التي طورها جوزيف ريدمون بين عامي 2013-2017، كانت تفتقر إلى رقم إصدار محدد.
2. الإصدار 1.x: تمت صيانته بواسطة Alexey Bochkovskiy من 2017 إلى 2021، ولم يكن لهذا الإصدار أيضًا رقم إصدار.
3. الإصدار 2.x "OAK": برعاية Hank.ai ويديره ستيفان شاريت بدءًا من عام 2023، كان هذا بمثابة الإصدار الأول بأمر إصدار. استمر هذا الإصدار حتى أواخر عام 2024.
4. الإصدار 3.x "JAZZ": الإصدار الأخير، الذي تم إصداره في أكتوبر 2024، يقدم تحسينات كبيرة وواجهة برمجة تطبيقات جديدة.
بناء دارك نت
يتطلب إنشاء Darknet مترجم C++ 17 أو إصدار أحدث، OpenCV، ونظام البناء CMake. على الرغم من أن العملية قد تبدو معقدة، إلا أنك لست بحاجة إلى أن تكون خبيرًا في لغة C++ لإنشاء وتثبيت وتشغيل Darknet/YOLO.
خيارات البناء:
1. Google Colab: تعليمات Google Colab مطابقة لتعليمات Linux.
2. طريقة Linux CMake: توفر هذه الطريقة دليلاً مفصلاً لمستخدمي Linux.
3. طريقة Windows CMake: اتبع هذه الإرشادات لإنشاء Darknet على Windows.
ملاحظة: إذا كنت تستخدم برامج تعليمية قديمة، فقد تختلف خطوات الإنشاء الخاصة بها عن النهج الموحد الجديد الموضح أدناه.
مطورو البرامج: تفضل بزيارة https://darknetcv.ai/ للحصول على رؤى حول الأعمال الداخلية لإطار عمل اكتشاف الكائنات Darknet/YOLO.
جوجل كولاب
تعكس تعليمات Google Colab بشكل وثيق طريقة Linux CMake. هناك العديد من دفاتر ملاحظات Jupyter ضمن الدليل الفرعي colab والتي توضح مهام محددة مثل تدريب شبكة جديدة.
طريقة لينكس CMake
اتبع هذه التعليمات لإنشاء Darknet على Linux:
1. المتطلبات الأساسية: تثبيت الأدوات اللازمة:
``باش
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Clone Darknet: تنزيل مستودع Darknet:
``باش
mkdir ~/srccd ~/src
استنساخ بوابة https://github.com/hank-ai/darknet
مؤتمر نزع السلاح داركنت
`
3. إنشاء دليل البناء: قم بإنشاء دليل لعملية البناء:
``باش
بناء مكدير
بناء القرص المضغوط
`
4. التكوين باستخدام CMake: قم بإنشاء ملفات البناء:
``باش
cmake -DCMAKEBUILDTYPE=إطلاق ..
`
5. إنشاء Darknet: إنشاء الملفات التنفيذية لـ Darknet:
``باش
جعل -j4
`
6. حزمة التثبيت: قم بإنشاء حزمة DEB لسهولة التثبيت (اختياري):
``باش
اصنع الحزمة
sudo dpkg -i darknet-VERSION.deb
`
7. CUDA/cuDNN (اختياري): لتسريع وحدة معالجة الرسومات، قم بتثبيت CUDA أو CUDA+cuDNN:
* كودا: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
8. التحقق من التثبيت: بعد التثبيت، تحقق من إصدار Darknet:
``باش
نسخة دارك نت
`
طريقة ويندوز CMake
هذه التعليمات مخصصة لبناء Darknet على تثبيت Windows 11 22H2 نظيف.
1. تثبيت المتطلبات الأساسية:
``باش
تثبيت Winget Git.Git تثبيت Winget Kitware.CMake تثبيت Winget nsis.nsis تثبيت Winget Microsoft.VisualStudio.2022.Community
`
2. دعم Visual Studio C++:
* افتح برنامج تثبيت Visual Studio وحدد تعديل.
* قم بتمكين تطوير سطح المكتب باستخدام C++ وانقر فوق "تعديل".
3. موجه أوامر المطور لـ VS 2022: افتح موجه أوامر المطور لـ 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/cuDNN (اختياري): لتسريع وحدة معالجة الرسومات، قم بتثبيت CUDA أو CUDA+cuDNN:
* كودا: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
6. استنساخ الشبكة المظلمة:
``باش
مؤتمر نزع السلاح ج: سرك
استنساخ بوابة https://github.com/hank-ai/darknet.git
مؤتمر نزع السلاح داركنت
بناء مكدير
بناء القرص المضغوط
`
7. التكوين باستخدام CMake:
``باش
cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. إنشاء Darknet باستخدام MSBuild:
``باش
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;التكوين=إصدار PACKAGE.vcxproj
`
9. التحقق من التثبيت: قم بتشغيل Darknet القابل للتنفيذ وتحقق من الإصدار:
``باش
الإصدار C:srcdarknetbuildsrc-cliReleasedarknet.exe
`
10. تثبيت حزمة NSIS: قم بتشغيل ملف darknet-VERSION.exe في دليل البناء لتثبيت Darknet والمكتبات والملفات المضمنة وملفات DLL.
باستخدام دارك نت
يوفر Darknet واجهة سطر أوامر (CLI) للتفاعل مع إطار العمل.
ملاحظة: بالإضافة إلى واجهة سطر الأوامر الخاصة بـ Darknet، يوفر مشروع DarkHelp واجهة سطر أوامر بديلة ذات ميزات محسنة. يمكنك استخدام كل من Darknet CLI وDarkHelp CLI معًا.
أوامر Darknet CLI الشائعة:
مساعدة: قائمة الأوامر المتاحة:
``باش
مساعدة على الانترنت المظلم
`
الإصدار: التحقق من إصدار Darknet:
``باش
نسخة دارك نت
`
التنبؤ (الصورة): إجراء اكتشاف الكائن على الصورة:
``باش
# الإصدار 2
اختبار كاشف الانترنت المظلم 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
`
إحداثيات الإخراج (الصورة): الحصول على إحداثيات الكائن:
``باش
# الإصدار 2
اختبار كاشف الشبكة المظلمة للحيوانات. بيانات Animals.cfg Animalbest.weights -extoutput dog.jpg
# الإصدار 3
darknet01inference_images حيوانات dog.jpg
#المساعدة المظلمة
DarkHelp --json Animals.cfg Animals.names Animal_best.weights dog.jpg
`
معالجة الفيديو:
``باش
# الإصدار 2
# تشغيل على ملف الفيديو
عرض توضيحي لكاشف الشبكة المظلمة للحيوانات.بيانات الحيوانات.cfg Animalbest.weights -extoutput test.mp4
# تشغيل على كاميرا الويب
عرض تجريبي لكاشف الشبكة المظلمة Animals.data Animals.cfg Animal_best.weights -c 0
# الإصدار 3
# تشغيل على ملف الفيديو
darknet03display_videos Animals.cfg test.mp4
# تشغيل على كاميرا الويب
حيوانات darknet08display_webcam
#المساعدة المظلمة
# تشغيل على ملف الفيديو
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
حفظ النتائج إلى الفيديو:
``باش
# الإصدار 2
عرض تجريبي للكشف عن darknet للحيوانات.بيانات الحيوانات.cfg Animalbest.weights test.mp4 -outfilename res.avi
# الإصدار 3
darknet05processvideosحيوانات متعددة الخيوط.cfg حيوانات.أسماء الحيوانات_أفضل.اختبار الأوزان.mp4
#المساعدة المظلمة
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
إخراج جسون:
``باش
# الإصدار 2
عرض توضيحي لكاشف الشبكة المظلمة للحيوانات.بيانات الحيوانات.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
`
وحدة معالجة الرسومات المحددة: التشغيل على وحدة معالجة الرسومات المخصصة:
``باش
# الإصدار 2
عرض تجريبي لكاشف الشبكة المظلمة Animals.data Animals.cfg Animal_best.weights -i 1 test.mp4
`
التحقق من الدقة: تقييم دقة الشبكة:
``باش
خريطة كاشف الانترنت المظلم القيادة.بيانات القيادة.cfg القيادة_أفضل.أوزان
`
حساب المراسي:
``باش
كاشف الشبكة المظلمة calcanchors Animals.data -عدد_العناقيد 6 -العرض 320 -الارتفاع 256
`
تدريب شبكة جديدة
DarkMark: للحصول على أسلوب بديهي ومبسط للتعليق والتدريب، استخدم DarkMark.
الإعداد اليدوي:
1. إنشاء الدليل: قم بإعداد مجلد لبيانات التدريب الخاصة بك.
2. نسخ التكوين: اختر ملف تكوين كقالب، على سبيل المثال، cfg/yolov4-tiny.cfg، وانسخه إلى الدليل الخاص بك.
3. إنشاء ملف .names: قم بإنشاء ملف نصي (على سبيل المثال، Animals.names) يدرج فئاتك، بمعدل فصل واحد في كل سطر.
4. إنشاء ملف بيانات: قم بإنشاء ملف نصي (على سبيل المثال، Animals.data) بالبنية التالية:
`
الفصول = 4
القطار = /path/to/animals_train.txt
صالح = /path/to/animals_valid.txt
الأسماء = /path/to/animals.names
النسخ الاحتياطي = /path/to/backup_directory
`
5. إعداد مجموعة البيانات: تنظيم الصور وملفات التعليقات التوضيحية المقابلة في الدليل.
6. إنشاء ملفات تدريب/نصية صالحة: قم بإنشاء ملفين نصيين (animalstrain.txt، Animalsvalid.txt) يدرجان المسارات إلى الصور للتدريب والتحقق من الصحة.
7. تعديل التكوين:
* تعيين الدفعة = 64.
* ضبط التقسيمات الفرعية بناءً على ذاكرة وحدة معالجة الرسومات الخاصة بك.
قم بتعيين max_batches على قيمة مناسبة (على سبيل المثال، 2000 عدد الفئات).
* اضبط الخطوات على 80% و90% من max_batches.
* اضبط العرض والارتفاع وفقًا لأبعاد شبكتك.
* تحديث الفصول لتتناسب مع عدد الفصول.
* تعديل المرشحات في الأقسام [التلافيفية] قبل الأقسام [yolo].
8. ابدأ التدريب:
``باش
مؤتمر نزع السلاح / المسار / إلى / الحيوانات
كاشف الشبكة المظلمة -خريطة -dont_show تدريب الحيوانات.بيانات الحيوانات.cfg
`
9. عرض التقدم: مراقبة تقدم التدريب من خلال ملف Chart.png.
أدوات وروابط أخرى
DarkMark: تعمل هذه الأداة على تبسيط التعليقات التوضيحية للصور والتحقق منها وإنشاء الملفات للتدريب على Darknet.
DarkHelp: واجهة سطر الأوامر (CLI) بديلة قوية لـ Darknet مع ميزات مثل تقسيم الصور وتتبع الكائنات.
الأسئلة الشائعة حول Darknet/YOLO: ابحث عن إجابات للأسئلة المتداولة.
قناة Stéphane على YouTube: يمكنك الوصول إلى البرامج التعليمية وأمثلة مقاطع الفيديو.
Darknet/YOLO Discord Server: انضم إلى المجتمع للحصول على الدعم والمناقشات.
خريطة الطريق
مكتمل:
تم استبدال qsort() بـ std::sort() لتحقيق الكفاءة.
تمت إزالة التعليمات البرمجية المهملة (على سبيل المثال، check_mistakes، getchar()، system()).
تم ترحيل Darknet إلى مترجم C++.
تم إصلاح مشكلات بناء Windows.
استعادة دعم بايثون.
قام ببناء مكتبة Darknet.
تمت إعادة تمكين رمز CUDA/GPU وCUDNN ونصف CUDNN.
تحسين معلومات إصدار CUDA.
إعادة تمكين مجموعة تعليمات AVX.
تمت إزالة الحلول القديمة وMakefile.
جعل OpenCV تبعية إلزامية.
تمت إزالة تبعيات المكتبة القديمة (على سبيل المثال، pthread، STB).
إعادة كتابة CMakeLists.txt لتحسين اكتشاف CUDA.
تمكين البنيات خارج المصدر.
تحسين إخراج رقم الإصدار.
تم تنفيذ تحسينات الأداء للتدريب والاستدلال.
تنظيف التعليمات البرمجية لتحسين القراءة.
إعادة كتابة darknet.h لتحسين واجهة برمجة التطبيقات.
تحسين الدعم لأجهزة Jetson المستندة إلى ARM.
تم إصلاح واجهة برمجة تطبيقات Python في الإصدار 3.
الأهداف قصيرة المدى:
قم بتبديل printf() مع std::cout.
التحقق من دعم كاميرا Zed.
تحسين تحليل سطر الأوامر.
الأهداف المتوسطة المدى:
استبدل جميع رموز char بـ std::string.
عنوان تحذيرات المترجم.
تحسين استخدام cv::Mat بدلاً من بنيات الصور المخصصة.
ترقية وظيفة القائمة إلى std::vector أو std::list.
دعم الصور ذات التدرج الرمادي ذات القناة الواحدة.
إضافة دعم لصور قناة N (N > 3).
تنظيف الكود المستمر.
الأهداف طويلة المدى:
معالجة مشكلات CUDA/CUDNN عبر وحدات معالجة الرسومات المختلفة.
أعد كتابة كود CUDA+cuDNN لتحسين الكفاءة.
اكتشف الدعم لوحدات معالجة الرسومات غير التابعة لـ NVIDIA.
تنفيذ الصناديق المحيطة المدورة ودعم "الزاوية".
أضف نقاط المفاتيح والهياكل العظمية والخرائط الحرارية.
إدخال قدرات التجزئة.