Kerangka Deteksi Objek Darknet dan YOLO
Logo !darknet dan hank.ai
Darknet adalah kerangka jaringan saraf sumber terbuka yang ditulis dalam C, C++, dan CUDA. Ini memberikan landasan yang kuat untuk mengembangkan dan menerapkan model deteksi objek.
YOLO (You Only Look Once) adalah sistem deteksi objek real-time canggih yang dibangun berdasarkan kerangka Darknet. Ia unggul dalam kecepatan dan akurasi, menjadikannya pilihan populer untuk berbagai aplikasi.
Ingin mempelajari lebih lanjut tentang bagaimana Hank.ai berkontribusi pada komunitas Darknet/YOLO?
Jelajahi situs web resmi Darknet/YOLO:
Pelajari FAQ Darknet/YOLO yang komprehensif:
Bergabunglah dengan komunitas Darknet/YOLO Discord yang dinamis:
Dokumen
YOLOv7: Tautan ke kertas
Scaled-YOLOv4: Tautan ke kertas
YOLOv4: Tautan ke kertas
YOLOv3: Tautan ke kertas
Informasi Umum
Kerangka kerja Darknet/YOLO terus menjadi yang terdepan dalam pendeteksian objek, secara konsisten menawarkan keunggulan kecepatan dan akurasi dibandingkan kerangka kerja lain dan versi YOLO.
Fitur utama:
1. Sumber Terbuka dan Gratis: Kerangka kerja ini sepenuhnya gratis dan bersumber terbuka, sehingga Anda dapat dengan mudah memasukkannya ke dalam proyek Anda tanpa batasan lisensi apa pun.
2. Performa Tinggi: Darknet V3 (“Jazz”), dirilis pada Oktober 2024, mencapai performa mengesankan, mencapai hingga 1000 FPS untuk dataset LEGO menggunakan GPU NVIDIA RTX 3090.
3. Penerapan Serbaguna: Darknet/YOLO kompatibel dengan berbagai perangkat, mulai dari Raspberry Pi dan server cloud hingga desktop dan rig pelatihan kelas atas.
4. Dukungan Lintas Platform: Diketahui berjalan dengan sempurna di sistem operasi Linux, Windows, dan Mac.
Butuh bantuan atau ingin berdiskusi tentang Darknet/YOLO? Bergabunglah dengan komunitas dinamis di Discord:
Versi Darknet
Evolusi Darknet dapat ditelusuri melalui versinya:
1. Versi 0.x (2013-2017): Alat Darknet asli yang dikembangkan oleh Joseph Redmon tidak memiliki nomor versi formal.
2. Versi 1.x (2017-2021): Versi ini dikelola oleh Alexei Bochkovskiy dan juga tidak memiliki nomor versi.
3. Versi 2.x "OAK" (2023): Repositori Darknet, disponsori oleh Hank.ai dan dikelola oleh Stéphane Charette, memperkenalkan perintah versi. Versi ini membawa perbaikan yang signifikan, antara lain:
* Langkah-langkah pembangunan terpadu menggunakan CMake untuk Windows dan Linux.
* Konversi ke kompiler C++.
* Visualisasi chart.png yang ditingkatkan selama pelatihan.
* Perbaikan bug dan optimalisasi kinerja untuk efisiensi pelatihan.
4. Versi 2.1: Cabang terakhir dari basis kode v2.
5. Versi 3.x "JAZZ" (Oktober 2024): Rilisan terbaru ini memperkenalkan:
* Optimalisasi kinerja untuk pelatihan dan inferensi.
* API C lawas yang dimodifikasi memerlukan sedikit adaptasi untuk aplikasi yang menggunakan API Darknet asli.
* Darknet V3 C dan C++ API baru.
* Aplikasi baru dan kode contoh di direktori src-examples.
Untuk kompatibilitas dengan versi lama, cabang v2 masih dapat diakses. Jika Anda perlu menggunakan perintah khusus dari versi sebelumnya, beri tahu kami, dan kami akan menjajaki penambahannya kembali.
Anak Timbangan Terlatih MSCOCO
Beberapa versi YOLO yang populer telah dilatih sebelumnya pada kumpulan data MSCOCO, menawarkan titik awal yang nyaman untuk bereksperimen dengan kerangka kerja tersebut. MSCOCO berisi 80 kelas, terdaftar di file cfg/coco.names.
Tersedia beban terlatih:
YOLOv2 (November 2016):
* yolov2-tiny.weights
* yolov2-penuh.bobot
YOLOv3 (Mei 2018):
* yolov3-tiny.weights
* yolov3-penuh.bobot
YOLOv4 (Mei 2020):
* yolov4-tiny.weights
* yolov4-penuh.bobot
YOLOv7 (Agustus 2022):
* yolov7-tiny.weights
* yolov7-penuh.bobot
Ingat: Meskipun beban terlatih ini berguna untuk demonstrasi, penting untuk melatih jaringan Anda sendiri untuk mendapatkan solusi yang disesuaikan. MSCOCO terutama digunakan untuk memverifikasi bahwa pengaturan Anda berfungsi dengan benar.
Contoh perintah menggunakan beban yang telah dilatih sebelumnya:
' pesta
Tampilkan gambar beranotasi
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
Tampilkan video dengan anotasi
darknet03display_videos coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
Gunakan DarkHelp CLI
DarkHelp coco.nama yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.nama yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
Bangunan
Darknet memanfaatkan CMake untuk menyederhanakan proses pembangunan untuk Windows dan Linux. Ini membutuhkan C++17 atau kompiler yang lebih baru, bersama dengan OpenCV.
Instruksi pembuatan kini disatukan, menggantikan metode lama yang lebih kompleks.
Catatan: Jika Anda mengalami masalah dengan tutorial lama atau langkah-langkah pembuatan yang tidak sesuai dengan panduan ini, silakan lihat petunjuk terbaru yang disediakan di sini.
Pengembang perangkat lunak didorong untuk mengunjungi https://darknetcv.ai/ untuk mendapatkan wawasan tentang cara kerja kerangka Darknet/YOLO.
Google Kolab
Petunjuk Google Colab mencerminkan petunjuk Linux.
Jelajahi notebook di subdirektori colab, 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 ~/src
cd ~/src
git klon https://github.com/hank-ai/darknet
cd darknet
mkdir membangun
pembuatan cd
`
3. Konfigurasikan CMake:
' pesta
cmake -DCMAKEBUILDTYPE=Lepaskan ..
`
4. Bangun Jaringan Gelap:
' pesta
buat -j4
`
5. Paket Darknet:
' pesta
kemasan
sudo dpkg -i darknet-VERSION.deb
`
Opsional: CUDA atau CUDA+cuDNN untuk akselerasi GPU
Kunjungi https://developer.nvidia.com/cuda-downloads untuk mengunduh dan menginstal CUDA.
Kunjungi https://developer.nvidia.com/rdp/cudnn-download atau https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview untuk mengunduh dan instal cuDNN.
Setelah menginstal CUDA, pastikan nvcc dan nvidia-smi dapat diakses. Anda mungkin perlu menyesuaikan variabel PATH Anda.
Jika Anda menginstal CUDA atau CUDA+cuDNN nanti atau mengupgrade perangkat lunak NVIDIA:
Hapus file CMakeCache.txt di direktori build Darknet Anda untuk memaksa CMake menemukan kembali dependensi.
Bangun kembali Darknet.
Untuk memutakhirkan CMake di Ubuntu:
' pesta
sudo apt-get pembersihan cmake
sudo snap install cmake --klasik
`
Pengguna Tingkat Lanjut:
Untuk membuat file instalasi RPM dan bukan file DEB, ubah CPACKGENERATOR di CMpackage.cmake menjadi "RPM".
Untuk Centos dan OpenSUSE, ubah CPACK_GENERATOR menjadi "RPM".
Setelah membuat paket instalasi, gunakan manajer paket yang sesuai untuk menginstalnya.
Verifikasi:
Jalankan versi darknet dari baris perintah untuk mengonfirmasi instalasi.
Metode Windows CMake
1. Instal perangkat lunak yang diperlukan:
' pesta
winget instal Git.Git
winget instal Kitware.CMake
winget instal nsis.nsis
winget instal Microsoft.VisualStudio.2022.Community
`
2. Ubah instalasi Visual Studio:
* Buka "Penginstal Visual Studio."
* Klik "Ubah".
* Pilih "Pengembangan Desktop Dengan C++."
* Klik "Ubah" dan kemudian "Ya."
3. Buka Prompt Perintah Pengembang untuk VS 2022:
* Jangan gunakan PowerShell.
4. Instal Microsoft VCPKG:
' pesta
CDC:
mkdir c:src
cd c:src
git clone https://github.com/microsoft/vcpkg
cd vcpkg.dll
bootstrap-vcpkg.bat
.vcpkg.exe mengintegrasikan instalasi
.vcpkg.exe mengintegrasikan PowerShell
.vcpkg.exe instal opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5. Opsional: CUDA atau CUDA+cuDNN untuk akselerasi GPU
* Instal CUDA dengan mengikuti petunjuk di https://developer.nvidia.com/cuda-downloads.
* Instal cuDNN menggunakan petunjuk di https://developer.nvidia.com/rdp/cudnn-download atau https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows.
Setelah instalasi, pastikan nvcc.exe dan nvidia-smi.exe dapat diakses. Anda mungkin perlu mengubah variabel PATH Anda.
Jika Anda menginstal CUDA atau CUDA+cuDNN nanti atau mengupgrade perangkat lunak NVIDIA:
* Pastikan CUDA diinstal setelah Visual Studio.
* Instal ulang CUDA jika Visual Studio ditingkatkan.
6. Kloning Darknet dan buatlah:
' pesta
cd c:src
git klon https://github.com/hank-ai/darknet.git
cd darknet
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=Rilis PACKAGE.vcxproj
`
7. Salin DLL CUDA (jika diperlukan):
* Jika Anda mendapatkan kesalahan tentang DLL CUDA atau cuDNN yang hilang, salin secara manual ke direktori keluaran Darknet. Misalnya:
' pesta
salin "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
8. Jalankan kembali perintah msbuild.exe untuk menghasilkan paket instalasi NSIS:
' pesta
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
Pengguna Tingkat Lanjut:
Anda dapat menggunakan file solusi Darknet.sln yang dihasilkan oleh CMake dalam Visual Studio GUI alih-alih alat baris perintah.
Verifikasi:
Jalankan versi C:srcDarknetbuildsrc-cliReleasedarknet.exe untuk mengonfirmasi instalasi.
Untuk menginstal Darknet, jalankan wizard instalasi NSIS:
Cari file darknet-VERSION.exe di direktori build.
Jalankan wizard penginstalan untuk menginstal aplikasi CLI, pustaka, menyertakan file, dan DLL yang diperlukan.
Menggunakan Darknet
CLI
Catatan: Perintah berikut ini tidak lengkap.
Selain Darknet CLI, pertimbangkan untuk menggunakan CLI proyek DarkHelp, yang menawarkan fungsionalitas alternatif dan fitur lanjutan.
Sebagian besar perintah memerlukan file .weights beserta file .names dan .cfg yang terkait. Anda dapat melatih jaringan Anda sendiri atau mengunduh model terlatih dari internet. Contohnya meliputi:
LEGO Gears: Deteksi objek dalam gambar.
Rolodex: Deteksi teks dalam gambar.
MSCOCO: Deteksi objek kelas 80 standar.
Perintah:
1. Bantuan:
' pesta
bantuan darknet
`
2. Versi:
' 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. Menyimpan 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. Keluaran 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. Memeriksa keakuratan jaringan saraf:
' pesta
peta detektor darknet Driving.data Driving.cfg Driving_best.weights ...
`
11. Menghitung mAP@IoU=75:
' pesta
peta detektor darknet animal.data animal.cfg animalbest.weights -iouthresh 0,75
`
12. Menghitung ulang jangkar:
' pesta
detektor darknet calcanchors animal.data -numof_clusters 6 -width 320 -height 256
`
13. Melatih jaringan baru:
' pesta
detektor darknet -peta -dont_show melatih hewan.data hewan.cfg
`
Pelatihan
Untuk anotasi dan pelatihan yang disederhanakan, gunakan DarkMark. Ini adalah pendekatan yang disarankan untuk membuat jaringan saraf baru.
Pengaturan pelatihan manual (jika Anda mau):
1. Buat folder proyek:
* Misalnya, ~/nn/animals/ untuk deteksi hewan.
2. Salin file konfigurasi Darknet sebagai templat:
* Misalnya, cfg/yolov4-tiny.cfg.
3. Buat file teks nama binatang:
* Cantumkan setiap kelas, satu entri per baris, tanpa baris kosong atau komentar. Contoh:
`
anjing
kucing
burung
kuda
`
4. Buat file teks animal.data:
`
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 (misalnya, ~/nn/animals/dataset).
* Beri anotasi pada gambar menggunakan DarkMark atau perangkat lunak serupa. Format anotasi YOLO diuraikan dalam FAQ Darknet/YOLO.
6. Buat animaltrain.txt dan animalvalid.txt:
* Cantumkan semua gambar yang digunakan untuk pelatihan dan validasi, satu gambar per baris.
7. Ubah file .cfg:
* Tetapkan kumpulan=64.
* Sesuaikan subdivisi berdasarkan dimensi jaringan dan memori GPU Anda. Mulailah dengan subdivisi=1.
* Atur max_batches menjadi 2000 kali jumlah kelas (misal 8000 untuk 4 kelas).
* Tetapkan langkah ke 80% dan 90% dari max_batches.
* Sesuaikan lebar dan tinggi agar sesuai dengan dimensi jaringan yang Anda inginkan.
* Ubah kelas untuk mencerminkan jumlah kelas di file .names Anda.
Perbarui filter di bagian [konvolusional] sebelum setiap bagian [yolo]: (numberofclasses + 5) 3.
8. Mulai pelatihan:
' pesta
cd ~/nn/hewan/
detektor darknet -peta -dont_show melatih hewan.data hewan.cfg
`
Untuk detail pelatihan lebih lanjut dan parameter lanjutan, lihat FAQ Darknet/YOLO.
Alat dan Tautan Lainnya
DarkMark: Kelola proyek Darknet/YOLO, beri anotasi pada gambar, verifikasi anotasi, dan buat file pelatihan.
DarkHelp: Menyediakan CLI alternatif untuk Darknet, mengaktifkan penataan gambar, pelacakan objek, dan API C++ yang tangguh untuk aplikasi komersial.
FAQ Darknet/YOLO: Sumber daya komprehensif untuk menjawab pertanyaan Anda.
Saluran YouTube Stéphane: Akses berbagai tutorial dan video contoh.
Server Perselisihan Darknet/YOLO: Terhubung dengan pengguna lain untuk dukungan dan diskusi.
Peta jalan
Terakhir diperbarui 30-10-2024:
Selesai:
Mengganti qsort() dengan std::sort() jika berlaku selama pelatihan.
Menghapus check_mistakes, getchar(), dan system().
Mengonversi Darknet untuk menggunakan kompiler C++ (g++ di Linux, VisualStudio di Windows).
Memperbaiki versi Windows.
Label prediksi yang diaktifkan kembali (kode "abjad").
Mengaktifkan kembali kode CUDA/GPU, CUDNN, dan setengah CUDNN.
Menghapus arsitektur CUDA hard-coded.
Peningkatan informasi versi CUDA.
Mengaktifkan kembali AVX.
Menghapus solusi lama dan Makefiles.
Menjadikan OpenCV sebagai ketergantungan non-opsional.
Menghapus ketergantungan perpustakaan pthread lama.
STB dihapus.
Tulis ulang CMakeLists.txt untuk meningkatkan deteksi CUDA.
Menghapus kode "abjad" lama dan gambar terkait.
Pembangunan di luar sumber yang diterapkan.
Output nomor versi yang ditingkatkan.
Optimalisasi kinerja selama pelatihan (berkelanjutan).
Pengoptimalan kinerja selama inferensi (berkelanjutan).
Diimplementasikan pass-by-reference jika memungkinkan.
Membersihkan file .hpp.
Menulis ulang darknet.h.
Menghilangkan casting cv::Mat ke void dan menggunakannya sebagai objek C++.
Memperbaiki inkonsistensi dalam struktur gambar internal.
Memperbaiki build untuk perangkat Jetson berbasis ARM (perangkat Jetson Orin baru berfungsi).
Memperbaiki API Python di V3.
Tujuan jangka pendek:
Ganti printf() dengan std::cout (sedang berlangsung).
Kunjungi kembali dukungan kamera Zed lama.
Tingkatkan konsistensi penguraian baris perintah (sedang berlangsung).
Tujuan jangka menengah:
Hapus semua kode char dan ganti dengan std::string.
Hilangkan peringatan kompiler dan tingkatkan kejelasan kode (sedang berlangsung).
Tingkatkan penggunaan cv::Mat alih-alih struktur gambar khusus di C (sedang berlangsung).
Ganti fungsionalitas daftar lama dengan std::vector atau std::list.
Tambahkan dukungan untuk gambar skala abu-abu 1 saluran.
Perluas dukungan untuk gambar saluran-N (N > 3, misalnya saluran kedalaman atau termal).
Pembersihan kode yang sedang berlangsung (sedang berlangsung).
Tujuan jangka panjang:
Selesaikan masalah CUDA/CUDNN di semua GPU.
Tulis ulang kode CUDA+cuDNN.
Jelajahi dukungan untuk GPU non-NVIDIA.
Terapkan kotak pembatas yang diputar atau penyangga "sudut".
Tambahkan titik kunci/kerangka.
Perkenalkan peta panas (sedang berlangsung).
Jelajahi segmentasi.
Nantikan pembaruan dan kontribusi pada kerangka Darknet/YOLO!