语义分割中的损失

语义分割中的损失

Lov´asz-Softmaxloss

Submodularity and the Lovász extension
推荐阅读:https://sudeepraja.github.io/Submodular/

  • submodularity
    submodular实际上就对“边际效用递减”这个说法的形式化。
    [ n ] = { 1 , 2 , . . , n } [n]=\left\{1,2,..,n \right\} [n]={1,2,..,n}, [ n ] [n] [n]所有的子集为 2 [ n ] 2^{[n]} 2[n], 定义一个 f : 2 [ n ] → R f: 2^{[n]}\rightarrow R f:2[n]R, 如果它满足对于所有的集合 S S S, T ⊂ [ n ] T\subset \left[ n\right] T[n], 则对于所有的元素 T ⊂ [ n ] T\subset \left[ n\right] T[n],都有
    在这里插入图片描述
    也等价于定义一个 f : 2 [ n ] → R f: 2^{[n]}\rightarrow R f:2[n]R, 如果它满足对于所有的集合 S S S, T ⊂ [ n ] T\subset \left[ n\right] T[n]
    在这里插入图片描述
  • Lovász extension
    Lovász extension是一种非常有用的构造,可用于submodularity最小化。 次模函数的Lovász extension始终是凸的,可以有效地使其最小化。 Lovász extension的最小值可用于查找子模函数的最小值。
    给一个次模函数 f : H n → R f: H_{n}\rightarrow R f:HnR, 它的 Lovász extension是 f ^ : K n → R \widehat {f}:K_{n}\rightarrow \mathbb{R} f :KnR定义为
    在这里插入图片描述
    S i : ϕ = S 0 ⊂ S 1 ⊂ S 2 . . . ⊂ S n = [ n ] S_i: \phi = S_0\subset S_1\subset S_2...\subset S_n = [n] Si:ϕ=S0S1S2...Sn=[n] 是这样的一个链, 其中 ∑ i = 0 n λ i X i = x \sum ^{n}_{i=0}\lambda _{i}X_i=x i=0nλiXi=x, ∑ i = 0 n λ i = 1 \sum^{n}_{i=0}\lambda_{i}=1 i=0nλi=1
    这样的定义并没有告诉我们怎么确定这一个链。也没有告诉我们怎么求 λ i \lambda_i λi
    H n H_n Hn这样一个超立方体中,有 n ! n! n!个不同的最短路径,从 0 n → 1 n 0_n\rightarrow 1_n 0n1n 0 n 0_n 0n代表全为0的向量 , 1 n 1_n 1n为全为1的向量。令 P = [ 0 n = X 0 , X 1 , X 2 , . . . , X n = 1 n ] P=[0_n=X_0,X_1,X_2,...,X_n=1_n] P=[0n=X0,X1,X2,...,Xn=1n]代表一个路径, C p C_p Cp P P P中凸包部分的点。对于每一条路径中都存在 n ! n! n!个这个的凸包。这些凸包划分 K n K_n Kn n ! n! n!个等价的部分。
    实在不想写了,直接把原文的图截过来
    在这里插入图片描述
  • Lov´asz-Softmaxloss
    jaccard loss可以写成这样的形式:
    在这里插入图片描述
    因为Jaccard loss 只适用于离散空间,即输入都为0或者是1的情况,对于连续空间中会造成无法求导的问题,所以说对Jaccard loss进行了lovasz extension,将离散空间拓展到整个R,之前的定义也讲了对于输入 x x x,必须满足 ∑ i = 0 n λ i X i = x \sum ^{n}_{i=0}\lambda _{i}X_i=x i=0nλiXi=x,这就类似于用原本的 X i X_i Xi作为基向量,用这一系列离散的向量去表示 x x x,这个 x x x有点类似于经过插值之后的结果。这样就把定义域空间从离散拓展到了 R R R中,我们也就可以进行梯度的计算了。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    以上是论文中的整个从Jaccard loss进行lovasz extension,再进行求导的整个流程。

下面结合代码整体解释一下怎么计算的:
在这里插入图片描述
在这里插入图片描述

  1. 计算出所有像素点的error值,并进行降序排序。
  2. 调整gt的顺序使得最大error的像素值在前,最小的在后,计算相应位置像素值的梯度。
  3. 在第二幅图中计算梯度。计算之后的jaccard值之和为1,也对应着上面的 ∑ λ i = 1 \sum \lambda_{i}=1 λi=1。对应位置的梯度(贡献度)就算出来了,这个时候进行梯度计算的时候也能进行求导下去了。

对应着次模函数,我们每次加入error值最高的像素值进去,用贪心算法的方式达到最后的目的地,也就是排序过后gt的状态(离散的形式0和1组成的向量),因为是经过排序的,前面的gt值比后面的值errors的系数大,用jaccard loss计算加入一个gt值之后的“贡献”,所以说这里才会有减去前n个"贡献"和的操作。而这里的“贡献”也就对应着梯度。这个地方的梯度计算至于排序的序列有关,与具体的值无关。具体的数学推导还是有点难懂,我也想得不是太明白。若说错了,请指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值