Kerangka Deteksi Objek Darknet dan YOLO
Darknet adalah kerangka jaringan saraf sumber terbuka yang ditulis dalam C, C++, dan CUDA.
YOLO (You Only Look Once) adalah sistem deteksi objek real-time yang canggih, yang berjalan dalam kerangka Darknet.
Baca bagaimana Hank.ai membantu komunitas Darknet/YOLO
Mengumumkan Darknet V3 "Jazz"
Lihat situs web Darknet/YOLO
Silakan baca FAQ Darknet/YOLO
Bergabunglah dengan server perselisihan Darknet/YOLO
Dokumen
1. Kertas YOLOv7
2. Kertas Berskala-YOLOv4
3. Kertas YOLOv4
4. Kertas YOLOv3
Informasi Umum
Kerangka kerja Darknet/YOLO tetap lebih cepat dan akurat dibandingkan kerangka kerja dan versi YOLO lainnya.
Kerangka kerja ini sepenuhnya gratis dan open source. Anda dapat memasukkan Darknet/YOLO ke dalam proyek dan produk yang sudah ada - termasuk yang komersial - tanpa lisensi atau membayar biaya.
Darknet V3 ("Jazz") yang dirilis pada Oktober 2024 dapat menjalankan video dataset LEGO secara akurat hingga 1000 FPS saat menggunakan GPU NVIDIA RTX 3090, artinya setiap frame video dibaca, diubah ukurannya, dan diproses oleh Darknet/YOLO dalam 1 milidetik atau lebih sedikit.
Silakan bergabung dengan server Darknet/YOLO Discord jika Anda memerlukan bantuan atau ingin berdiskusi Darknet/YOLO: https://discord.gg/zSq8rtW
Versi CPU Darknet/YOLO dapat berjalan di perangkat sederhana seperti Raspberry Pi, server cloud & colab, desktop, laptop, dan rig pelatihan kelas atas. Versi GPU Darknet/YOLO memerlukan GPU berkemampuan CUDA dari NVIDIA.
Darknet/YOLO diketahui bekerja di Linux, Windows, dan Mac. Lihat petunjuk pembuatan di bawah.
Versi Darknet
Alat Darknet asli yang ditulis oleh Joseph Redmon pada tahun 2013-2017 tidak memiliki nomor versi. Kami menganggap versi ini 0.x.
Repo Darknet populer berikutnya yang dikelola oleh Alexei Bochkovskiy antara tahun 2017-2021 juga tidak memiliki nomor versi. Kami menganggap ini versi 1.x.
Repo Darknet yang disponsori oleh Hank.ai dan dikelola oleh Stéphane Charette mulai tahun 2023 adalah yang pertama dengan perintah versi. Dari tahun 2023 hingga akhir tahun 2024, ia mengembalikan versi 2.x "OAK".
Tujuannya adalah untuk mencoba dan memecah sesedikit mungkin fungsi yang ada sambil mengenal basis kode.
Perubahan penting dalam versi ini meliputi:
1. Tulis ulang langkah-langkah pembangunan untuk mendapatkan 1 cara terpadu untuk membangun menggunakan CMake di Windows dan Linux.
2. Mengonversi basis kode untuk menggunakan kompiler C++.
3. Chart.png yang ditingkatkan saat pelatihan.
4. Perbaikan bug dan optimalisasi terkait kinerja, sebagian besar terkait dengan pengurangan waktu yang diperlukan untuk melatih jaringan.
Cabang terakhir dari basis kode ini adalah versi 2.1 di cabang v2.
Fase pengembangan berikutnya dimulai pada pertengahan tahun 2024 dan dirilis pada bulan Oktober 2024. Perintah versi sekarang mengembalikan 3.x "JAZZ".
Anda selalu dapat melakukan checkout pada cabang v2 sebelumnya jika Anda perlu menjalankan salah satu perintah ini. Beri tahu kami agar kami dapat menyelidiki penambahan kembali perintah yang hilang.
Perubahan penting dalam versi ini meliputi:
1. Menghapus banyak perintah lama dan tidak terawat.
2. Banyak optimalisasi kinerja, baik saat pelatihan maupun saat inferensi.
3. API C lama telah dimodifikasi; aplikasi yang menggunakan API Darknet asli memerlukan sedikit modifikasi: https://darknetcv.ai/api/api.html
4. Darknet V3 C dan C++ API baru: https://darknetcv.ai/api/api.html
5. Aplikasi baru dan kode contoh dalam contoh src: https://darknetcv.ai/api/files.html
Anak Timbangan Terlatih MSCOCO
Beberapa versi YOLO yang populer telah dilatih sebelumnya untuk kenyamanan pada kumpulan data MSCOCO. Dataset ini memiliki 80 kelas, yang dapat dilihat pada file teks cfg/coco.names.
Ada beberapa kumpulan data sederhana dan anak timbangan terlatih lainnya yang tersedia untuk pengujian Darknet/YOLO, seperti LEGO Gears dan Rolodex. Lihat FAQ Darknet/YOLO untuk detailnya.
Anak timbangan terlatih MSCOCO dapat diunduh dari beberapa lokasi berbeda, dan juga tersedia untuk diunduh dari repo ini:
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
Anak timbang terlatih MSCOCO disediakan hanya untuk tujuan demo. File .cfg dan .names yang sesuai untuk MSCOCO ada di direktori cfg. Contoh perintah:
' pesta
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
`
Perhatikan bahwa masyarakat diharapkan untuk melatih jaringan mereka sendiri. MSCOCO biasanya digunakan untuk memastikan bahwa semuanya berfungsi dengan benar.
Bangunan
Berbagai metode pembangunan yang tersedia di masa lalu (sebelum tahun 2023) telah digabungkan menjadi satu solusi terpadu. Darknet memerlukan C++17 atau lebih baru, OpenCV, dan menggunakan CMake untuk menghasilkan file proyek yang diperlukan.
Anda tidak perlu mengetahui C++ untuk membangun, menginstal, atau menjalankan Darknet/YOLO, sama seperti Anda tidak perlu menjadi mekanik untuk mengendarai mobil.
Hati-hati jika Anda mengikuti tutorial lama dengan langkah build yang lebih rumit, atau langkah build yang tidak sesuai dengan yang ada di readme ini. Langkah-langkah pembangunan baru seperti yang dijelaskan di bawah dimulai pada Agustus 2023.
Pengembang perangkat lunak didorong untuk mengunjungi https://darknetcv.ai/ untuk mendapatkan informasi tentang internal kerangka deteksi objek Darknet/YOLO.
Google Kolab
Petunjuk Google Colab sama dengan petunjuk Linux. Beberapa notebook Jupyter tersedia yang menunjukkan cara melakukan tugas tertentu, seperti melatih jaringan baru.
Lihat notebook di subdirektori colab, dan/atau ikuti petunjuk Linux di bawah.
Metode CMake Linux
1. Instal paket yang diperlukan:
' pesta
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Kloning repositori Darknet:
' pesta
mkdir ~/srccd ~/src
git clone https://github.com/hank-ai/darknetcd darknet
`
3. Buat direktori build dan jalankan CMake:
' pesta
mkdir buildcd build
cmake -DCMAKEBUILDTYPE=Lepaskan ..
`
4. Bangun Jaringan Gelap:
' pesta
buat -j4
`
5. Paket dan instal Darknet:
' pesta
kemasan
sudo dpkg -i darknet-VERSION.deb
`
6. Verifikasi instalasi:
' pesta
versi darknet
`
Metode Windows CMake
1. Instal paket yang diperlukan:
' pesta
winget install Git.Git winget install Kitware.CMake winget install nsis.nsis winget install Microsoft.VisualStudio.2022.Community
`
2. Ubah instalasi Visual Studio:
- Klik menu "Windows Start" dan jalankan "Visual Studio Installer".
- Klik Ubah.
- Pilih Pengembangan Desktop Dengan C++.
- Klik Modifikasi di pojok kanan bawah, lalu klik Ya.
3. Buka Prompt Perintah Pengembang untuk VS 2022:
- Klik menu "Windows Start" dan pilih Developer Command Prompt for VS 2022. Jangan gunakan PowerShell untuk langkah ini.
4. Instal Microsoft VCPKG:
' pesta
cd c:mkdir c:srccd c:src git clone https://github.com/microsoft/vcpkgcd 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
`
5. Mengkloning repositori Darknet:
' pesta
cd c:src
git clone https://github.com/hank-ai/darknet.gitcd darknet
`
6. Buat direktori build dan jalankan CMake:
' pesta
mkdir buildcd build
cmake -DCMAKEBUILDTYPE=Rilis -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
7. Bangun Jaringan Gelap:
' pesta
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
`
8. Hasilkan paket instalasi NSIS:
' pesta
msbuild.exe /property:Platform=x64;Configuration=Rilis PACKAGE.vcxproj
`
9. Jalankan wizard instalasi NSIS:
- Buka file darknet-VERSION.exe di direktori build. Misalnya: darknet-2.0.31-win64.exe.
10. Verifikasi instalasi:
' pesta
C:Program FilesDarknetbindarknet.exe versi
`
Menggunakan Darknet
CLI
Berikut ini bukan daftar lengkap semua perintah yang didukung oleh Darknet.
Selain CLI Darknet, perhatikan juga CLI proyek DarkHelp yang menyediakan CLI alternatif untuk Darknet/YOLO. DarkHelp CLI juga memiliki beberapa fitur lanjutan yang tidak tersedia langsung di Darknet. Anda dapat menggunakan Darknet CLI dan DarkHelp CLI secara bersamaan, keduanya tidak eksklusif.
Untuk sebagian besar perintah yang ditampilkan di bawah, Anda memerlukan file .weights dengan file .names dan .cfg yang sesuai. Anda dapat melatih jaringan Anda sendiri (sangat disarankan!) atau mengunduh jaringan saraf yang telah dilatih dan disediakan oleh seseorang secara gratis di internet. Contoh kumpulan data terlatih meliputi:
1. LEGO Gears (menemukan objek dalam gambar)
2. Rolodex (menemukan teks dalam gambar)
3. MSCOCO (deteksi objek kelas 80 standar)
Perintah yang harus dijalankan meliputi:
1. Buat daftar beberapa perintah dan opsi yang mungkin untuk dijalankan:
' pesta
bantuan darknet
`
2. Periksa versinya:
' pesta
versi darknet
`
3. Prediksi menggunakan gambar:
- V2:
' pesta
tes detektor darknet cars.data cars.cfg cars_best.weights image1.jpg
`
- V3:
' pesta
darknet02displayannotatedimages mobil.cfg image1.jpg
`
- Bantuan Gelap:
' pesta
DarkHelp mobil.cfg mobil.cfg mobil_best.weights image1.jpg
`
4. Koordinat keluaran:
- V2:
' pesta
detektor darknet menguji animal.data animal.cfg animalbest.weights -extoutput dog.jpg
`
- V3:
' pesta
darknet01inference_images hewan anjing.jpg
`
- Bantuan Gelap:
' pesta
DarkHelp --json animal.cfg animal.names animal_best.weights dog.jpg
`
5. Bekerja dengan video:
- V2:
' pesta
demo detektor darknet animal.data animal.cfg animalbest.weights -extoutput test.mp4
`
- V3:
' pesta
darknet03display_videos animal.cfg test.mp4
`
- Bantuan Gelap:
' pesta
DarkHelp animal.cfg animal.names animal_best.weights test.mp4
`
6. Membaca dari webcam:
- V2:
' pesta
demo detektor darknet animal.data animal.cfg animal_best.weights -c 0
`
- V3:
' pesta
darknet08display_webcam binatang
`
7. Simpan hasil ke video:
- V2:
' pesta
demo detektor darknet animal.data animal.cfg animalbest.weights test.mp4 -outfilename res.avi
`
- V3:
' pesta
darknet05prosesvideoshewan multithread.cfg hewan.nama hewan_terbaik.tes bobot.mp4
`
- Bantuan Gelap:
' pesta
DarkHelp animal.cfg animal.names animal_best.weights test.mp4
`
8.Json:
- V2:
' pesta
demo detektor darknet hewan.data hewan.cfg hewanbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
- V3:
' pesta
darknet06imagestojson hewan image1.jpg
`
- Bantuan Gelap:
' pesta
DarkHelp --json animal.names animal.cfg animal_best.weights image1.jpg
`
9. Berjalan pada GPU tertentu:
' pesta
demo detektor darknet animal.data animal.cfg animal_best.weights -i 1 test.mp4
`
10. Untuk memeriksa keakuratan jaringan saraf:
' pesta
peta detektor darknet Driving.data Driving.cfg Driving_best.weights ...
`
Keluaran:
`
Nama Id Rata-rata Presisi TP FN FP TN Akurasi ErrorRate Precision Recall Spesifisitas FalsePosRate
-- ---- ------------ ------ ------ ------ ------ -------- --------- --------- ------ ----------- ------------
0 kendaraan 91,2495 32648 3903 5826 65129 0,9095 0,0905 0,8486 0,8932 0,9179 0,0821
1 sepeda motor 80,4499 2936 513 569 5393 0,8850 0,1150 0,8377 0,8513 0,9046 0,0954
2 sepeda 89,0912 570 124 104 3548 0,9475 0,0525 0,8457 0,8213 0,9715 0,0285
3 orang 76,7937 7072 1727 2574 27523 0,8894 0,1106 0,7332 0,8037 0,9145 0,0855
4 banyak kendaraan 64,3089 1068 509 733 11288 0,9087 0,0913 0,5930 0,6772 0,9390 0,0610
5 lampu hijau 86,8118 1969 239 510 4116 0,8904 0,1096 0,7943 0,8918 0,8898 0,1102
6 lampu kuning 82,0390 126 38 30 1239 0,9525 0,0475 0,8077 0,7683 0,9764 0,0236
7 lampu merah 94,1033 3449 217 451 4643 0,9237 0,0763 0,8844 0,9408 0,9115 0,0885
`
11. Untuk memeriksa keakuratan mAP@IoU=75:
' pesta
detektor darknet peta animal.data animal.cfg animalbest.weights -iouthresh 0.75
`
12. Menghitung ulang jangkar:
- Paling baik dilakukan di DarkMark.
- Di Darknet, gunakan:
' pesta
detektor darknet calcanchors animal.data -numof_clusters 6 -width 320 -height 256
`
13. Latih jaringan baru:
' pesta
cd ~/nn/hewan/
detektor darknet -peta -dont_show melatih hewan.data hewan.cfg
`
Pelatihan
Tautan cepat ke bagian yang relevan dari FAQ Darknet/YOLO:
1. Bagaimana cara mengatur file dan direktori saya?
2. File konfigurasi manakah yang harus saya gunakan?
3. Perintah apa yang harus saya gunakan saat melatih jaringan saya sendiri?
Cara termudah untuk membuat anotasi dan melatih adalah dengan menggunakan DarkMark untuk membuat semua file Darknet yang diperlukan. Ini jelas merupakan cara yang disarankan untuk melatih jaringan saraf baru.
Jika Anda lebih suka mengatur berbagai file secara manual untuk melatih jaringan khusus:
1. Buat folder baru untuk proyek Anda:
- Untuk contoh ini, akan dibuat jaringan syaraf tiruan untuk mendeteksi hewan, sehingga dibuatlah direktori berikut: ~/nn/animals/.
2. Salin file konfigurasi Darknet sebagai templat:
- Misalnya, salin cfg/yolov4-tiny.cfg ke folder proyek. Anda sekarang akan memiliki ~/nn/animals/animals.cfg.
3. Buat file teks nama binatang:
- File ini akan berisi daftar kelas yang ingin Anda deteksi, satu kelas per baris. Misalnya:
`
anjing
kucing
burung
kuda
`
4. Buat file teks animal.data:
- File ini menentukan jalur ke data pelatihan dan validasi, serta nama dan direktori cadangan. Misalnya:
`
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. Buat folder untuk gambar dan anotasi Anda:
- Misalnya, ini bisa berupa ~/nn/animals/dataset. Setiap gambar memerlukan file .txt terkait yang menjelaskan anotasi untuk gambar tersebut. Format file anotasi .txt sangat spesifik. Anda tidak dapat membuat file ini dengan tangan karena setiap anotasi harus berisi koordinat yang tepat untuk anotasi tersebut. Lihat DarkMark atau perangkat lunak serupa lainnya untuk membuat anotasi pada gambar Anda. Format anotasi YOLO dijelaskan di FAQ Darknet/YOLO.
6. Buat file teks "train" dan "valid":
- Kedua file teks ini perlu mencantumkan masing-masing gambar yang harus digunakan Darknet untuk melatih dan untuk validasi saat menghitung% peta. Tepat satu gambar per baris. Jalur dan nama file mungkin relatif atau absolut.
7. Ubah file .cfg Anda:
- kumpulan: Setel ke 64.
- subdivisi: Mulai dengan 1. Lihat FAQ Darknet/YOLO jika Anda perlu menyesuaikannya berdasarkan ketersediaan memori.
- maxbatches: Nilai awal yang baik adalah 2000 numberof_classes. Misalnya kita punya 4 hewan, jadi 4 2000 = 8000.
- langkah: Atur ke 80% dan 90% dari maxbatch. Untuk contoh ini, kami akan menggunakan langkah=6400,7200 karena maxbatches disetel ke 8000.
- lebar dan tinggi: Ini adalah dimensi jaringan. FAQ Darknet/YOLO menjelaskan cara menghitung ukuran terbaik untuk digunakan.
- kelas: Ubah baris ini dengan jumlah kelas di file .names Anda. Untuk contoh ini, kami akan menggunakan kelas=4.
- filter: Di bagian [konvolusional] sebelum setiap bagian [yolo], ubah filter=... dengan nilai (numberofclasses + 5) * 3. Untuk contoh ini, kami akan menggunakan filter=27.
8. Mulai pelatihan:
' pesta
cd ~/nn/hewan/
detektor darknet -peta -dont_show melatih hewan.data hewan.cfg
`
Bersabarlah. Bobot terbaik akan disimpan sebagai animal_best.weights. Kemajuan pelatihan dapat diamati dengan melihat file chart.png. Lihat FAQ Darknet/YOLO untuk parameter tambahan yang mungkin ingin Anda gunakan saat melatih jaringan baru.
Jika Anda ingin melihat detail selengkapnya selama pelatihan, tambahkan parameter --verbose. Misalnya:
' pesta
detektor darknet -peta -dont_show --verbose melatih hewan.data hewan.cfg
`
Alat dan Tautan Lainnya
1. DarkMark: Untuk mengelola proyek Darknet/YOLO Anda, beri anotasi pada gambar, verifikasi anotasi Anda, dan buat file yang diperlukan untuk berlatih dengan Darknet.
2. DarkHelp: Untuk CLI alternatif yang kuat untuk Darknet, untuk menggunakan ubin gambar, untuk pelacakan objek di video Anda, atau untuk C++ API yang kuat yang dapat dengan mudah digunakan dalam aplikasi komersial.
3. FAQ Darknet/YOLO: Untuk membantu menjawab pertanyaan Anda.
4. Saluran YouTube Stéphane: Untuk video tutorial dan contoh.
5. Server perselisihan Darknet/YOLO: Untuk mengobrol dengan pengguna Darknet/YOLO lainnya dan meminta dukungan.
Peta jalan
Terakhir diperbarui 30-10-2024:
Selesai
1. Tukar qsort() dengan std::sort() yang digunakan selama pelatihan.
2. Hapus check_mistakes, getchar(), dan system().
3. Konversi Darknet untuk menggunakan kompiler C++.
4. Perbaiki versi Windows.
5. Perbaiki dukungan Python.
6. Bangun perpustakaan darknet.
7. Aktifkan kembali label pada prediksi (kode "abjad").
8. Aktifkan kembali kode CUDA/GPU.
9. Aktifkan kembali CUDNN.
10. Aktifkan kembali separuh CUDNN.
11. Jangan melakukan hard-code pada arsitektur CUDA.
12. Informasi versi CUDA yang lebih baik.
13. Aktifkan kembali AVX.
14. Hapus solusi lama dan Makefile.
15. Jadikan OpenCV non-opsional.
16. Hapus ketergantungan pada perpustakaan pthread lama.
17. Hapus STB.
18. Tulis ulang CMakeLists.txt untuk menggunakan deteksi CUDA yang baru.
19. Hapus kode "abjad" lama, dan hapus 700+ gambar di data/label.
20. Membangun di luar sumber daya.
21. Memiliki keluaran nomor versi yang lebih baik.
22. Optimalisasi kinerja terkait pelatihan (on-going task).
23. Optimalisasi kinerja terkait inferensi (tugas yang sedang berjalan).
24. Referensi lewat jika memungkinkan.
25. Bersihkan file .hpp.
26. Tulis ulang darknet.h.
27. Jangan masukkan cv::Mat ke void* tetapi gunakan sebagai objek C++ yang tepat.
28. Memperbaiki atau konsisten dalam penggunaan struktur gambar internal.
29. Perbaiki build untuk perangkat Jetson berbasis ARM.
30. Perangkat Jetson Orin baru berfungsi.
31. Perbaiki Python API di V3.
Tujuan jangka pendek
1. Tukar printf() dengan std::cout.
2. Lihat dukungan kamera zed lama.
3. Penguraian baris perintah yang lebih baik dan konsisten.
Tujuan jangka menengah
1. Hapus semua kode char* dan ganti dengan std::string.
2. Jangan sembunyikan peringatan dan bersihkan peringatan kompiler.
3. Penggunaan cv::Mat yang lebih baik daripada struktur gambar khusus di C.
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.
7. Pembersihan kode yang sedang berlangsung.
Tujuan jangka panjang
1. Perbaiki masalah CUDA/CUDNN pada semua GPU.
2. Tulis ulang kode CUDA+cuDNN.
3. Pertimbangkan untuk menambahkan dukungan untuk GPU non-NVIDIA.
4. Kotak pembatas yang diputar, atau semacam penyangga "sudut".
5. Titik kunci/kerangka.
6. Peta Panas.
7. Segmentasi.