YOLOv4 - jaringan saraf real-time paling akurat pada dataset COCO Microsoft

Darknet YOLOv4 lebih cepat / lebih akurat daripada Google TensorFlow EfficientDet dan FaceBook Pytorch / Detectron RetinaNet / MaskRCNN.

Artikel yang sama pada media : Kode sedang : github.com/AlexeyAB/darknet Artikel : arxiv.org/abs/2004.10934




Kami akan menunjukkan beberapa nuansa membandingkan dan menggunakan jaringan saraf untuk mendeteksi objek.

Tujuan kami adalah untuk mengembangkan algoritma deteksi objek untuk digunakan dalam produk nyata, dan tidak hanya memajukan ilmu pengetahuan. Keakuratan jaringan saraf YOLOv4 (608x608) adalah 43,5% AP / 65,7% AP50 Microsoft-COCO-testdev.

62 FPS - YOLOv4 (608x608 batch = 1) pada Tesla V100 - dengan menggunakan Darknet-framework
400 FPS - YOLOv4 (416x416 batch = 4) pada RTX 2080 Ti - dengan menggunakan TensorRT + tkDNN
32 FPS - YOLOv4 (416x416 batch = 1) pada Jetson AGX Xavier - dengan menggunakan TensorRT + tkDNN




Pertama, beberapa tautan bermanfaat.




Jaringan saraf YOLOv4 kami dan kerangka kerja Darknet DL kami sendiri (C / C ++ / CUDA) lebih baik dalam kecepatan FPS dan akurasi AP50: 95 dan AP50 pada kumpulan data COCO Microsoft daripada kerangka kerja DL dan jaringan saraf: Google TensorFlow EfficientDet, FaceBook Detectron RetinaNet / MaskRCNN, PyTorch Yolov3-ASFF, dan banyak lainnya ... YOLOv4 mencapai akurasi 43,5% AP / 65,7% AP50 pada tes COCO Microsoft pada kecepatan 62 FPS TitanV atau 34 FPS RTX 2070. Tidak seperti detektor modern lainnya, YOLOv4 dapat melatih siapa pun dengan siapa pun yang memiliki kartu grafis nVidia gaming dengan VRAM 8-16 GB. Sekarang, tidak hanya perusahaan besar yang dapat melatih jaringan saraf pada ratusan GPU / TPU untuk menggunakan ukuran mini-batch besar untuk mencapai akurasi yang lebih tinggi, jadi kami mengembalikan kontrol kecerdasan buatan kepada pengguna biasa, karena untuk YOLOv4 mini-lot besar tidak diperlukan,dapat dibatasi hingga ukuran 2 - 8.

YOLOV4 optimal untuk menggunakan waktu nyata, karena jaringan terletak pada kurva optimalitas Pareto dalam grafik AP (akurasi) / FPS (kecepatan).



Grafik akurasi (AP) dan kecepatan (FPS) dari banyak jaringan saraf untuk mendeteksi objek yang diukur pada GPU TitanV / TeslaV100, TitanXP / TeslaP100, TitanX / TeslaM40 untuk dua indikator utama akurasi AP50: 95 dan AP50

Untuk perbandingan yang adil, kami mengambil data dari artikel dan bandingkan hanya pada GPU dengan arsitektur yang sama.

Sebagian besar tugas praktis memiliki persyaratan minimum yang diperlukan untuk detektor - ini adalah akurasi dan kecepatan minimum yang dapat diterima. Biasanya kecepatan minimum yang diijinkan 30 FPS (bingkai per detik) dan lebih tinggi untuk sistem waktu nyata.

Seperti dapat dilihat dari grafik, dalam sistem Real-time dengan FPS 30 atau lebih:

  • YOLOv4-608 RTX 2070 450$ (34 FPS) 43.5% AP / 65.7% AP50
  • EfficientDet-D2 TitanV 2250$ (42 FPS) 43.0% AP / 62.3% AP50
  • EfficientDet-D0 RTX 2070 450$ (34 FPS) 33.8% AP / 52.2% AP50

