Kerangka Deteksi Objek Darknet dan YOLO
Darknet adalah kerangka jaringan saraf sumber terbuka yang dikembangkan terutama di C dan C++, dengan dukungan untuk akselerasi CUDA.
YOLO (You Only Look Once), sistem deteksi objek real-time yang mutakhir, adalah implementasi yang menonjol dalam kerangka Darknet.
Baca selengkapnya tentang bagaimana Hank.ai berkontribusi pada komunitas Darknet/YOLO:
Mengumumkan Darknet V3 "Jazz": https://darknetcv.ai/blog/announcing-darknet-v3-jazz
Situs Web Darknet/YOLO: https://darknetcv.ai/
Pertanyaan Umum Darknet/YOLO: https://darknetcv.ai/faq/
Server Perselisihan Darknet/YOLO: https://discord.gg/zSq8rtW
Dokumen
1. YOLOv7: https://arxiv.org/abs/2207.02696
2. Berskala-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
Informasi Umum
Kerangka kerja Darknet/YOLO mempertahankan posisinya sebagai salah satu sistem pendeteksi objek tercepat dan paling akurat.
Keuntungan utama Darknet/YOLO:
Gratis dan Sumber Terbuka: Darknet/YOLO sepenuhnya open source, memungkinkan integrasi gratis ke dalam proyek yang ada, termasuk proyek komersial.
Performa Tinggi: Darknet V3 (“Jazz”), dirilis pada Oktober 2024, menunjukkan performa luar biasa, mencapai hingga 1000 FPS pada dataset LEGO dengan GPU NVIDIA RTX 3090.
Keserbagunaan: Darknet/YOLO versi CPU dapat digunakan di berbagai platform, termasuk Raspberry Pi, server cloud, desktop, laptop, dan rig pelatihan yang canggih. Versi GPU memerlukan GPU NVIDIA berkemampuan CUDA.
Kompatibilitas Lintas Platform: Darknet/YOLO diketahui beroperasi dengan lancar di Linux, Windows, dan Mac.
Versi Darknet
Darknet 0.x: Ini mengacu pada alat Darknet asli yang dikembangkan oleh Joseph Redmon antara tahun 2013 dan 2017. Alat ini tidak memiliki nomor versi formal.
Darknet 1.x: Versi ini dikelola oleh Alexei Bochkovskiy dari 2017 hingga 2021. Versi ini juga tidak memiliki nomor versi formal.
Darknet 2.x "OAK": Versi ini disponsori oleh Hank.ai dan dikelola oleh Stéphane Charette mulai tahun 2023. Ini adalah rilis pertama yang memperkenalkan perintah versi. Ini mengembalikan versi 2.x hingga akhir 2024.
Darknet 3.x "JAZZ": Versi ini, dirilis pada Oktober 2024, menandai fase pengembangan yang signifikan, memperkenalkan C dan C++ API baru, peningkatan kinerja, dan berbagai perbaikan bug.
Anak Timbangan Terlatih MSCOCO
Berbagai versi YOLO populer telah dilatih sebelumnya pada kumpulan data MSCOCO. Dataset ini terdiri dari 80 kelas yang dapat ditemukan di file cfg/coco.names.
Beban terlatih tersedia untuk diunduh:
1.YOLOv2 (November 2016)
* YOLOv2-kecil
* YOLOv2-penuh
2. YOLOv3 (Mei 2018)
* YOLOv3-kecil
* YOLOv3-penuh
3. YOLOv4 (Mei 2020)
* YOLOv4-kecil
* YOLOv4 penuh
4. YOLOv7 (Agustus 2022)
* YOLOv7-kecil
* YOLOv7-penuh
Contoh penggunaan:
`
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.nama yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.nama yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
Catatan: Anak timbangan MSCOCO yang telah dilatih sebelumnya disediakan terutama untuk tujuan demonstrasi. Pelatihan jaringan khusus sangat dianjurkan, dengan MSCOCO biasanya digunakan untuk memverifikasi fungsionalitas sistem.
Membangun Jaringan Gelap
Darknet mengandalkan C++17 atau yang lebih baru, OpenCV, dan menggunakan CMake untuk menghasilkan file proyek.
Proses pembangunan:
1. Google Colab: Petunjuk Google Colab sama dengan petunjuk Linux. Lihat subdirektori colab untuk notebook Jupyter yang menampilkan tugas tertentu.
2. Metode CMake Linux:
* Prasyarat:
* Alat build-esensial: sudo apt-get install build-essential
* Git: sudo apt-get install git
* OpenCV: sudo apt-get install libopencv-dev
* CMake: sudo apt-get install cmake
* Instalasi:
* Buat direktori kerja: mkdir ~/srccd ~/src
* Kloning repositori: git clone https://github.com/hank-ai/darknet
* Arahkan ke direktori Darknet: cd darknet
* Buat direktori build: mkdir build
* Bangun Darknet:
* pembuatan cd
* cmake -DCMAKEBUILDTYPE=Lepaskan ..
* buat -j4
* kemasan
* Instal paket: sudo dpkg -i darknet-VERSION.deb
* Opsional: Instalasi CUDA/cuDNN
* Unduh dan instal CUDA dari https://developer.nvidia.com/cuda-downloads
* Unduh dan instal cuDNN dari https://developer.nvidia.com/rdp/cudnn-download atau https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager- ikhtisar instalasi
* Pastikan Anda dapat menjalankan nvcc dan nvidia-smi. Anda mungkin perlu mengubah variabel PATH Anda.
* Jika menginstal CUDA atau cuDNN nanti atau meningkatkan ke versi yang lebih baru, pastikan untuk membangun kembali Darknet setelah memodifikasi lingkungan Anda.
3. Metode CMake Windows:
* Prasyarat:
* Git: menginstal sayap Git.Git
* CMake: menginstal sayap Kitware.CMake
* NSIS: instalasi sayap nsis.nsis
* Visual Studio 2022 Edisi Komunitas: winget instal Microsoft.VisualStudio.2022.Community
* Ubah instalasi Visual Studio untuk menyertakan dukungan C++:
* Buka Penginstal Visual Studio
* Klik "Ubah"
* Pilih "Pengembangan Desktop dengan C++"
* Klik "Ubah" dan kemudian "Ya"
* Instalasi:
* Buka Prompt Perintah Pengembang untuk VS 2022 (bukan PowerShell).
* Instal Microsoft VCPKG:
* CDC:
* mkdir c:srccd c:src
* git clone https://github.com/microsoft/vcpkg
* cd vcpkg
* bootstrap-vcpkg.bat .vcpkg.exe terintegrasi
* instal .vcpkg.exe integrasikan powershell.vcpkg.exe instal opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
* Kloning Darknet dan bangun:
* cd c:src
* git klon https://github.com/hank-ai/darknet.git
* cd jaringan gelap
* mkdir membangun
* pembuatan cd
* cmake -DCMAKEBUILDTYPE=Rilis -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
* Opsional: Instalasi CUDA/cuDNN
* Unduh dan instal CUDA dari https://developer.nvidia.com/cuda-downloads
* Unduh dan instal cuDNN dari https://developer.nvidia.com/rdp/cudnn-download atau https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows
* Buka zip cuDNN dan salin direktori bin, include, dan lib ke C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[version] (timpa file yang ada jika perlu).
* Pastikan Anda dapat menjalankan nvcc.exe. Anda mungkin perlu mengubah variabel PATH Anda.
Menggunakan Darknet
CLI (Antarmuka Baris Perintah)
Penggunaan Umum: Darknet menawarkan antarmuka baris perintah (CLI) untuk berinteraksi dengan fungsinya. Ini tidak menyeluruh; lihat CLI proyek DarkHelp untuk fitur tambahan.
Model yang telah dilatih sebelumnya: Untuk sebagian besar perintah, Anda memerlukan file .weights bersama dengan file .names dan .cfg yang sesuai. Anda dapat melatih jaringan Anda sendiri (sangat disarankan) atau menggunakan model terlatih yang tersedia online. Contohnya meliputi:
* LEGO Gears (deteksi objek dalam gambar)
* Rolodex (deteksi teks dalam gambar)
* MSCOCO (deteksi objek kelas 80 standar)
Perintah Umum:
Bantuan: bantuan darknet
Versi: versi darknet
Prediksi dengan Gambar:
* V2: uji detektor darknet cars.data cars.cfg cars_best.weights image1.jpg
* V3: darknet02displayannotatedimages cars.cfg image1.jpg
* DarkHelp: DarkHelp mobil.cfg mobil_best.weights image1.jpg
Koordinat Keluaran:
* V2: detektor darknet menguji animal.data animal.cfg animalbest.weights -extoutput dog.jpg
* V3: darknet01inference_images hewan anjing.jpg
* DarkHelp: DarkHelp --json animal.cfg animal.names animal_best.weights dog.jpg
Pemrosesan Video:
*V2:
* demo detektor darknet animal.data animal.cfg animalbest.weights -extoutput test.mp4 (Prediksi video)
* demo detektor darknet animal.data animal.cfg animal_best.weights -c 0 (input webcam)
* demo detektor darknet animal.data animal.cfg animalbest.weights test.mp4 -outfilename res.avi (Menyimpan hasil ke video)
* V3:
* darknet03display_videos animal.cfg test.mp4 (Prediksi video)
* darknet08display_webcam hewan (masukan webcam)
* darknet05processvideosmultithreaded animal.cfg animal.names animal_best.weights test.mp4 (Menyimpan hasil ke video)
* Bantuan Gelap:
* DarkHelp animal.cfg animal.names animal_best.weights test.mp4 (Prediksi video)
* DarkHelp animal.cfg animal.names animal_best.weights test.mp4 (Menyimpan hasil ke video)
Keluaran JSON:
* V2: demo detektor darknet animal.data animal.cfg animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
* V3: darknet06imagestojson hewan image1.jpg
* DarkHelp: DarkHelp --json animal.names animal.cfg animal_best.weights image1.jpg
Pilihan GPU: demo detektor darknet animal.data animal.cfg animal_best.weights -i 1 test.mp4
Evaluasi Akurasi:
* peta detektor darknet Driving.data Driving.cfg Driving_best.weights ... (mAP@IoU=50)
* detektor darknet memetakan animal.data animal.cfg animalbest.weights -iouthresh 0,75 (mAP@IoU=75)
Perhitungan Jangkar: (Gunakan DarkMark untuk penghitungan ulang jangkar yang optimal)
* Detektor darknet menghitung hewan.data -numof_clusters 6 -lebar 320 -tinggi 256
Pelatihan Jaringan:
* detektor darknet -peta -dont_show melatih hewan.data hewan.cfg
Melatih Jaringan Baru
DarkMark: Pendekatan yang disarankan untuk anotasi dan pelatihan adalah dengan memanfaatkan DarkMark, yang mengotomatiskan proses pembuatan file Darknet yang diperlukan.
Pengaturan Manual:
1. Buat Direktori Proyek: Misalnya, ~/nn/animals/ untuk melatih jaringan untuk mendeteksi hewan.
2. Salin File Konfigurasi: Pilih file konfigurasi template dari cfg/ (misalnya, cfg/yolov4-tiny.cfg) dan letakkan di direktori proyek Anda.
3. Buat File .names: Di direktori yang sama, buat file teks bernama animal.names. Cantumkan kelas yang ingin Anda deteksi, satu kelas per baris, tanpa baris kosong atau komentar. Contoh:
`
anjing
kucing
burung
kuda
`
4. Buat File .data: Di direktori yang sama, buat file teks bernama animal.data. File ini berisi informasi tentang data pelatihan Anda. Contoh:
`
kelas=4
kereta=/home/nama pengguna/nn/animals/animals_train.txt
valid=/home/nama pengguna/nn/animals/animals_valid.txt
nama=/home/nama pengguna/nn/animals/animals.names
backup=/home/nama pengguna/nn/animals
`
5. Direktori Kumpulan Data: Buat direktori untuk menyimpan gambar Anda dan anotasi terkait (misalnya, ~/nn/animals/dataset). Setiap gambar memerlukan file .txt terkait yang menjelaskan anotasinya. File .txt ini harus mengikuti format tertentu dan paling baik dibuat menggunakan DarkMark atau perangkat lunak serupa.
6. File Pelatihan dan Validasi: Buat file teks "train" dan "valid" seperti yang ditentukan dalam file .data Anda. File-file ini masing-masing mencantumkan gambar yang akan digunakan untuk pelatihan dan validasi.
7. Ubah File Konfigurasi:
* Ukuran Batch: Atur batch=64.
* Subdivisi: Mulai dengan subdivisi=1. Tingkatkan seperlunya berdasarkan kapasitas memori GPU Anda.
Batch Maks: Gunakan maxbatches=2000 jumlah kelas. Dalam hal ini, maxbatch=8000.
* Langkah: Tetapkan langkah ke 80% dan 90% dari max_batches. Contoh: langkah=6400,7200.
* Lebar dan Tinggi: Menyesuaikan dimensi jaringan (lebar dan tinggi). Lihat FAQ Darknet/YOLO untuk panduan menentukan ukuran optimal.
* Kelas: Perbarui kelas=... agar sesuai dengan jumlah kelas di file .names Anda (dalam hal ini, kelas=4).
Filter: Sesuaikan filter=... di bagian [konvolusional] sebelum setiap bagian [yolo]. Hitung menggunakan filter = (jumlah kelas + 5) 3. Dalam hal ini, filter=27.
8. Mulai Pelatihan: Navigasikan ke direktori proyek Anda dan jalankan perintah berikut:
`
detektor darknet -peta -dont_show melatih hewan.data hewan.cfg
`
* Output Verbose: Untuk informasi pelatihan lebih detail, gunakan --verbose.
* Kemajuan: Bobot terbaik akan disimpan sebagai animal_best.weights, dan kemajuan pelatihan dapat dipantau melalui file chart.png.
Alat dan Tautan Lainnya
DarkMark: Untuk manajemen proyek Darknet/YOLO, anotasi gambar, verifikasi anotasi, dan pembuatan file pelatihan.
DarkHelp: CLI alternatif yang tangguh untuk Darknet, dengan fitur seperti ubin gambar, pelacakan objek, dan API C++ untuk aplikasi komersial.
Pertanyaan Umum Darknet/YOLO: https://darknetcv.ai/faq/
Saluran YouTube Stéphane Charette: Temukan tutorial dan contoh video: https://www.youtube.com/channel/UCOQ-nJ8l6kG3153g09XwY8g
Server Perselisihan Darknet/YOLO: https://discord.gg/zSq8rtW
Peta jalan
Terakhir diperbarui: 30-10-2024
Selesai:
1. Mengganti qsort() dengan std::sort() jika berlaku selama pelatihan (beberapa kasus tersisa).
2. Menghapus check_mistakes, getchar(), dan system().
3. Mengonversi Darknet untuk menggunakan kompiler C++ (g++ di Linux, VisualStudio di Windows).
4. Memperbaiki versi Windows.
5. Memperbaiki dukungan Python.
6. Membangun perpustakaan Darknet.
7. Mengaktifkan kembali label pada prediksi (kode "abjad").
8. Mengaktifkan kembali kode CUDA/GPU.
9. Mengaktifkan kembali CUDNN.
10. Mengaktifkan kembali separuh CUDNN.
11. Menghapus arsitektur CUDA yang di-hardcode.
12. Peningkatan informasi versi CUDA.
13. Mengaktifkan kembali AVX.
14. Menghapus solusi lama dan Makefile.
15. Menjadikan OpenCV non-opsional.
16. Menghapus ketergantungan pada perpustakaan pthread lama.
17. Menghapus STB.
18. Tulis ulang CMakeLists.txt untuk menggunakan deteksi CUDA yang baru.
19. Menghapus kode "abjad" lama dan menghapus 700+ gambar di data/label.
20. Implementasi pembangunan out-of-source.
21. Output nomor versi yang ditingkatkan.
22. Optimalisasi kinerja terkait pelatihan (berkelanjutan).
23. Optimalisasi kinerja terkait inferensi (berkelanjutan).
24. Dipekerjakan sebagai referensi jika memungkinkan.
25. Membersihkan file .hpp.
26. Menulis ulang darknet.h.
27. Menggunakan cv::Mat sebagai objek C++ yang tepat alih-alih melakukan casting ke void*.
28. Memperbaiki atau menstandarkan bagaimana struktur gambar internal digunakan.
29. Memperbaiki build untuk perangkat Jetson berbasis ARM (perangkat Jetson Orin baru berfungsi).
30. Peningkatan Python API di V3.
Tujuan Jangka Pendek:
1. Ganti printf() dengan std::cout (sedang berlangsung).
2. Selidiki dukungan kamera ZED lama.
3. Meningkatkan dan menstandarkan penguraian baris perintah (sedang berlangsung).
Tujuan Jangka Menengah:
1. Hapus semua kode char* dan ganti dengan std::string.
2. Hilangkan peringatan compiler dan pastikan penanganan peringatan konsisten (sedang berlangsung).
3. Memanfaatkan cv::Mat dengan lebih efektif daripada struktur gambar khusus di C (sedang berlangsung).
4. Ganti fungsionalitas daftar lama dengan std::vector atau std::list.
5. Memperbaiki dukungan untuk gambar skala abu-abu 1 saluran.
6. Tambahkan dukungan untuk gambar saluran-N dengan N > 3 (misalnya, gambar dengan kedalaman tambahan atau saluran termal).
7. Pembersihan kode yang sedang berlangsung (sedang berlangsung).
Tujuan Jangka Panjang:
1. Mengatasi masalah CUDA/CUDNN dengan semua GPU.
2. Tulis ulang kode CUDA+cuDNN.
3. Jelajahi penambahan dukungan untuk GPU non-NVIDIA.
4. Menerapkan dukungan untuk kotak pembatas yang diputar atau atribut "sudut".
5. Tambahkan dukungan untuk titik kunci/kerangka.
6. Menerapkan peta panas (sedang berlangsung).
7. Menerapkan segmentasi.