กรอบการตรวจจับวัตถุ Darknet และ YOLO
Darknet เป็นเฟรมเวิร์กโครงข่ายประสาทเทียมแบบโอเพ่นซอร์สที่พัฒนาขึ้นในภาษา C และ C++ เป็นหลัก พร้อมรองรับการเร่งความเร็ว CUDA
YOLO (You Only Look Once) ซึ่งเป็นระบบตรวจจับวัตถุแบบเรียลไทม์ที่ล้ำสมัย ถือเป็นการใช้งานที่โดดเด่นภายในกรอบงาน Darknet
อ่านเพิ่มเติมเกี่ยวกับวิธีที่ Hank.ai มีส่วนร่วมในชุมชน Darknet/YOLO:
ประกาศ Darknet V3 "Jazz": https://darknetcv.ai/blog/announcing-darknet-v3-jazz
เว็บไซต์ Darknet/YOLO: https://darknetcv.ai/
คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO: https://darknetcv.ai/faq/
เซิร์ฟเวอร์ Discord ของ Darknet/YOLO: https://discord.gg/zSq8rtW
เอกสาร
1. YOLOv7: https://arxiv.org/abs/2207.02696
2. ปรับขนาด-YOLOv4: https://arxiv.org/abs/2102.12725
3. YOLOv4: https://arxiv.org/abs/2004.10934
4. YOLOv3: https://pjreddie.com/media/files/papers/YOLOv3.pdf
ข้อมูลทั่วไป
กรอบงาน Darknet/YOLO รักษาตำแหน่งเป็นหนึ่งในระบบตรวจจับวัตถุที่เร็วและแม่นยำที่สุด
ข้อได้เปรียบที่สำคัญของ Darknet/YOLO:
ฟรีและโอเพ่นซอร์ส: Darknet/YOLO เป็นโอเพ่นซอร์สโดยสมบูรณ์ ทำให้สามารถรวมเข้ากับโปรเจ็กต์ที่มีอยู่ได้ฟรี รวมถึงโปรเจ็กต์เชิงพาณิชย์ด้วย
ประสิทธิภาพสูง: Darknet V3 ("Jazz") เปิดตัวในเดือนตุลาคม 2024 แสดงให้เห็นถึงประสิทธิภาพที่โดดเด่น โดยสามารถบรรลุถึง 1,000 FPS บนชุดข้อมูล LEGO พร้อม NVIDIA RTX 3090 GPU
ความคล่องตัว: Darknet/YOLO เวอร์ชัน CPU สามารถติดตั้งได้บนแพลตฟอร์มต่างๆ รวมถึง Raspberry Pi, เซิร์ฟเวอร์คลาวด์, เดสก์ท็อป, แล็ปท็อป และอุปกรณ์ฝึกอบรมอันทรงพลัง เวอร์ชัน GPU ต้องใช้ NVIDIA GPU ที่รองรับ CUDA
ความเข้ากันได้ข้ามแพลตฟอร์ม: Darknet/YOLO เป็นที่รู้กันว่าทำงานได้อย่างราบรื่นบน Linux, Windows และ Mac
การกำหนดเวอร์ชัน Darknet
Darknet 0.x: หมายถึงเครื่องมือ Darknet ดั้งเดิมที่พัฒนาโดย Joseph Redmon ระหว่างปี 2013 ถึง 2017 แต่ไม่มีหมายเลขเวอร์ชันที่เป็นทางการ
Darknet 1.x: เวอร์ชันนี้ดูแลโดย Alexey Bochkovskiy ตั้งแต่ปี 2017 ถึง 2021 และยังขาดหมายเลขเวอร์ชันที่เป็นทางการอีกด้วย
Darknet 2.x "OAK": เวอร์ชันนี้ได้รับการสนับสนุนโดย Hank.ai และดูแลโดย Stéphane Charette เริ่มตั้งแต่ปี 2023 นี่เป็นรุ่นแรกที่แนะนำคำสั่งเวอร์ชัน โดยส่งคืนเวอร์ชัน 2.x จนถึงปลายปี 2024
Darknet 3.x "JAZZ": เวอร์ชันนี้เปิดตัวในเดือนตุลาคม 2024 ถือเป็นช่วงการพัฒนาที่สำคัญ โดยมีการแนะนำ C และ C++ API ใหม่ ประสิทธิภาพที่ได้รับการปรับปรุง และการแก้ไขข้อบกพร่องมากมาย
MSCOCO ตุ้มน้ำหนักที่ผ่านการฝึกอบรมล่วงหน้า
YOLO เวอร์ชันยอดนิยมหลายเวอร์ชันได้รับการฝึกอบรมล่วงหน้าในชุดข้อมูล MSCOCO ชุดข้อมูลนี้ประกอบด้วย 80 คลาส ซึ่งสามารถพบได้ในไฟล์ cfg/coco.names
ตุ้มน้ำหนักที่ผ่านการฝึกอบรมมาแล้วพร้อมให้ดาวน์โหลด:
1. YOLOv2 (พฤศจิกายน 2559)
* YOLOv2-จิ๋ว
* YOLOv2-เต็ม
2. YOLOv3 (พฤษภาคม 2018)
* YOLOv3-จิ๋ว
* YOLOv3-เต็ม
3. YOLOv4 (พฤษภาคม 2020)
* YOLOv4-จิ๋ว
* YOLOv4-เต็ม
4. YOLOv7 (สิงหาคม 2022)
* YOLOv7-จิ๋ว
* YOLOv7-เต็ม
ตัวอย่างการใช้งาน:
-
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 มีไว้เพื่อการสาธิตเป็นหลัก ขอแนะนำให้ฝึกอบรมเครือข่ายแบบกำหนดเอง โดยโดยทั่วไปแล้ว MSCOCO จะใช้เพื่อตรวจสอบการทำงานของระบบ
การสร้าง Darknet
Darknet อาศัย C++17 หรือใหม่กว่า OpenCV และใช้ CMake เพื่อสร้างไฟล์โปรเจ็กต์
กระบวนการสร้าง:
1. Google Colab: คำแนะนำของ Google Colab เหมือนกับคำแนะนำของ Linux โปรดดูไดเรกทอรีย่อย colab สำหรับสมุดบันทึก Jupyter ที่แสดงงานเฉพาะ
2. วิธีลินุกซ์ CMake:
* ข้อกำหนดเบื้องต้น:
* เครื่องมือที่จำเป็นสำหรับการสร้าง: sudo apt-get install build-essential
* Git: sudo apt-get ติดตั้ง git
* OpenCV: sudo apt-get ติดตั้ง libopencv-dev
* CMake: sudo apt-get ติดตั้ง cmake
* การติดตั้ง:
* สร้างไดเร็กทอรีการทำงาน: mkdir ~/srccd ~/src
* โคลนพื้นที่เก็บข้อมูล: git clone https://github.com/hank-ai/darknet
* นำทางไปยังไดเร็กทอรี Darknet: cd darknet
* สร้างไดเร็กทอรี build: mkdir build
* สร้าง Darknet:
* สร้างซีดี
* cmake -DCMAKEBUILDTYPE=ปล่อย ..
* ทำ -j4
* บรรจุุภัณฑ์
* ติดตั้งแพ็คเกจ: sudo dpkg -i darknet-VERSION.deb
* ตัวเลือกเสริม: การติดตั้ง CUDA/cuDNN
* ดาวน์โหลดและติดตั้ง CUDA จาก https://developer.nvidia.com/cuda-downloads
* ดาวน์โหลดและติดตั้ง cuDNN จาก https://developer.nvidia.com/rdp/cudnn-download หรือ https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager- ภาพรวมการติดตั้ง
* ตรวจสอบให้แน่ใจว่าคุณสามารถรัน nvcc และ nvidia-smi ได้ คุณอาจต้องแก้ไขตัวแปร PATH ของคุณ
* หากติดตั้ง CUDA หรือ cuDNN ในภายหลังหรืออัปเกรดเป็นเวอร์ชันที่ใหม่กว่า ตรวจสอบให้แน่ใจว่าได้สร้าง Darknet ใหม่หลังจากแก้ไขสภาพแวดล้อมของคุณ
3. วิธี Windows CMake:
* ข้อกำหนดเบื้องต้น:
* Git: winget ติดตั้ง Git.Git
* CMake: winget ติดตั้ง Kitware.CMake
* NSIS: ติดตั้ง winget nsis.nsis
* Visual Studio 2022 Community Edition: winget ติดตั้ง Microsoft.VisualStudio.2022.Community
* แก้ไขการติดตั้ง Visual Studio เพื่อรวมการรองรับ C ++:
* เปิดตัวติดตั้ง Visual Studio
* คลิก "แก้ไข"
* เลือก "การพัฒนาเดสก์ท็อปด้วย C++"
* คลิก "แก้ไข" จากนั้นคลิก "ใช่"
* การติดตั้ง:
* เปิดพรอมต์คำสั่งสำหรับนักพัฒนาสำหรับ VS 2022 (ไม่ใช่ PowerShell)
* ติดตั้ง Microsoft VCPKG:
* CDC:
* mkdir c:srccd c:src
* git clone 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
* Clone Darknet และสร้าง:
* ซีดี c:src
* git clone https://github.com/hank-ai/darknet.git
* ซีดีดาร์กเน็ต
* สร้าง mkdir
* สร้างซีดี
* cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
* msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
* msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
* ตัวเลือกเสริม: การติดตั้ง CUDA/cuDNN
* ดาวน์โหลดและติดตั้ง CUDA จาก https://developer.nvidia.com/cuda-downloads
* ดาวน์โหลดและติดตั้ง cuDNN จาก https://developer.nvidia.com/rdp/cudnn-download หรือ https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows
* แตกไฟล์ cuDNN และคัดลอก bin, include และ lib ไดเร็กทอรีลงใน C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[version] (เขียนทับไฟล์ที่มีอยู่หากจำเป็น)
* ตรวจสอบให้แน่ใจว่าคุณสามารถเรียกใช้ nvcc.exe ได้ คุณอาจต้องแก้ไขตัวแปร PATH ของคุณ
การใช้ดาร์กเน็ต
CLI (อินเทอร์เฟซบรรทัดคำสั่ง)
การใช้งานทั่วไป: Darknet มีอินเทอร์เฟซบรรทัดคำสั่ง (CLI) สำหรับการโต้ตอบกับฟังก์ชันต่างๆ ยังไม่ครบถ้วนสมบูรณ์ โปรดดู CLI ของโครงการ DarkHelp สำหรับคุณสมบัติเพิ่มเติม
โมเดลที่ได้รับการฝึกล่วงหน้า: สำหรับคำสั่งส่วนใหญ่ คุณจะต้องมีไฟล์ .weights พร้อมด้วยไฟล์ .names และ .cfg ที่เกี่ยวข้อง คุณสามารถฝึกอบรมเครือข่ายของคุณเองได้ (แนะนำเป็นอย่างยิ่ง) หรือใช้โมเดลที่ได้รับการฝึกอบรมล่วงหน้าซึ่งมีทางออนไลน์ ตัวอย่างได้แก่:
* LEGO Gears (การตรวจจับวัตถุในภาพ)
* Rolodex (การตรวจจับข้อความในภาพ)
* MSCOCO (การตรวจจับวัตถุมาตรฐาน 80 คลาส)
คำสั่งทั่วไป:
วิธีใช้: ความช่วยเหลือจาก darknet
เวอร์ชัน: เวอร์ชัน Darknet
การทำนายด้วยภาพ:
* V2: การทดสอบเครื่องตรวจจับ darknet cars.data cars.cfg cars_best.weights image1.jpg
* V3: darknet02displayannotatedimages cars.cfg image1.jpg
* DarkHelp: DarkHelp 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 (การทำนายวิดีโอ)
* การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimals_best.weights -c 0 (อินพุตเว็บแคม)
* การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimalbest.weights test.mp4 -outfilename res.avi (บันทึกผลลัพธ์ลงในวิดีโอ)
* V3:
* darknet03display_videos Animals.cfg test.mp4 (การทำนายวิดีโอ)
* สัตว์ darknet08display_webcam (อินพุตเว็บแคม)
* darknet05processvideosmultithreadedanimals.cfganimals.namesanimals_best.weights test.mp4 (บันทึกผลลัพธ์ลงในวิดีโอ)
* DarkHelp:
* DarkHelpanimals.cfganimals.namesanimals_best.weights test.mp4 (การทำนายวิดีโอ)
* DarkHelpanimals.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: DarkHelp --jsonanimals.namesanimals.cfganimals_best.weights image1.jpg
การเลือก GPU: การสาธิตเครื่องตรวจจับ darknetanimals.dataanimals.cfganimals_best.weights -i 1 test.mp4
การประเมินความแม่นยำ:
* แผนที่เครื่องตรวจจับ darknet การขับรถ.ข้อมูลการขับรถ.cfg Driving_best.weights ... (mAP@IoU=50)
* แผนที่เครื่องตรวจจับ darknet Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75 (mAP@IoU=75)
การคำนวณจุดยึด: (ใช้ DarkMark เพื่อการคำนวณจุดยึดใหม่ที่เหมาะสมที่สุด)
* เครื่องตรวจจับ darknet calcanchors Animals.data -numof_clusters 6 -กว้าง 320 -สูง 256
การฝึกอบรมเครือข่าย:
* เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
การฝึกอบรมเครือข่ายใหม่
DarkMark: แนวทางที่แนะนำสำหรับคำอธิบายประกอบและการฝึกอบรมคือการใช้ DarkMark ซึ่งจะทำให้กระบวนการสร้างไฟล์ Darknet ที่จำเป็นเป็นไปโดยอัตโนมัติ
การตั้งค่าด้วยตนเอง:
1. สร้างไดเรกทอรีโครงการ: ตัวอย่างเช่น ~/nn/animals/ เพื่อฝึกเครือข่ายสำหรับตรวจจับสัตว์
2. คัดลอกไฟล์การกำหนดค่า: เลือกไฟล์การกำหนดค่าเทมเพลตจาก cfg/ (เช่น cfg/yolov4-tiny.cfg) และวางไว้ในไดเรกทอรีโครงการของคุณ
3. สร้างไฟล์ .names: ในไดเร็กทอรีเดียวกัน ให้สร้างไฟล์ข้อความชื่อanimals.names ระบุคลาสที่คุณต้องการตรวจจับ หนึ่งคลาสต่อบรรทัด โดยไม่มีบรรทัดว่างหรือความคิดเห็น ตัวอย่าง:
-
สุนัข
แมว
นก
ม้า
-
4. สร้างไฟล์ .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
-
5. Dataset Directory: สร้างไดเร็กทอรีเพื่อจัดเก็บรูปภาพและคำอธิบายประกอบที่เกี่ยวข้อง (เช่น ~/nn/animals/dataset) รูปภาพแต่ละรูปจะต้องมีไฟล์ .txt ที่เกี่ยวข้องซึ่งอธิบายคำอธิบายประกอบ ไฟล์ .txt เหล่านี้ต้องมีรูปแบบเฉพาะและสร้างขึ้นได้ดีที่สุดโดยใช้ DarkMark หรือซอฟต์แวร์ที่คล้ายกัน
6. ไฟล์การฝึกอบรมและการตรวจสอบความถูกต้อง: สร้างไฟล์ข้อความ "train" และ "valid" ตามที่ระบุไว้ในไฟล์ .data ของคุณ ไฟล์เหล่านี้แสดงรายการรูปภาพที่จะใช้สำหรับการฝึกอบรมและการตรวจสอบตามลำดับ
7. แก้ไขไฟล์การกำหนดค่า:
* ขนาดแบทช์: ชุดแบทช์ = 64
* เขตการปกครอง: เริ่มต้นด้วยเขตการปกครอง=1. เพิ่มขึ้นตามความจำเป็นตามความจุหน่วยความจำของ GPU ของคุณ
ชุดงานสูงสุด: ใช้ maxbatches=2000 จำนวนคลาส ในกรณีนี้ maxbatches=8000
* ขั้นตอน: ตั้งค่าขั้นตอนเป็น 80% และ 90% ของ max_batches ตัวอย่าง: ขั้นตอน=6400,7200
* ความกว้างและความสูง: ปรับขนาดเครือข่าย (ความกว้างและความสูง) โปรดดูคำถามที่พบบ่อยของ Darknet/YOLO สำหรับคำแนะนำในการกำหนดขนาดที่เหมาะสมที่สุด
* คลาส: อัปเดตคลาส=... เพื่อให้ตรงกับจำนวนคลาสในไฟล์ .names ของคุณ (ในกรณีนี้คือ คลาส=4)
ตัวกรอง: ปรับตัวกรอง=... ในส่วน [convolutional] ก่อนแต่ละส่วน [yolo] คำนวณโดยใช้ตัวกรอง = (จำนวนคลาส + 5) 3. ในกรณีนี้ ตัวกรอง=27
8. เริ่มการฝึกอบรม: ไปที่ไดเรกทอรีโครงการของคุณและดำเนินการคำสั่งต่อไปนี้:
-
เครื่องตรวจจับ darknet -map -dont_show รถไฟanimals.dataanimals.cfg
-
* Verbose Output: สำหรับข้อมูลการฝึกอบรมโดยละเอียดเพิ่มเติม ให้ใช้ --verbose
* ความคืบหน้า: น้ำหนักที่ดีที่สุดจะถูกบันทึกเป็นanimals_best.weights และความคืบหน้าของการฝึกสามารถตรวจสอบได้ผ่านไฟล์ chart.png
เครื่องมือและลิงค์อื่นๆ
DarkMark: สำหรับการจัดการโครงการ Darknet/YOLO คำอธิบายประกอบรูปภาพ การตรวจสอบคำอธิบายประกอบ และการสร้างไฟล์การฝึกอบรม
DarkHelp: CLI ทางเลือกที่มีประสิทธิภาพสำหรับ Darknet พร้อมฟีเจอร์ต่างๆ เช่น การจัดเรียงรูปภาพ การติดตามวัตถุ และ C++ API สำหรับแอปพลิเคชันเชิงพาณิชย์
คำถามที่พบบ่อยเกี่ยวกับ Darknet/YOLO: https://darknetcv.ai/faq/
ช่อง YouTube ของ Stéphane Charette: ค้นหาบทช่วยสอนและวิดีโอตัวอย่าง: https://www.youtube.com/channel/UCOQ-nJ8l6kG3153g09XwY8g
เซิร์ฟเวอร์ Discord ของ Darknet/YOLO: https://discord.gg/zSq8rtW
แผนการทำงาน
อัปเดตล่าสุด: 30-10-2024
สมบูรณ์:
1. แทนที่ qsort() ด้วย std::sort() ในกรณีที่ใช้ได้ในระหว่างการฝึกอบรม (บางกรณีที่เหลืออยู่)
2. ลบ check_mistakes, getchar() และ system() ออก
3. แปลง Darknet เพื่อใช้คอมไพเลอร์ C++ (g++ บน Linux, VisualStudio บน Windows)
4. แก้ไขการสร้าง Windows
5. แก้ไขการรองรับ Python
6. สร้างห้องสมุด Darknet
7. เปิดใช้งานป้ายกำกับในการคาดเดาอีกครั้ง (รหัส "ตัวอักษร")
8. เปิดใช้งานรหัส CUDA/GPU อีกครั้ง
9. เปิดใช้งาน CUDNN อีกครั้ง
10. เปิดใช้งาน CUDNN ครึ่งหนึ่งอีกครั้ง
11. ลบสถาปัตยกรรม CUDA แบบฮาร์ดโค้ดออก
12. ปรับปรุงข้อมูลเวอร์ชัน CUDA
13. เปิดใช้งาน AVX อีกครั้ง
14. ลบโซลูชันเก่าและ Makefile ออก
15. ทำให้ OpenCV ไม่จำเป็น
16. ลบการพึ่งพาไลบรารี pthread เก่าออก
17. ลบ STB แล้ว
18. เขียน CMakeLists.txt ใหม่เพื่อใช้การตรวจจับ CUDA ใหม่
19. ลบรหัส "ตัวอักษร" เก่าและลบรูปภาพมากกว่า 700+ ภาพในข้อมูล/ป้ายกำกับ
20. ดำเนินการสร้างนอกแหล่งที่มา
21. เอาต์พุตหมายเลขเวอร์ชันที่ได้รับการปรับปรุง
22. การเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้องกับการฝึกอบรม (ต่อเนื่อง)
23. การเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้องกับการอนุมาน (ต่อเนื่อง)
24. มีการจ้างงานผ่านการอ้างอิงหากเป็นไปได้
25. ทำความสะอาดไฟล์ .hpp
26. เขียน darknet.h ใหม่อีกครั้ง
27. ใช้ cv::Mat เป็นวัตถุ C++ ที่เหมาะสมแทนที่จะส่งเป็นโมฆะ*
28. แก้ไขหรือกำหนดมาตรฐานการใช้โครงสร้างภาพภายใน
29. แก้ไขการสร้างสำหรับอุปกรณ์ Jetson ที่ใช้ ARM (อุปกรณ์ Jetson Orin ใหม่ใช้งานได้)
30. ปรับปรุง Python API ใน V3
เป้าหมายระยะสั้น:
1. แทนที่ printf() ด้วย std::cout (อยู่ระหว่างดำเนินการ)
2. ตรวจสอบการสนับสนุนกล้อง ZED เก่า
3. ปรับปรุงและสร้างมาตรฐานการแยกวิเคราะห์บรรทัดคำสั่ง (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะกลาง:
1. ลบโค้ด char* ทั้งหมดออก และแทนที่ด้วย std::string
2. กำจัดคำเตือนของคอมไพเลอร์และตรวจสอบการจัดการคำเตือนที่สอดคล้องกัน (อยู่ระหว่างดำเนินการ)
3. ใช้ cv::Mat ได้อย่างมีประสิทธิภาพมากขึ้น แทนที่จะใช้โครงสร้างรูปภาพที่กำหนดเองในภาษา C (อยู่ระหว่างดำเนินการ)
4. แทนที่ฟังก์ชันรายการเก่าด้วย std::vector หรือ std::list
5. แก้ไขการรองรับภาพระดับสีเทา 1 แชนเนล
6. เพิ่มการรองรับภาพ N-channel โดยที่ N > 3 (เช่น รูปภาพที่มีความลึกเพิ่มเติมหรือช่องระบายความร้อน)
7. การล้างโค้ดอย่างต่อเนื่อง (อยู่ระหว่างดำเนินการ)
เป้าหมายระยะยาว:
1. แก้ไขปัญหา CUDA/CUDNN กับ GPU ทั้งหมด
2. เขียนโค้ด CUDA+cuDNN อีกครั้ง
3. สำรวจการเพิ่มการรองรับ GPU ที่ไม่ใช่ NVIDIA
4. ใช้การสนับสนุนสำหรับกล่องขอบเขตที่หมุนหรือแอตทริบิวต์ "มุม"
5. เพิ่มการรองรับจุดสำคัญ/โครงกระดูก
6. ใช้งานแผนที่ความร้อน (กำลังดำเนินการ)
7. ดำเนินการแบ่งส่วน