กรอบการตรวจจับวัตถุ Darknet และ YOLO
Darknet เป็นเฟรมเวิร์กโครงข่ายประสาทเทียมโอเพ่นซอร์สที่สร้างขึ้นโดยใช้ C, C++ และ CUDA โดยทำหน้าที่เป็นรากฐานสำหรับ YOLO (You Only Look Once) ซึ่งเป็นระบบตรวจจับวัตถุแบบเรียลไทม์ที่ล้ำสมัยซึ่งมีชื่อเสียงในด้านความเร็วและความแม่นยำ
อ่านเกี่ยวกับวิธีที่ Hank.ai สนับสนุนชุมชน Darknet/YOLO: [ลิงก์ไปยังบล็อก Hank.ai]
สำรวจเว็บไซต์อย่างเป็นทางการของ Darknet/YOLO: [ลิงก์ไปยังเว็บไซต์ Darknet]
เจาะลึกคำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO ที่ครอบคลุม: [ลิงก์ไปยังคำถามที่พบบ่อย]
มีส่วนร่วมกับชุมชน Darknet/YOLO ที่มีชีวิตชีวาบน Discord: [ลิงก์ไปยังเซิร์ฟเวอร์ Discord]
เอกสาร
1. YOLOv7: [ลิงก์ไปยังกระดาษ]
2. Scaled-YOLOv4: [ลิงก์ไปยังกระดาษ]
3. YOLOv4: [ลิงก์ไปยังกระดาษ]
4. YOLOv3: [ลิงก์ไปยังกระดาษ]
ข้อมูลทั่วไป
เฟรมเวิร์ก Darknet/YOLO ยังคงครองเฟรมเวิร์กอื่นๆ และเวอร์ชัน YOLO ในแง่ของความเร็วและความแม่นยำ ลักษณะโอเพ่นซอร์สและความเป็นอิสระจากค่าธรรมเนียมใบอนุญาตทำให้สามารถรวมเข้ากับโครงการและผลิตภัณฑ์เชิงพาณิชย์ที่มีอยู่ได้อย่างราบรื่น
Darknet V3 ("Jazz") เปิดตัวในเดือนตุลาคม 2024 มีประสิทธิภาพที่โดดเด่น โดยประมวลผลวิดีโอชุดข้อมูล LEGO ที่ 1,000 FPS อย่างน่าประหลาดใจโดยใช้ NVIDIA RTX 3090 GPU ซึ่งหมายความว่าจะใช้เวลาประมวลผลน้อยกว่า 1 มิลลิวินาทีต่อเฟรมวิดีโอ
เข้าร่วมเซิร์ฟเวอร์ Darknet/YOLO Discord ที่ [ลิงก์ไปยังเซิร์ฟเวอร์ Discord] เพื่อรับการสนับสนุน การอภิปราย และการเรียนรู้ร่วมกัน
Darknet/YOLO รองรับอุปกรณ์หลากหลายประเภท ตั้งแต่ Raspberry Pi ไปจนถึงอุปกรณ์ฝึกซ้อมระดับไฮเอนด์ รองรับทั้งเวอร์ชัน CPU และ GPU เวอร์ชัน GPU ต้องใช้ GPU ที่รองรับ CUDA จาก NVIDIA
Darknet/YOLO มีความเข้ากันได้กับระบบปฏิบัติการ Linux, Windows และ Mac ค้นหาคำแนะนำการสร้างโดยละเอียดด้านล่าง
เวอร์ชันดาร์กเน็ต
เครื่องมือ Darknet ดั้งเดิมที่พัฒนาโดย Joseph Redmon ระหว่างปี 2013 ถึง 2017 ไม่มีหมายเลขเวอร์ชัน เรากำหนดเวอร์ชันนี้เป็น 0.x
Alexey Bochkovskiy ยังคงรักษาพื้นที่เก็บข้อมูล Darknet ยอดนิยมต่อไปตั้งแต่ปี 2017 ถึง 2021 อีกครั้งโดยไม่มีหมายเลขเวอร์ชัน เราเรียกสิ่งนี้ว่าเวอร์ชัน 1.x
พื้นที่เก็บข้อมูล Darknet ซึ่งสนับสนุนโดย Hank.ai และดูแลโดย Stéphane Charette ตั้งแต่ปี 2023 ได้แนะนำคำสั่ง "version" ระหว่างปี 2023 ถึงปลายปี 2024 ส่งคืนเวอร์ชัน 2.x "OAK"
เป้าหมายการพัฒนาคือเพื่อลดการหยุดชะงักของฟังก์ชันการทำงานที่มีอยู่ให้เหลือน้อยที่สุดในขณะที่ทำความคุ้นเคยกับโค้ดเบส การปรับปรุงที่สำคัญ ได้แก่ :
กระบวนการสร้างแบบรวม: ขั้นตอนการสร้างที่เขียนใหม่สำหรับกระบวนการสร้างที่ใช้ CMake ที่สอดคล้องกันบนทั้ง Windows และ Linux
codebase C++: การแปลงโค้ดเบสเพื่อใช้ประโยชน์จากคอมไพเลอร์ C++
แผนภูมิการฝึกอบรมที่ได้รับการปรับปรุง: ปรับปรุงการแสดงภาพแผนภูมิ.png ระหว่างการฝึกอบรม
การแก้ไขข้อบกพร่องและการเพิ่มประสิทธิภาพ: การปรับปรุงที่เกี่ยวข้องกับประสิทธิภาพ โดยมุ่งเน้นที่การลดเวลาการฝึกอบรม
สาขาสุดท้ายของโค้ดเบสนี้คือเวอร์ชัน 2.1 ซึ่งอยู่ในสาขา "v2"
การพัฒนาระยะต่อไปเริ่มขึ้นในกลางปี 2567 และสิ้นสุดในการเปิดตัวเวอร์ชัน 3.x "JAZZ" ในเดือนตุลาคม 2567
คุณสามารถเข้าถึงสาขา "v2" ก่อนหน้าเพื่อดำเนินการคำสั่งจากเวอร์ชันเหล่านั้นได้ตลอดเวลา โปรดแจ้งให้เราทราบหากคุณพบคำสั่งที่ขาดหายไป และเราจะตรวจสอบการบูรณาการอีกครั้ง
การเปลี่ยนแปลงที่สำคัญใน Darknet V3 ได้แก่:
การลบคำสั่ง: การลบคำสั่งที่ล้าสมัยและไม่ค่อยได้ใช้
การเพิ่มประสิทธิภาพการทำงาน: การปรับปรุงประสิทธิภาพทั้งการฝึกอบรมและการอนุมาน
การปรับเปลี่ยน API ดั้งเดิม: การปรับเปลี่ยน C API ดั้งเดิม; แอปพลิเคชันที่ใช้ Darknet API ดั้งเดิมอาจต้องมีการปรับเปลี่ยนเล็กน้อย
API C/C++ ใหม่: การแนะนำ Darknet V3 C และ C++ API ใหม่
โค้ดตัวอย่างที่อัปเดต: รวมแอปพลิเคชันใหม่และโค้ดตัวอย่างไว้ในไดเร็กทอรี "src-examples"
สำหรับข้อมูลโดยละเอียดเกี่ยวกับ API ใหม่: [ลิงก์ไปยังเอกสาร Darknet V3 API]
สำรวจโค้ดตัวอย่างที่อัปเดต: [ลิงก์ไปยังไฟล์ Darknet V3 API]
MSCOCO ตุ้มน้ำหนักที่ผ่านการฝึกอบรมล่วงหน้า
YOLO เวอร์ชันยอดนิยมหลายเวอร์ชันได้รับการฝึกอบรมล่วงหน้าเพื่อความสะดวกในชุดข้อมูล MSCOCO ชุดข้อมูลนี้ประกอบด้วย 80 คลาส ซึ่งสามารถระบุได้ง่ายในไฟล์ข้อความ "cfg/coco.names"
นอกเหนือจาก MSCOCO แล้ว Darknet/YOLO ยังมอบตุ้มน้ำหนักที่ได้รับการฝึกอบรมล่วงหน้าสำหรับชุดข้อมูลที่ง่ายกว่า เช่น LEGO Gears และ Rolodex ซึ่งช่วยให้คุณสามารถทดลองกับสถานการณ์ต่างๆ ได้ โปรดดูคำถามที่พบบ่อยของ Darknet/YOLO สำหรับรายละเอียดที่ครอบคลุม
ตุ้มน้ำหนักที่ได้รับการฝึกล่วงหน้าของ MSCOCO สามารถเข้าถึงได้จากหลายแหล่ง รวมถึงที่เก็บข้อมูลนี้:
YOLOv2 (พฤศจิกายน 2559):
YOLOv2-tiny: [ลิงก์ไปยังน้ำหนัก]
YOLOv2-เต็ม: [ลิงก์ไปยังน้ำหนัก]
YOLOv3 (พฤษภาคม 2018):
YOLOv3-tiny: [ลิงก์ไปยังน้ำหนัก]
YOLOv3-เต็ม: [ลิงก์ไปยังน้ำหนัก]
YOLOv4 (พฤษภาคม 2020):
YOLOv4-tiny: [ลิงก์ไปยังน้ำหนัก]
YOLOv4-เต็ม: [ลิงก์ไปยังน้ำหนัก]
YOLOv7 (สิงหาคม 2022):
YOLOv7-tiny: [ลิงก์ไปยังน้ำหนัก]
YOLOv7-full: [ลิงก์ไปยังน้ำหนัก]
ตุ้มน้ำหนักที่ได้รับการฝึกล่วงหน้าเหล่านี้มีจุดประสงค์เพื่อการสาธิตเป็นหลัก ไฟล์ .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 เพื่อสร้างไฟล์โปรเจ็กต์ที่จำเป็น
การสร้าง ติดตั้ง และใช้งาน Darknet/YOLO ไม่จำเป็นต้องมีความเชี่ยวชาญด้าน C++ เหมือนกับการขับรถโดยไม่ต้องเป็นช่างเครื่อง
Google Colab
คำแนะนำของ Google Colab เหมือนกับคำแนะนำของ Linux สมุดบันทึก Jupyter หลายเครื่องสาธิตงานต่างๆ เช่น การฝึกอบรมเครือข่ายใหม่
สำรวจสมุดบันทึกในไดเรกทอรีย่อย "colab" หรือทำตามคำแนะนำของ Linux ด้านล่าง
วิธีการลินุกซ์ CMake
บทช่วยสอนการสร้าง Darknet สำหรับ Linux
ทางเลือก: หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ ณ จุดนี้ หากติดตั้งแล้ว Darknet จะใช้ GPU ของคุณเพื่อเพิ่มความเร็วในการประมวลผลภาพ (และวิดีโอ)
คุณต้องลบไฟล์ CMakeCache.txt ออกจากไดเรกทอรีบิลด์ Darknet ของคุณเพื่อบังคับให้ CMake ค้นหาไฟล์ที่จำเป็นทั้งหมดอีกครั้ง
อย่าลืมสร้าง Darknet ขึ้นมาใหม่
Darknet สามารถทำงานได้โดยไม่ต้องใช้มัน แต่หากคุณต้องการฝึกเครือข่ายแบบกำหนดเอง จำเป็นต้องมี CUDA หรือ CUDA+cuDNN
1. ติดตั้งข้อกำหนดเบื้องต้น:
`ทุบตี
sudo apt-get ติดตั้ง build-essential git libopencv-dev cmake
-
2. โคลนพื้นที่เก็บข้อมูล Darknet:
`ทุบตี
mkdir ~/srccd ~/src
git clone https://github.com/hank-ai/darknetcd darknet
-
3. สร้างไดเร็กทอรีบิลด์:
`ทุบตี
mkdir buildcd สร้าง
-
4. กำหนดค่า CMake:
`ทุบตี
cmake -DCMAKEBUILDTYPE=ปล่อย ..
-
5. สร้าง Darknet:
`ทุบตี
ทำ -j4
-
6. แพ็คเกจ Darknet:
`ทุบตี
บรรจุุภัณฑ์
-
7. ติดตั้งแพ็คเกจ:
`ทุบตี
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 package" ให้ปรับบรรทัดเหล่านี้:
`เอาล่ะ
SET (CPACKGENERATOR "DEB")# SET (CPACKGENERATOR "RPM")
-
สำหรับการแจกแจงเช่น Centos และ OpenSUSE ให้แก้ไขบรรทัดเหล่านั้นดังนี้:
`เอาล่ะ
ชุด (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 ใหม่
1. ติดตั้งข้อกำหนดเบื้องต้นโดยใช้ Winget:
`ทุบตี
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"
4. ติดตั้ง OpenCV โดยใช้ VCPKG:
`ทุบตี
CDC:
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 ของคุณเพื่อบังคับให้ CMake ค้นหาไฟล์ที่จำเป็นทั้งหมดอีกครั้ง
อย่าลืมสร้าง Darknet ขึ้นมาใหม่
Darknet สามารถทำงานได้โดยไม่ต้องใช้มัน แต่หากคุณต้องการฝึกเครือข่ายแบบกำหนดเอง จำเป็นต้องมี CUDA หรือ CUDA+cuDNN
1. ติดตั้ง CUDA:
ไปที่ https://developer.nvidia.com/cuda-downloads เพื่อดาวน์โหลดและติดตั้ง CUDA
2. ติดตั้ง cuDNN:
ไปที่ https://developer.nvidia.com/rdp/cudnn-download หรือ https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows เพื่อดาวน์โหลดและติดตั้ง cuDNN
3. ตรวจสอบการติดตั้ง CUDA:
หลังจากติดตั้ง CUDA ตรวจสอบให้แน่ใจว่าคุณสามารถเรียกใช้ nvcc.exe และ nvidia-smi.exe ได้ คุณอาจต้องปรับตัวแปร PATH ของคุณ
4. รวม cuDNN:
แตกไฟล์เก็บถาวร cuDNN ที่ดาวน์โหลดมา และคัดลอกไดเร็กทอรี "bin", "include" และ "lib" ลงใน C:Program FilesNVIDIA GPU Computing ToolkitCUDA[version] คุณอาจต้องเขียนทับไฟล์ที่มีอยู่
5. ติดตั้ง CUDA หลังจาก Visual Studio:
- ต้องติดตั้ง CUDA หลังจาก Visual Studio หากคุณอัปเกรด Visual Studio อย่าลืมติดตั้ง CUDA ใหม่
6. โคลน Darknet และสร้าง:
`ทุบตี
ซีดี 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
-
7. จัดการกับ CUDA/cuDNN DLL ที่หายไป:
- หากคุณพบข้อผิดพลาดเกี่ยวกับ CUDA หรือ cuDNN DLLs ที่หายไป (เช่น cublas64_12.dll) ให้คัดลอกไฟล์ CUDA .dll ที่เกี่ยวข้องลงในไดเร็กทอรีเดียวกันกับ darknet.exe ด้วยตนเอง ตัวอย่างเช่น:
`ทุบตี
คัดลอก "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
-
(นี่คือตัวอย่าง ตรวจสอบเวอร์ชัน CUDA ของคุณและดำเนินการคำสั่งที่เหมาะสม)
- รันคำสั่ง msbuild.exe สุดท้ายอีกครั้งเพื่อสร้างแพ็คเกจการติดตั้ง NSIS
ผู้ใช้ขั้นสูง:
ผลลัพธ์ของคำสั่ง 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 แล้ว โปรดสังเกต DarkHelp โปรเจ็กต์ 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 ...
-
- คำสั่งนี้จะแสดงค่าเฉลี่ยความแม่นยำ (AP) สำหรับแต่ละคลาสในชุดข้อมูล
mAP@IoU=75:
`ทุบตี
แผนที่เครื่องตรวจจับ darknet Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75
-
- คำสั่งนี้จะคำนวณ mAP ที่เกณฑ์ IoU ที่ 0.75
การคำนวณจุดยึด:
แนวปฏิบัติที่ดีที่สุดสำหรับการคำนวณจุดยึดใหม่คือการใช้ DarkMark เนื่องจากทำการคำนวณติดต่อกัน 100 ครั้งและเลือกจุดยึดที่เหมาะสมที่สุด อย่างไรก็ตาม คุณสามารถใช้วิธี Darknet แบบเก่าได้:
`ทุบตี
เครื่องตรวจจับ darknet calcanchors Animals.data -numof_clusters 6 - กว้าง 320 - สูง 256
-
การฝึกอบรมเครือข่ายใหม่:
การฝึกอบรมขั้นพื้นฐาน:
`ทุบตี
เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
-
- น้ำหนักที่ดีที่สุดจะถูกบันทึกเป็นanimals_best.weights และความคืบหน้าของการฝึกจะปรากฏในchart.png
การฝึกอบรมอย่างละเอียด:
`ทุบตี
เครื่องตรวจจับ darknet -map -dont_show --verbose รถไฟanimals.dataanimals.cfg
-
- คำสั่งนี้จะให้ข้อมูลโดยละเอียดเพิ่มเติมระหว่างการฝึก
การฝึกอบรม
ลิงก์ด่วนไปยังส่วนที่เกี่ยวข้องของคำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO:
การตั้งค่าไฟล์และไดเร็กทอรี: [ลิงก์ไปยังส่วนคำถามที่พบบ่อย]
การเลือกไฟล์การกำหนดค่าที่เหมาะสม: [ลิงก์ไปยังส่วนคำถามที่พบบ่อย]
คำสั่งการฝึกอบรม: [ลิงก์ไปยังส่วนคำถามที่พบบ่อย]
วิธีที่ง่ายที่สุดในการใส่คำอธิบายประกอบและฝึกฝนคือการใช้ DarkMark เพื่อสร้างไฟล์ Darknet ที่จำเป็นทั้งหมด นี่เป็นแนวทางที่แนะนำสำหรับการฝึกโครงข่ายประสาทเทียมใหม่
การตั้งค่าการฝึกอบรมด้วยตนเอง:
1. สร้างโฟลเดอร์: สร้างโฟลเดอร์ใหม่เพื่อจัดเก็บไฟล์การฝึกอบรมของคุณ ตัวอย่างเช่น ~/nn/animals/
2. คัดลอกไฟล์การกำหนดค่า: คัดลอกไฟล์การกำหนดค่า Darknet เป็นเทมเพลต (เช่น cfg/yolov4-tiny.cfg) ลงในโฟลเดอร์ของคุณ ตอนนี้คุณมี ~/nn/animals/animals.cfg
3. สร้างไฟล์ .names: สร้างไฟล์ข้อความanimals.namesในโฟลเดอร์เดียวกัน
- แก้ไขไฟล์เพื่อแสดงรายการคลาสที่คุณต้องการตรวจจับ แต่ละชั้นเรียนจะต้องอยู่ในบรรทัดแยกกันโดยไม่มีบรรทัดว่างหรือความคิดเห็น ตัวอย่างเช่น:
-
สุนัข
แมว
นก
ม้า
-
4. สร้างไฟล์ .data: สร้างไฟล์ข้อความ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
-
5. สร้างโฟลเดอร์รูปภาพและคำอธิบายประกอบ: สร้างโฟลเดอร์ (เช่น ~/nn/animals/dataset) เพื่อจัดเก็บรูปภาพและคำอธิบายประกอบของคุณ
- แต่ละภาพต้องมีไฟล์ .txt ที่เกี่ยวข้องซึ่งมีคำอธิบายประกอบ รูปแบบคำอธิบายประกอบมีความเฉพาะเจาะจง ไม่สามารถสร้างขึ้นได้ด้วยตนเอง ใช้ DarkMark หรือซอฟต์แวร์ที่คล้ายกันเพื่อใส่คำอธิบายประกอบรูปภาพ
- รูปแบบคำอธิบายประกอบ YOLO ได้รับการอธิบายไว้ในคำถามที่พบบ่อยของ Darknet/YOLO
6. สร้างไฟล์ "train" และ "valid": สร้างไฟล์ข้อความ "train" และ "valid" ที่กล่าวถึงในไฟล์ .data
- ไฟล์เหล่านี้แสดงรายการภาพที่ใช้สำหรับการฝึกอบรมและการตรวจสอบตามลำดับ แต่ละภาพควรอยู่ในบรรทัดแยกกัน คุณสามารถใช้เส้นทางสัมพัทธ์หรือเส้นทางสัมบูรณ์ได้
7. แก้ไขไฟล์การกำหนดค่า:
- เปิดไฟล์ .cfg ของคุณด้วยโปรแกรมแก้ไขข้อความ และทำการปรับเปลี่ยนดังต่อไปนี้:
- ชุด=64: ค่านี้มักจะใช้ได้
- เขตการปกครอง: เริ่มต้นด้วยเขตการปกครอง=1. คุณอาจต้องเพิ่มค่านี้ขึ้นอยู่กับหน่วยความจำของ GPU และขนาดเครือข่าย ดูคำถามที่พบบ่อยของ Darknet/YOLO สำหรับคำแนะนำ
- maxbatches: ตั้งค่านี้เป็น 2,000 * จำนวนคลาส ตัวอย่างเช่น มี 4 คลาส maxbatches=8000
- ขั้นตอน: ตั้งค่านี้เป็น 80% และ 90% ของ maxbatches ตัวอย่างเช่น ด้วย maxbatches=8000 ขั้นตอน=6400,7200
- ความกว้างและความสูง: นี่คือขนาดเครือข่าย ปรึกษาคำถามที่พบบ่อยของ Darknet/YOLO เพื่อรับคำแนะนำในการคำนวณขนาด
- คลาส: เปลี่ยนบรรทัด class=... เพื่อให้ตรงกับจำนวนคลาสในไฟล์ .names ของคุณ (ในตัวอย่างนี้ class=4)
- ตัวกรอง: แก้ไขตัวกรอง=... บรรทัดในแต่ละส่วน [convolutional] ก่อนแต่ละส่วน [yolo] ค่าจะคำนวณเป็น (จำนวนคลาส + 5) * 3 ตัวอย่างเช่น มี 4 คลาส ตัวกรอง=27
8. เริ่มการฝึก:
`ทุบตี
ซีดี ~/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: แหล่งข้อมูลอันทรงคุณค่าสำหรับการตอบคำถามของคุณเกี่ยวกับ Darknet/YOLO
ช่อง YouTube ของ Stéphane: ค้นหาบทช่วยสอนและวิดีโอตัวอย่างมากมาย
เซิร์ฟเวอร์ Darknet/YOLO Discord: เข้าร่วมเซิร์ฟเวอร์เพื่อถามคำถามสนับสนุนและเชื่อมต่อกับผู้ใช้ Darknet/YOLO คนอื่นๆ
แผนการทำงาน
อัปเดตล่าสุด: 30-10-2024
สมบูรณ์
สลับ qsort(): แทนที่ qsort() ด้วย std::sort() ในส่วนที่เกี่ยวข้องของ codebase (บางอินสแตนซ์ที่เหลือยังคงใช้ qsort())
ลบฟังก์ชันที่ล้าสมัย: ลบ check_mistakes, getchar() และ system()
รหัสฐาน C++: แปลง Darknet เพื่อใช้คอมไพเลอร์ C++ (g++ บน Linux, VisualStudio บน Windows)
Windows build: แก้ไขกระบวนการสร้าง Windows
รองรับ Python: แก้ไขการรวม Python
ห้องสมุด Darknet: สร้างห้องสมุด Darknet
ป้ายคำทำนาย: เปิดใช้งานป้ายคำทำนายอีกครั้ง (รหัส "ตัวอักษร")
รหัส CUDA/GPU: เปิดใช้งานฟังก์ชัน CUDA/GPU อีกครั้ง
CUDNN: เปิดใช้งานการสนับสนุน CUDNN อีกครั้ง
ครึ่ง CUDNN: เปิดใช้งานการสนับสนุนครึ่งความแม่นยำของ CUDNN อีกครั้ง
สถาปัตยกรรม CUDA: ลบฮาร์ดโค้ดของสถาปัตยกรรม CUDA ออก
ข้อมูลเวอร์ชัน CUDA: ปรับปรุงข้อมูลเวอร์ชัน CUDA
AVX: เปิดใช้งานการรองรับ AVX อีกครั้ง
ไฟล์รุ่นเก่าที่ถูกลบ: ลบโซลูชันเก่าและ Makefile
การพึ่งพา OpenCV: ทำให้ OpenCV เป็นการพึ่งพาที่จำเป็น
ไลบรารี pthread: ลบการพึ่งพาไลบรารี pthread เก่าออก
STB: ลบการพึ่งพา STB แล้ว
CMakeLists.txt: เขียน CMakeLists.txt ใหม่เพื่อใช้วิธีการตรวจหา CUDA ใหม่
ไฟล์ที่ล้าสมัยที่ถูกลบ: ลบรหัส "ตัวอักษร" เก่าและลบรูปภาพมากกว่า 700 ภาพในข้อมูล/ป้ายกำกับ
บิลด์นอกซอร์ส: เปิดใช้งานบิลด์นอกซอร์ส
หมายเลขเวอร์ชัน: เอาต์พุตหมายเลขเวอร์ชันที่ได้รับการปรับปรุง
ประสิทธิภาพการฝึกอบรม: การเพิ่มประสิทธิภาพสำหรับการฝึกอบรม (งานที่กำลังดำเนินอยู่)
ประสิทธิภาพการอนุมาน: การเพิ่มประสิทธิภาพสำหรับการอนุมาน (งานที่กำลังดำเนินอยู่)
การอ้างอิงแบบส่งผ่าน: ใช้การอ้างอิงแบบส่งผ่านหากเป็นไปได้เพื่อประสิทธิภาพที่ดีขึ้น
การล้างโค้ด: ทำความสะอาดไฟล์ .hpp
เขียนใหม่ darknet.h: อัปเดตไฟล์ส่วนหัว Darknet API
การใช้งาน cv::Mat: ใช้ cv::Mat เป็นวัตถุ C++ ที่เหมาะสมแทนที่จะส่งให้เป็นโมฆะ*
โครงสร้างรูปภาพ: แก้ไขความไม่สอดคล้องกันและปัญหาที่เกี่ยวข้องกับโครงสร้างรูปภาพภายใน
การสนับสนุน Jetson: แก้ไขการสร้างสำหรับอุปกรณ์ Jetson ที่ใช้ ARM
- อุปกรณ์ Jetson รุ่นเก่าไม่น่าจะได้รับการแก้ไขเนื่องจาก NVIDIA หยุดการสนับสนุน (ไม่มีคอมไพเลอร์ C ++ 17)
- อุปกรณ์ Jetson Orin ใหม่กำลังทำงานอยู่
Python API ใน V3: แก้ไข Python API ใน Darknet V3
เป้าหมายระยะสั้น
สลับ printf(): แทนที่ printf() ด้วย std::cout (อยู่ระหว่างดำเนินการ)
การสนับสนุนกล้อง Zed: กลับมาอีกครั้งและปรับปรุงการสนับสนุนสำหรับกล้อง Zed
การแยกวิเคราะห์บรรทัดคำสั่ง: ใช้การแยกวิเคราะห์บรรทัดคำสั่งที่มีประสิทธิภาพและสม่ำเสมอยิ่งขึ้น (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะกลาง
ลบรหัสถ่าน: กำจัดรหัสถ่านทั้งหมดแล้วแทนที่ด้วย std::string
คำเตือนของคอมไพเลอร์: อย่าซ่อนคำเตือนและระบุคำเตือนของคอมไพเลอร์ (อยู่ระหว่างดำเนินการ)
การใช้งาน cv::Mat: ปรับปรุงการใช้ cv::Mat แทนโครงสร้างรูปภาพที่กำหนดเองใน C (อยู่ระหว่างดำเนินการ)
ฟังก์ชันรายการ: แทนที่ฟังก์ชันรายการเก่าด้วย std::vector หรือ std::list
การรองรับภาพระดับสีเทา: แก้ไขการรองรับภาพระดับสีเทา 1 ช่อง
การรองรับรูปภาพ N-channel: เพิ่มการรองรับรูปภาพที่มีมากกว่า 3 ช่อง (เช่น ช่องความลึกหรือความร้อน)
การล้างโค้ดอย่างต่อเนื่อง: ดำเนินการล้างโค้ดอย่างต่อเนื่อง (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะยาว
ปัญหา CUDA/CUDNN: แก้ไขปัญหาความเข้ากันได้ของ CUDA/CUDNN ใน GPU ต่างๆ
เขียนโค้ด CUDA/CUDNN ใหม่: เขียนโค้ด CUDA/CUDNN อีกครั้งเพื่อประสิทธิภาพและความเข้ากันได้ที่ดีขึ้น
รองรับ GPU ที่ไม่ใช่ NVIDIA: ตรวจสอบการรองรับ GPU ที่ไม่ใช่ NVIDIA
กล่องขอบเขตแบบหมุน: ใช้การรองรับสำหรับกล่องขอบเขตแบบหมุนหรือข้อมูลมุม
จุดสำคัญ/โครงกระดูก: เพิ่มการรองรับจุดสำคัญและโครงกระดูก
แผนที่ความร้อน: ใช้การสนับสนุนแผนที่ความร้อน (อยู่ระหว่างดำเนินการ)
การแบ่งส่วน: เพิ่มการสนับสนุนสำหรับการแบ่งส่วน