Yolo Loss 기능 설명


16

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

사람이 기능을 자세히 설명 할 수 있다면.


5
상황에 상관없이 아무도 당신을 도울 수 없습니다 ... 적어도이 논문의 출처를 알려주십시오.
bdeonovic

1
"이해하지 못함"및 "기능에 대한 세부 사항"이 지나치게 광범위합니다. 특정 질문을 식별하십시오. Yolo와 관련하여 이미 수많은 질문 이 있으며 그 중 일부는 귀하가 찾는 것의 적어도 일부를 제공 할 수 있습니다.
Glen_b -Reinstate Monica

1
이 훌륭한 설명에서 명확하지 않은 점을 지적한 경우 답변을 추가하겠습니다. medium.com/@jonathan_hui/…
Aksakal

1
이 블로그에서 여기 욜로 및 yolov2의 상세한 그래픽 설명이 있습니다. 손실 함수에 관한 질문에 대답합니다. Ifind는 초보자와 고급 사용자에게 매우 유용합니다.
MBoaretto

답변:


18

다른 용어에 대한 설명 :

  • 3 상수는 손실 함수의 한 가지 측면을 더 고려하기위한 상수입니다. 기사에서 첫 번째 항에서 더 많은 중요성을하기 위해 가장 높은λ c o o r dλλcoord
  • YOLO의 예측은 벡터입니다. 각 그리드 셀에 대한 bbox 예측 및 각 그리드 셀에 대한 클래스 예측 (여기서 는 클래스 수). 셀 i의 상자 j의 5 개의 bbox 출력은 bbox 의 높이 중심, 높이 , 너비 및 신뢰 지수B C C는 X I , J를 Y J H I J w I J C I JSS(B5+C)BCCxij yijhijwijCij
  • 모자가있는 값은 레이블에서 읽은 실제 값이고 모자가없는 값은 예측 된 값이라고 생각합니다. 따라서 각 bbox 에 대한 신뢰 점수 레이블의 실제 값은 얼마입니까? 예측 된 경계 상자와 레이블의 경계 상자가 합쳐진 교차점입니다.C^ij
  • 1i01iobj 인 셀 내의 오브젝트가 있으면 과 다른1i0
  • ji1ij1ijobj " 셀 의 번째 경계 상자 예측자가 해당 예측을 담당 함을 나타냅니다." 즉, 셀 객체가 있고이 셀 의 번째 예측 변수에 대한 신뢰도 가이 셀의 모든 예측 변수 중에서 가장 높은 경우에는 과 같습니다 . 는 셀 객체가 없을 때 값 1을 제외하고 거의 동일합니다.ji1ij i1ijnoobji

각 bbox 예측에 대해 두 개의 인덱스 와 를 사용 했습니다. 항상 또는 요소가 있기 때문에이 기사에서는 그렇지 않습니다. 이므로 해석이 없습니다. 선택한 는 해당 셀에서 가장 높은 신뢰 점수에 해당하는 것입니다.j 1 o b j i j 1 n o o b j i j jij1ijobj1ijnoobjj

합계의 각 항에 대한보다 일반적인 설명 :

  1. 이 용어는 세포 중심의 나쁜 위치를 불이익
  2. 이 용어는 바운딩 박스에 부정확 한 높이와 너비를가합니다. 제곱근이 존재하므로 작은 경계 상자의 오류가 큰 경계 상자의 오류보다 더 불이익을줍니다.
  3. 이 용어는 하나의 물체가있을 때 물체와 예측 사이의 신뢰 점수를 IOU와 동일하게 만들려고합니다.
  4. 셀에 객체가 없을 때 신뢰 점수가 가까워 지려고 시도합니다.0
  5. 이것은 단순한 분류 손실입니다 (기사에서 설명하지 않음)

1
두 번째 요점은 B*(5+C)? 이것이 YOLO v3의 경우입니다.
sachinruk

@sachinruk 이것은 원래 YOLO와 v2와 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

YOLOv2 Loss 기능이 무섭지 않습니까? 실제로는 아닙니다! 그것은 가장 대담하고 똑똑한 손실 기능 중 하나입니다.

먼저 네트워크가 실제로 예측하는 것을 살펴 보겠습니다.

요약하면 YOLOv2는 13x13 기능 맵에서 탐지를 예측하므로 총 169 개의 ​​맵 / 셀이 있습니다.