Itu YOLOv4 membutuhkan peralatan 5 kali lebih murah dan lebih akurat daripada EfficientDet-D2 (Google-TensorFlow). Anda dapat menggunakan EfficientDet-D0 (Google-TensorFlow) maka biaya peralatan akan sama, tetapi akurasinya akan lebih rendah 10% AP.
Selain itu, beberapa sistem industri memiliki keterbatasan dalam pembuangan panas atau penggunaan sistem pendingin pasif - dalam hal ini Anda tidak dapat menggunakan TitanV bahkan dengan uang.

Saat menggunakan YOLOv4 (416x416) pada RTX 2080 Ti GPU menggunakan TensorRT + tkDNN, kami mencapai kecepatan 2x kali lebih cepat, dan ketika menggunakan batch = 4 itu 3x-4x kali lebih cepat - untuk perbandingan yang jujur, kami tidak menyajikan hasil ini dalam artikel di arxiv. org:

Jaringan saraf YOLOv4 (416x416) FP16 (Tensor Cores) batch = 1 mencapai pada 32 kalkulator FPS nVidia Jetson AGX Xavier menggunakan perpustakaan + tkDNN TensorRT: github.com/ceccocats/tkDNN
kecepatan lebih lambat memberikan perpustakaan OpenCV-dnn yang dikompilasi dengan CUDA: dokumen .opencv.org / master / da / d9d / tutorial_dnn_yolo.html

Kadang-kadang kecepatan (FPS) dari beberapa jaringan saraf dalam artikel diindikasikan saat menggunakan ukuran batch yang tinggi atau ketika pengujian dengan perangkat lunak khusus (TensorRT), yang mengoptimalkan jaringan dan menunjukkan peningkatan nilai FPS. Perbandingan beberapa jaringan di TRT dengan jaringan lain tanpa TRT tidak adil. Menggunakan ukuran batch yang tinggi meningkatkan FPS, tetapi juga meningkatkan latensi (daripada menguranginya) dibandingkan dengan batch = 1. Jika jaringan dengan batch = 1 menunjukkan 40 FPS, dan dengan batch = 32 itu menunjukkan 60 FPS, maka penundaan akan menjadi 25 ms untuk batch = 1, dan ~ 500 ms untuk batch = 32, karena hanya ~ 2 paket (masing-masing 32 gambar) akan diproses per detik, itulah sebabnya menggunakan batch = 32 tidak dapat diterima di banyak sistem industri. Oleh karena itu, kami membandingkan hasil pada grafik hanya dengan batch = 1 dan tanpa menggunakan TensorRT.

Setiap proses dapat dikendalikan oleh orang atau oleh komputer. Ketika sebuah sistem komputer bertindak dengan penundaan besar karena kecepatan rendah dan membuat terlalu banyak kesalahan, maka ia tidak dapat dipercayakan dengan kontrol penuh atas tindakan, dalam hal ini orang tersebut mengendalikan prosesnya, dan sistem komputer hanya memberikan petunjuk - ini adalah sistem rekomendasi - orang tersebut bekerja, dan sistem hanya sistem menceritakan di mana kesalahan dibuat. Ketika sistem bekerja dengan cepat dan dengan akurasi tinggi, sistem seperti itu dapat mengontrol proses secara mandiri, dan seseorang hanya menjaganya. Karena itu, akurasi dan kecepatan sistem selalu penting. Jika menurut Anda 120 FPS untuk YOLOv4 416x416 terlalu banyak untuk tugas Anda, dan lebih baik mengambil algoritme lebih lambat dan lebih akurat, maka kemungkinan besar dalam tugas nyata Anda akan menggunakan sesuatu yang lebih lemah daripada Tesla V100 250 Watt,misalnya, RTX 2060 / Jetson-Xavier 30-80 Watt, dalam hal ini Anda akan mendapatkan 30 FPS pada YOLOv4 416x416, dan jaringan saraf lainnya pada 1-15 FPS atau tidak akan memulai sama sekali.

