Penjelasan fungsi Yolo Loss

16

Saya mencoba memahami fungsi kehilangan Yolo v2:

λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]+i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21iobjcclasses(pi(c)p^i(c))2

Jika ada orang yang bisa memerinci fungsinya.

Kamel BOUYACOUB
sumber
5
tidak ada yang bisa membantu Anda tanpa konteks ... setidaknya beri tahu kami dari makalah ini.
bdeonovic
1
"Saya tidak mengerti" dan "merinci fungsi" terlalu luas. Cobalah mengidentifikasi pertanyaan tertentu. Perhatikan bahwa sudah ada banyak pertanyaan yang berkaitan dengan Yolo , beberapa di antaranya mungkin memberi Anda setidaknya sebagian dari apa yang Anda cari
Glen_b -Reinstate Monica
1
Saya akan menambahkan jawaban saya jika Anda menunjuk pada apa yang tidak jelas dari penjelasan yang sangat baik ini: medium.com/@jonathan_hui/…
Aksakal
1
Dalam blog ini disini ada penjelasan grafis rinci Yolo dan yolov2. Itu menjawab pertanyaan tentang fungsi kerugian. Jika itu sangat berguna untuk pemula dan pengguna yang lebih maju.
MBoaretto

Jawaban:

18

Penjelasan dari berbagai istilah:

  • Konstanta 3 hanyalah konstanta untuk memperhitungkan lebih satu aspek dari fungsi kerugian. Dalam artikel adalah yang tertinggi untuk memiliki kepentingan lebih dalam istilah pertamaλ c o o r dλλcoord
  • Prediksi YOLO adalah vektor: prediksi BBOX untuk setiap sel grid dan prediksi kelas untuk setiap sel grid (di mana adalah jumlah kelas). Output 5 bbox dari kotak j sel i adalah koordinat pusat tte bbox , tinggi , lebar dan indeks kepercayaanB C C x i j y i j h i j w i j C i jSS(B5+C)BCCxij yijhijwijCij
  • Saya membayangkan bahwa nilai-nilai dengan topi adalah yang asli dibaca dari label dan yang tanpa topi adalah yang diprediksi. Jadi, apa nilai sebenarnya dari label untuk skor kepercayaan untuk setiap bbox ? Ini adalah persimpangan atas penyatuan kotak terikat yang diprediksi dengan yang dari label.C^ij
  • 1i01iobj adalah ketika ada objek di sel dan tempat lain1i0
  • ji1ij 1 n o o b j i j i1ijobj "menunjukkan bahwa prediktor kotak terikat ke- dalam sel bertanggung jawab atas prediksi itu". Dengan kata lain, itu sama dengan jika ada objek dalam sel dan kepercayaan dari prediktor sel ini adalah yang tertinggi di antara semua prediktor sel ini. hampir sama kecuali nilainya 1 ketika tidak ada objek di selji1ij1ijnoobji

Perhatikan bahwa saya menggunakan dua indeks dan untuk setiap prediksi bbox, ini tidak terjadi dalam artikel karena selalu ada faktor atau sehingga tidak ada interpretasi ambigus: dipilih adalah yang sesuai dengan skor kepercayaan tertinggi dalam sel itu.j 1 o b j i j 1 n o o b j i j jij1ijobj1ijnoobjj

Penjelasan yang lebih umum tentang setiap istilah jumlah:

  1. istilah ini menghukum pelokalan pusat sel yang buruk
  2. istilah ini menghukum kotak terikat dengan tinggi dan lebar inacurate. Root kuadrat hadir sehingga eror dalam kotak pembatas kecil lebih menghukum daripada kesalahan dalam kotak pembatas besar.
  3. istilah ini mencoba membuat skor kepercayaan sama dengan IOU antara objek dan prediksi ketika ada satu objek
  4. Berusaha membuat skor kepercayaan mendekati ketika tidak ada objek di dalam sel0
  5. Ini adalah kerugian klasifikasi sederhana (tidak dijelaskan dalam artikel)
pengguna7573566
sumber
1
Apakah poin kedua seharusnya B*(5+C)? Atleast itulah yang terjadi untuk YOLO v3.
sachinruk
@sachinruk ini mencerminkan perubahan dalam model antara YOLO asli dan v2 dan v3.
David Refaeli
12

λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]+i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21iobjcclasses(pi(c)p^i(c))2

Bukankah fungsi Kehilangan YOLOv2 terlihat menakutkan? Sebenarnya tidak! Ini adalah salah satu fungsi kehilangan paling berani dan paling cerdas di sekitar.

Pertama mari kita lihat apa yang diprediksi oleh jaringan.

Jika kami rekap, YOLOv2 memprediksi deteksi pada peta fitur 13x13, jadi secara total, kami memiliki 169 peta / sel.

Kami memiliki 5 kotak jangkar. Untuk setiap kotak jangkar, kita memerlukan Skor Keberatan-Keyakinan (apakah ada benda yang ditemukan?), 4 Koordinat ( dan ) untuk kotak jangkar, dan 20 kelas atas. Ini secara kasar dapat dilihat sebagai 20 koordinat, 5 skor kepercayaan, dan 100 probabilitas kelas untuk semua 5 prediksi kotak jangkar disatukan.tx,ty,tw,th

