กรอบการตรวจจับวัตถุ Darknet และ YOLO
โลโก้ !darknet และ hank.ai
Darknet เป็นเฟรมเวิร์กโครงข่ายประสาทเทียมแบบโอเพ่นซอร์สที่เขียนด้วยภาษา C, C++ และ CUDA
YOLO (คุณดูเพียงครั้งเดียว) คือระบบตรวจจับวัตถุแบบเรียลไทม์ที่ล้ำสมัยที่ทำงานภายในกรอบงาน Darknet
อ่านวิธีที่ Hank.ai ช่วยเหลือชุมชน Darknet/YOLO
ประกาศ Darknet V3 "Jazz"
ตรวจสอบเว็บไซต์ Darknet/YOLO
โปรดอ่านคำถามที่พบบ่อยของ Darknet/YOLO
เข้าร่วมเซิร์ฟเวอร์ Darknet/YOLO Discord
เอกสาร
1. กระดาษ YOLOv7
2. กระดาษปรับขนาด-YOLOv4
3. กระดาษ YOLOv4
4. กระดาษ YOLOv3
ข้อมูลทั่วไป
เฟรมเวิร์ก Darknet/YOLO นั้นเร็วกว่าและแม่นยำกว่าเฟรมเวิร์กอื่นและเวอร์ชัน YOLO
เฟรมเวิร์กนั้นฟรีและโอเพ่นซอร์สโดยสมบูรณ์ คุณสามารถรวม Darknet/YOLO เข้ากับโปรเจ็กต์และผลิตภัณฑ์ที่มีอยู่ รวมถึงผลิตภัณฑ์เชิงพาณิชย์ โดยไม่ต้องมีใบอนุญาตหรือค่าธรรมเนียม
Darknet V3 ("Jazz") เปิดตัวในเดือนตุลาคม 2024 สามารถรันวิดีโอชุดข้อมูล LEGO ได้อย่างแม่นยำที่สูงถึง 1,000 FPS เมื่อใช้ NVIDIA RTX 3090 GPU ซึ่งหมายความว่าแต่ละเฟรมวิดีโอสามารถประมวลผลได้ใน 1 มิลลิวินาทีหรืออ่าน ปรับขนาดและประมวลผลโดย Darknet /YOLO ในเวลาอันสั้น
หากคุณต้องการความช่วยเหลือหรือต้องการหารือเกี่ยวกับ Darknet/YOLO โปรดเข้าร่วมเซิร์ฟเวอร์ Discord ของ Darknet/YOLO: https://discord.gg/zSq8rtW
Darknet/YOLO เวอร์ชัน CPU สามารถทำงานบนอุปกรณ์ง่ายๆ เช่น Raspberry Pi, เซิร์ฟเวอร์คลาวด์และ colab, เดสก์ท็อป, แล็ปท็อป และแพลตฟอร์มการฝึกอบรมระดับไฮเอนด์ Darknet/YOLO เวอร์ชัน GPU ต้องใช้ GPU ที่รองรับ CUDA ของ NVIDIA
Darknet/YOLO เป็นที่รู้จักว่าทำงานบน Linux, Windows และ Mac ดูคำแนะนำในการสร้างด้านล่าง
เวอร์ชันดาร์กเน็ต
เครื่องมือ Darknet ดั้งเดิมที่เขียนโดย Joseph Redmon ในปี 2556-2560 ไม่มีหมายเลขเวอร์ชัน เราพิจารณาเวอร์ชันนี้ 0.x
พื้นที่เก็บข้อมูล Darknet ยอดนิยมถัดไปที่ดูแลโดย Alexey Bochkovskiy ระหว่างปี 2560-2564 ยังไม่มีหมายเลขเวอร์ชันเช่นกัน เราพิจารณาเวอร์ชัน 1.x นี้
พื้นที่เก็บข้อมูล Darknet ซึ่งสนับสนุนโดย Hank.ai และดูแลโดย Stéphane Charette ตั้งแต่ปี 2023 เป็นพื้นที่แรกที่มีคำสั่งเวอร์ชัน ตั้งแต่ปี 2023 ถึงสิ้นปี 2024 จะกลับมาเป็นเวอร์ชัน 2.x "OAK"
เป้าหมายคือการทำลายฟังก์ชันการทำงานที่มีอยู่ให้น้อยที่สุดเท่าที่จะเป็นไปได้ในขณะที่ทำความคุ้นเคยกับฐานโค้ด
เขียนขั้นตอนการสร้างใหม่เพื่อให้เรามีวิธีการสร้างบน Windows และ Linux แบบครบวงจรโดยใช้ CMake
แปลงฐานโค้ดเพื่อใช้คอมไพเลอร์ C++
ปรับปรุง Chart.png ระหว่างการฝึกอบรม
การแก้ไขข้อบกพร่องและการเพิ่มประสิทธิภาพที่เกี่ยวข้องกับประสิทธิภาพ ซึ่งส่วนใหญ่เกี่ยวข้องกับการลดเวลาที่ต้องใช้ในการฝึกอบรมเครือข่าย
สาขาสุดท้ายของฐานโค้ดนี้คือเวอร์ชัน 2.1 ในสาขา v2
การพัฒนาระยะต่อไปจะเริ่มในกลางปี 2567 และจะเปิดตัวในเดือนตุลาคม 2567 คำสั่ง version ส่งคืน 3.x "JAZZ"
ลบคำสั่งเก่าและคำสั่งที่ไม่ได้รับการดูแลออกจำนวนมาก
การปรับปรุงประสิทธิภาพหลายอย่าง ทั้งในเวลาฝึกอบรมและในเวลาอนุมาน
C API แบบดั้งเดิมได้รับการแก้ไขแล้ว แอปพลิเคชันที่ใช้ Darknet API ดั้งเดิมจำเป็นต้องมีการแก้ไขเล็กน้อย: https://darknetcv.ai/api/api.html
Darknet V3 C และ C++ API ใหม่: https://darknetcv.ai/api/api.html
แอปพลิเคชันใหม่และโค้ดตัวอย่างใน src-examples: https://darknetcv.ai/api/files.html
หากคุณต้องการเรียกใช้คำสั่งใดคำสั่งหนึ่งเหล่านี้ คุณสามารถตรวจสอบสาขา v2 ก่อนหน้าได้ตลอดเวลา โปรดแจ้งให้เราทราบ เพื่อให้เราตรวจสอบการเพิ่มคำสั่งที่ขาดหายไปกลับเข้าไปได้
ตุ้มน้ำหนักฝึกหัด MSCOCO
เพื่อความสะดวก YOLO เวอร์ชันยอดนิยมหลายเวอร์ชันได้รับการฝึกอบรมล่วงหน้าในชุดข้อมูล MSCOCO ชุดข้อมูลนี้มี 80 หมวดหมู่และสามารถดูได้ในไฟล์ข้อความ cfg/coco.names
มีชุดข้อมูลที่เรียบง่ายกว่าและตุ้มน้ำหนักที่ได้รับการฝึกล่วงหน้าอื่นๆ หลายชุดสำหรับการทดสอบ Darknet/YOLO เช่น LEGO Gears และ Rolodex สำหรับข้อมูลเพิ่มเติม โปรดดูคำถามที่พบบ่อยของ Darknet/YOLO
สามารถดาวน์โหลดตุ้มน้ำหนักล่วงหน้าของ MSCOCO ได้จากสถานที่ต่างๆ จำนวนมากหรือจากพื้นที่เก็บข้อมูลนี้:
1. YOLOv2 พฤศจิกายน 2559
* YOLOv2-จิ๋ว
*YOLOv2-เต็ม
2. YOLOv3 พฤษภาคม 2018
* YOLOv3-จิ๋ว
*YOLOv3-เต็ม
3. YOLOv4 พฤษภาคม 2020
* YOLOv4-จิ๋ว
*YOLOv4-เต็ม
4. YOLOv7 สิงหาคม 2022
* YOLOv7-จิ๋ว
*YOLOv7-เต็ม
ตุ้มน้ำหนักที่ฝึกล่วงหน้าของ MSCOCO มีไว้เพื่อการสาธิตเท่านั้น ไฟล์ .cfg และ .names ที่เกี่ยวข้องสำหรับ MSCOCO จะอยู่ในไดเร็กทอรี cfg คำสั่งตัวอย่าง:
`ทุบตี
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 coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights วิดีโอ 1.avi
-
โปรดทราบว่าควรฝึกอบรมเครือข่ายของตนเอง MSCOCO มักใช้เพื่อยืนยันว่าทุกอย่างเรียบร้อยดี
สร้าง
วิธีการสร้างต่างๆ ที่มีอยู่ในอดีต (ก่อนปี 2023) ได้ถูกรวมเข้าเป็นโซลูชันแบบครบวงจร Darknet ต้องการ C++17 หรือสูงกว่า, OpenCV และใช้ CMake เพื่อสร้างไฟล์โปรเจ็กต์ที่จำเป็น
คุณไม่จำเป็นต้องรู้ C++ เพื่อสร้าง ติดตั้ง หรือรัน Darknet/YOLO มากไปกว่าการเป็นช่างเครื่องในการขับรถ
โปรดทราบว่าคุณกำลังติดตามบทช่วยสอนรุ่นเก่าที่มีขั้นตอนการสร้างที่ซับซ้อนกว่า หรือหากขั้นตอนการสร้างไม่ตรงกับขั้นตอนใน Readme นี้ ตั้งแต่เดือนสิงหาคม 2023 เป็นต้นไป ขั้นตอนการสร้างใหม่จะอธิบายไว้ด้านล่าง
นักพัฒนาซอฟต์แวร์ควรไปที่ https://darknetcv.ai/ เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับกรอบการทำงานภายในของ Darknet/YOLO object Detection Framework
Google Colab
วิธีการของ Google Colab เหมือนกับวิธีการของ Linux มีสมุดบันทึก Jupyter หลายเครื่องที่แสดงวิธีดำเนินการบางอย่าง เช่น การฝึกอบรมเครือข่ายใหม่
ดูสมุดบันทึกในไดเรกทอรีย่อย colab หรือทำตามคำแนะนำของ Linux ด้านล่าง
วิธีการลินุกซ์ CMake
บทช่วยสอนการสร้าง Darknet สำหรับ Linux
ทางเลือก: หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ในขณะนี้ หากติดตั้งแล้ว Darknet จะใช้ GPU ของคุณเพื่อเร่งการประมวลผลภาพ (และวิดีโอ)
คุณต้องลบไฟล์ CMakeCache.txt ออกจากไดเร็กทอรี Darknet build เพื่อบังคับให้ CMake ค้นหาไฟล์ที่จำเป็นทั้งหมดอีกครั้ง
อย่าลืมสร้าง Darknet ใหม่
Darknet สามารถทำงานได้โดยไม่ต้องใช้มัน แต่ถ้าคุณต้องการฝึกเครือข่ายแบบกำหนดเอง คุณต้องมี 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 เวอร์ชันใหม่กว่า:
คำแนะนำเหล่านี้ถือว่า (แต่ไม่จำเป็นต้องใช้!) ระบบที่ใช้ Ubuntu 22.04 หากใช้การกระจายแบบอื่น ให้ปรับเปลี่ยนตามความจำเป็น
`ทุบตี
sudo apt-get ติดตั้ง build-essential git libopencv-dev cmake
mkdir ~/srccd ~/src
โคลนคอมไพล์ https://github.com/hank-ai/darknet
ซีดีดาร์กเน็ต
สร้าง mkdir
สร้างซีดี
cmake -DCMAKEBUILDTYPE=ปล่อย ..
ทำแพ็คเกจ -j4
sudo dpkg -i darknet-VERSION.deb
-
หากคุณใช้ CMake เวอร์ชันเก่า คุณจะต้องอัปเกรด CMake ก่อนที่จะรันคำสั่ง cmake ด้านบน การอัพเกรด CMake บน Ubuntu สามารถทำได้โดยใช้คำสั่งต่อไปนี้:
`ทุบตี
sudo apt-get ล้าง cmake
sudo snap ติดตั้ง cmake --classic
-
หากคุณใช้ bash เป็นเชลล์คำสั่ง คุณจะต้องรีสตาร์ทเชลล์ ณ จุดนี้ หากใช้ปลาควรเลือกเส้นทางใหม่ทันที
ผู้ใช้ขั้นสูง:
หากคุณต้องการสร้างไฟล์การติดตั้ง RPM แทนไฟล์ DEB โปรดดูบรรทัดที่เกี่ยวข้องใน CM_package.cmake ก่อนที่จะรันแพ็คเกจ make -j4 คุณต้องแก้ไขสองบรรทัดนี้ก่อน:
`เอาล่ะ
SET (CPACKGENERATOR "DEB")# SET (CPACKGENERATOR "RPM")
-
สำหรับการแจกแจงเช่น Centos และ OpenSUSE คุณต้องสลับสองบรรทัดนี้ใน CM_package.cmake เป็น:
`เอาล่ะ
ชุด (CPACK_GENERATOR "DEB")
ชุด (CPACK_GENERATOR "รอบต่อนาที")
-
หากต้องการติดตั้งแพ็คเกจ ให้ใช้ตัวจัดการแพ็คเกจปกติของการแจกจ่ายของคุณ ตัวอย่างเช่น บนระบบที่ใช้ Debian เช่น Ubuntu:
`ทุบตี
sudo dpkg -i darknet-2.0.1-Linux.deb
-
การติดตั้งแพ็คเกจ .deb จะคัดลอกไฟล์ต่อไปนี้:
/usr/bin/darknet เป็นโปรแกรมปฏิบัติการ Darknet ปกติ เรียกใช้เวอร์ชัน darknet จาก CLI เพื่อยืนยันว่าติดตั้งอย่างถูกต้อง
/usr/include/darknet.h คือ Darknet API ที่ใช้โดยนักพัฒนา C, C++ และ Python
/usr/include/darknet_version.h มีข้อมูลเวอร์ชันสำหรับนักพัฒนา
/usr/lib/libdarknet.so เป็นไลบรารีสำหรับเชื่อมโยงนักพัฒนา C, C++ และ Python
/opt/darknet/cfg/... เป็นที่จัดเก็บเทมเพลต .cfg ทั้งหมด
คุณทำเสร็จแล้ว! Darknet ถูกสร้างและติดตั้งลงใน /usr/bin/ รันคำสั่งต่อไปนี้เพื่อทดสอบ: เวอร์ชัน darknet
หากคุณไม่มี /usr/bin/darknet แสดงว่าคุณไม่ได้ติดตั้ง คุณเพิ่งสร้างมันขึ้นมา! โปรดตรวจสอบให้แน่ใจว่าได้ติดตั้งไฟล์ .deb หรือ .rpm ตามที่อธิบายไว้ข้างต้น
วิธีการ Windows CMake
คำแนะนำเหล่านี้ถือเป็นการติดตั้ง Windows 11 22H2 ใหม่
เปิดหน้าต่างพรอมต์คำสั่ง cmd.exe ปกติแล้วเรียกใช้คำสั่งต่อไปนี้:
`ทุบตี
winget ติดตั้ง Git.Git
winget ติดตั้ง Kitware.CMake
ติดตั้ง winget nsis.nsis
winget ติดตั้ง Microsoft.VisualStudio.2022.Community
-
ณ จุดนี้ เราจำเป็นต้องแก้ไขการติดตั้ง Visual Studio เพื่อรวมการรองรับแอปพลิเคชัน C++:
คลิกที่เมนู Windows Start และเรียกใช้ Visual Studio Installer
คลิก "แก้ไข"
เลือก "การพัฒนาเดสก์ท็อปโดยใช้ C ++"
คลิก "แก้ไข" ที่มุมขวาล่าง จากนั้นคลิก "ใช่"
เมื่อดาวน์โหลดและติดตั้งทุกอย่างแล้ว ให้คลิกที่เมนู Windows Start อีกครั้ง และเลือก Developer Command Prompt สำหรับ Visual Studio 2022 อย่าใช้ PowerShell สำหรับขั้นตอนเหล่านี้ คุณจะประสบปัญหา!
ผู้ใช้ขั้นสูง:
แทนที่จะเรียกใช้พรอมต์คำสั่งของนักพัฒนา คุณสามารถเข้าสู่ระบบอุปกรณ์โดยใช้พรอมต์คำสั่งปกติหรือ ssh และเรียกใช้ "Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat" ด้วยตนเอง
เมื่อคุณมีพรอมต์คำสั่งสำหรับนักพัฒนาที่ทำงานตามที่กล่าวข้างต้น (ไม่ใช่ PowerShell!) ให้รันคำสั่งต่อไปนี้เพื่อติดตั้ง Microsoft VCPKG ซึ่งจะใช้ในการสร้าง OpenCV:
`ทุบตี
CDC:
mkdir c:srccd c:src
โคลนคอมไพล์ https://github.com/microsoft/vcpkg
ซีดี vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe รวมการติดตั้ง
.vcpkg.exe รวม powershell.vcpkg.exe ติดตั้ง opencv [contrib, dnn, freetype, jpeg, openmp,png, webp, world]:x64-windows
-
โปรดอดทนกับขั้นตอนสุดท้ายนี้ เนื่องจากอาจใช้เวลานานในการรัน ต้องใช้การดาวน์โหลดและการสร้างเป็นจำนวนมาก
ผู้ใช้ขั้นสูง:
โปรดทราบว่ามีโมดูลเสริมอื่นๆ มากมายที่คุณอาจต้องการเพิ่มเมื่อสร้าง OpenCV เรียกใช้ .vcpkg.exe ค้นหา opencv เพื่อดูรายการทั้งหมด
ทางเลือก: หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ในขณะนี้ หากติดตั้งแล้ว Darknet จะใช้ GPU ของคุณเพื่อเร่งการประมวลผลภาพ (และวิดีโอ)
คุณต้องลบไฟล์ CMakeCache.txt ออกจากไดเร็กทอรี Darknet build เพื่อบังคับให้ CMake ค้นหาไฟล์ที่จำเป็นทั้งหมดอีกครั้ง
อย่าลืมสร้าง Darknet ใหม่
Darknet สามารถทำงานได้โดยไม่ต้องใช้มัน แต่ถ้าคุณต้องการฝึกเครือข่ายแบบกำหนดเอง คุณต้องมี 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#download-windows เพื่อดาวน์โหลดและติดตั้ง cuDNN
หลังจากติดตั้ง CUDA แล้ว ตรวจสอบให้แน่ใจว่าคุณสามารถเรียกใช้ nvcc.exe และ nvidia-smi.exe ได้ คุณอาจต้องแก้ไขตัวแปร PATH
หลังจากดาวน์โหลด cuDNN แล้ว ให้แตกไฟล์และคัดลอก bin รวม และไดเร็กทอรี lib ไปยัง C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[version]/. คุณอาจต้องเขียนทับไฟล์บางไฟล์
หากคุณติดตั้ง CUDA หรือ CUDA+cuDNN ในภายหลัง หรือหากคุณอัพเกรดเป็นซอฟต์แวร์ NVIDIA เวอร์ชันใหม่กว่า:
ต้องติดตั้ง CUDA หลังจาก Visual Studio หากคุณอัปเกรด Visual Studio อย่าลืมติดตั้ง CUDA ใหม่
เมื่อขั้นตอนก่อนหน้าทั้งหมดเสร็จสมบูรณ์ คุณจะต้องโคลน Darknet และสร้างมันขึ้นมา ในขั้นตอนนี้ เรายังต้องบอก CMake ด้วยว่า vcpkg อยู่ที่ไหน เพื่อให้สามารถค้นหา OpenCV และการอ้างอิงอื่นๆ ได้:
`ทุบตี
ซีดี c:src
โคลนคอมไพล์ https://github.com/hank-ai/darknet.git
ซีดีดาร์กเน็ต
สร้าง mkdir
สร้างซีดี
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;Configuration=Release PACKAGE.vcxproj
-
หากคุณได้รับข้อผิดพลาดเกี่ยวกับ CUDA หรือ cuDNN DLL ที่หายไป (เช่น cublas64_12.dll) ให้คัดลอกไฟล์ CUDA .dll ไปยังไดเร็กทอรีเอาต์พุตเดียวกันกับ Darknet.exe ด้วยตนเอง ตัวอย่างเช่น:
`ทุบตี
คัดลอก "C: Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
-
(นี่คือตัวอย่าง! โปรดตรวจสอบเวอร์ชันที่คุณใช้งานอยู่และรันคำสั่งที่เหมาะสมสำหรับเวอร์ชันที่คุณติดตั้ง)
หลังจากคัดลอกไฟล์แล้ว ให้รันคำสั่ง msbuild.exe สุดท้ายอีกครั้งเพื่อสร้างแพ็คเกจการติดตั้ง NSIS:
`ทุบตี
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
-
ผู้ใช้ขั้นสูง:
โปรดทราบว่าผลลัพธ์ของคำสั่ง cmake คือไฟล์โซลูชัน Visual Studio ปกติ Darknet.sln หากคุณเป็นนักพัฒนาซอฟต์แวร์ที่ใช้ Visual Studio GUI เป็นประจำแทน msbuild.exe เพื่อสร้างโครงการ คุณสามารถละเว้นบรรทัดคำสั่งและโหลดโครงการ Darknet ใน Visual Studio ได้
ตอนนี้คุณควรมีไฟล์นี้พร้อมที่จะรัน: C:srcDarknetbuildsrc-cliReleasedarknet.exe เรียกใช้คำสั่งต่อไปนี้เพื่อทดสอบ: เวอร์ชัน C:srcDarknetbuildsrc-cliReleasedarknet.exe
หากต้องการติดตั้ง Darknet ไลบรารี รวมไฟล์ และ DLL ที่จำเป็นอย่างถูกต้อง ให้เรียกใช้วิซาร์ดการติดตั้ง NSIS ที่สร้างไว้ในขั้นตอนสุดท้าย ดูไฟล์ darknet-VERSION.exe ในไดเร็กทอรี build ตัวอย่างเช่น:
`ทุบตี
darknet-2.0.31-win64.exe
-
การติดตั้งแพ็คเกจการติดตั้ง NSIS จะ:
สร้างไดเร็กทอรีชื่อ Darknet เช่น C:Program FilesDarknet
ติดตั้งแอปพลิเคชัน CLI darknet.exe และแอปพลิเคชันตัวอย่างอื่นๆ
ติดตั้งไฟล์ .dll ของบริษัทอื่นที่จำเป็น เช่น ไฟล์จาก OpenCV
ติดตั้งไฟล์ Darknet .dll, .lib และ .h ที่จำเป็นเพื่อใช้ darknet.dll จากแอปพลิเคชันอื่น
ติดตั้งไฟล์เทมเพลต .cfg
คุณทำเสร็จแล้ว! หลังจากวิซาร์ดการติดตั้งเสร็จสิ้น Darknet จะถูกติดตั้งลงใน C:Program FilesDarknet รันคำสั่งต่อไปนี้เพื่อทดสอบ: เวอร์ชัน C:Program FilesDarknetbindarknet.exe
หากคุณไม่มี C:/Program Files/darknet/bin/darknet.exe แสดงว่าคุณไม่ได้ติดตั้ง คุณเพิ่งสร้างมันขึ้นมา! โปรดตรวจสอบให้แน่ใจว่าได้กรอกแต่ละแผงของตัวช่วยสร้างการติดตั้ง NSIS ในขั้นตอนก่อนหน้านี้แล้ว
การใช้ดาร์กเน็ต
คลีไอ
ต่อไปนี้ไม่ใช่รายการคำสั่งทั้งหมดที่ Darknet รองรับ
นอกจาก Darknet CLI แล้ว ยังมี CLI ของโปรเจ็กต์ DarkHelp ซึ่งจัดเตรียม CLI ทางเลือกสำหรับ Darknet/YOLO DarkHelp CLI ยังมีคุณสมบัติขั้นสูงหลายประการที่ไม่มีให้บริการโดยตรงใน Darknet คุณสามารถใช้ Darknet CLI และ DarkHelp CLI ร่วมกันได้ โดยไม่ได้แยกจากกัน
สำหรับคำสั่งส่วนใหญ่ที่แสดงด้านล่าง คุณจะต้องมีไฟล์ .weights รวมถึงไฟล์ .names และ .cfg ที่เกี่ยวข้อง คุณสามารถฝึกอบรมเครือข่ายของคุณเอง (ขอแนะนำอย่างยิ่ง!) หรือดาวน์โหลดเครือข่ายที่ผู้อื่นฝึกอบรมและเผยแพร่ทางอินเทอร์เน็ตได้ฟรี ตัวอย่างของชุดข้อมูลก่อนการฝึกอบรมได้แก่:
1. LEGO Gears (ค้นหาวัตถุในภาพ)
2. Rolodex (ค้นหาข้อความในภาพ)
3. MSCOCO (การตรวจจับเป้าหมายหมวดหมู่มาตรฐาน 80)
คำสั่งที่รันได้ได้แก่:
แสดงรายการคำสั่งและตัวเลือกบางอย่างที่อาจเรียกใช้:
`ทุบตี
ความช่วยเหลือจาก Darknet
-
ตรวจสอบเวอร์ชั่น:
`ทุบตี
เวอร์ชันดาร์กเน็ต
-
ใช้การทำนายภาพ:
V2: การทดสอบเครื่องตรวจจับ darknet cars.data cars.cfg cars_best.weights image1.jpg
V3: darknet02displayannotatedimages cars.cfg image1.jpg
DarkHelp: DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
พิกัดขาออก:
V2: การทดสอบเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights -extoutput dog.jpg
V3: darknet01inference_images สัตว์ dog.jpg
DarkHelp: DarkHelp --jsonanimals.cfganimals.namesanimals_best.weights dog.jpg
กำลังประมวลผลวิดีโอ:
V2: การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights -extoutput test.mp4
V3: darknet03display_videosanimals.cfg test.mp4
DarkHelp: DarkHelpanimals.cfganimals.namesanimals_best.weights test.mp4
อ่านจากเว็บแคม:
V2: การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimals_best.weights -c 0
V3: สัตว์ darknet08display_webcam
บันทึกผลลัพธ์ลงในวิดีโอ:
V2: การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights test.mp4 -outfilename res.avi
V3: darknet05processvideosmultithreadedanimals.cfganimals.namesanimals_best.weights test.mp4
DarkHelp: DarkHelpanimals.cfganimals.namesanimals_best.weights test.mp4
เจสัน:
V2: การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
V3: darknet06imagestojson สัตว์ image1.jpg
DarkHelp: DarkHelp --jsonanimals.namesanimals.cfganimals_best.weights image1.jpg
ทำงานบน GPU เฉพาะ:
V2: การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimals_best.weights -i 1 test.mp4
ตรวจสอบความถูกต้องของโครงข่ายประสาทเทียม:
`ทุบตี
แผนที่เครื่องตรวจจับ darknet การขับรถ.ข้อมูลการขับรถ.cfg Driving_best.weights ...
-
-
ชื่อรหัส AvgPrecision TP FN FP TN ความแม่นยำ อัตราข้อผิดพลาด ความจำเพาะในการเรียกคืนอย่างแม่นยำ FalsePosRate
-- ---- ------ ------ ------ ------ ------ -------- --------- --------- ------ ---------- ----------
0 คัน 91.2495 32648 3903 5826 65129 0.9095 0.0905 0.8486 0.8932 0.9179 0.0821
รถจักรยานยนต์ 1 คัน 80.4499 2936 513 569 5393 0.8850 0.1150 0.8377 0.8513 0.9046 0.0954
จักรยาน 2 คัน 89.0912 570 124 104 3548 0.9475 0.0525 0.8457 0.8213 0.9715 0.0285
3 คน 76.7937 7072 1727 2574 27523 0.8894 0.1106 0.7332 0.8037 0.9145 0.0855
จำนวน 4 คัน 64.3089 1068 509 733 11288 0.9087 0.0913 0.5930 0.6772 0.9390 0.0610
5 ไฟเขียว 86.8118 1969 239 510 4116 0.8904 0.1096 0.7943 0.8918 0.8898 0.1102
6 ไฟเหลือง 82.0390 126 38 30 1239 0.9525 0.0475 0.8077 0.7683 0.9764 0.0236
7ไฟแดง 94.1033 3449 217 451 4643 0.9237 0.0763 0.8844 0.9408 0.9115 0.0885
-
ตรวจสอบความแม่นยำ mAP@IoU=75:
`ทุบตี
แผนที่เครื่องตรวจจับ darknet Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75
-
การคำนวณจุดยึดใหม่ทำได้ดีที่สุดใน DarkMark เนื่องจากจะทำงาน 100 ครั้งติดต่อกัน และเลือกจุดยึดที่ดีที่สุดจากจุดยึดที่คำนวณทั้งหมด อย่างไรก็ตาม หากคุณต้องการใช้งานเวอร์ชันเก่าใน Darknet:
`ทุบตี
เครื่องตรวจจับ darknet calcanchors Animals.data -numof_clusters 6 - กว้าง 320 - สูง 256
-
ฝึกอบรมเครือข่ายใหม่:
`ทุบตี
เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
-
(ดูส่วนการฝึกอบรมด้านล่าง)
รถไฟ
ลิงก์ด่วนไปยังส่วนที่เกี่ยวข้องในคำถามที่พบบ่อยของ Darknet/YOLO:
1. ฉันควรตั้งค่าไฟล์และไดเร็กทอรีของฉันอย่างไร?
2. ฉันควรใช้โปรไฟล์ใด?
3. ฉันควรใช้คำสั่งใดในการฝึกเครือข่ายของตัวเอง?
การใช้ DarkMark เพื่อสร้างไฟล์ Darknet ที่จำเป็นทั้งหมดเป็นวิธีที่ง่ายที่สุดในการใส่คำอธิบายประกอบและฝึกฝน นี่เป็นวิธีที่แนะนำในการฝึกโครงข่ายประสาทเทียมใหม่อย่างแน่นอน
หากคุณต้องการตั้งค่าไฟล์ต่างๆ ด้วยตนเองเพื่อฝึกเครือข่ายที่กำหนดเอง:
1. สร้างโฟลเดอร์ใหม่เพื่อจัดเก็บไฟล์ ในตัวอย่างนี้ คุณจะสร้างโครงข่ายประสาทเทียมที่ตรวจจับสัตว์ ดังนั้นให้สร้างไดเร็กทอรีต่อไปนี้: ~/nn/animals/
2. คัดลอกไฟล์การกำหนดค่า Darknet ไฟล์ใดไฟล์หนึ่งที่คุณต้องการใช้เป็นเทมเพลต ตัวอย่างเช่น ดูที่ cfg/yolov4-tiny.cfg วางไว้ในโฟลเดอร์ที่คุณสร้างขึ้น ในตัวอย่างนี้ ตอนนี้เรามี ~/nn/animals/animals.cfg
3. สร้างไฟล์ข้อความanimals.namesในโฟลเดอร์เดียวกับที่คุณวางไฟล์การกำหนดค่า ในตัวอย่างนี้ ตอนนี้เรามี ~/nn/animals/animals.names
4. ใช้โปรแกรมแก้ไขข้อความเพื่อแก้ไขไฟล์animals.names ระบุหมวดหมู่ที่คุณต้องการใช้ คุณต้องมี 1 รายการต่อบรรทัด ไม่มีบรรทัดว่าง ไม่มีความคิดเห็น ในตัวอย่างนี้ ไฟล์ .names จะมี 4 บรรทัดพอดี:
-
สุนัข
แมว
นก
ม้า
-
5. สร้างไฟล์ข้อความanimals.dataในโฟลเดอร์เดียวกัน ในตัวอย่างนี้ ไฟล์ .data จะประกอบด้วย:
-
คลาส=4
train=/home/username/nn/animals/animals_train.txt
valid=/home/username/nn/animals/animals_valid.txt
ชื่อ=/home/ชื่อผู้ใช้/nn/animals/animals.names
backup=/home/username/nn/animals
-
6. สร้างโฟลเดอร์เพื่อจัดเก็บรูปภาพและคำอธิบายประกอบของคุณ ตัวอย่างเช่น อาจเป็น ~/nn/animals/dataset รูปภาพแต่ละรูปต้องมีไฟล์ .txt ที่เกี่ยวข้องซึ่งอธิบายคำอธิบายประกอบสำหรับรูปภาพนั้น รูปแบบของไฟล์ความคิดเห็น .txt มีความเฉพาะเจาะจงมาก คุณไม่สามารถสร้างไฟล์เหล่านี้ด้วยตนเองได้ เนื่องจากคำอธิบายประกอบแต่ละรายการจำเป็นต้องมีพิกัดที่แม่นยำของคำอธิบายประกอบ ดู DarkMark หรือซอฟต์แวร์อื่นที่คล้ายคลึงกันเพื่อใส่คำอธิบายประกอบภาพของคุณ รูปแบบคำอธิบายประกอบ YOLO มีอธิบายอยู่ใน Darknet/YOLO FAQ
7. สร้างไฟล์ข้อความ "train" และ "valid" ที่มีชื่ออยู่ในไฟล์ .data ไฟล์ข้อความทั้งสองนี้จำเป็นต้องแสดงรายการรูปภาพทั้งหมดที่ Darknet ต้องใช้สำหรับการฝึกอบรมและการตรวจสอบ ตามลำดับ สำหรับการตรวจสอบความถูกต้องเมื่อคำนวณ mAP% มีหนึ่งภาพต่อแถว เส้นทางและชื่อไฟล์อาจเป็นแบบสัมพัทธ์หรือแบบสัมบูรณ์ก็ได้
8. ใช้โปรแกรมแก้ไขข้อความเพื่อแก้ไขไฟล์ .cfg ของคุณ
* ตรวจสอบให้แน่ใจว่าชุด = 64
* ให้ความสนใจกับเขตการปกครอง ขึ้นอยู่กับขนาดเครือข่ายและจำนวนหน่วยความจำที่มีอยู่ใน GPU คุณอาจต้องเพิ่มการแบ่งย่อย ค่าที่ดีที่สุดที่จะใช้คือ 1 ดังนั้นให้เริ่มจากสิ่งนั้นเลย หากคุณไม่สามารถใช้ 1 โปรดดูคำถามที่พบบ่อยของ Darknet/YOLO
โปรดทราบว่า maxbatches=.... เมื่อเริ่มต้น ค่าที่เหมาะสมที่สุดที่จะใช้คือจำนวนคลาส 2000 ในตัวอย่างนี้ เรามีสัตว์ 4 ตัว ดังนั้น 4 * 2000 = 8000 ซึ่งหมายความว่าเราจะใช้ maxbatches=8000
* หมายเหตุขั้นตอน=.... ควรตั้งค่าเป็น 80% และ 90% ของ maxbatches ในตัวอย่างนี้ เราจะใช้ขั้นตอน = 6400,7200 เนื่องจากตั้งค่า maxbatches เป็น 8000
* โปรดทราบว่า width=... และ height=.... นี่คือขนาดเครือข่าย คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO อธิบายวิธีคำนวณขนาดที่เหมาะสมที่สุดที่จะใช้
* ค้นหาอินสแตนซ์ทั้งหมดที่มีบรรทัด class=... และแก้ไขด้วยจำนวนคลาสในไฟล์ .names ในตัวอย่างนี้เราจะใช้ class=4
ในส่วน [convolutional] ก่อนแต่ละส่วน [yolo] ให้ค้นหาอินสแตนซ์ทั้งหมดที่มีบรรทัด filter=... ค่าที่ใช้คือ (จำนวนหมวด + 5) 3. ซึ่งหมายความว่าในตัวอย่างนี้ (4 + 5) * 3 = 27 ดังนั้น เราจะใช้ตัวกรอง=27 สำหรับแถวที่เหมาะสม
9. เริ่มการฝึก! รันคำสั่งต่อไปนี้:
`ทุบตี
ซีดี ~/nn/สัตว์/
เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
-
โปรดรอ. ตุ้มน้ำหนักที่ดีที่สุดจะถูกบันทึกเป็นanimals_best.weights คุณสามารถติดตามความคืบหน้าของการฝึกอบรมได้โดยการดูไฟล์ Chart.png ดูคำถามที่พบบ่อยของ Darknet/YOLO สำหรับพารามิเตอร์เพิ่มเติมที่คุณอาจต้องการใช้เมื่อฝึกเครือข่ายใหม่
หากคุณต้องการดูรายละเอียดเพิ่มเติมระหว่างการฝึก ให้เพิ่มพารามิเตอร์ --verbose ตัวอย่างเช่น:
`ทุบตี
เครื่องตรวจจับ darknet -map -dont_show --verbose รถไฟanimals.dataanimals.cfg
-
เครื่องมือและลิงค์อื่นๆ
ในการจัดการโปรเจ็กต์ Darknet/YOLO ของคุณ ใส่คำอธิบายประกอบรูปภาพ ตรวจสอบคำอธิบายประกอบของคุณ และสร้างไฟล์ที่จำเป็นสำหรับการฝึกอบรมกับ Darknet โปรดดู DarkMark
สำหรับ CLI ทางเลือกที่ทรงพลังแทน Darknet การใช้การจัดเรียงรูปภาพ การติดตามวัตถุในวิดีโอของคุณ หรือสำหรับ C++ API อันทรงพลังที่สามารถใช้งานได้ง่ายในแอปพลิเคชันเชิงพาณิชย์ โปรดดู DarkHelp
ลองอ่านคำถามที่พบบ่อยของ Darknet/YOLO เพื่อดูว่าสามารถช่วยตอบคำถามของคุณได้หรือไม่
ลองดูบทแนะนำและวิดีโอตัวอย่างมากมายในช่อง YouTube ของ Stéphane
หากคุณมีคำถามหรือต้องการสนทนากับผู้ใช้ Darknet/YOLO คนอื่นๆ โปรดเข้าร่วมเซิร์ฟเวอร์ Darknet/YOLO Discord
แผนงาน
อัปเดตล่าสุด: 30-10-2024
สมบูรณ์
1. แทนที่ qsort() ที่ใช้ระหว่างการฝึกด้วย std::sort() (ยังมีอันแปลกๆ บางตัวอยู่)
2. กำจัด check_mistakes, getchar() และ system()
3. แปลง Darknet เพื่อใช้คอมไพเลอร์ C++ (g++ บน Linux, VisualStudio บน Windows)
4. แก้ไขบิลด์ Windows
5. แก้ไขการรองรับ Python
6. สร้างไลบรารี Darknet
7. เปิดใช้งานป้ายกำกับอีกครั้งในการคาดเดา (รหัส "ตัวอักษร")
8. เปิดใช้งานโค้ด CUDA/GPU อีกครั้ง
9. เปิดใช้งาน CUDNN อีกครั้ง
10. เปิดใช้งาน CUDNN ครึ่งหนึ่งอีกครั้ง
11. อย่าฮาร์ดโค้ดสถาปัตยกรรม CUDA
12. ข้อมูลเวอร์ชัน CUDA ที่ดีขึ้น
13. เปิดใช้งาน AVX อีกครั้ง
14. ลบโซลูชันเก่าและ Makefile
15. ทำให้ OpenCV ไม่จำเป็น
16. ลบการพึ่งพาไลบรารี pthread เก่า
17. ลบ STB
18. เขียน CMakeLists.txt ใหม่เพื่อใช้เครื่องมือ CUDA ใหม่
19. ลบโค้ด “ตัวอักษร” เก่า และลบรูปภาพมากกว่า 700 รูปในข้อมูล/ป้ายกำกับ
20. สร้างนอกแหล่งที่มา
21. มีเอาต์พุตหมายเลขเวอร์ชันที่ดีกว่า
22. การเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้องกับการฝึกอบรม (งานที่กำลังดำเนินอยู่)
23. การเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้องกับการอนุมาน (งานที่กำลังดำเนินอยู่)
24. ใช้การอ้างอิงแบบผ่านทุกครั้งที่เป็นไปได้
25. ทำความสะอาดไฟล์ .hpp
26. เขียน darknet.h ใหม่
27. อย่าแปลง cv::Mat เป็น void* แต่ให้ใช้มันเป็นอ็อบเจ็กต์ C++ ที่เหมาะสมแทน
28. แก้ไขหรือทำให้การใช้โครงสร้างภาพภายในสอดคล้องกัน
29. แก้ไขการสร้างสำหรับอุปกรณ์ Jetson ที่ใช้ ARM
*อุปกรณ์ Jetson ดั้งเดิมไม่น่าจะได้รับการแก้ไขเนื่องจากไม่รองรับโดย NVIDIA อีกต่อไป (ไม่มีคอมไพเลอร์ C ++ 17)
* อุปกรณ์ Jetson Orin ใหม่ใช้งานได้
30. แก้ไข Python API ใน V3
* ต้องการการสนับสนุน Python ที่ดีกว่า (มีนักพัฒนา Python ที่ต้องการช่วยเหลือในเรื่องนี้หรือไม่)
เป้าหมายระยะสั้น
1. แทนที่ printf() ด้วย std::cout (อยู่ระหว่างดำเนินการ)
2. ตรวจสอบการรองรับกล้อง zed เก่า
3. การแยกวิเคราะห์บรรทัดคำสั่งที่ดีขึ้นและสอดคล้องกันมากขึ้น (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะกลาง
1. ลบรหัส char* ทั้งหมด และแทนที่ด้วย std::string
2. อย่าซ่อนคำเตือนและล้างคำเตือนของคอมไพเลอร์ (อยู่ระหว่างดำเนินการ)
3. ใช้ cv::Mat ดีกว่าแทนโครงสร้างรูปภาพที่กำหนดเองใน C (อยู่ระหว่างดำเนินการ)
4. แทนที่ฟังก์ชันรายการเก่าด้วย std::vector หรือ std::list
5. แก้ไขการรองรับภาพระดับสีเทา 1 แชนเนล
6. เพิ่มการรองรับภาพ N-channel โดยที่ N > 3 (เช่น รูปภาพที่มีความลึกหรือช่องความร้อนเพิ่มเติม)
7. การล้างโค้ดอย่างต่อเนื่อง (ต่อเนื่อง)
เป้าหมายระยะยาว
1. แก้ไขปัญหา CUDA/CUDNN บน GPU ทั้งหมด
2. เขียนโค้ด CUDA+cuDNN ใหม่
3. พิจารณาเพิ่มการรองรับ GPU ที่ไม่ใช่ NVIDIA
4. กล่องขอบเขตแบบหมุนหรือส่วนรองรับ "มุม" บางชนิด
5. ประเด็นสำคัญ/โครงกระดูก
6. แผนที่ความร้อน (กำลังดำเนินการ)
7. แยก