【无标题】

yolo loss.py损失函数

  • 损失函数
    • BCEBlurWithLogistsLoss()
    • 交叉熵损失函数+sigmoid操作
    • FocalLoss()
    • QFocalLoss()

损失函数

BCEBlurWithLogistsLoss()

  • 交叉熵损失函数+sigmoid操作

    C E ( y ^ , y ) = { − ln ⁡ y ^ i f   y = 1 − ln ⁡ ( 1 − y ^ ) i f   y = 0 CE(\hat{y},y)= \begin{cases} -\ln \hat{y} && if \ y=1 \\ -\ln (1-\hat{y}) && if \ y=0 \end{cases} CE(y^,y)={lny^ln(1y^)if y=1if y=0
    C E ( y ^ , y ) = − ∑ i = 1 n [ y i ⋅ ln ⁡ σ ( y i ^ ) + ( 1 − y i ) ⋅ ln ⁡ ( 1 − σ ( y i ^ ) ) ] 其 中 y i ^ ϵ ( 0 , 1 ) , y i ϵ { 0 , 1 } CE(\hat{y},y)=-\sum_{i=1}^n \big [y_i \sdot \ln \sigma (\hat{y_i})+(1-y_i) \sdot \ln (1- \sigma (\hat{y_i})) \big ] \\其中 \\\hat{y_i}\epsilon (0,1),y_i \epsilon \{0,1\} CE(y^,y)=i=1n[yilnσ(yi^)+(1yi)ln(1σ(yi^))]yi^ϵ(0,1),yiϵ{0,1}

    y i y_i yi是1的时根据 y i ⋅ ln ⁡ ( y i ^ ) y_i\sdot\ln(\hat{y_i}) yiln(yi^) y i ^ \hat{y_i} yi^ 越接近0损失越大
    例如
    当预测结果向量为[0.5,0.8,1],标签为[1,0,0]
    则损失向量为 [ ln ⁡ 0.5 , ln ⁡ 0.2 , 0 ] [\ln{0.5},\ln{0.2},0] [ln0.5,ln0.2,0]

    • σ ( x ) \sigma(x) σ(x)函数 1 1 − 1 e x 1\over 1-{1 \over e^x} 1ex11
      值域[0,1]用来计算概率

    • @parameters reduction

      • ‘none’ 返回没有处理过的损失向量
      • ‘meam’ 返回损失向量的平均值
      • ‘sum’ 返回损失向量的求和
    • @return C E ( y ^ , y ) CE(\hat{y},y) CE(y^,y)

    • 类内相关函数

      • forward()
        • @return L ⋅ ( 1 − e σ ( y − y ^ ) α − ξ ) L\sdot (1-{e^{\sigma(y-\hat{y})} \over \alpha - \xi}) L(1αξeσ(yy^))其中 ξ \xi ξ = 0.00001

FocalLoss()

  • 在损失函数中添加权重因子,平衡正负类的损失函数分布
    • F L ( y ^ ) = { − ( 1 − y ^ ) γ ln ⁡ y ^ i f   y = 1 − y ^ γ ln ⁡ ( 1 − y ^ ) i f   y = 0 FL(\hat{y})= \begin{cases} -(1-\hat{y})^{\gamma}\ln \hat{y} && if \ y=1\\ -\hat{y}^{\gamma}\ln (1-\hat{y}) && if \ y=0 \end{cases} FL(y^)={(1y^)γlny^y^γln(1y^)if y=1if y=0
      解决难易样本分类的问题
         ⟺    P ( y , y ^ ) ⋅ C E ( y , y ^ ) 其 中 P ( y , y ^ ) = { ( 1 − y ^ ) γ i f   y = 1 y ^ γ i f   y = 0 \iff P(y,\hat{y})\sdot CE(y,\hat{y})\\ 其中P(y,\hat{y})=\begin{cases} (1-\hat{y})^{\gamma} && if \ y=1 \\ \hat{y}^{\gamma} && if \ y= 0 \end{cases} P(y,y^)CE(y,y^)P(y,y^)={(1y^)γy^γif y=1if y=0
      a t ( y ^ , y ) = { α i f   y = 1 1 − α i f   y = 0 at(\hat{y},y)= \begin{cases} \alpha && {if \ y=1}\\ 1-\alpha && {if \ y=0} \end{cases} at(y^,y)={α1αif y=1if y=0

      平衡正负样本的系数

      • y ^ \hat{y} y^ 反应与类别 y y y 的接近程度越接近y分类越准确

      • 优点 :

        • 即相比交叉熵损失,focal loss对于分类不准确的样本,损失没有改变,对于分类准确的样本,损失会变小。 整体而言,相当于增加了分类不准确样本在损失函数中的权重。
        • 从样本分类难易程度出发,使loss聚焦于难分样本。
      • forward()

        • @return F L ( y ^ , y ) ⋅ a t ( y ) FL(\hat{y},y) \sdot at(y) FL(y^,y)at(y)

QFocalLoss()

  • quality focal loss 为解决平滑标签 y ϵ ( 0 , 1 ) y \epsilon(0,1) yϵ(0,1) 引申的损失函数

    • f ( y ^ , y ) = − a t ( y ) ⋅ ∣ y − σ ∣ γ ⋅ [ ( 1 − y ) ln ⁡ ( 1 − σ ) + y ⋅ ln ⁡ σ ] f(\hat{y},y)=-at(y) \sdot |y- \sigma |^{\gamma} \sdot[(1-y)\ln (1-\sigma)+y \sdot \ln \sigma] f(y^,y)=at(y)yσγ[(1y)ln(1σ)+ylnσ]
      • a t ( y ) = [ y ⋅ α + ( 1 − y ) ⋅ ( 1 − α ) ] at(y)=[y \sdot \alpha +(1-y) \sdot (1-\alpha)] at(y)=[yα+(1y)(1α)]
        原理同上

你可能感兴趣的:(人工智能,深度学习)