กรอบการตรวจจับวัตถุ Darknet และ YOLO
โลโก้ !darknet และ hank.ai
Darknet เป็นเฟรมเวิร์กโครงข่ายประสาทเทียมแบบโอเพ่นซอร์สที่เขียนด้วยภาษา C, C++ และ CUDA
YOLO (คุณดูเพียงครั้งเดียว) เป็นระบบตรวจจับวัตถุแบบเรียลไทม์ที่ล้ำสมัยที่ทำงานภายในกรอบงาน Darknet
อ่านวิธีที่ Hank.ai ช่วยเหลือชุมชน Darknet/YOLO: https://hank.ai/
ประกาศ Darknet V3 "Jazz": https://darknetcv.ai/
โปรดอ่านคำถามที่พบบ่อยของ Darknet/YOLO: https://darknetcv.ai/faq/
เข้าร่วมเซิร์ฟเวอร์ Darknet/YOLO Discord: https://discord.gg/zSq8rtW
เอกสาร
1. เอกสาร YOLOv7: https://arxiv.org/abs/2207.02670
2. กระดาษปรับขนาด-YOLOv4: https://arxiv.org/abs/2103.05293
3. บทความ YOLOv4: https://arxiv.org/abs/2004.10934
4. กระดาษ YOLOv3: https://pjreddie.com/media/files/papers/YOLOv3.pdf
ข้อมูลทั่วไป
เฟรมเวิร์ก Darknet/YOLO ยังคงเร็วและแม่นยำมากกว่าเฟรมเวิร์กและเวอร์ชันอื่นๆ ของ YOLO
เฟรมเวิร์กนี้เป็นโอเพ่นซอร์สฟรีโดยสมบูรณ์ คุณสามารถรวม Darknet/YOLO เข้ากับโปรเจ็กต์และผลิตภัณฑ์ที่มีอยู่ รวมถึงโปรเจ็กต์เชิงพาณิชย์ โดยไม่ต้องมีใบอนุญาตหรือจ่ายค่าธรรมเนียม
Darknet V3 ("Jazz") เปิดตัวในเดือนตุลาคม 2024 สามารถรันวิดีโอชุดข้อมูล LEGO ได้อย่างแม่นยำที่สูงถึง 1,000 FPS เมื่อใช้ NVIDIA RTX 3090 GPU ซึ่งหมายความว่าแต่ละเฟรมวิดีโอจะถูกอ่าน ปรับขนาด และประมวลผลโดย Darknet/YOLO ภายใน 1 มิลลิวินาทีหรือน้อยกว่า
Darknet/YOLO เวอร์ชัน CPU สามารถทำงานบนอุปกรณ์ง่ายๆ เช่น Raspberry Pi, เซิร์ฟเวอร์คลาวด์และ colab, เดสก์ท็อป, แล็ปท็อป และอุปกรณ์ฝึกอบรมระดับไฮเอนด์ Darknet/YOLO เวอร์ชัน GPU ต้องใช้ GPU ที่รองรับ CUDA จาก NVIDIA
Darknet/YOLO เป็นที่รู้จักว่าทำงานบน Linux, Windows และ Mac ดูคำแนะนำการสร้างด้านล่าง
เวอร์ชันดาร์กเน็ต
1. เวอร์ชัน 0.x: เครื่องมือ Darknet ดั้งเดิมที่เขียนโดย Joseph Redmon ในปี 2556-2560
2. เวอร์ชัน 1.x: Darknet repo ยอดนิยมถัดไปที่ดูแลโดย Alexey Bochkovskiy ระหว่างปี 2560-2564
3. เวอร์ชัน 2.x "OAK": The Darknet repo สนับสนุนโดย Hank.ai และดูแลโดย Stéphane Charette เริ่มในปี 2023 โดยเป็นรุ่นแรกที่มีคำสั่งเวอร์ชัน เวอร์ชันนี้นำมาซึ่งการเปลี่ยนแปลงต่อไปนี้:
- เขียนขั้นตอนการสร้างใหม่สำหรับแนวทาง CMake แบบครบวงจรทั้งบน Windows และ Linux
- แปลง codebase เพื่อใช้คอมไพเลอร์ C++
- ปรับปรุงการสร้าง Chart.png ในระหว่างการฝึกอบรม
- แก้ไขข้อบกพร่องและเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้องกับเวลาการฝึกอบรม
4. เวอร์ชัน 2.1: สาขาสุดท้ายของโค้ดเบส 2.x ที่พบในสาขา v2
5. เวอร์ชัน 3.x "JAZZ": การพัฒนาระยะต่อไป เปิดตัวในเดือนตุลาคม 2024
- ลบคำสั่งเก่าและคำสั่งที่ไม่ได้รับการดูแลออกจำนวนมาก
- ใช้การเพิ่มประสิทธิภาพประสิทธิภาพสำหรับการฝึกอบรมและการอนุมาน
- แก้ไข 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 ได้จากหลายตำแหน่ง รวมถึงที่เก็บข้อมูลนี้:
YOLOv2 (พฤศจิกายน 2559):
yolov2-tiny.weights
yolov2-full.น้ำหนัก
YOLOv3 (พฤษภาคม 2018):
yolov3-tiny.weights
yolov3-full.น้ำหนัก
YOLOv4 (พฤษภาคม 2020):
yolov4-tiny.weights
yolov4-full.น้ำหนัก
YOLOv7 (สิงหาคม 2022):
yolov7-tiny.weights
yolov7-full.น้ำหนัก
ตุ้มน้ำหนักที่ได้รับการฝึกล่วงหน้าของ 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 เช่นเดียวกับที่คุณไม่จำเป็นต้องเป็นช่างเครื่องก็ขับรถได้
Google Colab
วิธีการของ Google Colab เหมือนกับวิธีการของ Linux มีสมุดบันทึก Jupyter หลายเครื่องที่แสดงวิธีดำเนินการต่างๆ เช่น การฝึกอบรมเครือข่ายใหม่
ดูสมุดบันทึกในไดเรกทอรีย่อย colab หรือทำตามคำแนะนำของ Linux ด้านล่าง
วิธีการลินุกซ์ CMake
บทช่วยสอนการสร้าง Darknet สำหรับ Linux
1. ทางเลือก: หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ ณ จุดนี้ หากติดตั้งแล้ว Darknet จะใช้ GPU ของคุณเพื่อเพิ่มความเร็วในการประมวลผลภาพ (และวิดีโอ)
2. ติดตั้งแพ็คเกจที่จำเป็น:
`ทุบตี
sudo apt-get ติดตั้ง build-essential git libopencv-dev cmake
-
3. โคลนพื้นที่เก็บข้อมูล Darknet:
`ทุบตี
mkdir ~/srccd ~/src
โคลนคอมไพล์ https://github.com/hank-ai/darknet
-
4. สร้างไดเร็กทอรีบิวด์:
`ทุบตี
ซีดีดาร์กเน็ต
สร้าง mkdir
สร้างซีดี
-
5. สร้างไฟล์โครงการ CMake:
`ทุบตี
cmake -DCMAKEBUILDTYPE=ปล่อย ..
-
สิ่งสำคัญ: คุณต้องลบไฟล์ CMakeCache.txt ออกจากไดเร็กทอรีบิลด์ Darknet ของคุณเพื่อบังคับให้ CMake ค้นหาไฟล์ที่จำเป็นทั้งหมดอีกครั้ง
6. สร้าง Darknet:
`ทุบตี
ทำแพ็คเกจ -j4
-
7. ติดตั้งแพ็คเกจ Darknet:
`ทุบตี
sudo dpkg -i darknet-VERSION.deb
-
การติดตั้ง CUDA และ cuDNN (ทางเลือก)
Darknet สามารถทำงานได้โดยไม่ต้องใช้ CUDA แต่หากคุณต้องการฝึกเครือข่ายแบบกำหนดเอง จำเป็นต้องมี CUDA หรือ CUDA+cuDNN
1. ติดตั้ง CUDA:
- ไปที่ https://developer.nvidia.com/cuda-downloads เพื่อดาวน์โหลดและติดตั้ง CUDA
- ตรวจสอบให้แน่ใจว่าคุณสามารถรัน nvcc และ nvidia-smi ได้ คุณอาจต้องแก้ไขตัวแปร PATH ของคุณ
2. ติดตั้ง cuDNN:
- ไปที่ https://developer.nvidia.com/rdp/cudnn-download หรือ https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview เพื่อ ดาวน์โหลดและติดตั้ง cuDNN
การอัพเกรด CUDA หรือ cuDNN
หากคุณติดตั้ง CUDA หรือ CUDA+cuDNN ในภายหลัง หรืออัปเกรดเป็นซอฟต์แวร์ NVIDIA เวอร์ชันใหม่กว่า:
1. สร้าง Darknet ใหม่:
- ลบไฟล์ CMakeCache.txt ออกจากไดเร็กทอรีบิลด์ Darknet ของคุณ
- รัน cmake และสร้างคำสั่งอีกครั้ง
ผู้ใช้ขั้นสูง
หากต้องการสร้างไฟล์การติดตั้ง RPM แทนไฟล์ DEB ให้แก้ไขบรรทัดที่เกี่ยวข้องใน CM_package.cmake ก่อนที่จะรันแพ็คเกจ make -j4
`เอาล่ะ
# SET (CPACK_GENERATOR "DEB")
ชุด (CPACK_GENERATOR "รอบต่อนาที")
-
หากต้องการติดตั้งแพ็คเกจการติดตั้งเมื่อสร้างเสร็จแล้ว ให้ใช้ตัวจัดการแพ็คเกจตามปกติสำหรับการแจกจ่ายของคุณ ตัวอย่างเช่น บนระบบที่ใช้ Debian เช่น Ubuntu:
`ทุบตี
sudo dpkg -i darknet-2.0.1-Linux.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 ทั้งหมดถูกเก็บไว้
รันคำสั่งต่อไปนี้เพื่อทดสอบการติดตั้ง:
`ทุบตี
เวอร์ชันดาร์กเน็ต
-
วิธี Windows CMake
บทช่วยสอนการสร้าง Darknet สำหรับ Windows
1. ติดตั้งซอฟต์แวร์ที่จำเป็น:
- เปิดหน้าต่างพรอมต์คำสั่ง cmd.exe ปกติแล้วรันคำสั่งต่อไปนี้:
`ทุบตี
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 สำหรับขั้นตอนเหล่านี้!
- รันคำสั่งต่อไปนี้:
`ทุบตี
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
-
สิ่งสำคัญ: โปรดอดทนในขั้นตอนสุดท้ายนี้ เนื่องจากอาจใช้เวลานานในการรัน มันจำเป็นต้องดาวน์โหลดและสร้างสิ่งต่าง ๆ มากมาย
4. ทางเลือก: ติดตั้ง CUDA และ cuDNN
- หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ ณ จุดนี้ หากติดตั้งแล้ว Darknet จะใช้ GPU ของคุณเพื่อเพิ่มความเร็วในการประมวลผลภาพ (และวิดีโอ)
- คุณต้องลบไฟล์ CMakeCache.txt ออกจากไดเร็กทอรี Darknet build ของคุณเพื่อบังคับให้ CMake ค้นหาไฟล์ที่จำเป็นทั้งหมดอีกครั้ง
- อย่าลืมสร้าง Darknet ขึ้นมาใหม่
5. ติดตั้ง CUDA:
- ไปที่ https://developer.nvidia.com/cuda-downloads เพื่อดาวน์โหลดและติดตั้ง CUDA
- ตรวจสอบให้แน่ใจว่าคุณสามารถเรียกใช้ nvcc.exe และ nvidia-smi.exe ได้ คุณอาจต้องแก้ไขตัวแปร PATH ของคุณ
6. ติดตั้ง cuDNN:
- ไปที่ https://developer.nvidia.com/rdp/cudnn-download หรือ https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows เพื่อดาวน์โหลดและติดตั้ง cuDNN
- เมื่อคุณดาวน์โหลด cuDNN แล้ว ให้แตกไฟล์และคัดลอก bin รวม และไดเร็กทอรี lib ลงใน C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[version]/. คุณอาจต้องเขียนทับไฟล์บางไฟล์
7. โคลนพื้นที่เก็บข้อมูล 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
-
8. คัดลอก CUDA DLLs (ไม่บังคับ):
- หากคุณได้รับข้อผิดพลาดเกี่ยวกับ CUDA หรือ cuDNN DLL ที่หายไป เช่น cublas64_12.dll ให้คัดลอกไฟล์ CUDA .dll ด้วยตนเองลงในไดเร็กทอรีเอาต์พุตเดียวกันกับ darknet.exe ตัวอย่างเช่น:
`ทุบตี
คัดลอก "C: Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
-
9. รัน msbuild.exe อีกครั้งเพื่อสร้างแพ็คเกจการติดตั้ง NSIS:
`ทุบตี
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
-
ผู้ใช้ขั้นสูง
แทนที่จะเรียกใช้ Developer Command Prompt คุณสามารถใช้พรอมต์คำสั่งปกติหรือ ssh ลงในอุปกรณ์และเรียกใช้ Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat ด้วยตนเองได้
คุณสามารถเพิ่มโมดูลเสริมอื่นๆ ได้มากมายเมื่อสร้าง OpenCV เรียกใช้ .vcpkg.exe ค้นหา opencv เพื่อดูรายการทั้งหมด
ผลลัพธ์ของคำสั่ง cmake คือไฟล์โซลูชัน Visual Studio ปกติ Darknet.sln คุณสามารถละเว้นบรรทัดคำสั่งและโหลดโครงการ Darknet ใน Visual Studio ได้ หากคุณเป็นนักพัฒนาซอฟต์แวร์ที่ใช้ Visual Studio GUI เป็นประจำ
การทดสอบการติดตั้ง
ตอนนี้คุณควรมีไฟล์ต่อไปนี้: 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
รันคำสั่งต่อไปนี้เพื่อทดสอบการติดตั้งหลังจากรันวิซาร์ด NSIS:
`ทุบตี
C: เวอร์ชันโปรแกรม FilesDarknetbindarknet.exe
-
การใช้ดาร์กเน็ต
คลีไอ
ต่อไปนี้ไม่ใช่รายการคำสั่งทั้งหมดที่ Darknet รองรับ
นอกเหนือจาก Darknet CLI แล้ว โปรดสังเกต DarkHelp โปรเจ็กต์ CLI ซึ่งจัดเตรียม CLI ทางเลือกให้กับ Darknet/YOLO DarkHelp CLI ยังมีคุณสมบัติขั้นสูงหลายประการที่ไม่สามารถใช้งานได้โดยตรงใน Darknet คุณสามารถใช้ทั้ง Darknet CLI และ DarkHelp CLI ร่วมกันได้ พวกเขาไม่ได้แยกจากกัน
สำหรับคำสั่งส่วนใหญ่ที่แสดงด้านล่าง คุณจะต้องมีไฟล์ .weights พร้อมด้วยไฟล์ .names และ .cfg ที่เกี่ยวข้อง คุณสามารถฝึกเครือข่ายของคุณเองได้ (แนะนำเป็นอย่างยิ่ง!) หรือดาวน์โหลดโครงข่ายประสาทเทียมที่ใครบางคนได้ฝึกฝนและเปิดให้ใช้งานได้ฟรีบนอินเทอร์เน็ต ตัวอย่างของชุดข้อมูลที่ได้รับการฝึกอบรมล่วงหน้า ได้แก่:
LEGO Gears (ค้นหาวัตถุในภาพ)
Rolodex (การค้นหาข้อความในรูปภาพ)
MSCOCO (การตรวจจับวัตถุมาตรฐาน 80 คลาส)
คำสั่งให้รัน
1. รับความช่วยเหลือ:
`ทุบตี
ความช่วยเหลือจาก Darknet
-
2. ตรวจสอบเวอร์ชัน:
`ทุบตี
เวอร์ชันดาร์กเน็ต
-
3. ทำนายโดยใช้รูปภาพ:
- 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
-
4. พิกัดเอาต์พุต:
- V2:
`ทุบตี
การทดสอบเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights -extoutput dog.jpg
-
- V3:
`ทุบตี
darknet01inference_images สัตว์ dog.jpg
-
- ความช่วยเหลือด้านมืด:
`ทุบตี
DarkHelp --jsonanimals.cfganimals.namesanimals_best.weightsdog.jpg
-
5. การทำงานกับวิดีโอ:
- V2:
`ทุบตี
การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights -extoutput test.mp4
-
- V3:
`ทุบตี
darknet03display_videosanimals.cfg test.mp4
-
- ความช่วยเหลือด้านมืด:
`ทุบตี
DarkHelp Animals.cfganimals.namesanimals_best.weights test.mp4
-
6. การอ่านจากเว็บแคม:
- V2:
`ทุบตี
การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimals_best.weights -c 0
-
- V3:
`ทุบตี
darknet08display_webcam สัตว์
-
7. บันทึกผลลัพธ์ลงในวิดีโอ:
- 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
-
8. เอาต์พุต 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
-
9. ทำงานบน GPU เฉพาะ:
- V2:
`ทุบตี
การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimals_best.weights -i 1 test.mp4
-
10. การตรวจสอบความถูกต้องของโครงข่ายประสาทเทียม:
`ทุบตี
แผนที่เครื่องตรวจจับ 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
-
11. การตรวจสอบความแม่นยำ mAP@IoU=75:
`ทุบตี
แผนที่เครื่องตรวจจับ darknet Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75
-
12. การคำนวณจุดยึดใหม่:
- DarkMark: วิธีที่ดีที่สุดคือคำนวณจุดยึดใหม่ใน DarkMark เนื่องจากทำงาน 100 ครั้งติดต่อกัน และเลือกจุดยึดที่ดีที่สุดจากทั้งหมดที่คำนวณ
- Darknet: หากคุณต้องการใช้วิธีการเก่าใน Darknet:
`ทุบตี
เครื่องตรวจจับ darknet calcanchors Animals.data -numof_clusters 6 - กว้าง 320 - สูง 256
-
13. ฝึกอบรมเครือข่ายใหม่:
`ทุบตี
ซีดี ~/nn/สัตว์/
เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
-
การฝึกอบรม
ลิงก์ด่วนไปยังส่วนที่เกี่ยวข้องของคำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO
1. ฉันควรตั้งค่าไฟล์และไดเร็กทอรีของฉันอย่างไร?
2. ฉันควรใช้ไฟล์กำหนดค่าใด
3. ฉันควรใช้คำสั่งใดในการฝึกเครือข่ายของตัวเอง?
การใช้ DarkMark สำหรับคำอธิบายประกอบและการฝึกอบรม (แนะนำ)
วิธีที่ง่ายที่สุดในการใส่คำอธิบายประกอบและฝึกฝนคือการใช้ DarkMark ซึ่งจะสร้างไฟล์ Darknet ที่จำเป็นทั้งหมด ขอแนะนำเป็นอย่างยิ่งสำหรับการฝึกโครงข่ายประสาทเทียมใหม่
การตั้งค่าไฟล์ด้วยตนเองเพื่อฝึกเครือข่ายแบบกำหนดเอง
หากคุณต้องการตั้งค่าด้วยตนเอง ให้ทำตามขั้นตอนเหล่านี้:
1. สร้างโฟลเดอร์ใหม่:
- สร้างโฟลเดอร์ใหม่เพื่อจัดเก็บไฟล์การฝึกอบรมของคุณ ตัวอย่างเช่น คุณสามารถสร้าง ~/nn/animals/ เพื่อฝึกเครือข่ายสำหรับการตรวจจับสัตว์
2. คัดลอกเทมเพลตไฟล์การกำหนดค่า:
- คัดลอกไฟล์การกำหนดค่า Darknet หนึ่งไฟล์จาก cfg/ เป็นเทมเพลต ตัวอย่างเช่น คุณสามารถใช้ cfg/yolov4-tiny.cfg วางสิ่งนี้ไว้ในโฟลเดอร์ที่คุณสร้างขึ้น ตอนนี้คุณควรมี ~/nn/animals/animals.cfg
3. สร้างไฟล์animals.names:
- สร้างไฟล์ข้อความชื่อanimals.nameในโฟลเดอร์เดียวกับไฟล์กำหนดค่า
4. แก้ไขไฟล์animals.names:
- ระบุคลาสที่คุณต้องการตรวจจับ หนึ่งรายการต่อบรรทัด โดยไม่มีบรรทัดว่างหรือความคิดเห็น ตัวอย่างเช่น:
-
สุนัข
แมว
นก
ม้า
-
5. สร้างไฟล์animals.data:
- สร้างไฟล์ข้อความชื่อanimals.dataในโฟลเดอร์เดียวกัน
- ตัวอย่างเช่น ไฟล์ Animals.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
7. ใส่คำอธิบายประกอบรูปภาพ:
- แต่ละภาพต้องมีไฟล์ .txt ที่สอดคล้องกันพร้อมคำอธิบายประกอบ รูปแบบของไฟล์ .txt เหล่านี้มีความเฉพาะเจาะจงและต้องใช้พิกัดที่แน่นอนสำหรับคำอธิบายประกอบ ใช้ DarkMark หรือซอฟต์แวร์ที่คล้ายกันเพื่อใส่คำอธิบายประกอบภาพของคุณ
8. สร้างanimaltrain.txt และanimalvalid.txt:
- ไฟล์ข้อความเหล่านี้แสดงรายการภาพที่ใช้สำหรับการฝึกอบรมและการตรวจสอบตามลำดับ รูปภาพแต่ละรูปควรอยู่ในบรรทัดแยกกัน โดยมีเส้นทางสัมพัทธ์หรือเส้นทางสัมบูรณ์
9. แก้ไขไฟล์การกำหนดค่า:
- เปิดanimals.cfgด้วยโปรแกรมแก้ไขข้อความและทำการแก้ไขต่อไปนี้:
- ชุด = 64: ตรวจสอบให้แน่ใจว่าได้ตั้งค่านี้แล้ว
- เขตการปกครอง: ค่าที่ดีที่สุดที่จะใช้คือ 1 คุณอาจต้องเพิ่มค่านี้ขึ้นอยู่กับหน่วยความจำ GPU และขนาดเครือข่ายของคุณ
- maxbatches: ตั้งค่านี้เป็นค่าที่เหมาะสม โดยทั่วไปจะเป็น 2,000 เท่าของจำนวนคลาส สำหรับตัวอย่างนี้ ให้ใช้ maxbatches=8000 (4 คลาส * 2000)
- ขั้นตอน: ตั้งค่าเหล่านี้เป็น 80% และ 90% ของ maxbatches สำหรับตัวอย่างนี้ ใช้ขั้นตอน=6400,7200 (เนื่องจาก maxbatches=8000)
- ความกว้างและความสูง: ตั้งค่าเหล่านี้เป็นขนาดเครือข่ายที่คุณต้องการ ดูคำถามที่พบบ่อยของ Darknet/YOLO สำหรับคำแนะนำในการเลือกขนาดที่ดีที่สุด
- คลาส: ค้นหาอินสแตนซ์ทั้งหมดของบรรทัดนี้และแก้ไขให้ตรงกับจำนวนคลาสในไฟล์ .names ของคุณ (ในตัวอย่างนี้ class=4)
- ตัวกรอง: ค้นหาอินสแตนซ์ทั้งหมดของบรรทัดนี้ในส่วน [convolutional] ก่อนแต่ละส่วน [yolo] ค่าที่จะใช้คือ (numberofclasses + 5) 3 สำหรับตัวอย่างนี้ ให้ใช้ตัวกรอง=27 (4 + 5 3)
10. เริ่มการฝึกอบรม:
`ทุบตี
ซีดี ~/nn/สัตว์/
เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
-
11. ติดตามความคืบหน้าการฝึกอบรม:
- อดทน! ตุ้มน้ำหนักที่ดีที่สุดจะถูกบันทึกเป็นanimals_best.weights
- คุณสามารถตรวจสอบความคืบหน้าของการฝึกอบรมได้โดยดูไฟล์ Chart.png
- ดูคำถามที่พบบ่อยของ Darknet/YOLO เพื่อดูพารามิเตอร์เพิ่มเติมที่คุณอาจต้องการใช้ระหว่างการฝึก
12. การเพิ่มคำฟุ่มเฟือยให้กับผลลัพธ์การฝึกอบรม:
`ทุบตี
เครื่องตรวจจับ darknet -map -dont_show --verbose รถไฟanimals.dataanimals.cfg
-
เครื่องมือและลิงค์อื่นๆ
DarkMark: สำหรับการจัดการโปรเจ็กต์ Darknet/YOLO การใส่คำอธิบายประกอบรูปภาพ การตรวจสอบคำอธิบายประกอบ และสร้างไฟล์สำหรับการฝึกอบรม Darknet
DarkHelp: สำหรับ CLI ทางเลือกที่แข็งแกร่งไปจนถึง Darknet โดยใช้การจัดเรียงรูปภาพ การติดตามวัตถุในวิดีโอ และ C++ API ที่แข็งแกร่งที่สามารถนำมาใช้ในแอปพลิเคชันเชิงพาณิชย์
คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO: https://darknetcv.ai/faq/
ช่อง YouTube ของสเตฟาน: https://www.youtube.com/channel/UCYQ2k0L3X0c56l9gE2r1RQ
เซิร์ฟเวอร์ Discord ของ Darknet/YOLO: https://discord.gg/zSq8rtW
แผนการทำงาน
อัปเดตล่าสุด 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 ให้เป็นโมฆะ* แต่ใช้เป็นวัตถุ 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
กล่องขอบเขตที่หมุนได้หรือการรองรับ "มุม" บางประเภท
จุดสำคัญ/โครงกระดูก
แผนที่ความร้อน (กำลังดำเนินการ)
การแบ่งส่วน