Yolo Loss fonksiyon açıklaması


16

Yolo v2 kaybı işlevini anlamaya çalışıyorum:

λ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

Herhangi bir kişi işlevi detaylandırabilirse.


5
kimse bağlamsız size yardım edemez ... en azından bize bunun hangi kağıttan geldiğini söyle.
bdeonovic

1
"Anlamıyorum" ve "işlevi detaylandırma" aşırı geniş. Lütfen belirli soruları belirlemeye çalışın. Yolo ile ilgili çok sayıda soru olduğunu ve bunların bazılarının aradığınız şeyin en azından bir kısmını sağlayabileceğini unutmayın
Glen_b -Restate Monica

1
Bu mükemmel açıklamadan net olmayan şeylere işaret ederseniz cevabımı eklerim
Aksakal

1
Bu blogda burada yolo ve yolov2 hakkında ayrıntılı bir grafik açıklama var. Kayıp fonksiyonu ile ilgili soruyu cevaplar. Eğer yeni başlayanlar ve daha ileri düzey kullanıcılar için çok yararlı.
MBoaretto

Yanıtlar:


18

Farklı terimlerin açıklaması:

  • 3 sabitleri, kayıp işlevinin daha fazla bir yönünü hesaba katacak sabitlerdir. Makalede λ c O O r d , ilk dönemde daha fazla önem sahip olmak için en yüksek olduğuλλcoord
  • YOLO tahmini bir vektörüdür: Her ızgara hücresi için B bbox tahminleri ve her ızgara hücresi için C sınıfı tahmini (burada C sınıf sayısıdır). İ hücresinin j kutusunun 5 bbox çıkışı, bbox x i j y i j , yükseklik h i j , genişlik w i j ve güven endeksi C i j'nin tte merkezinin koordinatlarıdırSS(B5+C)BCCxij yijhijwijCij
  • Şapkalı değerlerin etiketten okunan gerçek ve şapkasız olanın tahmin edilenler olduğunu hayal ediyorum. Yani her BBOX için güven puan için etiketten gerçek değeri nedir C i j ? Öngörülen sınırlama kutusunun etiketten biriyle kesişmesidir.C^ij
  • ,ive0hücrelerindebaşka bir yerdebir nesne olduğunda1'dir1iobj1i0
  • "ihücresindekij.Sınırlayıcı kutu öngörücüsününbu tahminden sorumlu olduğunu belirtir". Başka bir deyişle,ihücresinde bir nesne varsa1'eeşittirvebu hücreninjinci belirleyicileriningüveni, bu hücrenin tüm tahmincileri arasında en yüksektir. 1 n o o b j i j ,ihücresinde NO nesnesi olmadığında 1 değeri dışında neredeyse aynıdır1ijobjji1ij1ijnoobji

Her bbox tahminleri için iki indeks ve j kullandığımı unutmayın , bu makalede geçerli değildir, çünkü her zaman 1 o b j i j veya 1 n o o b j i j faktörü vardır, bu nedenle belirsiz bir yorum yoktur: j seçilen o hücrede yüksek güven puanı tekabül biridir.ij1ijobj1ijnoobjj

Toplamın her bir teriminin daha genel açıklaması:

  1. bu terim, hücre merkezinin kötü lokalizasyonunu cezalandırır
  2. bu terim sınırlayıcı kutuyu yanlış yükseklik ve genişlikle cezalandırır. Kare kök, küçük sınırlayıcı kutulardaki erors'ların büyük sınırlayıcı kutulardaki hatalardan daha cezalandırıcı olması için mevcuttur.
  3. bu terim, güven skorunu nesne ile bir nesne olduğunda tahmin arasındaki IOU'ya eşit yapmaya çalışır.
  4. Hücrede hiçbir nesne olmadığında yakın güven skoru yapmaya çalışır0
  5. Bu basit bir sınıflandırma kaybıdır (makalede açıklanmamıştır)

1
İkinci nokta olmalı B*(5+C)mı? En azından YOLO v3 için durum böyle.
sachinruk

@sachinruk bu, orijinal YOLO ile v2 ve v3 arasındaki modeldeki değişiklikleri yansıtır.
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

YOLOv2 Kaybı işlevi korkutucu görünmüyor mu? Aslında değil! Çevresindeki en cesur, en akıllı kayıp işlevlerinden biridir.

İlk olarak ağın gerçekte ne öngördüğüne bakalım.

Özetlersek, YOLOv2 13x13 özellik haritasında tespitleri tahmin eder, bu yüzden toplamda 169 harita / hücremiz var.

tx,ty,tw,th

Endişelenecek birkaç şey var:

  • xi,yi
  • wi,hi
  • Ci
  • pi(c)
  • 𝟙iobj𝟙inoobj𝟙iobj𝟙inoobj𝟙iobjBu, 1 olduğu takdirde orada bir nesne olup olmadığını hücrede ve 0.
  • Bunu 169 hücrenin tamamı için yapmamız gerekiyor ve
  • Bunu 5 kez yapmalıyız (her bir bağlantı kutusu için).

Çapraz entropi fonksiyonunu kullanan sınıflandırma kaybı hariç tüm kayıplar ortalama karelerdeki hatalardır .

