กรอบการตรวจจับวัตถุ Darknet และ YOLO
เรียบเรียงโดยบรรณาธิการ Downcodes
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 สามารถใช้ GPU NVIDIA RTX 3090 เพื่อรันวิดีโอชุดข้อมูล LEGO ที่สูงถึง 1,000 FPS ซึ่งหมายความว่าแต่ละเฟรมวิดีโอจะถูกสร้างขึ้นโดยการอ่าน ปรับขนาด และกระบวนการของ 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 repo ยอดนิยมถัดไปที่ดูแลโดย Alexey Bochkovskiy ในช่วงปี 2560-2564 ยังไม่มีหมายเลขเวอร์ชันเช่นกัน เราเชื่อว่านี่คือเวอร์ชัน 1.x
repo Darknet ที่สนับสนุนโดย Hank.ai และดูแลโดย Stéphane Charette ซึ่งเริ่มในปี 2023 เป็น repo แรกที่มีคำสั่งเวอร์ชัน ตั้งแต่ปี 2023 ถึงสิ้นปี 2024 จะกลับมาเป็นเวอร์ชัน 2.x "OAK"
เป้าหมายคือการทำความคุ้นเคยกับฐานโค้ดโดยทำลายฟังก์ชันการทำงานที่มีอยู่ให้น้อยที่สุดเท่าที่จะเป็นไปได้
เขียนขั้นตอนการสร้างใหม่เพื่อให้เรามีวิธีการสร้างบน Windows และ Linux แบบครบวงจรโดยใช้ CMake
แปลงฐานโค้ดเพื่อใช้คอมไพเลอร์ C++
ปรับปรุง Chart.png ในระหว่างการฝึกอบรม
การแก้ไขข้อบกพร่องและการเพิ่มประสิทธิภาพที่เกี่ยวข้องกับประสิทธิภาพ ซึ่งส่วนใหญ่เกี่ยวข้องกับการลดเวลาที่ต้องใช้ในการฝึกอบรมเครือข่าย
สาขาสุดท้ายของ codebase นี้คือเวอร์ชัน 2.1 ในสาขา v2
การพัฒนาระยะต่อไปจะเริ่มในกลางปี 2024 และจะเปิดตัวในเดือนตุลาคม 2024 คำสั่ง version ส่งคืน 3.x "JAZZ"
หากคุณต้องการรันคำสั่งใดๆ เหล่านี้ คุณสามารถชำระเงินสาขา v2 ก่อนหน้าได้ตลอดเวลา โปรดแจ้งให้เราทราบ เพื่อให้เราตรวจสอบการเพิ่มคำสั่งที่ขาดหายไปกลับเข้าไปได้
ลบคำสั่งเก่าและคำสั่งที่ไม่ได้รับการดูแลออกจำนวนมาก
การเพิ่มประสิทธิภาพการทำงานหลายอย่าง ทั้งในระหว่างการฝึกอบรมและการอนุมาน
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
MSCOCO ตุ้มน้ำหนักที่ผ่านการฝึกอบรมล่วงหน้า
เพื่อความสะดวก ชุดข้อมูล 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 เช่นเดียวกับที่คุณไม่จำเป็นต้องเป็นช่างเครื่องก็ขับรถได้
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
git clone https://github.com/hank-ai/darknetcd darknet
mkdir buildcd สร้าง
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++:
1. คลิกเมนู "Windows Start" และเรียกใช้ "Visual Studio Installer"
2. คลิก "แก้ไข"
3. เลือก "การพัฒนาเดสก์ท็อปโดยใช้ C++"
4. คลิก "แก้ไข" ที่มุมขวาล่าง จากนั้นคลิก "ใช่"
เมื่อดาวน์โหลดและติดตั้งทุกอย่างแล้ว ให้คลิกที่เมนู Windows Start อีกครั้ง และเลือก Developer Command Prompt สำหรับ VS 2022 อย่าใช้ PowerShell สำหรับขั้นตอนเหล่านี้ คุณจะประสบปัญหา!
ผู้ใช้ขั้นสูง:
นอกเหนือจากการเรียกใช้พรอมต์คำสั่งของนักพัฒนาแล้ว คุณยังสามารถใช้พรอมต์คำสั่งธรรมดาหรือ ssh เพื่อเข้าสู่อุปกรณ์และเรียกใช้ "Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat" ด้วยตนเอง
เมื่อคุณมีพรอมต์คำสั่งสำหรับนักพัฒนาที่ทำงานตามที่กล่าวข้างต้น (ไม่ใช่ PowerShell!) ให้รันคำสั่งต่อไปนี้เพื่อติดตั้ง Microsoft VCPKG ซึ่งจะใช้ในการสร้าง OpenCV:
`ทุบตี
ซีดี c:mkdir c:srccd c:src
โคลนคอมไพล์ https://github.com/microsoft/vcpkgcd 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.gitcd darknet
mkdir buildcd สร้าง
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 ที่เกี่ยวข้อง คุณสามารถฝึกเครือข่ายของคุณเองได้ (ขอแนะนำอย่างยิ่ง!) หรือดาวน์โหลดโครงข่ายประสาทเทียมที่ผู้อื่นฝึกฝนและมีให้บริการฟรีบนอินเทอร์เน็ต ตัวอย่างของชุดข้อมูลก่อนการฝึกอบรมได้แก่:
LEGO Gears (ค้นหาวัตถุในภาพ)
Rolodex (ค้นหาข้อความในภาพ)
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:
ฉันจะตั้งค่าไฟล์และไดเร็กทอรีของฉันได้อย่างไร?
ฉันควรใช้โปรไฟล์ใด
ฉันควรใช้คำสั่งใดในการฝึกเครือข่ายของตัวเอง?
สร้างไฟล์ Darknet ที่จำเป็นทั้งหมดโดยใช้ DarkMark ซึ่งเป็นวิธีที่ง่ายที่สุดในการใส่คำอธิบายประกอบและฝึกฝน นี่เป็นวิธีที่แนะนำในการฝึกโครงข่ายประสาทเทียมใหม่อย่างแน่นอน
หากคุณต้องการตั้งค่าไฟล์ต่างๆ ด้วยตนเองเพื่อฝึกเครือข่ายแบบกำหนดเอง:
1. สร้างโฟลเดอร์ใหม่เพื่อจัดเก็บไฟล์ ในตัวอย่างนี้ โครงข่ายประสาทเทียมจะถูกสร้างขึ้นเพื่อตรวจจับสัตว์ ดังนั้นไดเร็กทอรีต่อไปนี้จะถูกสร้างขึ้น: ~/nn/animals/
2. คัดลอกไฟล์การกำหนดค่า Darknet ไฟล์ใดไฟล์หนึ่งที่คุณต้องการใช้เป็นเทมเพลต ตัวอย่างเช่น ดูที่ cfg/yolov4-tiny.cfg วางไว้ในโฟลเดอร์ที่คุณสร้างขึ้น ในตัวอย่างนี้ ตอนนี้เรามี ~/nn/animals/animals.cfg
3. สร้างไฟล์ข้อความanimals.namesในโฟลเดอร์เดียวกับที่คุณวางไฟล์การกำหนดค่า ในตัวอย่างนี้ ตอนนี้เรามี ~/nn/animals/animals.names
4. ใช้โปรแกรมแก้ไขข้อความเพื่อแก้ไขไฟล์animals.names ระบุหมวดหมู่ที่คุณต้องการใช้ จะต้องมีเพียงหนึ่งรายการต่อบรรทัด ไม่มีบรรทัดว่าง และไม่มีความคิดเห็น ในตัวอย่างนี้ ไฟล์ .names จะมี 4 บรรทัดพอดี:
-
สุนัข
แมว
นก
ม้า
-
5. สร้างไฟล์ข้อความ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" ที่มีชื่ออยู่ในไฟล์ .data ไฟล์ข้อความทั้งสองนี้จำเป็นต้องแสดงรายการรูปภาพทั้งหมดที่ Darknet ต้องใช้สำหรับการฝึกอบรมและการตรวจสอบ (เมื่อคำนวณ mAP%) ตามลำดับ หนึ่งภาพต่อแถว เส้นทางและชื่อไฟล์อาจเป็นแบบสัมพัทธ์หรือแบบสัมบูรณ์ก็ได้
8. ใช้โปรแกรมแก้ไขข้อความเพื่อแก้ไขไฟล์ .cfg ของคุณ
9. ตรวจสอบให้แน่ใจว่าชุด = 64
10. ให้ความสนใจกับเขตการปกครอง คุณอาจต้องเพิ่มการแบ่งย่อย ขึ้นอยู่กับขนาดเครือข่ายและหน่วยความจำที่มีอยู่ใน GPU ของคุณ ค่าที่ดีที่สุดที่จะใช้คือ 1 ดังนั้นให้เริ่มจากสิ่งนั้นเลย หาก 1 ไม่ได้ผลสำหรับคุณ โปรดดูคำถามที่พบบ่อยของ Darknet/YOLO
11. หมายเหตุ maxbatches=…. ความคุ้มค่าที่ดีที่จะใช้เมื่อเริ่มต้นคือจำนวนหมวดหมู่คูณด้วย 2000 ในตัวอย่างนี้ เรามีสัตว์ 4 ตัว ดังนั้น 4 * 2000 = 8000 ซึ่งหมายความว่าเราจะใช้ maxbatches=8000
12. หมายเหตุขั้นตอน=…. ควรตั้งค่าเป็น 80% และ 90% ของ maxbatches ในตัวอย่างนี้ เนื่องจาก maxbatches ถูกตั้งค่าเป็น 8000 เราจะใช้ขั้นตอน = 6400,7200
13. คำนึงถึงความกว้าง=... และความสูง=.... นี่คือมิติเครือข่าย คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO อธิบายวิธีคำนวณขนาดที่เหมาะสมที่สุดที่จะใช้
14. ค้นหาอินสแตนซ์ทั้งหมดของบรรทัด class=... และแก้ไขด้วยจำนวนคลาสในไฟล์ .names ในตัวอย่างนี้เราจะใช้ class=4
15. ค้นหาอินสแตนซ์ของตัวกรองทั้งหมด=... บรรทัดในส่วน [convolutional] ก่อนแต่ละส่วน [yolo] ค่าที่ใช้คือ (จำนวนหมวด + 5) 3. ซึ่งหมายความว่าในตัวอย่างนี้ (4 + 5) 3 = 27 ดังนั้น เราจะใช้ตัวกรอง=27 ในบรรทัดที่เหมาะสม
เริ่มฝึก! รันคำสั่งต่อไปนี้:
`ทุบตี
ซีดี ~/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
ดู DarkHelp สำหรับ CLI ทางเลือกที่แข็งแกร่งไปจนถึง Darknet โดยใช้ภาพต่อกัน การติดตามวัตถุในวิดีโอของคุณ หรือสำหรับ C++ API ที่แข็งแกร่งที่สามารถใช้งานได้ง่ายในแอปพลิเคชันเชิงพาณิชย์
ดูว่าคำถามที่พบบ่อยของ Darknet/YOLO สามารถช่วยตอบคำถามของคุณได้หรือไม่
ลองดูบทแนะนำและวิดีโอตัวอย่างมากมายในช่อง YouTube ของ Stéphane
หากคุณมีคำถามหรือต้องการสนทนากับผู้ใช้ Darknet/YOLO คนอื่นๆ โปรดเข้าร่วมเซิร์ฟเวอร์ Darknet/YOLO Discord
แผนการทำงาน
อัปเดตล่าสุด: 30-10-2024
สมบูรณ์
แทนที่ qsort() ด้วย std::sort() ระหว่างการฝึก (ยังมีอันอื่นที่คลุมเครืออยู่)
ลบ check_mistakes, getchar() และ system()
แปลง Darknet เพื่อใช้คอมไพเลอร์ C++ (g++ บน Linux, Visual Studio บน 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 เก่า
การแยกวิเคราะห์บรรทัดคำสั่งที่ดีขึ้นและสม่ำเสมอยิ่งขึ้น (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะกลาง
ลบรหัสอักขระทั้งหมดและแทนที่ด้วย std::string
อย่าซ่อนคำเตือนและล้างคำเตือนของคอมไพเลอร์ (อยู่ระหว่างดำเนินการ)
ควรใช้ cv::Mat แทนโครงสร้างรูปภาพที่กำหนดเองใน C (อยู่ระหว่างดำเนินการ)
แทนที่ฟังก์ชันรายการเก่าด้วย std::vector หรือ std::list
แก้ไขการรองรับภาพระดับสีเทา 1 แชนเนล
เพิ่มการรองรับภาพ N-channel โดยที่ N > 3 (เช่น รูปภาพที่มีความลึกหรือช่องระบายความร้อนเพิ่มเติม)
การล้างโค้ดอย่างต่อเนื่อง (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะยาว
แก้ไขปัญหา CUDA/CUDNN สำหรับ GPU ทั้งหมด
เขียนโค้ด CUDA+cuDNN ใหม่
การวิจัยเพื่อเพิ่มการรองรับ GPU ที่ไม่ใช่ NVIDIA
กล่องขอบเขตแบบหมุนหรือการรองรับ "มุม" บางชนิด
ประเด็นสำคัญ/โครงกระดูก
แผนที่ความร้อน (อยู่ระหว่างดำเนินการ)
การแบ่งส่วน