Fitur pelatihan berbagai jaringan saraf


Anda harus melatih EfficientDet dengan ukuran mini-batch = 128 pada beberapa Tesla V100 32GB GPU, sementara YOLOv4 dilatih hanya pada satu Tesla V100 32GB GPU dengan mini-batch = 8 = batch / subdivisi, dan dapat dilatih pada permainan reguler kartu grafis GPU 8-16GB-VRAM.
Nuansa selanjutnya adalah kesulitan melatih jaringan saraf untuk mendeteksi objeknya sendiri. Tidak peduli berapa lama Anda melatih jaringan lain pada GPU 1080 Ti yang sama, Anda tidak akan mendapatkan akurasi yang ditunjukkan pada grafik di atas. Sebagian besar jaringan (EfficientDet, ASFF, ...) perlu dilatih pada 4 - 128 GPU (dengan ukuran mini-batch besar menggunakan syncBN) dan perlu untuk melatih setiap kali baru untuk setiap resolusi jaringan, tanpa memenuhi kedua kondisi tidak mungkin untuk mencapai akurasi AP atau AP50 yang dinyatakan oleh mereka.


Anda dapat melihat ketergantungan akurasi pendeteksian objek pada ukuran minibatch di detektor lain, yaitu menggunakan 128 kartu video, bukan 8 kartu video dan kecepatan belajar adalah 10 kali lebih tinggi dan akurasi akhir 1,5 AP lebih tinggi - MegDet: A Detector Mini-Batch Obyek Besar arxiv.org/abs/1711.07240

Yolo ASFF: arxiv.org/abs/1911.09516
Mengikuti [43], kami memperkenalkan sekumpulan trik dalam proses pelatihan, seperti algoritma mixup [12], jadwal tingkat pembelajaran cosinus [26], dan teknik normalisasi bets yang disinkronkan [30].

EfficientDet: arxiv.org/abs/1911.09070
Normalisasi bets yang disinkronkan ditambahkan setelah setiap konvolusi dengan peluruhan norma bets 0,99 dan epsilon 1e-3.

Setiap model dilatih 300 zaman dengan ukuran total batch 128 pada 32 inti TPUv3.

cloud.google.com/tpu/docs/types-zones#europe
v3-32 TPU type (v3) โ€“ 32 TPU v3 cores โ€“ 512 GiB Total TPU memory

Anda harus menggunakan 512 GB TPU / GPU-RAM untuk melatih model EfficientDet dengan normalisasi batch tersinkronisasi pada batch = 128, sedangkan mini-batch = 8 dan hanya 32 GB GPU-RAM digunakan untuk melatih YOLOv4. Meskipun demikian, YOLOv4 lebih cepat / lebih akurat daripada jaringan publik, meskipun hanya dilatih 1 kali dengan resolusi 512x512 per 1 GPU (Tesla V100 32GB / 16GB). Pada saat yang sama, menggunakan ukuran mini-batch yang lebih kecil dan GPU-VRAM tidak menyebabkan kehilangan akurasi yang dramatis seperti pada jaringan saraf lainnya:


Sumber: arxiv.org/abs/2004.10934

Sehingga Anda dapat melatih kecerdasan buatan secara lokal pada PC Anda, alih-alih mengunduh Kumpulan data ke cloud - ini menjamin perlindungan data pribadi Anda dan membuat pelatihan kecerdasan buatan tersedia untuk semua orang.

Cukup untuk melatih jaringan kami sekali dengan resolusi jaringan 512x512, dan kemudian dapat digunakan dengan resolusi jaringan yang berbeda dalam jangkauan: [416x416 - 512x512 - 608x608].

Sebagian besar model lain perlu dilatih setiap waktu secara terpisah untuk setiap resolusi jaringan, karena ini, pelatihan membutuhkan waktu lebih lama.

Fitur pengukuran akurasi algoritma deteksi objek


