Manifold-Based Visual Object Counting
(从我的github上覆制来的,CSDN的格式实在太让人暴躁了,一些格式实在懒得调了大家随便看看吧)
一、基于流形的视觉目标计数
1. 提出了一种基于流形的视觉目标计数方法;
2. 通过正则化和非线性映射来考虑非负性和稀疏表示,来优化局部几何的特征;
3. 用局部模式学习和分层搜索被用来进一步提高所提出的方法及其变体的计算效率。
二、方法概括
> figure1 提出的基于流形的视觉对象计数方法。橙色框内为测试部分(step 4)。红色为训练部分(step 1-3)。
1. 基于训练样本的点标注生成密度图作为groundtruth,并从中训练图像中提取图像patch,从密度图中提取密度patch;
2. 对提取的patch集进行特征工程;
3. 对patch集做聚类,并生成层级架构;
4. 对patch集作密度图重构,目标为得到最优权重,以生成测试集的密度图。
三、方法详细流程
1. 生成训练集的密度图
> figure2. 行人点标注和对应的密度图
- 密度图可以用2D高斯核函数计算:
(2)
其中是的密度图,即ground truth, 是图像 的像素索引,是图像索引, 是标注的点的座标,是 中所有点的座标集。是归一化2D高斯核函数, 是用于平滑局部分布的 的方差,并且根据对象的大小(大约是对象大小的1/2)来设置。
- 而目标计数可以计算为密度图上所有点之和:
(3)
2. 特征工程
- 为了增加特征空间中的采样密度和减少计算负担,采用主成分分析法(PCA)对patch形式的原始数据特征进行集中、归一化和降维。
3. 构建搜索架构
- 为了降低算法的时间复杂度,采用分层搜索结构,该结构的节点是通过聚类产生的。
- 结构分为两层,第一层包含个节点,代表图像patch集用K-means生成的个聚类的质心,第二层中,第一层的每个节点包含个子节点,代表用K-means生成的个聚类的质心,并分配给其特征节点。
- 也就是说,先找到与样本patch 相似度相近的某个聚类,在根据这个聚类找到与这个聚类相似的个聚类,这个聚类即为样本patch 的近邻集合。
4. 密度图重构
- 采用基于流形假设的非参数方法来学习权重,再用来计算密度图
- (4)
是损失函数,对做优化
- 那么可以计算为: (5)
四、M-VOC 算法
- 目标是最小化权重
(6)
- 如果是**正定**的,那么可以求解为:
(7)
是归一化因子。
公式(7)的方法被命名为M-VOC(LS)。
- 若图像块维度,那么不是正定的,则上述方法不适用,于是在这里引入正则化项。
1)energy:为了产生更稳定的局部权重, 会受到其energy的限制。
2)稀疏性:M-VOC受到patch的邻域大小限制,若T太小,则领域不足以表征局部几何形状,相反,则会倾向不同局部几何形状的邻域。这里引入局部约束和稀疏约束来避免T的选择。
3)非负性:对负约束可以使相似的图像块和图像密度凸组合。
4)局部性:当选取邻域重构,局部性已经被隐含地假定。
- 基于以上四个约束,的优化公式可以写作:
(8)
第二项以低能量强制,而第三项强制稀疏性以选择潜在候选。第四项确保是正的。
- 为了从(8)中获得更多的解,通过设置不同的,可以获得如下三个变量:
1)M-VOC(e)
令
(9)
,公式(9)可以优化为:
(10)
2)M-VOC(s)
令
(11)
可用Lasso方法优化
3) M-VOC(nn)
令
(12)
可用二次规划优化。
## 五、KM-VOC 算法
- 图像块包含许多变化,如形状和纹理,并且如以上部分所讨论的线性表示可能无法完全捕捉它们潜在的内在关系。本文首先将非线性映射引入到模型的局部几何建模中,然后应用**核方法**使其易于处理。
- 使用非线性映射,则 变为:
(14)
则闭式解为:
(15)
- 用核函数表示非线性映射,则公式(15)可以表示为
(16)
是GRAM矩阵,, 是核。
- 那么,可以被重构为: 其中$\pmb{E}=\pmb{D_d}(\pmb{G}+\lambda\pmb{I})^{-1}$,为嵌入矩阵