Şimdi görüntüdeki kodu kıralım.

  • Her bir Anchor Box için kayıpları hesaplamamız gerekiyor (toplamda 5)

    • j=0B
  • Bunu S = 12 olan 13x13 hücrenin her biri için yapmamız gerekiyor (endeksi 0'dan başlattığımız için)

    • i=0S2
  • 𝟙ijobji

  • 𝟙ijnoobji
  • 𝟙iobj
  • λ'lar sabittir. λ, daha fazla algılamaya odaklanmak için koordinatlar için en yüksektir (unutmayın, YOLOv2'de önce tanıma için eğitiyoruz ve daha sonra algılama için tanıma için ağır cezalandırma zaman kaybıdır, en iyi sınırlayıcı kutuları almaya odaklanıyoruz!)
  • 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

Korkutucu değil, değil mi?

Daha fazla bilgi için BURAYI okuyun .


1
\ Sum içindeki i ve j 0 yerine 1'den başlamalı mı?
webbertiger

1
Evet, bu doğru webertiger, cevabı buna göre güncelledi. Teşekkürler!
RShravan

1ijobj

1
S21

4
@RShravan, diyorsunuz ki: "Çapraz entropi fonksiyonunu kullanan sınıflandırma kaybı hariç, tüm kayıplar ortalama kare hatalarıdır". Açıklayabilir misiniz? Bu denklemde MSE olarak da görünüyor. Şimdiden teşekkürler
Julian

3

Kayıp fonksiyonunuz YOLO v1 için değil, YOLO v1 içindir. Ayrıca iki kayıp fonksiyonundaki farkla karıştırıldım ve birçok insan gibi görünüyor: https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk

YOLOv2 makalesi, YOLOv1'den mimarideki farkı şu şekilde açıklıyor:

Tamamen bağlı katmanları YOLO'dan (v1) kaldırır ve sınırlayıcı kutuları tahmin etmek için bağlantı kutuları kullanırız ... Bağlantı kutularına geçtiğimizde, sınıf tahmin mekanizmasını mekansal konumdan ayırırız ve bunun yerine her bağlantı kutusu için sınıf ve nesneyi tahmin ederiz.

pi(c)icj

YOLOv2'nin kayıp işlevini tahmin etmeye ve burada tartışmaya çalışıyorum: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html


1

İşte Eğitim Notum

  1. Kayıp fonksiyonu: toplam kare hatası

    λcoord=5
    λnoobj

  2. Her obejct için sadece bir sınırlayıcı kutu sorumlu olmalıdır. Bir öngörücüyü, temel öngörüyle en yüksek akım IOU'suna sahip bir nesneyi tahmin etmekten sorumlu olacak şekilde atarız.

a. Sınırlı kutu koordinatından kayıp (x, y) Kaybın bir ızgara hücresinden bir sınırlayıcı kutudan geldiğini unutmayın. Nesne ızgara hücresinde yer gerçeği olarak olmasa bile.

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

b. Genişlik w ve yükseklik h'den kayıp. Nesne, ızgara hücresinde zemin gerçekliği olarak olmasa bile, kaybın bir ızgara hücresinden bir sınırlayıcı kutudan geldiğini unutmayın.

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

c. Her bağlı kutuya olan güven kaybı. Nesne, ızgara hücresinde zemin gerçeği olarak olmasa bile, kaybın bir ızgara hücresinden bir sınırlayıcı kutudan geldiği anlamına gelmez.

{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

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

Kayıp fonksiyonu sadece ızgara hücresinde obj varsa sınıflandırmayı cezalandırır. Ayrıca, bu kutunun zemin kutusundan sorumlu olması durumunda sınırlayıcı kutu koordinatını da cezalandırır (en yüksek IOU)


Makalede 'C' ile ilgili soru, güven, IOU ile çarpılan nesne ya da hiç nesne değerinin çarpımıdır; Bu sadece test süresi için mi yoksa eğitim maliyeti işlevi için de mi kullanılıyor? Ben sadece çıktı ve etiket (sadece ızgara değerleri ile yaptığımız gibi) C değerini çıkarmak düşündüm, ama bu yanlış mı?
moondra

0

Yazdığınız kayıp formülü , v2 veya v3 kaybından değil , orijinal YOLO kağıt kaybından kaynaklanır.

Sürümler arasında bazı büyük farklılıklar vardır. Makaleleri okumanızı veya kod uygulamalarını kontrol etmenizi öneririm. Makaleler: v2 , v3 .

Fark ettiğim bazı büyük farklılıklar:

  • Sınıf olasılık sınırlayıcı kutusu başına hesaplanan (ve bu nedenle çıkış şimdi S'dir * S * B * yerine S (+ 5 ° C) S (B * 5 + C))

  • Sınırlayıcı kutu koordinatları artık farklı bir temsile sahip

  • V3'te 3 farklı "ölçek" boyunca 3 kutu kullanırlar

Sen kaybının asıl mesele ayrıntılarına girmeden deneyebilirsiniz, ya piton bakarak / uygulama keras v2 , v3 (fonksiyon yolo_loss için göz) veya doğrudan c uygulaması en v3 (delta_yolo_box için görünüm ve delta_yolo_class).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.