กรอบการตรวจจับวัตถุ Darknet และ YOLO
เอกสาร
ข้อมูลทั่วไป
เวอร์ชันดาร์กเน็ต
MSCOCO ตุ้มน้ำหนักที่ผ่านการฝึกอบรมล่วงหน้า
อาคาร
Google Colab
วิธีการลินุกซ์ CMake
วิธี Windows CMake
การใช้ดาร์กเน็ต
คลีไอ
การฝึกอบรม
เครื่องมือและลิงค์อื่นๆ
แผนการทำงาน
เป้าหมายระยะสั้น
เป้าหมายระยะกลาง
เป้าหมายระยะยาว
Darknet เป็นเฟรมเวิร์กโครงข่ายประสาทเทียมแบบโอเพ่นซอร์สที่เขียนด้วยภาษา C, C++ และ CUDA
YOLO (You Only Look Once) เป็นระบบตรวจจับวัตถุแบบเรียลไทม์ที่ล้ำสมัย ซึ่งทำงานในกรอบ Darknet
อ่านวิธีที่ Hank.ai ช่วยเหลือชุมชน Darknet/YOLO
ประกาศ Darknet V3 "Jazz"
ดู เว็บไซต์ Darknet/YOLO
โปรดอ่าน คำถามที่พบบ่อยของ Darknet/YOLO
เข้าร่วม เซิร์ฟเวอร์ Discord ของ Darknet/YOLO
กระดาษ YOLOv7
กระดาษ ปรับขนาด-YOLOv4
กระดาษ YOLOv4
กระดาษ YOLOv3
เฟรมเวิร์ก Darknet/YOLO ยังคง เร็ว และ แม่นยำมากกว่า เฟรมเวิร์กและเวอร์ชันอื่นๆ ของ YOLO
เฟรมเวิร์กนี้เป็นทั้ง ฟรี และ โอเพ่นซอร์ส โดยสมบูรณ์ คุณสามารถรวม Darknet/YOLO เข้ากับโปรเจ็กต์และผลิตภัณฑ์ที่มีอยู่ รวมถึงโปรเจ็กต์เชิงพาณิชย์ โดยไม่ต้องมีใบอนุญาตหรือจ่ายค่าธรรมเนียม
Darknet V3 ("Jazz") ที่เปิดตัวในเดือนตุลาคม 2024 สามารถรันวิดีโอชุดข้อมูล LEGO ได้อย่างแม่นยำที่สูงถึง 1,000 FPS เมื่อใช้ NVIDIA RTX 3090 GPU ซึ่งหมายความว่าแต่ละเฟรมวิดีโอจะถูกอ่าน ปรับขนาด และประมวลผลโดย Darknet/YOLO ใน 1 มิลลิวินาทีหรือ น้อย.
โปรดเข้าร่วมเซิร์ฟเวอร์ 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
repo Darknet ยอดนิยมถัดไปที่ดูแลโดย Alexey Bochkovskiy ระหว่างปี 2560-2564 ยังไม่มีหมายเลขเวอร์ชันเช่นกัน เราพิจารณาเวอร์ชัน 1.x นี้
repo Darknet ที่สนับสนุนโดย Hank.ai และดูแลโดย Stéphane Charette ซึ่งเริ่มในปี 2023 เป็นรุ่นแรกที่มีคำสั่ง version
ตั้งแต่ปี 2023 จนถึงปลายปี 2024 ส่งคืนเวอร์ชัน 2.x "OAK"
เป้าหมายคือการพยายามทำลายฟังก์ชันการทำงานที่มีอยู่ให้เหลือเพียงเล็กน้อยในขณะที่ทำความคุ้นเคยกับโค้ดเบส
เขียนขั้นตอนการสร้างใหม่เพื่อให้เรามี 1 วิธีที่เป็นหนึ่งเดียวในการสร้างโดยใช้ CMake บนทั้ง Windows และ Linux
แปลง codebase เพื่อใช้คอมไพเลอร์ C++
ปรับปรุง Chart.png ขณะฝึกอบรม
การแก้ไขข้อบกพร่องและการเพิ่มประสิทธิภาพที่เกี่ยวข้องกับประสิทธิภาพ ส่วนใหญ่เกี่ยวข้องกับการลดเวลาที่ใช้ในการฝึกอบรมเครือข่าย
สาขาสุดท้ายของ codebase นี้คือเวอร์ชัน 2.1 ในสาขา v2
การพัฒนาระยะต่อไปเริ่มต้นในกลางปี 2024 และเปิดตัวในเดือนตุลาคม 2024 ขณะนี้คำสั่ง version
ส่งคืน 3.x "JAZZ"
คุณสามารถชำระเงินสาขา v2
ก่อนหน้าได้ตลอดเวลา หากคุณต้องการรันคำสั่งใดคำสั่งหนึ่งเหล่านี้ แจ้งให้เราทราบเพื่อให้เราตรวจสอบการเพิ่มคำสั่งที่หายไปกลับเข้าไปได้
ลบคำสั่งเก่าและคำสั่งที่ไม่ได้รับการดูแลออกจำนวนมาก
การเพิ่มประสิทธิภาพการทำงานหลายอย่าง ทั้งในขณะฝึกอบรมและระหว่างการอนุมาน
Legacy 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
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 darknet_02_display_annotated_images coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg darknet_03_display_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
ลินุกซ์
หน้าต่าง
ระวังหากคุณกำลังติดตามบทช่วยสอนเก่าที่มีขั้นตอนการสร้างที่ซับซ้อนมากขึ้น หรือขั้นตอนการสร้างที่ไม่ตรงกับสิ่งที่อยู่ใน readme นี้ ขั้นตอนการสร้างใหม่ตามที่อธิบายไว้ด้านล่างเริ่มต้นในเดือนสิงหาคม 2023
นักพัฒนาซอฟต์แวร์ควรไปที่ https://darknetcv.ai/ เพื่อรับข้อมูลเกี่ยวกับภายในของเฟรมเวิร์กการตรวจจับวัตถุ Darknet/YOLO
วิธีการของ Google Colab เหมือนกับวิธีการของ Linux มีสมุดบันทึก Jupyter หลายเครื่องที่แสดงวิธีทำงานบางอย่าง เช่น การฝึกอบรมเครือข่ายใหม่
ดูสมุดบันทึกในไดเรกทอรีย่อย colab
และ/หรือทำตามคำแนะนำของ Linux ด้านล่าง
ทางเลือก: หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ ณ จุดนี้ หากติดตั้งแล้ว Darknet จะใช้ GPU ของคุณเพื่อเพิ่มความเร็วในการประมวลผลภาพ (และวิดีโอ)
คุณต้องลบไฟล์ CMakeCache.txt
ออกจากไดเรกทอรี build
Darknet ของคุณเพื่อบังคับให้ 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 -DCMAKE_BUILD_TYPE=ปล่อย .. ทำแพ็คเกจ -j4 sudo dpkg -i darknet-<INSERT-VERSION-YOU-BUILT-HERE>.deb
หากคุณใช้ CMake เวอร์ชันเก่า คุณจะต้องอัปเกรด CMake ก่อนจึงจะสามารถเรียกใช้คำสั่ง cmake
ด้านบนได้ การอัพเกรด CMake บน Ubuntu สามารถทำได้ด้วยคำสั่งต่อไปนี้:
sudo apt-get ล้าง cmake sudo snap ติดตั้ง cmake --classic
หากใช้ bash
เป็นเชลล์คำสั่ง คุณจะต้องรีสตาร์ทเชลล์ ณ จุดนี้ หากใช้ fish
ก็ควรเลือกเส้นทางใหม่ทันที
ผู้ใช้ขั้นสูง:
หากคุณต้องการสร้างไฟล์การติดตั้ง RPM แทนไฟล์ DEB โปรดดูบรรทัดที่เกี่ยวข้องใน
CM_package.cmake
ก่อนที่จะรันmake -j4 package
คุณจะต้องแก้ไขสองบรรทัดนี้:
SET (CPACK_GENERATOR "DEB")# SET (CPACK_GENERATOR "RPM")
สำหรับ distros เช่น Centos และ OpenSUSE คุณจะต้องสลับสองบรรทัดนั้นใน
CM_package.cmake
เป็น:
# SET (CPACK_GENERATOR "DEB") SET (CPACK_GENERATOR "RPM")
หากต้องการติดตั้งแพ็คเกจการติดตั้ง เมื่อสร้างเสร็จแล้ว ให้ใช้ตัวจัดการแพ็คเกจตามปกติสำหรับการแจกจ่ายของคุณ ตัวอย่างเช่น บนระบบที่ใช้ Debian เช่น Ubuntu:
sudo dpkg -i darknet-2.0.1-Linux.deb
การติดตั้งแพ็คเกจ .deb
จะคัดลอกไฟล์ต่อไปนี้:
/usr/bin/darknet
เป็นโปรแกรมปฏิบัติการ Darknet ปกติ เรียกใช้ darknet version
จาก 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 version
หากคุณไม่มี
/usr/bin/darknet
นั่นหมายความว่าคุณ ไม่ได้ ติดตั้ง คุณแค่สร้างมันขึ้นมาเท่านั้น! ตรวจสอบให้แน่ใจว่าคุณติดตั้งไฟล์.deb
หรือ.rpm
ตามที่อธิบายไว้ข้างต้น
คำแนะนำเหล่านี้ถือเป็นการติดตั้ง Windows 11 22H2 ใหม่
เปิดหน้าต่างพรอมต์คำสั่ง cmd.exe
ปกติแล้วรันคำสั่งต่อไปนี้:
winget ติดตั้ง Git.Git winget ติดตั้ง Kitware.CMake ติดตั้ง winget nsis.nsis winget ติดตั้ง Microsoft.VisualStudio.2022.Community
ณ จุดนี้ เราจำเป็นต้องแก้ไขการติดตั้ง Visual Studio เพื่อรวมการรองรับแอปพลิเคชัน C ++:
คลิกที่เมนู "Windows Start" และเรียกใช้ "Visual Studio Installer"
คลิกที่ Modify
เลือก Desktop Development With C++
คลิก Modify
ที่มุมขวาล่าง จากนั้นคลิก Yes
เมื่อดาวน์โหลดและติดตั้งทุกอย่างแล้ว ให้คลิกที่เมนู "Windows Start" อีกครั้ง และเลือก Developer Command Prompt for VS 2022
อย่า ใช้ PowerShell สำหรับขั้นตอนเหล่านี้ คุณจะประสบปัญหา!
ผู้ใช้ขั้นสูง:
แทนที่จะเรียกใช้
Developer Command Prompt
คุณสามารถใช้พรอมต์คำสั่งปกติหรือ ssh ลงในอุปกรณ์และเรียกใช้"Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat"
ด้วยตนเอง
หลายๆ คนทำผิดพลาดแบบเดียวกันและคิดว่าสามารถข้ามขั้นตอนก่อนหน้าได้ โปรดอย่าข้ามขั้นตอนนี้! อย่าใช้พรอมต์คำสั่งปกติหรือ PowerShell! อ่านขั้นตอนข้างต้นอีกครั้งเพื่อดูว่าคุณ ต้อง ใช้หน้าต่างประเภทใด ทุกครั้งที่คุณต้องการใช้ Visual Studio จากพรอมต์คำสั่งเพื่อคอมไพล์โค้ด C++ คุณต้องใช้พรอมต์คำสั่งสำหรับนักพัฒนา Visual Studio ตามที่อธิบายไว้ข้างต้น
เมื่อคุณมี Developer Command Prompt ทำงานตามที่อธิบายไว้ข้างต้น ให้รันคำสั่งต่อไปนี้เพื่อติดตั้ง 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 search opencv
เพื่อดูรายการทั้งหมด
ทางเลือก: หากคุณมี NVIDIA GPU ที่ทันสมัย คุณสามารถติดตั้ง CUDA หรือ CUDA+cuDNN ได้ ณ จุดนี้ หากติดตั้งแล้ว Darknet จะใช้ GPU ของคุณเพื่อเพิ่มความเร็วในการประมวลผลภาพ (และวิดีโอ)
คุณต้องลบไฟล์ CMakeCache.txt
ออกจากไดเรกทอรี build
Darknet ของคุณเพื่อบังคับให้ 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 darknetmkdir buildcd build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=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 DLLs ที่หายไป เช่น 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 --version
หากต้องการติดตั้ง Darknet, ไลบรารี, ไฟล์รวม และ DLL ที่จำเป็นอย่างถูกต้อง ให้เรียกใช้ตัวช่วยสร้างการติดตั้ง NSIS ที่สร้างขึ้นในขั้นตอนสุดท้าย ดูไฟล์ darknet-<INSERT-VERSION-YOU-BUILT-HERE>-win64.exe
ในไดเร็กทอรี build
ตัวอย่างเช่น:
darknet-<INSERT-VERSION-คุณ-สร้าง-ที่นี่>-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 version
หากคุณไม่มี
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 help
ตรวจสอบเวอร์ชั่น:
darknet version
ทำนายโดยใช้ภาพ:
V2: darknet detector test cars.data cars.cfg cars_best.weights image1.jpg
V3: darknet_02_display_annotated_images cars.cfg image1.jpg
DarkHelp: DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
พิกัดขาออก:
V2: darknet detector test animals.data animals.cfg animals_best.weights -ext_output dog.jpg
V3: darknet_01_inference_images animals dog.jpg
DarkHelp: DarkHelp --json animals.cfg animals.names animals_best.weights dog.jpg
การทำงานกับวิดีโอ:
V2: darknet detector demo animals.data animals.cfg animals_best.weights -ext_output test.mp4
V3: darknet_03_display_videos animals.cfg test.mp4
DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
อ่านจากเว็บแคม:
V2: darknet detector demo animals.data animals.cfg animals_best.weights -c 0
V3: darknet_08_display_webcam animals
บันทึกผลลัพธ์ลงในวิดีโอ:
V2: darknet detector demo animals.data animals.cfg animals_best.weights test.mp4 -out_filename res.avi
V3: darknet_05_process_videos_multithreaded animals.cfg animals.names animals_best.weights test.mp4
DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
เจสัน:
V2: darknet detector demo animals.data animals.cfg animals_best.weights test50.mp4 -json_port 8070 -mjpeg_port 8090 -ext_output
V3: darknet_06_images_to_json animals image1.jpg
DarkHelp: DarkHelp --json animals.names animals.cfg animals_best.weights image1.jpg
ทำงานบน GPU เฉพาะ:
V2: darknet detector demo animals.data animals.cfg animals_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 detector map animals.data animals.cfg animals_best.weights -iou_thresh 0.75
การคำนวณจุดยึดใหม่ทำได้ดีที่สุดใน DarkMark เนื่องจากจะทำงาน 100 ครั้งติดต่อกัน และเลือกจุดยึดที่ดีที่สุดจากทั้งหมดที่คำนวณไว้ แต่ถ้าคุณต้องการรันเวอร์ชันเก่าใน Darknet:
เครื่องตรวจจับ darknet calc_anchors สัตว์.ข้อมูล -num_of_clusters 6 -กว้าง 320 -สูง 256
ฝึกอบรมเครือข่ายใหม่:
darknet detector -map -dont_show train animals.data animals.cfg
(ดูหัวข้อการฝึกอบรมด้านล่าง)
ลิงก์ด่วนไปยังส่วนที่เกี่ยวข้องของคำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO:
ฉันจะตั้งค่าไฟล์และไดเร็กทอรีของฉันได้อย่างไร?
ฉันควรใช้ไฟล์การกำหนดค่าใด
ฉันควรใช้คำสั่งใดในการฝึกเครือข่ายของตัวเอง?
วิธีที่ง่ายที่สุดในการใส่คำอธิบายประกอบและฝึกฝนคือการใช้ DarkMark เพื่อสร้างไฟล์ Darknet ที่จำเป็นทั้งหมด นี่เป็นวิธีที่แนะนำในการฝึกโครงข่ายประสาทเทียมใหม่อย่างแน่นอน
หากคุณต้องการตั้งค่าไฟล์ต่างๆ ด้วยตนเองเพื่อฝึกเครือข่ายที่กำหนดเอง:
สร้างโฟลเดอร์ใหม่ที่จะเก็บไฟล์ต่างๆ สำหรับตัวอย่างนี้ โครงข่ายประสาทเทียมจะถูกสร้างขึ้นเพื่อตรวจจับสัตว์ ดังนั้นไดเร็กทอรีต่อไปนี้จะถูกสร้างขึ้น: ~/nn/animals/
คัดลอกไฟล์การกำหนดค่า Darknet ไฟล์ใดไฟล์หนึ่งที่คุณต้องการใช้เป็นเทมเพลต ตัวอย่างเช่น ดูที่ cfg/yolov4-tiny.cfg
วางสิ่งนี้ไว้ในโฟลเดอร์ที่คุณสร้างขึ้น สำหรับตัวอย่างนี้ ตอนนี้เรามี ~/nn/animals/animals.cfg
สร้างไฟล์ข้อความ animals.names
ในโฟลเดอร์เดียวกับที่คุณวางไฟล์การกำหนดค่า สำหรับตัวอย่างนี้ ตอนนี้เรามี ~/nn/animals/animals.names
แก้ไขไฟล์ animals.names
ด้วยโปรแกรมแก้ไขข้อความของคุณ รายชื่อชั้นเรียนที่คุณต้องการใช้ คุณต้องมี 1 รายการต่อบรรทัด โดยไม่มีบรรทัดว่างและไม่มีความคิดเห็น สำหรับตัวอย่างนี้ ไฟล์ .names
จะมี 4 บรรทัดพอดี:
สุนัข แมว นก ม้า
สร้างไฟล์ข้อความ 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
สร้างโฟลเดอร์ที่คุณจะจัดเก็บรูปภาพและคำอธิบายประกอบ ตัวอย่างเช่น นี่อาจเป็น ~/nn/animals/dataset
รูปภาพแต่ละรูปจะต้องมีไฟล์ .txt
ที่สอดคล้องซึ่งอธิบายคำอธิบายประกอบสำหรับรูปภาพนั้น รูปแบบของไฟล์คำอธิบายประกอบ .txt
มีความเฉพาะเจาะจงมาก คุณไม่สามารถสร้างไฟล์เหล่านี้ด้วยตนเองได้ เนื่องจากคำอธิบายประกอบแต่ละรายการจำเป็นต้องมีพิกัดที่แน่นอนสำหรับคำอธิบายประกอบ ดู DarkMark หรือซอฟต์แวร์อื่นที่คล้ายคลึงกันเพื่อใส่คำอธิบายประกอบภาพของคุณ รูปแบบคำอธิบายประกอบ YOLO มีอธิบายอยู่ใน Darknet/YOLO FAQ
สร้างไฟล์ข้อความ "train" และ "valid" ที่มีชื่ออยู่ในไฟล์ . .data
ไฟล์ข้อความทั้งสองนี้จำเป็นต้องแสดงรายการรูปภาพทั้งหมดที่ Darknet ต้องใช้ในการฝึกและเพื่อตรวจสอบความถูกต้องเมื่อคำนวณ mAP% หนึ่งภาพต่อบรรทัด เส้นทางและชื่อไฟล์อาจเป็นแบบสัมพัทธ์หรือแบบสัมบูรณ์
แก้ไขไฟล์ .cfg
ของคุณด้วยโปรแกรมแก้ไขข้อความ
ตรวจสอบให้แน่ใจว่า batch=64
หมายเหตุเขตการปกครอง ขึ้นอยู่กับขนาดเครือข่ายและจำนวนหน่วยความจำที่มีอยู่ใน GPU ของคุณ คุณอาจต้องเพิ่มการแบ่งย่อย ความคุ้มค่าที่สุดที่จะใช้คือ 1
ดังนั้นให้เริ่มจากสิ่งนั้นเลย ดูคำถามที่พบบ่อยของ Darknet/YOLO หาก 1
ไม่ได้ผลสำหรับคุณ
หมายเหตุ max_batches=...
ความคุ้มค่าที่ดีที่จะใช้เมื่อเริ่มต้นคือ 2000 x จำนวนคลาส สำหรับตัวอย่างนี้ เรามีสัตว์ 4 ตัว ดังนั้น 4 * 2000 = 8000 หมายความว่าเราจะใช้ max_batches=8000
หมายเหตุ steps=...
. ควรตั้งค่าเป็น 80% และ 90% ของ max_batches
สำหรับตัวอย่างนี้ เราจะใช้ steps=6400,7200
เนื่องจาก max_batches
ถูกตั้งค่าเป็น 8000
หมายเหตุ width=...
และ height=...
นี่คือมิติเครือข่าย คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO อธิบายวิธีคำนวณขนาดที่ดีที่สุดที่จะใช้
ค้นหาอินสแตนซ์ทั้งหมดของบรรทัด classes=...
และแก้ไขด้วยจำนวนคลาสในไฟล์ . .names
ของคุณ สำหรับตัวอย่างนี้ เราจะใช้ classes=4
ค้นหาอินสแตนซ์ทั้งหมดของบรรทัด filters=...
ในส่วน [convolutional]
ก่อน แต่ละส่วน [yolo]
ค่าที่จะใช้คือ (number_of_classes + 5) * 3 ความหมายสำหรับตัวอย่างนี้คือ (4 + 5) * 3 = 27 ดังนั้น เราจะใช้ filters=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
สำหรับ CLI ทางเลือกที่มีประสิทธิภาพสำหรับ Darknet การใช้การจัดเรียงรูปภาพ สำหรับการติดตามวัตถุในวิดีโอของคุณ หรือสำหรับ C++ API ที่มีประสิทธิภาพซึ่งสามารถนำไปใช้ในแอปพลิเคชันเชิงพาณิชย์ได้อย่างง่ายดาย โปรดดู DarkHelp
ดูว่าคำถามที่พบบ่อยของ Darknet/YOLO สามารถช่วยตอบคำถามของคุณได้หรือไม่
ดูบทแนะนำและวิดีโอตัวอย่างมากมายในช่อง YouTube ของ Stéphane
หากคุณมีคำถามหรือต้องการแชทกับผู้ใช้ Darknet/YOLO คนอื่นๆ โปรดเข้าร่วมเซิร์ฟเวอร์ Discord ของ Darknet/YOLO
อัปเดตล่าสุด 2024-11-02:
สลับ 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 เก่า
ลบโรคติดต่อทางเพศสัมพันธ์
เขียน CMakeLists.txt ใหม่เพื่อใช้การตรวจจับ CUDA ใหม่
ลบรหัส "ตัวอักษร" เก่า และลบรูปภาพมากกว่า 700 รูปในข้อมูล/ป้ายกำกับ
สร้างนอกแหล่งที่มา
มีเอาต์พุตหมายเลขเวอร์ชันที่ดีกว่า
การเพิ่มประสิทธิภาพที่เกี่ยวข้องกับการฝึกอบรม (งานที่กำลังดำเนินอยู่)
การเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้องกับการอนุมาน (งานที่กำลังดำเนินอยู่)
ผ่านการอ้างอิงหากเป็นไปได้
ทำความสะอาดไฟล์ .hpp
เขียน darknet.h ใหม่อีกครั้ง
อย่าส่ง cv::Mat
ให้เป็น void*
แต่ใช้เป็นวัตถุ C ++ ที่เหมาะสม
แก้ไขหรือสอดคล้องกันในการใช้โครงสร้าง image
ภายใน
แก้ไข build สำหรับอุปกรณ์ Jetson ที่ใช้ ARM
อุปกรณ์ Jetson ดั้งเดิม (ไม่น่าจะแก้ไขได้เนื่องจาก NVIDIA ไม่รองรับอีกต่อไปและไม่มีคอมไพเลอร์ C ++ 17)
อุปกรณ์ Jetson Orin ใหม่กำลังทำงานอยู่
แก้ไข Python API ใน V3
จำเป็นต้องมีการสนับสนุนที่ดีกว่าสำหรับ Python (นักพัฒนา Python คนใดต้องการความช่วยเหลือในเรื่องนี้)
สลับ printf() สำหรับ std::cout (อยู่ระหว่างดำเนินการ)
ดูการสนับสนุนกล้อง zed เก่า
การแยกวิเคราะห์บรรทัดคำสั่งที่ดีขึ้นและสอดคล้องกันมากขึ้น (อยู่ระหว่างดำเนินการ)
ลบโค้ด char*
ทั้งหมดแล้วแทนที่ด้วย std::string
อย่าซ่อนคำเตือนและล้างคำเตือนของคอมไพเลอร์ (อยู่ระหว่างดำเนินการ)
ใช้ cv::Mat
ดีกว่าแทนโครงสร้าง image
ที่กำหนดเองใน C (อยู่ระหว่างดำเนินการ)
แทนที่ฟังก์ชัน list
เก่าด้วย std::vector
หรือ std::list
แก้ไขการรองรับภาพโทนสีเทา 1 แชนเนล
เพิ่มการรองรับภาพ N-channel โดยที่ N > 3 (เช่น รูปภาพที่มีความลึกเพิ่มเติมหรือช่องระบายความร้อน)
การล้างโค้ดที่กำลังดำเนินอยู่ (กำลังดำเนินการ)
แก้ไขปัญหา CUDA/CUDNN กับ GPU ทั้งหมด
เขียนโค้ด CUDA+cuDNN อีกครั้ง
ลองพิจารณาเพิ่มการรองรับ GPU ที่ไม่ใช่ NVIDIA
กล่องขอบเขตที่หมุนได้ หรือการรองรับ "มุม" บางประเภท
จุดสำคัญ/โครงกระดูก
แผนที่ความร้อน (กำลังดำเนินการ)
การแบ่งส่วน