Kami memiliki beberapa hal yang perlu dikhawatirkan:

  • xi,yi , yang merupakan lokasi pusat massa dari kotak jangkar
  • wi,hi , yang merupakan lebar dan tinggi kotak jangkar
  • Ci , yang merupakan Objectness , yaitu skor kepercayaan apakah ada objek atau tidak, dan
  • pi(c) , yang merupakan klasifikasi kerugian.
  • Kita tidak hanya perlu melatih jaringan untuk mendeteksi suatu objek jika ada objek dalam sel, kita juga perlu menghukum jaringan, itu jika memprediksi objek dalam sel, ketika tidak ada. Bagaimana kita melakukan ini? Kami menggunakan mask ( dan ) untuk setiap sel. Jika pada awalnya ada objek adalah 1 dan sel-sel no-objek lainnya adalah 0. hanya kebalikan dari , di mana itu adalah 1 jika tidak ada objek di dalam sel dan 0 jika ada.𝟙iobj𝟙inoobj𝟙iobj𝟙inoobj𝟙iobj
  • Kita perlu melakukan ini untuk semua 169 sel, dan
  • Kita perlu melakukan ini 5 kali (untuk setiap kotak jangkar).

Semua kerugian adalah kesalahan kuadrat-rata , kecuali kerugian klasifikasi, yang menggunakan fungsi lintas-entropi .

Sekarang, mari kita pecahkan kode pada gambar.

  • Kita perlu menghitung kerugian untuk setiap Kotak Anchor (total 5)

    • j=0B mewakili bagian ini, di mana B = 4 (5 - 1, karena indeks dimulai dari 0)
  • Kita perlu melakukan ini untuk masing-masing sel 13x13 di mana S = 12 (karena kita mulai indeks dari 0)

    • i=0S2 mewakili bagian ini.
  • 𝟙ijobj adalah 1 ketika ada objek di dalam sel , kalau tidak 0.i

  • 𝟙ijnoobj adalah 1 ketika tidak ada objek di sel , itu 0.i
  • 𝟙iobj adalah 1 ketika diprediksi ada kelas tertentu, kalau tidak 0.
  • λs adalah konstanta. λ adalah yang tertinggi untuk koordinat untuk lebih fokus pada deteksi (ingat, di YOLOv2, pertama-tama kita melatihnya untuk pengakuan dan kemudian untuk deteksi, menghukum berat karena pengakuan adalah buang-buang waktu, alih-alih kita fokus untuk mendapatkan kotak pembatas terbaik!)
  • Kita juga dapat memperhatikan bahwa berada di bawah akar kuadrat. Ini dilakukan untuk menghukum kotak yang lebih kecil karena kita membutuhkan prediksi yang lebih baik pada objek yang lebih kecil daripada pada objek yang lebih besar (panggilan penulis). Lihatlah tabel di bawah ini dan amati bagaimana nilai-nilai yang lebih kecil dihukum lebih banyak jika kita mengikuti metode "akar kuadrat" (lihat titik belok ketika kita memiliki 0,3 dan 0,2 sebagai nilai input) (PS: Saya telah menjaga rasio var1 dan var2 sama hanya untuk penjelasan):wi,hi

        var1 | var2 | (var1 - var2) ^ 2 | (sqrtvar1 - sqrtvar2) ^ 2

        0,0300 | 0,020 | 9.99e-05 | 0,001

        0,0330 | 0,022 | 0,00012 | 0,0011

        0,0693 | 0,046 | 0,000533 | 0,00233

        0,2148 | 0,143 | 0,00512 | 0,00723

        0,3030 | 0,202 | 0,01 | 0,01

        0.8808 | 0,587 | 0,0862 | 0,0296

        4.4920 | 2.994 | 2.2421 | 0,1512

Tidak seram itu, benar!

Baca DI SINI untuk detail lebih lanjut.

RShravan
sumber
1
Haruskah i dan j in \ sum mulai dari 1 bukannya 0?
webbertiger
1
Ya, itu webertiger yang benar, telah memperbarui jawabannya. Terima kasih!
RShravan
Bukankah 1 ketika ada objek di sel i dari kotak pembatas j? dan tidak untuk semua j? bagaimana kita memilih j mana yang diatur menjadi satu dan sisanya menjadi nol. yaitu apa skala / jangkar yang benar di mana dihidupkan. 1ijobj
sachinruk
1
Saya percaya S harus tetap 13 tetapi jika penjumlahan dimulai pada 0 itu harus diakhiri denganS21
Julian
3
@RShravan, Anda berkata: "Semua kerugian adalah kesalahan kuadrat-rata, kecuali kerugian klasifikasi, yang menggunakan fungsi lintas-entropi". Bisakah Anda jelaskan? Dalam persamaan ini, juga terlihat sebagai MSE. Terima kasih sebelumnya
Julian
3

Fungsi kerugian Anda adalah untuk YOLO v1 dan bukan YOLO v2. Saya juga bingung dengan perbedaan dalam dua fungsi kerugian dan sepertinya banyak orang adalah: https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk

