กรอบการตรวจจับวัตถุ Darknet และ YOLO
โลโก้ !darknet และ hank.ai
Darknet เป็นเฟรมเวิร์กโครงข่ายประสาทเทียมแบบโอเพ่นซอร์สที่เขียนด้วยภาษา C และ CUDA เป็นหลัก
YOLO (คุณดูเพียงครั้งเดียว) คือระบบตรวจจับวัตถุแบบเรียลไทม์ที่ทำงานภายในกรอบงาน Darknet
อ่านวิธีที่ Hank.ai ช่วยเหลือชุมชน Darknet/YOLO
ประกาศ Darknet V3 "Jazz"
ดูเว็บไซต์ Darknet/YOLO
โปรดอ่านคำถามที่พบบ่อยของ Darknet/YOLO
เข้าร่วมเซิร์ฟเวอร์ Discord ของ Darknet/YOLO
เอกสาร
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 ซึ่งหมายความว่าแต่ละเฟรมวิดีโอจะถูกอ่าน ปรับขนาด และประมวลผลโดย Darknet/YOLO ภายใน 1 มิลลิวินาทีหรือน้อยกว่า
เข้าร่วมเซิร์ฟเวอร์ Darknet/YOLO Discord เพื่อขอความช่วยเหลือหรือการสนทนา: 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
repo Darknet ยอดนิยมถัดไปที่ดูแลโดย Alexey Bochkovskiy ระหว่างปี 2560-2564 ยังไม่มีหมายเลขเวอร์ชันเช่นกัน เราพิจารณาเวอร์ชัน 1.x นี้
repo Darknet ที่สนับสนุนโดย Hank.ai และดูแลโดย Stéphane Charette ซึ่งเริ่มในปี 2023 เป็นรุ่นแรกที่มีคำสั่งเวอร์ชัน ตั้งแต่ปี 2023 จนถึงปลายปี 2024 ส่งคืนเวอร์ชัน 2.x "OAK"
เป้าหมายคือการพยายามทำลายฟังก์ชันการทำงานที่มีอยู่ให้เหลือเพียงเล็กน้อยในขณะที่ทำความคุ้นเคยกับโค้ดเบส
การเปลี่ยนแปลงที่สำคัญใน Darknet 2.x ได้แก่:
เขียนขั้นตอนการสร้างใหม่สำหรับรุ่นที่ใช้ CMake แบบรวมบน Windows และ Linux
แปลง codebase เพื่อใช้คอมไพเลอร์ C++
ปรับปรุงการแสดงภาพ Chart.png ในระหว่างการฝึกอบรม
แก้ไขข้อบกพร่องและเพิ่มประสิทธิภาพการทำงาน โดยเน้นไปที่การลดเวลาการฝึกอบรมเป็นหลัก
สาขาสุดท้ายของ codebase นี้คือเวอร์ชัน 2.1 ในสาขา v2
การพัฒนาระยะต่อไปเริ่มต้นในกลางปี 2024 และเปิดตัวในเดือนตุลาคม 2024 ขณะนี้คำสั่ง version ส่งคืน 3.x "JAZZ"
คุณสามารถชำระเงินสาขา v2 ก่อนหน้าได้ตลอดเวลา หากคุณต้องการรันคำสั่งใดคำสั่งหนึ่งเหล่านี้ แจ้งให้เราทราบหากคุณพบคำสั่งที่ขาดหายไป
การเปลี่ยนแปลงที่สำคัญใน Darknet 3.x ได้แก่:
การลบคำสั่งเก่าและคำสั่งที่ไม่ได้รับการดูแลออกจำนวนมาก
การเพิ่มประสิทธิภาพการทำงานที่สำคัญสำหรับทั้งการฝึกอบรมและการอนุมาน
การแก้ไข C API ดั้งเดิม โดยต้องมีการแก้ไขเล็กน้อยสำหรับแอปพลิเคชันที่ใช้ Darknet API ดั้งเดิม ดูเอกสารประกอบ 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
MSCOCO ตุ้มน้ำหนักที่ผ่านการฝึกอบรมล่วงหน้า
YOLO เวอร์ชันยอดนิยมหลายเวอร์ชันได้รับการฝึกอบรมล่วงหน้าเพื่อความสะดวกในชุดข้อมูล MSCOCO ชุดข้อมูลนี้มี 80 คลาส ซึ่งสามารถพบได้ในไฟล์ข้อความ cfg/coco.names
มีชุดข้อมูลที่เรียบง่ายกว่าและตุ้มน้ำหนักที่ได้รับการฝึกล่วงหน้าอื่นๆ หลายชุดสำหรับการทดสอบ Darknet/YOLO เช่น LEGO Gears และ Rolodex ดูคำถามที่พบบ่อยของ Darknet/YOLO สำหรับรายละเอียด
สามารถดาวน์โหลดตุ้มน้ำหนักที่ฝึกล่วงหน้าของ MSCOCO ได้จากสถานที่ต่างๆ รวมถึงที่เก็บข้อมูลนี้:
YOLOv2 (พฤศจิกายน 2559)
YOLOv2-จิ๋ว
YOLOv2-เต็ม
YOLOv3 (พฤษภาคม 2018)
YOLOv3-จิ๋ว
YOLOv3-เต็ม
YOLOv4 (พฤษภาคม 2020)
YOLOv4-จิ๋ว
YOLOv4-เต็ม
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
Google Colab
วิธีการของ Google Colab เหมือนกับวิธีการของ Linux มีสมุดบันทึก Jupyter หลายเครื่องเพื่อสาธิตงานต่างๆ เช่น การฝึกอบรมเครือข่ายใหม่
ดูสมุดบันทึกในไดเรกทอรีย่อย colab และ/หรือทำตามคำแนะนำของ Linux ด้านล่าง
วิธีการลินุกซ์ CMake
บทช่วยสอนการสร้าง Darknet สำหรับ Linux
1. ติดตั้งแพ็คเกจที่จำเป็น:
`ทุบตี
sudo apt-get ติดตั้ง build-essential git libopencv-dev cmake
-
2. โคลนพื้นที่เก็บข้อมูล Darknet:
`ทุบตี
mkdir ~/src
ซีดี ~/src
โคลนคอมไพล์ https://github.com/hank-ai/darknet
ซีดีดาร์กเน็ต
-
3. สร้างไดเร็กทอรี build และรัน CMake:
`ทุบตี
สร้าง mkdir
สร้างซีดี
cmake -DCMAKEBUILDTYPE=ปล่อย ..
-
4. สร้าง Darknet:
`ทุบตี
ทำ -j4
-
5. ทางเลือก: ติดตั้ง CUDA หรือ CUDA+cuDNN
หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ สิ่งนี้จะทำให้ Darknet สามารถใช้ GPU ของคุณเพื่อการประมวลผลภาพและวิดีโอที่รวดเร็วยิ่งขึ้น
- ดาวน์โหลดและติดตั้ง 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#cudnn-package-manager- ภาพรวมการติดตั้ง
สิ่งสำคัญ: หากคุณติดตั้ง CUDA หรือ CUDA+cuDNN หลังจากสร้าง Darknet แล้ว คุณต้องลบไฟล์ CMakeCache.txt ในไดเร็กทอรี build ของคุณ และรัน cmake อีกครั้งเพื่อให้แน่ใจว่า CMake สามารถค้นหาไฟล์ที่จำเป็นได้
หมายเหตุ: Darknet สามารถทำงานได้โดยไม่ต้องใช้ CUDA แต่หากคุณต้องการฝึกเครือข่ายแบบกำหนดเอง จำเป็นต้องมี CUDA หรือ CUDA+cuDNN
6. จัดทำแพ็คเกจและติดตั้ง Darknet:
`ทุบตี
ทำแพ็คเกจ
sudo dpkg -i darknet-VERSION.deb
-
สิ่งสำคัญ: หากคุณใช้ CMake เวอร์ชันเก่า คุณอาจต้องอัปเกรดก่อนที่จะรันคำสั่ง cmake อัปเกรด CMake บน Ubuntu โดยใช้:
`ทุบตี
sudo apt-get ล้าง cmake
sudo snap ติดตั้ง cmake --classic
-
ผู้ใช้ขั้นสูง:
- หากคุณต้องการสร้างไฟล์การติดตั้ง RPM แทนไฟล์ DEB ให้แก้ไขสองบรรทัดต่อไปนี้ใน CM_package.cmake ก่อนที่จะรันแพ็คเกจ make:
`เอาล่ะ
# SET (CPACK_GENERATOR "DEB")
ชุด (CPACK_GENERATOR "รอบต่อนาที")
-
- หากต้องการติดตั้งแพ็คเกจการติดตั้งเมื่อสร้างเสร็จแล้ว ให้ใช้ตัวจัดการแพ็คเกจของการแจกจ่ายของคุณ ตัวอย่างเช่น บนระบบที่ใช้ Debian เช่น Ubuntu:
`ทุบตี
sudo dpkg -i darknet-2.0.1-Linux.deb
-
- การติดตั้งแพ็คเกจ .deb จะเป็นการคัดลอกไฟล์ต่อไปนี้:
- /usr/bin/darknet: ปฏิบัติการ Darknet ได้
- /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 จาก CLI เพื่อยืนยันการติดตั้ง
วิธี Windows CMake
คำแนะนำเหล่านี้ถือเป็นการติดตั้ง Windows 11 22H2 ใหม่
1. ติดตั้งซอฟต์แวร์ที่จำเป็น:
`พาวเวอร์เชลล์
winget ติดตั้ง Git.Git
winget ติดตั้ง Kitware.CMake
ติดตั้ง winget nsis.nsis
winget ติดตั้ง Microsoft.VisualStudio.2022.Community
-
2. แก้ไขการติดตั้ง Visual Studio:
- เปิดเมนู "Windows Start" และเรียกใช้ "Visual Studio Installer"
- คลิกที่ "แก้ไข"
- เลือก "การพัฒนาเดสก์ท็อปด้วย C++"
- คลิก "แก้ไข" ที่มุมขวาล่าง จากนั้นคลิก "ใช่"
3. ติดตั้ง Microsoft VCPKG:
- เปิดเมนู "Windows Start" และเลือก "Developer Command Prompt for VS 2022" อย่าใช้ PowerShell สำหรับขั้นตอนเหล่านี้
- ผู้ใช้ขั้นสูง: แทนที่จะเรียกใช้ Developer Command Prompt คุณสามารถใช้ Command Prompt หรือ ssh ลงในอุปกรณ์และเรียกใช้ Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat ด้วยตนเองได้
- รันคำสั่งต่อไปนี้:
`พาวเวอร์เชลล์
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
-
- อดทนในระหว่างขั้นตอนสุดท้ายนี้เนื่องจากการวิ่งอาจใช้เวลานาน จำเป็นต้องดาวน์โหลดและสร้างหลายสิ่งหลายอย่าง
- ผู้ใช้ขั้นสูง: โปรดทราบว่ามีโมดูลเสริมอื่นๆ มากมายที่คุณอาจต้องการเพิ่มเมื่อสร้าง OpenCV เรียกใช้ .vcpkg.exe ค้นหา opencv เพื่อดูรายการทั้งหมด
4. ทางเลือก: ติดตั้ง CUDA หรือ CUDA+cuDNN
หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ สิ่งนี้จะทำให้ Darknet สามารถใช้ GPU ของคุณเพื่อการประมวลผลภาพและวิดีโอที่รวดเร็วยิ่งขึ้น
- ดาวน์โหลดและติดตั้ง 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
สิ่งสำคัญ: หากคุณติดตั้ง CUDA หรือ CUDA+cuDNN หลังจากสร้าง Darknet แล้ว คุณต้องลบไฟล์ CMakeCache.txt ในไดเร็กทอรี build ของคุณ และรัน cmake อีกครั้งเพื่อให้แน่ใจว่า CMake สามารถค้นหาไฟล์ที่จำเป็นได้
หมายเหตุ: Darknet สามารถทำงานได้โดยไม่ต้องใช้ CUDA แต่หากคุณต้องการฝึกเครือข่ายแบบกำหนดเอง จำเป็นต้องมี CUDA หรือ CUDA+cuDNN
5. โคลน Darknet และสร้างมันขึ้นมา:
`พาวเวอร์เชลล์
ซีดี 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: ต้องติดตั้ง CUDA หลังจาก Visual Studio หากคุณอัปเกรด Visual Studio อย่าลืมติดตั้ง CUDA อีกครั้ง
- DLL ที่หายไป: หากคุณพบข้อผิดพลาดเกี่ยวกับ CUDA หรือ cuDNN DLL ที่หายไป (เช่น cublas64_12.dll) ให้คัดลอกไฟล์ CUDA .dll ด้วยตนเองลงในไดเร็กทอรีเอาต์พุตเดียวกันกับ darknet.exe ตัวอย่างเช่น:
`พาวเวอร์เชลล์
คัดลอก "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
-
(นี่คือตัวอย่าง ตรวจสอบเวอร์ชัน CUDA ที่คุณใช้งานอยู่และปรับเส้นทางตามนั้น)
- รัน msbuild.exe อีกครั้ง: หลังจากคัดลอกไฟล์ .dll แล้ว ให้รันคำสั่ง 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
6. ติดตั้ง Darknet:
- เรียกใช้วิซาร์ดการติดตั้ง 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
การใช้ดาร์กเน็ต
คลีไอ
ต่อไปนี้ไม่ใช่รายการคำสั่งทั้งหมดที่ Darknet รองรับ
นอกจาก Darknet CLI แล้ว ให้พิจารณาโครงการ DarkHelp CLI ซึ่งเสนอ CLI ทางเลือกให้กับ Darknet/YOLO พร้อมคุณสมบัติขั้นสูงที่ไม่มีให้ใช้งานโดยตรงใน Darknet คุณสามารถใช้ทั้ง Darknet CLI และ DarkHelp CLI ร่วมกันได้
สำหรับคำสั่งส่วนใหญ่ด้านล่าง คุณจะต้องมีไฟล์ .weights พร้อมด้วยไฟล์ .names และ .cfg ที่เกี่ยวข้อง คุณสามารถฝึกอบรมเครือข่ายของคุณเองได้ (ขอแนะนำอย่างยิ่ง!) หรือดาวน์โหลดเครือข่ายที่ได้รับการฝึกอบรมล่วงหน้าจากอินเทอร์เน็ต ตัวอย่างของชุดข้อมูลที่ได้รับการฝึกอบรมล่วงหน้า ได้แก่:
LEGO Gears (สำหรับค้นหาวัตถุในภาพ)
Rolodex (สำหรับค้นหาข้อความในรูปภาพ)
MSCOCO (การตรวจจับวัตถุมาตรฐาน 80 คลาส)
คำสั่งให้รัน:
รับความช่วยเหลือ:
`ทุบตี
ความช่วยเหลือจาก Darknet
-
ตรวจสอบเวอร์ชั่น:
`ทุบตี
เวอร์ชันดาร์กเน็ต
-
ทำนายโดยใช้ภาพ:
V2:
`ทุบตี
การทดสอบเครื่องตรวจจับ darknet cars.data cars.cfg cars_best.weights image1.jpg
-
V3:
`ทุบตี
darknet02displayภาพที่มีคำอธิบายประกอบcars.cfg image1.jpg
-
ความช่วยเหลือด้านมืด:
`ทุบตี
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
-
พิกัดขาออก:
V2:
`ทุบตี
การทดสอบเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights -extoutput dog.jpg
-
V3:
`ทุบตี
darknet01inference_images สัตว์ dog.jpg
-
ความช่วยเหลือด้านมืด:
`ทุบตี
DarkHelp --jsonanimals.cfganimals.namesanimals_best.weights dog.jpg
-
การทำงานกับวิดีโอ:
V2:
`ทุบตี
การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights -extoutput test.mp4
-
V3:
`ทุบตี
darknet03display_videosanimals.cfg test.mp4
-
ความช่วยเหลือด้านมืด:
`ทุบตี
DarkHelp Animals.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:
`ทุบตี
darknet05กระบวนการวิดีโอแบบมัลติเธรดanimals.cfganimals.namesanimals_best.weights test.mp4
-
ความช่วยเหลือด้านมืด:
`ทุบตี
DarkHelp Animals.cfganimals.namesanimals_best.weights test.mp4
-
เอาต์พุต JSON:
V2:
`ทุบตี
การสาธิตเครื่องตรวจจับ darknet Animals.data Animals.cfg Animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
-
V3:
`ทุบตี
darknet06imagestojson สัตว์ image1.jpg
-
ความช่วยเหลือด้านมืด:
`ทุบตี
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 .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 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 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:
ฉันจะตั้งค่าไฟล์และไดเร็กทอรีของฉันได้อย่างไร?
ฉันควรใช้ไฟล์การกำหนดค่าใด
ฉันควรใช้คำสั่งใดในการฝึกเครือข่ายของตัวเอง?
วิธีที่ง่ายที่สุดในการใส่คำอธิบายประกอบและฝึกฝนคือการใช้ DarkMark ซึ่งจะสร้างไฟล์ Darknet ที่จำเป็นทั้งหมด นี่เป็นวิธีที่แนะนำในการฝึกโครงข่ายประสาทเทียมใหม่
หากคุณต้องการตั้งค่าไฟล์ต่างๆ ด้วยตนเองเพื่อฝึกเครือข่ายที่กำหนดเอง:
1. สร้างโฟลเดอร์ใหม่:
- เลือกโฟลเดอร์เพื่อจัดเก็บไฟล์ของคุณ สำหรับตัวอย่างนี้ เราจะสร้างโครงข่ายประสาทเทียมเพื่อตรวจจับสัตว์ ดังนั้นไดเร็กทอรีจะเป็น ~/nn/animals/
2. คัดลอกไฟล์กำหนดค่า Darknet:
- คัดลอกไฟล์การกำหนดค่า Darknet เป็นเทมเพลต ตัวอย่างเช่น ใช้ cfg/yolov4-tiny.cfg วางสิ่งนี้ไว้ในโฟลเดอร์ที่คุณสร้างขึ้น ตอนนี้ คุณควรมี ~/nn/animals/animals.cfg
3. สร้างไฟล์ข้อความanimals.names:
- สร้างไฟล์ข้อความanimals.namesในโฟลเดอร์เดียวกับไฟล์กำหนดค่า ตอนนี้คุณมี ~/nn/animals/animals.names แล้ว
4. แก้ไขไฟล์animals.names:
- แก้ไขไฟล์ Animals.names โดยใช้โปรแกรมแก้ไขข้อความ ระบุคลาสที่คุณต้องการตรวจจับ โดยมีหนึ่งรายการต่อบรรทัด ไม่มีบรรทัดว่าง และไม่มีความคิดเห็น สำหรับตัวอย่างนี้ ไฟล์ .names จะมีสี่บรรทัด:
-
สุนัข
แมว
นก
ม้า
-
5. สร้างไฟล์ข้อความanimals.data:
- สร้างไฟล์ข้อความanimals.dataในโฟลเดอร์เดียวกัน สำหรับตัวอย่างนี้ ไฟล์ .data จะประกอบด้วย:
-
ชั้นเรียน = 4
รถไฟ = /home/username/nn/animals/animals_train.txt
valid = /home/username/nn/animals/animals_valid.txt
ชื่อ = /home/username/nn/animals/animals.names
สำรอง = /home/username/nn/animals
-
6. สร้างโฟลเดอร์สำหรับรูปภาพและคำอธิบายประกอบ:
- สร้างโฟลเดอร์เพื่อจัดเก็บรูปภาพและคำอธิบายประกอบของคุณ ตัวอย่างเช่น อาจเป็น ~/nn/animals/dataset
- รูปภาพแต่ละรูปจะต้องมีไฟล์ .txt ที่เกี่ยวข้องซึ่งอธิบายคำอธิบายประกอบสำหรับรูปภาพนั้น รูปแบบของไฟล์คำอธิบายประกอบ .txt เหล่านี้มีความเฉพาะเจาะจงมาก คุณไม่สามารถสร้างด้วยตนเองได้ เนื่องจากคำอธิบายประกอบแต่ละรายการต้องใช้พิกัดที่แน่นอน ใช้ DarkMark หรือซอฟต์แวร์ที่คล้ายกันเพื่อใส่คำอธิบายประกอบภาพของคุณ รูปแบบคำอธิบายประกอบ YOLO มีอธิบายอยู่ใน Darknet/YOLO FAQ
7. สร้างไฟล์ข้อความ "train" และ "valid":
- สร้างไฟล์ข้อความ "train" และ "valid" ที่มีชื่ออยู่ในไฟล์ .data
- ไฟล์ข้อความทั้งสองนี้ควรแสดงรายการรูปภาพทั้งหมดที่ Darknet จะใช้สำหรับการฝึกอบรมและการตรวจสอบ (สำหรับการคำนวณ mAP%)
- แต่ละบรรทัดควรมีเส้นทางรูปภาพและชื่อไฟล์เดียวเท่านั้น คุณสามารถใช้เส้นทางสัมพัทธ์หรือเส้นทางสัมบูรณ์ได้
8. แก้ไขไฟล์ .cfg:
- ใช้โปรแกรมแก้ไขข้อความเพื่อแก้ไขไฟล์ .cfg ของคุณ:
- ตรวจสอบให้แน่ใจว่าชุด = 64
- การแบ่งเขต: ขึ้นอยู่กับขนาดเครือข่ายและหน่วยความจำ GPU คุณอาจต้องปรับการแบ่งย่อย เริ่มต้นด้วย subdivisions=1 และอ้างอิงถึง Darknet/YOLO FAQ หากไม่ได้ผล
- Maxbatches: ตั้งค่าเริ่มต้นที่ดีสำหรับ maxbatches เป็น 2,000 เท่าของจำนวนคลาส สำหรับตัวอย่างนี้ เรามีสัตว์ 4 ตัว ดังนั้น max_batches=8000
- ขั้นตอน: ตั้งค่าขั้นตอนเป็น 80% และ 90% ของ max_batches ในกรณีนี้ เราจะใช้ขั้นตอน=6400,7200
- ความกว้างและความสูง: นี่คือขนาดเครือข่าย คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO อธิบายวิธีคำนวณขนาดที่ดีที่สุด
- คลาส: ค้นหาอินสแตนซ์ทั้งหมดของคลาส=... และอัปเดตด้วยจำนวนคลาสในไฟล์ .names ของคุณ ในตัวอย่างนี้ เราจะใช้ class=4
- ตัวกรอง: ค้นหาอินสแตนซ์ทั้งหมดของตัวกรอง =... ในส่วน [convolutional] ก่อนแต่ละส่วน [yolo] ค่าที่จะใช้คือ (numberofclasses + 5) 3 สำหรับตัวอย่างนี้ (4 + 5) 3 = 27 ดังนั้น เราจะใช้ตัวกรอง=27 ในบรรทัดที่เหมาะสม
9. เริ่มการฝึก:
- ไปที่ไดเร็กทอรี ~/nn/animals/:
`ทุบตี
ซีดี ~/nn/สัตว์/
-
- รันคำสั่งต่อไปนี้เพื่อเริ่มการฝึก:
`ทุบตี
เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
-
- อดทนไว้. ตุ้มน้ำหนักที่ดีที่สุดจะถูกบันทึกเป็นanimals_best.weights คุณสามารถติดตามความคืบหน้าของการฝึกอบรมได้โดยการสังเกตไฟล์ Chart.png โปรดดูคำถามที่พบบ่อยของ Darknet/YOLO สำหรับพารามิเตอร์เพิ่มเติมที่คุณอาจต้องการใช้ระหว่างการฝึก
- หากคุณต้องการข้อมูลการฝึกอบรมโดยละเอียดเพิ่มเติม ให้เพิ่มพารามิเตอร์ --verbose:
`ทุบตี
เครื่องตรวจจับ darknet -map -dont_show --verbose รถไฟanimals.dataanimals.cfg
-
เครื่องมือและลิงค์อื่นๆ
DarkMark: สำหรับจัดการโปรเจ็กต์ Darknet/YOLO ของคุณ ใส่คำอธิบายประกอบรูปภาพ ยืนยันคำอธิบายประกอบ และสร้างไฟล์สำหรับการฝึกอบรมกับ Darknet
DarkHelp: สำหรับ CLI ทางเลือกที่แข็งแกร่งไปจนถึง Darknet โดยใช้การจัดเรียงรูปภาพ การติดตามวัตถุในวิดีโอ และ C++ API ที่แข็งแกร่งซึ่งเหมาะสำหรับแอปพลิเคชันเชิงพาณิชย์
คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO: แหล่งข้อมูลที่ครอบคลุมสำหรับการตอบคำถามของคุณ
ช่อง YouTube ของ Stéphane: บทช่วยสอนและวิดีโอตัวอย่างมากมาย
เซิร์ฟเวอร์ Darknet/YOLO Discord: เข้าร่วมชุมชนเพื่อรับการสนับสนุนและการสนทนา
แผนการทำงาน
อัปเดตล่าสุด 30-10-2024:
สมบูรณ์:
สลับ qsort() สำหรับ std::sort() ระหว่างการฝึก (ยังมีอันอื่นที่คลุมเครืออยู่)
ลบ check_mistakes, getchar() และ system() แล้ว
แปลง Darknet เพื่อใช้คอมไพเลอร์ C++ (g++ บน Linux, VisualStudio บน Windows)
แก้ไขการสร้าง Windows
แก้ไขการสนับสนุน Python
สร้างไลบรารี Darknet
เปิดใช้ป้ายกำกับในการคาดคะเนอีกครั้ง (รหัส "ตัวอักษร")
เปิดใช้งานรหัส CUDA/GPU อีกครั้ง
เปิดใช้งาน CUDNN อีกครั้ง
เปิดใช้งาน CUDNN ครึ่งหนึ่งอีกครั้ง
ลบสถาปัตยกรรม CUDA แบบฮาร์ดโค้ดออก
ปรับปรุงข้อมูลเวอร์ชัน CUDA
เปิดใช้งาน AVX อีกครั้ง
ลบโซลูชันเก่าและ Makefile ออก
ทำให้ OpenCV ไม่จำเป็น
ลบการพึ่งพาไลบรารี pthread เก่าออก
ลบ STB แล้ว
เขียน CMakeLists.txt ใหม่เพื่อใช้การตรวจจับ CUDA ใหม่
ลบรหัส "ตัวอักษร" เก่าและลบรูปภาพมากกว่า 700 ภาพในข้อมูล/ป้ายกำกับ
เปิดใช้งานการสร้างนอกแหล่งที่มา
ปรับปรุงเอาต์พุตหมายเลขเวอร์ชัน
ดำเนินการเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้องกับการฝึกอบรม (ต่อเนื่อง)
ดำเนินการเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้องกับการอนุมาน (ต่อเนื่อง)
ใช้การอ้างอิงผ่านหากเป็นไปได้
ทำความสะอาดไฟล์ .hpp
เขียน darknet.h ใหม่อีกครั้ง
หลีกเลี่ยงการส่ง cv::Mat to void* โดยใช้เป็นวัตถุ C++ ที่เหมาะสม
แก้ไขหรือปรับปรุงความสอดคล้องในการใช้โครงสร้างรูปภาพภายใน
แก้ไขการสร้างสำหรับอุปกรณ์ Jetson ที่ใช้ ARM (อุปกรณ์ Jetson ดั้งเดิมไม่น่าจะได้รับการแก้ไขเนื่องจาก NVIDIA ไม่รองรับอีกต่อไป - ไม่มีคอมไพเลอร์ C ++ 17 อุปกรณ์ Jetson Orin ใหม่กำลังทำงานอยู่)
แก้ไข Python API ใน V3
ปรับปรุงการรองรับ Python (นักพัฒนา Python คนใดยินดีให้ความช่วยเหลือในเรื่องนี้หรือไม่)
เป้าหมายระยะสั้น
แทนที่ printf() ด้วย std::cout (กำลังดำเนินการ)
ตรวจสอบการสนับสนุนสำหรับกล้อง zed รุ่นเก่า
ปรับปรุงและทำให้การแยกวิเคราะห์บรรทัดคำสั่งสอดคล้องกันมากขึ้น (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะกลาง
ลบโค้ด char* ทั้งหมดและแทนที่ด้วย std::string
หลีกเลี่ยงการซ่อนคำเตือนและล้างคำเตือนของคอมไพเลอร์ (อยู่ระหว่างดำเนินการ)
ปรับปรุงการใช้ cv::Mat แทนโครงสร้างรูปภาพที่กำหนดเองใน C (อยู่ระหว่างดำเนินการ)
แทนที่ฟังก์ชันรายการเก่าด้วย std::vector หรือ std::list
แก้ไขการรองรับภาพระดับสีเทา 1 แชนเนล
เพิ่มการรองรับภาพ N-channel โดยที่ N > 3 (เช่น รูปภาพที่มีความลึกหรือช่องระบายความร้อนเพิ่มเติม)
ดำเนินการล้างโค้ดอย่างต่อเนื่อง (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะยาว
แก้ไขปัญหา CUDA/CUDNN กับ GPU ทั้งหมด
เขียนโค้ด CUDA+cuDNN อีกครั้ง
พิจารณาเพิ่มการรองรับ GPU ที่ไม่ใช่ NVIDIA
เพิ่มกล่องขอบเขตแบบหมุนหรือส่วนรองรับ "มุม"
ปรับใช้ประเด็นสำคัญ/โครงกระดูก
เพิ่มแผนที่ความร้อน (กำลังดำเนินการ)
ดำเนินการแบ่งส่วน