论文阅读——《Robust Superpixel Tracking》
论文阅读——《Robust Superpixel Tracking》
《Robust Superpixel Tracking》
这是2014年发表在 IEEE Transactions on Image Processing上的一篇文章,主要基于超像素的方法解决外观发生剧烈变化的物体追踪问题,下面是论文实验的结果
第一个表是定位的误差,第二个表是成功追踪的帧数,看上去本文的方法(SPT)都很棒啊,但是好奇的是为什么SPT在Tracking的圈子里好像不是很出名,在这篇知乎回答 计算机视觉中,目前有哪些经典的目标跟踪算法里都没有提到SPT的方法,是因为太慢?(五帧每秒),博主对Tracking接触得不多,因此这个问题还有待考证。
这里我就简单总结下论文提到的方法,作为学习参考,下面是本文算法的伪代码:
算法的主要步骤是 初始化过程和 追踪过程,其中
初始化过程是
(1)对视频流的前四帧进行超像素分割,并对分割出来的超像素提取特征(这里的特征是 HSI颜色空间的颜色分布直方图),然后用这些特征构建一个特征池 F = { f t r ∣ t = 1 , … , m ; r = 1 , … , N t } F=\left\{f_{t}^{r} | t=1, \ldots, m ; \quad r=\right.1, \ldots, N_{t} \} F={ftr∣t=1,…,m;r=1,…,Nt};
(2)对特征池内的特征进行Kmeans聚类获得基于超像素的外观辨别模型(superpixle-based discriminative appearance model):
外观辨别模型其实指的是各个聚类的特征描述符,的主要由四个参数构成,分别是聚类的中心
f
c
(
i
)
f_{c}(i)
fc(i),聚类的半径
r
c
(
i
)
r_{c}(i)
rc(i),聚类的超像素的数量
{
f
t
r
∣
f
t
r
∈
c
l
s
t
(
i
)
}
\left\{f_{t}^{r} | f_{t}^{r} \in c l s t(i)\right\}
{ftr∣ftr∈clst(i)},以及聚类的置信度
C
i
c
C_{i}^{c}
Cic(属于前景还是背景的概率),其计算公式如下
C
i
c
=
S
+
(
i
)
−
S
−
(
i
)
S
+
(
i
)
+
S
−
(
i
)
,
∀
i
=
1
,
…
,
n
C_{i}^{c}=\frac{S^{+}(i)-S^{-}(i)}{S^{+}(i)+S^{-}(i)}, \forall i=1, \ldots, n
Cic=S+(i)+S−(i)S+(i)−S−(i),∀i=1,…,n其中
S
+
(
i
)
S^{+}(i)
S+(i)和
S
−
(
i
)
S^{-}(i)
S−(i)分别表示聚类
i
i
i和前景、背景的覆盖面积(这里我就有一个问题啦,难道还得先确定哪个像素属于前景哪个像素属于背景?)
追踪过程是
(1)对图像进行超像素的分割并提取各个超像素的特征,计算目标背景的置信图:
这个置信图是针对各个超像素来说的,主要包括两个部分构成,一部分是这个超像素属于哪个聚类,另一部分是这个超像素与聚类中心超像素的特征的距离,其计算公式如下:
C
r
s
=
w
(
r
,
i
)
×
C
i
c
,
∀
r
=
1
,
…
,
N
t
C_{r}^{s}=w(r, i) \times C_{i}^{c}, \quad \forall r=1, \ldots, N_{t}
Crs=w(r,i)×Cic,∀r=1,…,Nt其中
w
(
r
,
i
)
=
exp
(
−
λ
d
×
∥
f
I
F
−
f
c
(
i
)
∥
2
r
c
(
i
)
)
∀
r
=
1
,
…
,
N
t
,
i
=
1
,
…
,
n
\begin{array}{l}{w(r, i)=\exp \left(-\lambda_{d} \times \frac{\left\|f_{I}^{F}-f_{c}(i)\right\|_{2}}{r_{c}(i)}\right)} \\ {\forall r=1, \ldots, N_{t}, \quad i=1, \ldots, n}\end{array}
w(r,i)=exp(−λd×rc(i)∥fIF−fc(i)∥2)∀r=1,…,Nt,i=1,…,n
C
r
s
C_{r}^{s}
Crs就是第
t
t
t帧的第
r
r
r个超像素的置信度(属于前景还是背景的概率)。
(2)基于置信图采样
N
N
N个状态(其实指的就是追踪用的bounding box)
本文的贝叶斯更新是通过采样更新的,其实我觉得指的就是SIR粒子滤波,根运动模型采样预测的状态,然后根据观测模型判断哪个状态是最合理的
X
^
t
=
argmax
X
t
(
l
)
p
(
X
t
(
l
)
∣
Y
1
:
t
)
∀
l
=
1
,
…
,
N
\hat{X}_{t}=\underset{X_{t}^{(l)}}{\operatorname{argmax}} p\left(X_{t}^{(l)} | Y_{1 : t}\right) \forall l=1, \ldots, N
X^t=Xt(l)argmaxp(Xt(l)∣Y1:t)∀l=1,…,N
(3)计算运动模型和观测模型:
运动模型如下:
p
(
X
t
∣
X
t
−
1
)
=
N
(
X
t
;
X
t
−
1
,
Ψ
)
p\left(X_{t} | X_{t-1}\right)=\mathcal{N}\left(X_{t} ; X_{t-1}, \Psi\right)
p(Xt∣Xt−1)=N(Xt;Xt−1,Ψ)其中
Ψ
\Psi
Ψ是运动的参数(
σ
c
\sigma_{c}
σc表示移动变换的参数,
σ
s
\sigma_{s}
σs表示尺度变换的参数,但是
σ
c
\sigma_{c}
σc和
σ
s
\sigma_{s}
σs的具体表达式文中并诶有给出)的方差
观测模型如下:
p
(
Y
t
∣
X
t
(
l
)
)
=
C
^
l
,
∀
l
=
1
,
…
,
N
p\left(Y_{t} | X_{t}^{(l)}\right)=\hat{C}_{l}, \forall l=1, \ldots, N
p(Yt∣Xt(l))=C^l,∀l=1,…,N其中
C
^
l
\hat{C}_{l}
C^l表示各个采样的归一化置信度
C
^
l
=
C
l
×
[
S
(
X
t
(
l
)
)
/
S
(
X
t
−
1
)
]
,
∀
l
=
1
,
…
,
N
\hat{C}_{l}=C_{l} \times\left[S\left(X_{t}^{(l)}\right) / S\left(X_{t-1}\right)\right], \forall l=1, \ldots, N
C^l=Cl×[S(Xt(l))/S(Xt−1)],∀l=1,…,N
C
l
=
∑
(
i
,
j
)
∈
M
l
v
l
(
i
,
j
)
C_{l}=\sum_{(i, j) \in M_{l}} v_{l}(i, j)
Cl=(i,j)∈Ml∑vl(i,j)其中
v
l
(
i
,
j
)
v_{l}(i, j)
vl(i,j)表示像素
(
i
,
j
)
(i,j)
(i,j)处的置信度大小(查询它位于哪个超像素就能知道)
C
l
C_{l}
Cl指的是没有归一化的状态置信度,而
S
(
X
t
(
l
)
)
S\left(X_{t}^{(l)}\right)
S(Xt(l))和
S
(
X
t
−
1
)
S\left(X_{t-1}\right)
S(Xt−1)表示的是当前状态的采样和前一状态(这里的状态都可以理解为跟踪的bounding box)的面积,这一步的具体操作可以根据下图理解
右边四个图就是采样结果,然后根据观测可以判断 x t ( 1 ) x_{t}^{(1)} xt(1)是对合理的,因此将 x t ( 1 ) x_{t}^{(1)} xt(1)更新为当前状态。
(4)基于最大似然概率估计最有可能的状态
这个其实就是上面的更新过程
(5)检测和解决严重冲突的情况(这个机制我们先不去关注它,先搞清楚算法是怎样实现追踪的)
这里的步骤还没有细看,但是是很巧妙的,SPT之所以能具有良好的了鲁棒性和这一步的操作是分不开的,这个具体流程之后再看。
未完待续…