大家新年快乐哇, 武汉加油,我的家乡温州也加油,中国加油!向前线人员致敬!
最近在家里做迁移学习,受限于笔记本的限制,深度方向做不了,开始看师兄的论文,发现论文里提到最大方差法,但是没有具体说明出处,去查找相应的出处,也就看到了大津算法,但很奇怪的是,好多人都是很简略地说了思想,到底怎么出来的,还是没明白,因此自己找呗~
将进行一个阈值即两类的推导,让思想动起来!
大津算法提出了两个方差(若有人知道更早的出处欢迎留言指出)。
1.within-class variance 类内方差
2.between-class variance 类间方差
提前指出结论
1.大津法的目标就是最大化类间方差
2.实现最大化类间方差同时就实现了类内方差最小化,因为二者的平方和为定值
3.最优阈值点一定存在
具体程序就麻烦小伙伴自己找找啦。
~~ 进入正题 ~~
现在有一张灰度图含有背景图像和目标图像(
C
0
,
C
1
C_0, C_1
C0,C1),我们要找到一个阈值将像素值分为两块使两者最好的区分。
现在再来看看公式推导
将图片的像素值分为 [1, 2, …, L] 个水平,用 n i n_i ni表示各个水平像素值的像素个数,那么很容易得到总像素个数为
N = n 1 + n 2 + . . . + n L N = n_1 + n_2 + ... + n_L N=n1+n2+...+nL
我们利用像素值对应个数与总数的商作为某个像素值出现的频率,定义 p i p_i pi
p i = n i / N i , p i ≥ 0 , ∑ i = 1 L p i = 1 p_i = n_i / N_i, p_i \ge0, \sum_{i=1}^L p_i=1 pi=ni/Ni,pi≥0,i=1∑Lpi=1
定义两个量 w 0 , w 1 w_0, w_1 w0,w1为 C 0 , C 1 C_0, C_1 C0,C1的局部频率之和,并且得到二者的关系
w 0 = P r ( C 0 ) = ∑ i = 1 k p i = w ( k ) w_0 = Pr(C_0) = \sum_{i=1}^k p_i = w(k) w0=Pr(C0)=i=1∑kpi=w(k)
w 1 = P r ( C 1 ) = ∑ i = k + 1 L p i = 1 − w ( k ) w_1 = Pr(C_1) = \sum_{i=k+1}^L p_i = 1-w(k) w1=Pr(C1)=i=k+1∑Lpi=1−w(k)
由此我们得到总的数学期望和 C 0 , C 1 C_0, C_1 C0,C1各自的数学期望并指出三者的关系,式中 i i i代表像素值,除于各自频率的和用于进行归一。
u T = u ( L ) = ∑ i = 1 L i ∗ p i u_T = u(L) = \sum_{i=1}^L i*p_i uT=u(L)=i=1∑Li∗pi
u 0 = ∑ i = 1 k i ∗ P r ( i ∣ C 0 ) = ∑ i = 1 k i ∗ p i / w 0 = u ( k ) w ( k ) u_0 = \sum_{i=1}^k i*Pr(i|C_0)=\sum_{i=1}^k i*p_i/w_0 = \dfrac{u(k)}{w(k)} u0=i=1∑ki∗Pr(i∣C0)=i=1∑ki∗pi/w0=w(k)u(k)
u 1 = ∑ i = k + 1 L i ∗ P r ( i ∣ C 1 ) = ∑ i = k + 1 L i ∗ p i / w 1 = u T − u ( k ) 1 − w ( k ) u_1 = \sum_{i=k+1}^L i*Pr(i|C_1)=\sum_{i=k+1}^L i*p_i/w_1 = \dfrac{u_T - u(k)}{1-w(k)} u1=i=k+1∑Li∗Pr(i∣C1)=i=k+1∑Li∗pi/w1=1−w(k)uT−u(k)
并指出以上公式之间的关系:
w 0 u 0 + w 1 u 1 = u T w 0 + w 1 = 1 w_0u_0+w_1u_1 = u_T \space \space \space \space \space \space \space w_0+w_1 = 1 w0u0+w1u1=uT w0+w1=1
除了数学期望,计算各自局部方差和总方差
σ T 2 = ∑ i = 1 L ( i − u T ) 2 p i \sigma_T^2=\sum_{i=1}^L (i-u_T)^2p_i σT2=i=1∑L(i−uT)2pi
σ 0 2 = ∑ i = 1 k ( i − u 0 ) 2 P r ( i ∣ C 0 ) = ∑ i = 1 k ( i − u 0 ) 2 p i / w 0 \sigma_0^2=\sum_{i=1}^k (i-u_0)^2Pr(i|C_0)=\sum_{i=1}^k (i-u_0)^2p_i/w_0 σ02=i=1∑k(i−u0)2Pr(i∣C0)=i=1∑k(i−u0)2pi/w0
σ 0 1 = ∑ i = k + 1 L ( i − u 1 ) 2 P r ( i ∣ C 1 ) = ∑ i = k + 1 L ( i − u 1 ) 2 p i / w 0 \sigma_0^1=\sum_{i=k+1}^L (i-u_1)^2Pr(i|C_1)=\sum_{i=k+1}^L (i-u_1)^2p_i/w_0 σ01=i=k+1∑L(i−u1)2Pr(i∣C1)=i=k+1∑L(i−u1)2pi/w0
基础打完,为了大家翻遍查阅,列一个表格方便查阅
变量/公式 | 相关含义 |
---|---|
p i p_i pi | 某个像素值可能出现的频率 |
w 0 / w ( k ) , w 1 w_0/w(k), w_1 w0/w(k),w1 | C 0 , C 1 C_0, C_1 C0,C1 对应的频率和 |
u T , u 0 , u 1 u_T, u_0, u_1 uT,u0,u1 | 整个图像, C 0 C_0 C0, C 1 C_1 C1,像素的数学期望 |
σ T , σ 0 , σ 1 \sigma_T,\sigma_0,\sigma_1 σT,σ0,σ1 | 整个图像, C 0 C_0 C0, C 1 C_1 C1,像素的方差 |
∑ i ∗ p i \sum i*p_i ∑i∗pi | 数学期望的求解公式 |
∑ ( i − u ) 2 ∗ p i \sum (i-u)^2*p_i ∑(i−u)2∗pi | 方差的求解公式 |
定义完以上变量,作者提出
within_class variance 类内差异
σ w 2 = w 0 σ 0 2 + w 1 σ 1 2 \sigma_w^2=w_0\sigma_0^2+w_1\sigma_1^2 σw2=w0σ02+w1σ12
between_class variance 类间差异
σ b 2 = w 0 ( u 0 − u T ) 2 + w 1 ( u 1 − u T ) 2 \sigma_b^2=w_0(u_0-u_T)^2+w_1(u_1-u_T)^2 σb2=w0(u0−uT)2+w1(u1−uT)2
之前指出,作者要求最大化类间差异,我们可以从图中明白这个道理,那么为什么最大化类间差异就是最小化类内差异?
有意思的来了, 因为二者的和为定值
σ w 2 + σ b 2 = σ T 2 \sigma_w^2 + \sigma_b^2 = \sigma_T^2 σw2+σb2=σT2
以下为推导公式
我们取 σ w 2 \sigma_w^2 σw2, σ b 2 \sigma_b^2 σb2中的 w 0 σ 0 2 w_0\sigma_0^2 w0σ02和 w 0 ( u 0 − u T ) 2 w_0(u_0-u_T)^2 w0(u0−uT)2两项,先将 w 0 σ 0 2 w_0\sigma_0^2 w0σ02展开
= w 0 [ 1 w 0 ∗ ∑ i = 0 k ( i − u 0 ) 2 p i ] = w 0 [ 1 w 0 ∗ ∑ i = 0 k ( ( i − u T ) + ( u T − u 0 ) ) 2 p i ] \space =w_0[\frac1w_0*\sum_{i=0}^k(i-u_0)^2p_i]=w_0[\frac1w_0*\sum_{i=0}^k((i-u_T)+(u_T-u_0))^2p_i] =w0[w10∗i=0∑k(i−u0)2pi]=w0[w10∗i=0∑k((i−uT)+(uT−u0))2pi]
= w 0 [ 1 w 0 ∗ ∑ i = 0 k ( ( i − u T ) 2 + 2 ( i − u T ) ( u T − u 0 ) + ( u T − u 0 ) 2 ) p i ] \space =w_0[\frac1w_0*\sum_{i=0}^k((i-u_T)^2+2(i-u_T)(u_T-u_0)+(u_T-u_0)^2)p_i] =w0[w10∗i=0∑k((i−uT)2+2(i−uT)(uT−u0)+(uT−u0)2)pi]
= ∑ i = 0 k ( i − u T ) 2 ∗ p i \space =\sum_{i=0}^k(i-u_T)^2 *p_i =i=0∑k(i−uT)2∗pi
+ ∑ i = 0 k 2 ( i − u T ) ( u T − u 0 ) ∗ p i +\sum_{i=0}^k2(i-u_T)(u_T-u_0)*p_i +i=0∑k2(i−uT)(uT−u0)∗pi
+ ( u T − u 0 ) 2 ∗ ∑ i = 0 k p i +(u_T-u_0)^2*\sum_{i=0}^kp_i +(uT−u0)2∗i=0∑kpi
展开 ∑ i = 0 k 2 ( i − u T ) ( u T − u 0 ) ∗ p i \sum_{i=0}^k2(i-u_T)(u_T-u_0)*p_i ∑i=0k2(i−uT)(uT−u0)∗pi
= 2 ( u T − u 0 ) ∑ i = 0 k ( i − u T ) p i =2(u_T-u_0)\sum_{i=0}^k(i-u_T)p_i =2(uT−u0)i=0∑k(i−uT)pi
= 2 ( u T − u 0 ) [ ∑ i = 0 k i p i − u T ∑ i = 0 k p i ] \space =2(u_T-u_0)[\sum_{i=0}^kip_i-u_T\sum_{i=0}^kp_i] =2(uT−u0)[i=0∑kipi−uTi=0∑kpi]
根据数学期望和局部概率和的定义得到
∑ i = 0 k 2 ( i − u T ) ( u T − u 0 ) ∗ p i = 2 ( u T − u 0 ) w 0 ( u 0 − u T ) = − 2 w 0 ( u T − u 0 ) 2 \sum_{i=0}^k2(i-u_T)(u_T-u_0)*p_i = 2(u_T-u_0)w_0(u_0-u_T)=-2w_0(u_T-u_0)^2 i=0∑k2(i−uT)(uT−u0)∗pi=2(uT−u0)w0(u0−uT)=−2w0(uT−u0)2
得 w 0 σ 0 2 w_0\sigma_0^2 w0σ02化简为
= ∑ i = 0 k ( i − u T ) 2 ∗ p i − w 0 ( u T − u 0 ) 2 \space =\sum_{i=0}^k(i-u_T)^2 *p_i-w_0(u_T-u_0)^2 =i=0∑k(i−uT)2∗pi−w0(uT−u0)2
从
σ
b
2
\sigma_b^2
σb2的第一项可以发现,二者的和恰为
∑
i
=
0
k
(
i
−
u
T
)
2
∗
p
i
\sum_{i=0}^k(i-u_T)^2 *p_i
i=0∑k(i−uT)2∗pi
同理推得第二项,则
σ b 2 + σ w 2 = ∑ i = 0 k ( i − u T ) 2 p i + ∑ i = k + 1 L ( i − u T ) 2 p i = ∑ i = 0 L ( i − u T ) 2 p i = σ T 2 \sigma_b^2+\sigma_w^2 = \sum_{i=0}^k(i-u_T)^2 p_i + \sum_{i=k+1}^L(i-u_T)^2 p_i=\sum_{i=0}^L(i-u_T)^2 p_i = \sigma_T^2 σb2+σw2=i=0∑k(i−uT)2pi+i=k+1∑L(i−uT)2pi=i=0∑L(i−uT)2pi=σT2
因此类内差异与类间差异的和为总的方差,为一定值
那么为什么最优阈值一定存在呢?
从
σ
b
2
\sigma_b^2
σb2的定义出发
已知
w 0 u 0 + w 1 u 1 = u T w_0u_0+w_1u_1 = u_T w0u0+w1u1=uT
因此
σ b 2 = w 0 ( u 0 − u T ) 2 + w 1 ( u 1 − u T ) 2 \sigma_b^2=w_0(u_0-u_T)^2+w_1(u_1-u_T)^2 σb2=w0(u0−uT)2+w1(u1−uT)2
= w 0 ( u 0 − ( w 0 u 0 + w 1 u 1 ) ) 2 + w 1 ( u 1 − ( w 0 u 0 + w 1 u 1 ) ) 2 \space =w_0(u_0-(w_0u_0+w_1u_1))^2+w_1(u_1-(w_0u_0+w_1u_1))^2 =w0(u0−(w0u0+w1u1))2+w1(u1−(w0u0+w1u1))2
= w 0 w 1 ( u 1 − u 0 ) 2 \space =w_0w_1(u_1-u_0)^2 =w0w1(u1−u0)2
再根据
u 0 = u ( k ) w ( k ) u 1 = u T − u ( k ) 1 − w ( k ) u_0 = \dfrac{u(k)}{w(k)} \space \space \space \space u_1=\dfrac{u_T - u(k)}{1-w(k)} u0=w(k)u(k) u1=1−w(k)uT−u(k)
得
σ b 2 = [ u T w ( k ) − u ( k ) ] 2 w ( k ) [ 1 − w ( k ) ] \sigma_b^2=\dfrac{[u_Tw(k)-u(k)]^2}{w(k)[1-w(k)]} σb2=w(k)[1−w(k)][uTw(k)−u(k)]2
求解最大类间差异可写作
σ b 2 ( k ∗ ) = max 1 ≤ k < L σ b 2 ( k ) \sigma_b^2(k^*)=\max_{1\le k<L}\sigma_b^2(k^) σb2(k∗)=1≤k<Lmaxσb2(k)
由上述 σ b 2 \sigma_b^2 σb2的分母可以发现, w ( k ) w(k) w(k)可以取到1也可以取到0,因此在边界上 σ b 2 \sigma_b^2 σb2可以无穷大,而在开集 ( 0 , 1 ) (0,1) (0,1)则类间方差有限,因此在定义域
S ∗ = k : w 0 w 1 = w ( k ) [ 1 − w ( k ) ] > 0 S^* = {k:w_0w_1=w(k)[1-w(k)]>0} S∗=k:w0w1=w(k)[1−w(k)]>0
总存在最优解。
完成三条结论的推导
等等~
会不会有小伙伴在想
max
1
≤
k
<
L
σ
b
2
(
k
)
\max_{1\le k<L}\sigma_b^2(k^)
1≤k<Lmaxσb2(k)
这个问题怎么解哇!
哈哈,我也不会,目前就是一个点一个点的代入哇,找到最大值即可。但是我最近在学凸优化这门课,相信自己学完是能解决这个的!
一起加油!
元宵快乐,芝麻汤圆最好吃了!