앵커 박스가 5 개 있습니다. 각 앵커 박스에 대해 우리는 Objectness-Confidence Score (객체가 발견되었는지 여부), 앵커 박스에 대한 4 개의 좌표 ( 및 ) 및 20 개의 최상위 클래스가 필요합니다. 이것은 5 개의 앵커 박스 예측 모두에 대해 20 개의 좌표, 5 개의 신뢰 점수 및 100 개의 클래스 확률로 대략적으로 볼 수 있습니다.tx,ty,tw,th

우리는 걱정할 것이 거의 없습니다 :

  • xi,yi앵커 박스의 중심 위치 인
  • wi,hi앵커 박스의 너비와 높이 인
  • Ci , 즉 Objectness , 즉 객체 유무에 대한 신뢰 점수
  • pi(c) 는 분류 손실입니다.
  • 셀에 오브젝트가있는 경우 오브젝트를 감지하도록 네트워크를 훈련시킬 필요가있을뿐만 아니라 셀에 오브젝트가있을 때이를 예측할 경우 네트워크를 처벌해야합니다. 우리는 이것을 어떻게합니까? 각 셀에 마스크 ( 및 )를 사용합니다. 원래 오브젝트 가 1이고 다른 오브젝트가없는 셀이 0 인 경우 는 역수이며 여기서 1 경우 가 없었다 어떤 객체 셀이 0이 있다면.𝟙iobj𝟙inoobj𝟙iobj𝟙inoobj𝟙iobj
  • 모든 169 개의 ​​셀에 대해이 작업을 수행해야합니다.
  • 우리는 이것을 각 앵커 박스마다 5 번해야합니다.

교차 엔트로피 기능 을 사용하는 분류 손실을 제외한 모든 손실은 평균 제곱 오차 입니다.

이제 이미지의 코드를 깨 뜨리겠습니다.

  • 각 앵커 박스의 손실을 계산해야합니다 (총 5 개)

    • j=0B 는이 부분을 나타내며, 여기서 B = 4 (인덱스가 0부터 시작하므로 5-1)
  • S = 12 인 각 13x13 셀에 대해이 작업을 수행해야합니다 (0부터 색인을 시작하므로)

    • i=0S2 는이 부분을 나타냅니다.
  • 𝟙ijobj셀 객체가 있으면 는 1 이고 그렇지 않으면 0입니다.i

  • 𝟙ijnoobj셀 객체가 없으면 는 1 , 그렇지 않으면 0입니다.i
  • 𝟙iobj 는 특정 클래스가 예측 될 때 1이고, 그렇지 않으면 0입니다.
  • λ는 상수입니다. λ는 탐지에 더 초점을 맞추기 위해 좌표에 대해 가장 높습니다 (YOLOv2에서는 먼저 인식을 위해 훈련 한 다음 탐지를 위해 불이익을받는 것은 시간 낭비가 아니라 최상의 경계 상자를 얻는 데 중점을 둡니다).
  • 또한 가 제곱근 아래 있음을 알 수 있습니다 . 작은 개체에 대한 더 나은 예측이 필요하기 때문에 작은 경계 상자에 불이익을주기 위해 수행됩니다 (작가의 호출). 아래 표를 확인하고 "제곱근"방법을 따르는 경우 더 작은 값이 더 많이 처벌되는 방법을 관찰하십시오 (입력 값으로 0.3 및 0.2가있을 때 변곡점을보십시오) (PS : var1의 비율을 유지했습니다. var2는 설명을 위해 동일합니다) :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

그 무서운 아니에요!

자세한 내용은 여기 를 읽으 십시오 .


1
\ sum의 i와 j가 0 대신 1부터 시작해야합니까?
webbertiger

1
예, 올바른 웨버 타이거이며 이에 따라 답변을 업데이트했습니다. 감사!
RShravan

밤은 1 박스 J 경계의 셀 I의 목적은 무엇입니까? 그리고 모든 j를 위해? 어떤 j를 1로 설정하고 나머지는 0으로 설정합니까? 즉, 켜져있는 정확한 스케일 / 앵커는 무엇입니까? 1ijobj
sachinruk

1
나는 S는 여전히 13 있어야한다고 생각하지만 합계가 0에서 시작하는 경우가로 끝나야S21
줄리안

3
@RShravan은 다음과 같이 말합니다. "교차 엔트로피 기능을 사용하는 분류 손실을 제외한 모든 손실은 평균 제곱 오차입니다." 설명해 주시겠습니까? 이 방정식에서는 MSE로 보입니다. 미리 감사드립니다
Julian

3

손실 함수는 YOLO v2가 아니라 YOLO v1에 대한 것입니다. 또한 두 손실 기능의 차이점과 혼동되어 많은 사람들이 다음과 같이 보입니다. https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk

YOLOv2 논문은 다음과 같이 YOLOv1과의 아키텍처 차이를 설명합니다.

YOLO (v1)에서 완전히 연결된 레이어를 제거하고 앵커 박스를 사용하여 경계 상자를 예측합니다. 앵커 박스로 이동할 때 클래스 예측 메커니즘을 공간 위치에서 분리하고 대신 모든 앵커 박스의 클래스와 객체를 예측합니다.

이것은 위 의 신뢰 확률 는 와 뿐만 아니라 앵커 박스 인덱스, 즉 에 의존해야 함을 의미합니다 . 따라서 손실은 위와 달라야합니다. 불행히도, YOLOv2 용지는 손실 기능을 명시 적으로 언급하지 않습니다.pi(c)icj

나는 YOLOv2의 손실 함수를 추측하고 여기에서 논의하려고합니다 : https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html


1

여기 내 연구 노트입니다

  1. 손실 함수 : 합계 제곱 오차

    ㅏ. 이유 : 최적화가 용이함 b. 문제 : (1) 평균 정밀도 극대화 목표와 완벽하게 일치하지 않습니다. (2) 모든 이미지에서 많은 그리드 셀에는 객체가 포함되어 있지 않습니다. 이렇게하면 해당 셀의 신뢰도 점수가 0으로 밀리고 종종 객체를 포함하는 셀의 그라데이션을 압도합니다. 씨. 솔루션 : 경계 상자 좌표 예측으로 인한 손실을 늘리고 객체를 포함하지 않은 상자에서 신뢰 예측으로 인한 손실을 줄입니다. 와 = 0.5의 두 매개 변수를 사용 합니다. 큰 상자와 작은 상자의 합계 제곱 오류도 같은 가중치 오류

    λcoord=5
    λnoobj

  2. 각 개체마다 하나의 경계 상자 만 담당합니다. 우리는 어떤 예측이 기본 진실과 현재 IOU가 가장 높은지를 기반으로 개체를 예측할 책임을 지도록 하나의 예측자를 지정합니다.

ㅏ. 경계 상자 좌표 손실 (x, y) 손실은 하나의 그리드 셀에서 하나의 경계 상자에서 발생합니다. obj가 그리드 셀에 있지 않은 경우에도 마찬가지입니다.

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

비. 너비 w 및 높이 h에서 손실 오브젝트가 그리드 셀에없는 경우에도 손실은 하나의 그리드 셀에서 하나의 경계 상자에서 발생합니다.

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

씨. 각 바운드 박스에 대한 신뢰 상실. 객체가 그리드 셀에 접지 사실이 아니더라도 하나의 그리드 셀에서 하나의 경계 상자에서 손실이 발생하는 것은 아닙니다.

{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. 그리드 셀 의 클래스 확률에서 손실. 오브젝트가 그리드 셀 에있는 경우에만 지상 진실.

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

손실 함수는 격자 셀에 obj가있는 경우에만 분류에 불이익을줍니다. 또한 해당 상자가 접지 상자 (최고 IOU)를 담당하는 경우 경계 상자 좌표에 불이익을줍니다.


논문에서 'C'에 대한 질문은 신뢰도는 IOU에 곱하여 출력 된 객체 또는 객체가없는 객체 값입니다. 테스트 시간에만 해당됩니까, 아니면 교육 비용 기능에도 사용됩니까? 출력과 레이블에서 C 값을 빼는 것만 생각했습니다 (그리드 값과 마찬가지로). 정확하지 않습니까?
moondra

0

작성한 손실 공식 은 v2 또는 v3 손실이 아닌 원래 YOLO 용지 손실입니다.

버전 간에는 몇 가지 주요 차이점이 있습니다. 논문을 읽거나 코드 구현을 확인하는 것이 좋습니다. 논문 : v2 , v3 .

내가 알아 차린 몇 가지 주요 차이점 :

  • 바운딩 박스당 클래스 확률이 계산되므로 출력은 이제 S S (B * 5 + C) 대신 S * S * B * (5 + C )입니다.

  • 경계 상자 좌표가 이제 다른 표현을 갖습니다.

  • v3에서는 3 가지 "스케일"에 걸쳐 3 개의 상자를 사용합니다.

python / keras 구현 v2 , v3 (yolo_loss 함수 찾기) 또는 c 구현 v3 (delta_yolo_box 및 delta_yolo_class 찾기) 을 통해 손실에 대한 세부 정보를 얻을 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.