กรอบการตรวจจับวัตถุ Darknet และ YOLO
Darknet เป็นเฟรมเวิร์กโครงข่ายประสาทเทียมโอเพ่นซอร์สที่เขียนด้วยภาษา C และ C++ เป็นหลัก โดยมีโค้ด CUDA บางส่วนสำหรับการเร่งความเร็ว GPU เป็นที่รู้จักในด้านความเร็วและประสิทธิภาพ ทำให้เป็นตัวเลือกยอดนิยมสำหรับแอปพลิเคชันตรวจจับวัตถุแบบเรียลไทม์
YOLO (คุณดูเพียงครั้งเดียว) เป็นระบบตรวจจับวัตถุแบบเรียลไทม์ที่ทรงพลังซึ่งออกแบบมาเพื่อทำงานภายในกรอบงาน Darknet มีความรวดเร็วและแม่นยำเป็นเลิศ โดยมีประสิทธิภาพเหนือกว่าระบบตรวจจับวัตถุอื่นๆ อย่างสม่ำเสมอในการวัดประสิทธิภาพ
ดำดิ่งลึกเข้าไปในโลก Darknet/YOLO:
การมีส่วนร่วมของ Hank.ai: ค้นพบว่า Hank.ai สนับสนุนชุมชน Darknet/YOLO อย่างแข็งขันได้อย่างไร
เว็บไซต์อย่างเป็นทางการ: สำรวจเว็บไซต์ Darknet/YOLO อย่างเป็นทางการเพื่อดูข้อมูลที่ครอบคลุม
คำถามที่พบบ่อย: ค้นหาคำตอบสำหรับคำถามทั่วไปเกี่ยวกับ Darknet/YOLO
เซิร์ฟเวอร์ Discord: เข้าร่วมชุมชน Darknet/YOLO Discord ที่มีชีวิตชีวาเพื่อพูดคุยและช่วยเหลือ
เอกสาร
วิวัฒนาการของ YOLO ได้รับการบันทึกไว้ในงานวิจัยหลายฉบับ:
1. YOLOv7: ผลักดันขอบเขตของการเรียนรู้เชิงลึกสำหรับการตรวจจับวัตถุ
2. Scaled-YOLOv4: ขยาย YOLOv4 สำหรับการใช้งานในอุตสาหกรรม
3. YOLOv4: ความเร็วและความแม่นยำที่เหมาะสมที่สุดของการตรวจจับวัตถุ
4. YOLOv3: การปรับปรุงแบบค่อยเป็นค่อยไป
ข้อมูลทั่วไป
เฟรมเวิร์ก Darknet/YOLO ยังคงเป็นแนวหน้าในการตรวจจับวัตถุ โดยมีทั้งความเร็วและความแม่นยำ เฟรมเวิร์กนี้เป็นโอเพ่นซอร์สฟรีทั้งหมด ช่วยให้นักพัฒนาสามารถรวมเฟรมเวิร์กนี้เข้ากับโปรเจ็กต์ของตนได้อย่างราบรื่น โดยไม่มีข้อจำกัดด้านลิขสิทธิ์หรือค่าธรรมเนียม
Darknet V3 ซึ่งมีชื่อรหัสว่า "Jazz" เปิดตัวในเดือนตุลาคม 2024 มีประสิทธิภาพที่โดดเด่นด้วย NVIDIA RTX 3090 GPU สามารถประมวลผลวิดีโอชุดข้อมูล LEGO ได้สูงสุด 1,000 FPS ซึ่งหมายความว่าแต่ละเฟรมจะได้รับการวิเคราะห์ในเวลาเพียง 1 มิลลิวินาทีหรือน้อยกว่า
เชื่อมต่ออยู่เสมอ:
Discord: เข้าร่วมเซิร์ฟเวอร์ Darknet/YOLO Discord เพื่อรับการสนับสนุนและการสนทนา: https://discord.gg/zSq8rtW
Darknet/YOLO สามารถปรับเปลี่ยนได้และทำงานบนแพลตฟอร์มที่หลากหลาย ตั้งแต่ Raspberry Pi และเซิร์ฟเวอร์คลาวด์ ไปจนถึงเดสก์ท็อปและระบบการฝึกอบรมระดับไฮเอนด์ แม้ว่าเวอร์ชัน CPU จะทำงานบนอุปกรณ์หลากหลายประเภท แต่เวอร์ชัน GPU ต้องใช้ GPU ที่รองรับ CUDA จาก NVIDIA
เวอร์ชันดาร์กเน็ต
เฟรมเวิร์ก Darknet ได้รับการพัฒนาอย่างมากนับตั้งแต่เริ่มก่อตั้ง โดยมีเวอร์ชันสำคัญหลายเวอร์ชัน:
1. เวอร์ชัน 0.x: เวอร์ชันดั้งเดิมนี้พัฒนาโดย Joseph Redmon ระหว่างปี 2013-2017 ไม่มีหมายเลขเวอร์ชันเฉพาะ
2. เวอร์ชัน 1.x: ดูแลโดย Alexey Bochkovskiy ตั้งแต่ปี 2017-2021 เวอร์ชันนี้ยังไม่มีหมายเลขเวอร์ชันด้วย
3. เวอร์ชัน 2.x "OAK": สนับสนุนโดย Hank.ai และดูแลโดย Stéphane Charette เริ่มตั้งแต่ปี 2023 โดยถือเป็นเวอร์ชันแรกที่มีคำสั่งเวอร์ชัน เวอร์ชันนี้ใช้งานได้จนถึงปลายปี 2024
4. เวอร์ชัน 3.x "JAZZ": เวอร์ชันล่าสุดที่เปิดตัวในเดือนตุลาคม 2024 มีการปรับปรุงที่สำคัญและ API ใหม่
การสร้าง Darknet
การสร้าง 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
คำแนะนำของ Google Colab สะท้อนวิธี Linux CMake อย่างใกล้ชิด มีสมุดบันทึก Jupyter หลายรายการภายในไดเรกทอรีย่อย colab ที่แสดงงานเฉพาะ เช่น การฝึกเครือข่ายใหม่
วิธีการลินุกซ์ CMake
ทำตามคำแนะนำเหล่านี้เพื่อสร้าง Darknet บน Linux:
1. ข้อกำหนดเบื้องต้น: ติดตั้งเครื่องมือที่จำเป็น:
`ทุบตี
sudo apt-get ติดตั้ง build-essential git libopencv-dev cmake
-
2. Clone Darknet: ดาวน์โหลดที่เก็บ Darknet:
`ทุบตี
mkdir ~/srccd ~/src
โคลนคอมไพล์ https://github.com/hank-ai/darknet
ซีดีดาร์กเน็ต
-
3. สร้าง Build Directory: สร้างไดเร็กทอรีสำหรับกระบวนการ build:
`ทุบตี
สร้าง mkdir
สร้างซีดี
-
4. กำหนดค่าด้วย CMake: สร้างไฟล์บิลด์:
`ทุบตี
cmake -DCMAKEBUILDTYPE=ปล่อย ..
-
5. สร้าง Darknet: สร้างโปรแกรมปฏิบัติการ Darknet:
`ทุบตี
ทำ -j4
-
6. แพ็คเกจสำหรับการติดตั้ง: สร้างแพ็คเกจ DEB เพื่อให้ติดตั้งง่าย (ตัวเลือก):
`ทุบตี
ทำแพ็คเกจ
sudo dpkg -i darknet-VERSION.deb
-
7. CUDA/cuDNN (ทางเลือก): สำหรับการเร่งความเร็ว GPU ให้ติดตั้ง CUDA หรือ CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
8. ตรวจสอบการติดตั้ง: หลังการติดตั้ง ให้ตรวจสอบเวอร์ชัน Darknet:
`ทุบตี
เวอร์ชันดาร์กเน็ต
-
วิธี Windows 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 Installer แล้วเลือก Modify
* เปิดใช้งานการพัฒนาเดสก์ท็อปด้วย C++ แล้วคลิกแก้ไข
3. พรอมต์คำสั่งสำหรับนักพัฒนาสำหรับ VS 2022: เปิดพรอมต์คำสั่งสำหรับนักพัฒนาสำหรับ VS 2022
4. ติดตั้ง Microsoft VCPKG:
`ทุบตี
CDC:
mkdir c:src
ซีดี 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
-
5. CUDA/cuDNN (ทางเลือก): สำหรับการเร่งความเร็ว GPU ให้ติดตั้ง CUDA หรือ CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
6. โคลนดาร์กเน็ต:
`ทุบตี
ซีดี c:src
โคลนคอมไพล์ https://github.com/hank-ai/darknet.git
ซีดีดาร์กเน็ต
สร้าง mkdir
สร้างซีดี
-
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;Configuration=Release PACKAGE.vcxproj
-
9. ตรวจสอบการติดตั้ง: เรียกใช้ปฏิบัติการ Darknet และตรวจสอบเวอร์ชัน:
`ทุบตี
เวอร์ชัน C:srcdarknetbuildsrc-cliReleasedarknet.exe
-
10. ติดตั้งแพ็คเกจ NSIS: เรียกใช้ไฟล์ darknet-VERSION.exe ในไดเร็กทอรี build เพื่อติดตั้ง Darknet, ไลบรารี, รวมไฟล์ และ DLL
การใช้ดาร์กเน็ต
Darknet เสนออินเทอร์เฟซบรรทัดคำสั่ง (CLI) สำหรับการโต้ตอบกับเฟรมเวิร์ก
หมายเหตุ: นอกเหนือจาก Darknet CLI แล้ว โปรเจ็กต์ DarkHelp ยังมี CLI ทางเลือกพร้อมฟีเจอร์ที่ได้รับการปรับปรุงอีกด้วย คุณสามารถใช้ทั้ง Darknet CLI และ DarkHelp CLI ร่วมกันได้
คำสั่ง Darknet CLI ทั่วไป:
ช่วย: รายการคำสั่งที่ใช้ได้:
`ทุบตี
ความช่วยเหลือจาก Darknet
-
เวอร์ชัน: ตรวจสอบเวอร์ชัน Darknet:
`ทุบตี
เวอร์ชันดาร์กเน็ต
-
การทำนาย (รูปภาพ): ดำเนินการตรวจจับวัตถุบนรูปภาพ:
`ทุบตี
# เวอร์ชัน 2
การทดสอบเครื่องตรวจจับ darknet cars.data cars.cfg cars_best.weights image1.jpg
# เวอร์ชัน 3
darknet02displayภาพที่มีคำอธิบายประกอบcars.cfg image1.jpg
#ดาร์กเฮลท์
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
-
พิกัดเอาท์พุต (รูปภาพ): รับพิกัดวัตถุ:
`ทุบตี
# เวอร์ชัน 2
การทดสอบเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights -extoutput dog.jpg
# เวอร์ชัน 3
darknet01inference_images สัตว์ dog.jpg
#ดาร์กเฮลท์
DarkHelp --jsonanimals.cfganimals.namesanimals_best.weights dog.jpg
-
การประมวลผลวิดีโอ:
`ทุบตี
# เวอร์ชัน 2
# รันบนไฟล์วิดีโอ
การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights -extoutput test.mp4
# ทำงานบนเว็บแคม
การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimals_best.weights -c 0
# เวอร์ชัน 3
# รันบนไฟล์วิดีโอ
darknet03display_videosanimals.cfg test.mp4
# ทำงานบนเว็บแคม
darknet08display_webcam สัตว์
#ดาร์กเฮลท์
# รันบนไฟล์วิดีโอ
DarkHelp Animals.cfganimals.namesanimals_best.weights test.mp4
-
บันทึกผลลัพธ์ลงในวิดีโอ:
`ทุบตี
# เวอร์ชัน 2
การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights test.mp4 -outfilename res.avi
# เวอร์ชัน 3
darknet05กระบวนการวิดีโอแบบมัลติเธรดanimals.cfganimals.namesanimals_best.weights test.mp4
#ดาร์กเฮลท์
DarkHelp Animals.cfganimals.namesanimals_best.weights test.mp4
-
เอาต์พุต JSON:
`ทุบตี
# เวอร์ชัน 2
การสาธิตเครื่องตรวจจับ darknet Animals.data Animals.cfg Animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# เวอร์ชัน 3
darknet06imagestojson สัตว์ image1.jpg
#ดาร์กเฮลท์
DarkHelp --jsonanimals.namesanimals.cfganimals_best.weights image1.jpg
-
GPU เฉพาะ: ทำงานบน GPU ที่กำหนด:
`ทุบตี
# เวอร์ชัน 2
การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimals_best.weights -i 1 test.mp4
-
การตรวจสอบความแม่นยำ: ประเมินความแม่นยำของเครือข่าย:
`ทุบตี
แผนที่เครื่องตรวจจับ darknet การขับรถ.ข้อมูลการขับรถ.cfg Driving_best.weights
-
คำนวณจุดยึด:
`ทุบตี
เครื่องตรวจจับ darknet calcanchors Animals.data -numof_clusters 6 - กว้าง 320 - สูง 256
-
การฝึกอบรมเครือข่ายใหม่
DarkMark: สำหรับวิธีการที่ใช้งานง่ายและคล่องตัวในการใส่คำอธิบายประกอบและการฝึกอบรม ให้ใช้ DarkMark
การตั้งค่าด้วยตนเอง:
1. สร้างไดเรกทอรี: ตั้งค่าโฟลเดอร์สำหรับข้อมูลการฝึกอบรมของคุณ
2. คัดลอกการกำหนดค่า: เลือกไฟล์การกำหนดค่าเป็นเทมเพลต เช่น cfg/yolov4-tiny.cfg และคัดลอกไปยังไดเร็กทอรีของคุณ
3. สร้างไฟล์ .names: สร้างไฟล์ข้อความ (เช่น Animals.names) แสดงรายการชั้นเรียนของคุณ หนึ่งรายการต่อบรรทัด
4. สร้างไฟล์ .data: สร้างไฟล์ข้อความ (เช่น Animals.data) โดยมีโครงสร้างดังต่อไปนี้:
-
ชั้นเรียน = 4
รถไฟ = /path/to/animals_train.txt
ถูกต้อง = /path/to/animals_valid.txt
ชื่อ = /path/to/animals.names
สำรอง = /path/to/backup_directory
-
5. เตรียมชุดข้อมูล: จัดระเบียบรูปภาพและไฟล์คำอธิบายประกอบที่เกี่ยวข้องในไดเร็กทอรี
6. สร้างไฟล์ข้อความ Train/Valid: สร้างไฟล์ข้อความสองไฟล์ (animalstrain.txt,animalsvalid.txt) แสดงรายการเส้นทางไปยังรูปภาพสำหรับการฝึกอบรมและการตรวจสอบ
7. แก้ไขการกำหนดค่า:
* ชุดชุด=64.
* ปรับการแบ่งย่อยตามหน่วยความจำของ GPU ของคุณ
ตั้งค่า max_batches เป็นค่าที่เหมาะสม (เช่น จำนวนคลาส 2,000)
* ตั้งค่าขั้นตอนเป็น 80% และ 90% ของ max_batches
* ปรับความกว้างและความสูงตามขนาดเครือข่ายของคุณ
* อัพเดตคลาสให้ตรงกับจำนวนคลาส
* แก้ไขตัวกรองในส่วน [convolutional] ก่อนส่วน [yolo]
8. เริ่มการฝึกอบรม:
`ทุบตี
cd /path/to/animals.cd
เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
-
9. ดูความคืบหน้า: ติดตามความคืบหน้าการฝึกอบรมผ่านไฟล์ Chart.png
เครื่องมือและลิงค์อื่นๆ
DarkMark: เครื่องมือนี้ทำให้คำอธิบายประกอบรูปภาพ การยืนยัน และการสร้างไฟล์ง่ายขึ้นสำหรับการฝึกกับ Darknet
DarkHelp: CLI ทางเลือกที่มีประสิทธิภาพสำหรับ Darknet พร้อมฟีเจอร์ต่างๆ เช่น การเรียงภาพและการติดตามวัตถุ
คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO: ค้นหาคำตอบสำหรับคำถามที่พบบ่อย
ช่อง YouTube ของ Stephane: เข้าถึงบทแนะนำและวิดีโอตัวอย่าง
Darknet/YOLO Discord Server: เข้าร่วมชุมชนเพื่อรับการสนับสนุนและการสนทนา
แผนการทำงาน
สมบูรณ์:
แทนที่ qsort() ด้วย std::sort() เพื่อประสิทธิภาพ
ลบรหัสที่เลิกใช้แล้ว (เช่น check_mistakes, getchar(), system())
ย้าย Darknet ไปยังคอมไพเลอร์ C++
แก้ไขปัญหาการสร้าง Windows
การสนับสนุน Python ที่กู้คืนแล้ว
สร้างห้องสมุด Darknet
เปิดใช้งานรหัส CUDA/GPU, CUDNN และ CUDNN อีกครั้ง
ปรับปรุงข้อมูลเวอร์ชัน CUDA
เปิดใช้งานชุดคำสั่ง AVX อีกครั้ง
ลบโซลูชันเก่าและ Makefile ออก
ทำให้ OpenCV เป็นการพึ่งพาบังคับ
ลบการพึ่งพาไลบรารีที่ล้าสมัย (เช่น pthread, STB)
เขียน CMakeLists.txt ใหม่เพื่อปรับปรุงการตรวจจับ CUDA
เปิดใช้งานการสร้างนอกแหล่งที่มา
เอาต์พุตหมายเลขเวอร์ชันที่ได้รับการปรับปรุง
ใช้การเพิ่มประสิทธิภาพประสิทธิภาพสำหรับการฝึกอบรมและการอนุมาน
ทำความสะอาดโค้ดเพื่อให้อ่านง่ายขึ้น
เขียน darknet.h ใหม่เพื่อปรับปรุง API
ปรับปรุงการรองรับอุปกรณ์ Jetson ที่ใช้ ARM
แก้ไข Python API ใน V3
เป้าหมายระยะสั้น:
สลับ printf() กับ std::cout
ตรวจสอบการสนับสนุนกล้อง zed
ปรับปรุงการแยกวิเคราะห์บรรทัดคำสั่ง
เป้าหมายระยะกลาง:
แทนที่รหัสอักขระทั้งหมดด้วย std::string
ที่อยู่คำเตือนคอมไพเลอร์
ปรับปรุงการใช้ cv::Mat แทนโครงสร้างรูปภาพแบบกำหนดเอง
อัปเกรดฟังก์ชันการทำงานของรายการเป็น std::vector หรือ std::list
รองรับภาพระดับสีเทา 1 แชนเนล
เพิ่มการรองรับภาพ N-channel (N > 3)
การล้างโค้ดอย่างต่อเนื่อง
เป้าหมายระยะยาว:
แก้ไขปัญหา CUDA/CUDNN ใน GPU ต่างๆ
เขียนโค้ด CUDA+cuDNN ใหม่เพื่อประสิทธิภาพที่ดีขึ้น
สำรวจการรองรับ GPU ที่ไม่ใช่ NVIDIA
ใช้กล่องขอบเขตแบบหมุนและการรองรับ "มุม"
เพิ่มประเด็นสำคัญ โครงกระดูก และแผนที่ความร้อน
แนะนำความสามารถในการแบ่งส่วน