Anda selalu dapat menemukan gambar di mana satu algoritma akan bekerja dengan buruk, dan algoritma lainnya akan bekerja dengan baik, dan sebaliknya. Oleh karena itu, untuk menguji algoritma pendeteksian, satu set besar ~ 20.000 gambar dan 80 jenis objek digunakan - dataset uji-dev MSCOCO.

Agar algoritma tidak mencoba untuk hanya mengingat hash dari setiap gambar dan koordinat di atasnya (overfitting), keakuratan deteksi objek selalu diperiksa pada gambar dan label bahwa algoritma tidak melihat selama pelatihan - ini memastikan bahwa algoritma dapat mendeteksi objek pada gambar / video yang itu tidak pernah melihat.

Agar tidak ada yang bisa membuat kesalahan dalam menghitung akurasi, dalam domain publik hanya ada gambar uji dev yang Anda deteksi, dan mengirim hasilnya ke server evaluasi CodaLab, di mana program itu sendiri membandingkan hasil Anda dengan anotasi uji yang tidak dapat diakses oleh siapa pun .

Dataset MSCOCO terdiri dari 3 bagian

  1. Tutorial: 120.000 gambar dan file json dengan koordinat masing-masing objek
  2. Kumpulan validasi: 5.000 gambar dan file json dengan koordinat masing-masing objek
  3. Test suite: 41.000 jpg-gambar tanpa koordinat objek (beberapa gambar ini digunakan untuk menentukan akurasi dalam tugas: Deteksi Objek, Segmentasi Instans, Keypoints, ...)

Fitur pengembangan YOLOv4


Ketika mengembangkan YOLOv4, saya harus mengembangkan jaringan saraf YOLOv4 dan kerangka Darknet pada C / C ++ / CUDA sendiri. Karena di Darknet tidak ada diferensiasi otomatis dan eksekusi aturan rantai otomatis, maka semua gradien harus diimplementasikan secara manual. Di sisi lain, kita dapat beralih dari ketaatan pada aturan rantai, mengubah backpropagation dan mencoba hal-hal yang sangat sepele untuk meningkatkan stabilitas dan akurasi pembelajaran.

Temuan tambahan saat membuat jaringan saraf


  • Tidak selalu jaringan terbaik untuk mengklasifikasikan objek akan menjadi yang terbaik sebagai tulang punggung untuk jaringan yang digunakan untuk mendeteksi objek
  • Menggunakan bobot yang dilatih dengan fitur yang meningkatkan akurasi dalam klasifikasi dapat memengaruhi akurasi detektor (pada beberapa jaringan)
  • Tidak semua fitur yang dinyatakan dalam berbagai penelitian meningkatkan akurasi jaringan.
  • .
  • BFLOPS , BFLOPS
  • , receptive field , stride=2 / conv3x3, weights (filters) .

YOLOv4


Deteksi objek menggunakan model YOLOv4 yang terlatih dibangun di perpustakaan OpenCV-dnn github.com/opencv/opencv/issues/17148 sehingga Anda dapat menggunakan YOLOv4 langsung dari OpenCV tanpa menggunakan kerangka Darknet. Pustaka OpenCV mendukung implementasi jaringan saraf pada CPU, GPU (GPU nVidia), VPU (Intel Myriad X). Lebih detail: docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html kerangka

OpenCV (dnn):


Kerangka Darknet :


tkDNN + TensorRT - Kecepatan deteksi objek maksimum menggunakan YOLOv4: TensorRT + tkDNN github.com/ceccocats/tkDNN

  • 400 FPS - YOLOv4 (416x416 batch = 4) pada RTX 2080 Ti
  • 32 FPS - YOLOv4 (416x416 batch = 1) di Jetson AGX Xavier

Penggunaan YOLOv4 dapat diperluas untuk mendeteksi 3D-Rotated-Bboxes atau titik kunci / landmark wajah, misalnya:

github.com/ouyanghuiyu/darknet_face_with_landmark


All Articles