Makalah YOLOv2 menjelaskan perbedaan arsitektur dari YOLOv1 sebagai berikut:

Kami menghapus lapisan yang sepenuhnya terhubung dari YOLO (v1) dan menggunakan kotak jangkar untuk memprediksi kotak yang terikat ... Ketika kami pindah ke kotak jangkar, kami juga memisahkan mekanisme prediksi kelas dari lokasi spasial dan sebagai gantinya memprediksi kelas dan objek untuk setiap kotak jangkar.

Ini berarti bahwa probabilitas kepercayaan atas harus bergantung tidak hanya pada dan tetapi juga indeks kotak jangkar, katakanlah . Karena itu, kerugiannya harus berbeda dari yang di atas. Sayangnya, kertas YOLOv2 tidak secara eksplisit menyatakan fungsi kerugiannya.pi(c)icj

Saya mencoba menebak fungsi kehilangan YOLOv2 dan membahasnya di sini: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html

FairyOnIce
sumber
1

Ini Catatan Belajar saya

  1. Fungsi kerugian: jumlah kesalahan kuadrat

    Sebuah. Alasan: Mudah dioptimalkan b. Masalah: (1) Tidak sejajar dengan tujuan kami untuk memaksimalkan presisi rata-rata. (2) Di setiap gambar, banyak sel kotak tidak mengandung objek apa pun. Ini mendorong skor kepercayaan sel-sel tersebut ke 0, seringkali mengalahkan gradien dari sel yang memang mengandung objek. c. Solusi: tingkatkan kerugian dari prediksi kotak terikat dan kurangi kerugian dari prediksi kepercayaan dari kotak yang tidak mengandung objek. Kami menggunakan dua parameter dan = 0,5 d. Sum-kuadrat kesalahan juga sama-sama bobot kesalahan dalam kotak besar dan kotak kecil

    λcoord=5
    λnoobj

  2. Hanya satu kotak berlari yang harus bertanggung jawab untuk setiap obejct. Kami menetapkan satu prediktor untuk bertanggung jawab dalam memprediksi objek berdasarkan prediksi mana yang memiliki IOU tertinggi saat ini dengan kebenaran dasar.

Sebuah. Kehilangan dari koordinat kotak terikat (x, y) Perhatikan bahwa kerugian berasal dari satu kotak pembatas dari satu sel kisi. Bahkan jika obj tidak di sel jaringan sebagai kebenaran dasar.

{λcoordi=0S2[(xix^i)2+(yiyi^)2]responsible bounding box0 other

b. Kehilangan lebar w dan tinggi h. Perhatikan bahwa kerugian berasal dari satu kotak pembatas dari satu sel kotak, bahkan jika objek tidak dalam sel kotak sebagai kebenaran dasar.

{λcoordi=0S2[(wiw^i)2+(hih^i)2]responsible bounding box0 other

c. Kehilangan kepercayaan diri di setiap kotak terikat. Bukan berarti kerugian berasal dari satu kotak pembatas dari satu cel grid, bahkan jika objek tidak dalam sel grid sebagai kebenaran dasar.

{i=0S2(CiC^i)2obj in grid cell and responsible bounding boxλnoobji=0S2(CiC^i)2obj not in grid cell and responsible bounding box0other
d. Kehilangan dari probabilitas kelas sel jaringan , hanya ketika objek berada di sel jaringan sebagai kebenaran dasar.

{i=0S2cclasses(pi(c)p^i(c))2obj in grid cell0other

Fungsi kerugian hanya menghukum klasifikasi jika obj ada dalam sel grid. Ini juga menghukum koordinat kotak pembatas jika kotak itu bertanggung jawab atas kotak dasar (IOU tertinggi)

Roy
sumber
Pertanyaan tentang 'C', di koran, kepercayaan adalah nilai objek-atau-tidak ada yang dihasilkan dikalikan dengan IOU; apakah itu hanya untuk waktu ujian atau apakah yang digunakan untuk fungsi biaya pelatihan juga? Saya pikir kami hanya mengurangi nilai C dari output dan label (seperti yang kami lakukan dengan nilai kisi), tetapi itu tidak benar?
moondra
0

Rumus kehilangan yang Anda tulis adalah kehilangan kertas YOLO asli , bukan kerugian v2, atau v3.

Ada beberapa perbedaan utama antar versi. Saya sarankan membaca surat kabar, atau memeriksa implementasi kode. Makalah: v2 , v3 .

Beberapa perbedaan utama yang saya perhatikan:

  • Probabilitas kelas dihitung per kotak pembatas (karenanya output sekarang S ∗ S ∗ B * (5 + C) bukan S S (B * 5 + C))

  • Koordinat kotak batas sekarang memiliki representasi yang berbeda

  • Di v3 mereka menggunakan 3 kotak di 3 "skala" yang berbeda

Anda dapat mencoba masuk ke detail seluk-beluk kerugian, baik dengan melihat implementasi python / keras v2 , v3 (mencari fungsi yolo_loss) atau langsung di c implementasi v3 (mencari delta_yolo_box, dan delta_yolo_class).

David Refaeli
sumber