本期主题是CVPR2006 Best Paper加身的Putting Objects in Perspective(以下简称POP), 项目主页和代码链接. 文章设计了一个同时支持camera viewpoint, object detector和scene 3D geometry的统计推断框架。文章的年代有一点久远,当时还是Dalal和Triggs的HoG+SVM当道的时代,DPM尚未出世,今天红遍大江南北的Deep Learning当时还屡屡遭拒,但POP的推断框架在今天看起来仍然非常elegant.
Overview
心理学及视觉研究证明,context information plays a crucial role in scene understanding. POP提出的框架包括了3个要素
- low-level object detectors: POP框架具有良好的易扩展性,可选用任意目标检测子
- 3D scene geometry: 预测目标在图像中可能出现的位置
- approximate camera position/orientation:预测目标的大小
Scene Projection
图像成像时遵从“近大远小”的规律,估计了相机参数后,对估计目标的尺度(scale)很有帮助。
假设图像坐标系为(u, v),世界坐标系为(x, y, z), 根据projection rule(参见计算机视觉相关教材), 存在如下等式
$$
\begin{equation}
v = (y_c - y)\frac{f}{z}
\end{equation}
$$
其中,$$y_c$$是相机高度Camera height, f为焦距,z为目标景深。Assumption
目标都位于y=0的平面上, 令$$v_1$$和$$v_2$$分别为目标在图像平面的下边缘和上边缘,则有$$v_1 = y_c \frac{f}{z}$$和$$v_2 = (y_c-y) \frac{f}{z}$$, 联立上述两式,可得
$$
\begin{equation}
\frac{v_1}{v_1-v_2}=\frac{y_c}{y}
\end{equation}
$$
假设相机所在水平面(图中Horizontal position所在平面)对应于图像平面中的$$v_0$$, 令$$v_i, h_i, y_i$$分别为目标在图像平面下边缘坐标,bbox高度和在世界坐标系的高度,可得
$$
\begin{equation}
y_i=\frac{h_i y_c}{v_i-v_0}
\end{equation}
$$
若已知相机视角参数$$(v_0, y_c)$$,物体3D高度$y_i$和图像平面坐标$$v_i$$, 就能够估测目标在图像平面中的高度$$h_i$$,从而估计尺度。
Modelling
POP采用Graphical Model来构建viewpoint $$\theta$$, objects $$o$$, local geometry $$g$$间的关系,如下图所示
Decomposition the graphical model,
$$
\begin{equation}
\begin{split}
P(\theta, o, g|e) &= \frac{P(\theta, o, g, e)}{P(e)} \
& \propto P(\theta) \prod_i P(oi | \theta) P(e{oi} | o_i) \prod P(gi | \theta) P(e{gi} | g_i)
\end{split}
\end{equation}
$$
其中,对 $$P(e_{oi} | o_i)$$ 应用Bayes公式, 有
$$
\begin{equation}
P(e_{oi}|o_i) = \frac{P(oi| e{oi})P(e_i)}{P(o_i)}
\end{equation}
$$
对 $$P(e_{gi}|g_i)$$ 也存在类似关系,代入上式.
$$
\begin{equation}
\begin{split}
P(\theta, o, g|e) & \propto P(\theta) \prod_i P(oi | \theta) P(e{oi} | o_i) \prod P(gi | \theta) P(e{gi} | g_i) \
& \propto P(\theta) \prod_i P(o_i | \theta) \frac{P(o_i|e_o)}{P(o_i)} \prod P(g_i | \theta) \frac{P(g_i|e_g)}{P(g_i)}
\end{split}
\end{equation}
$$
Modelling viewpoint
相机视角$$\theta$$包括两个参数$$(v_0, y_c)$$, 假设这两个变量彼此独立,则有
$$
\begin{equation}
P(\theta) = P(v_0)P(y_c)
\end{equation}
$$
实验结果显示$$v_0$$分布遵从高斯分布,$$y_c$$值可由场景中标定过的物体高度经过kernel density estimation
得到。
对于POP所采用的数据集LabelMe, $$y_c=1.67\ m$$, $$v_0=0.5$$
Modelling objects
Object $$o_i$$包括两个属性, 类型$$t_i \in {object, background}$$和bounding box $$bbox = {u_i, v_i, w_i, h_i}$$, 其中$$(u_i, v_i)$$为左下角坐标.
根据graphical model,
$$
\begin{equation}
P(o_i | e_o, \theta) \propto \frac{P(o_i | e_o)}{P(o_i)} P(o_i | \theta)
\end{equation}
$$
目标在特定位置/尺度出现的概率
$$
\begin{equation}
P(t_i = obj, bbox_x | I_i) = \frac{1}{1+exp[-c_i - log\frac{P(o_i)}{1-P(o_i)}]}
\end{equation}
$$
Modelling Geometry
POP使用了参考文献11的公开代码,生成”ground”, “vertical”和”sky”三类的概率。
Inference
- Viewpoint的训练使用了MATLAB的
kdensity
函数 - Object detector:
Epilogue
优秀的论文读起来就非常带感,论文的1.1节Background部分读来就像一部娓娓道来的CV简史。在这里摘选其中的一句话
In its early days, computer vision had but a single grand goal: to provide a complete semantic interpretation of an input image by reasoning about the 3D scene that generated it.
30多年过去了,我们仍然在为了这个目标而努力。
找到了一个外国人用HTML做的slides,效果很炫,值得一看。