CVPR论文解读《Learning To Count Everything》

发布时间 2023-03-22 21:11:01作者: 同淋雪

密集场景下的目标检测与计数

———CVPR论文解读《Learning To Count Everything》

计数是我们经常会碰到的问题,使用最贴近我们生活实际的情景举例。例如统计上课已到教室的人数,或者统计货架上的物品数量、统计书架上的书本数。在比较密集的情况下,通过人工计数是非常麻烦的,但如果可以通过计算机计数,效率会大大提升。

那计数怎么做呢?首先会想到目标检测,但是某些密集的场景下,目标非常小,检测非常麻烦。那我们也可能想到分割,例如对细胞的分割,但是在非常密集的情况下,目标可能会被分割成一片一片的,也不适合计数。还有聚类,但是聚类更适合做不同类别的任务,我们想要的是对同一类别的目标计数。最后我们还可能想到关键点定位,把目标当做一个点,进行关键点识别,这似乎是可行的。但是这要求我们对图像进行标注,不同种类的目标关键点不同,我们要分别作标注。例如我们想要统计图片中鸟的数量,那么我们需要上千张鸟的图片,上千张标注的结果。如果我们想要统计苹果,那我们又需要上千张苹果的图像以及标注的结果。这样一来,工作量就非常大。同时,这种模型也不具有通用能力,每做一个新的类型就要重新训练,很难做到跨域。

本篇论文使用非常简单的方法就实现了计数任务,不需要给所有样本定标签,给出少量的样本标签即可,这使用的一种半监督的任务。

一、Few-Shot

这种方式只给出少量的标签,让模型自己学习,这样会让模型的通用性更强。如果样本全部给定标签,那么模型可能就只会识别这一种特定的类别。

在本文中,few-shot的实现是:使输入为一张图像以及一些标注信息,这些标注信息就是少量的目标物体样例。在源码中样例数量大概为3个,使用方框标注。输出是一张“密度图”,预测和原图同位置的地方是否有目标,有就标密度值为1,没有就标0。最后,对密度图做一个求和操作,得出计数结果。

二、创新点

(1)提出一种新的优化方法。训练时冻结参数,测试时微调。在训练的时候冻结参数,测试的时候先进行”热身“,微调网络、更新参数,使网络更适应于当前的目标类别。同时,在这个模型里,训练数据和测试数据目标物体类别可以不同,适用于任何的类型。

(2)构建了一种网络结构FamNet,少样本适应性和匹配性网络。

(2)提供了一个新的数据集Few-Shot Counting-147(FSC-147)。包含147个种类的6000多张图像,数据集做了两种标注,第一种是点标注,每一张图都有它的密度估计。有目标就标记为1,没有记为0。这样的标注并不困难,给图片上的所有目标物体中心标点,记下位置,生成一张密度图。第二种标注是方框,它是用来标记目标物体样例的,一般随机标记三到五个。在源码中样例个数为3。

三、FamNet

image-20230315104736907

两个关键的模块:(1)特征提取模块;(2)密度预测模块。

  • Feature Extraction Module:特征提取模块。使用ImageNetpretrained网络进行特征提取,因为这种网络可以处理广泛的视觉类别。多尺度特征提取模块由预先训练好的ResNet-50骨干网的前四个块组成(这些块的参数在训练期间被冻结)。不更新参数是为了适应不同的类别,防止某一种类别训练好以后模型不能适应新的类别。但这种方式也带来了不好的影响,由于不更新参数导致测试效果并不好。为了解决这一问题,提出了在测时先“热身”的方案,要做某一个类别,先做100次迭代,更新参数,让模型微调能够适应这种新类别。通过骨干网的第三和第四块的卷积特征图来表示一幅图像。

  • ROI Pool :ROI池。提取样例特征。只针对关注区域的特征,找到关注区的特征图,即图中方框处的特征。把样例的特征图做上采样或者下采样,然后进行拼接。

  • Feature Correlation Layer:特征相关层。按照我们的思路,已经得到了图像特征和样例特征,融合到一起连接一个1X1的卷积,预测结果。但是这样做的效果并不好。为了使密度预测模块对视觉类别不可知,我们不直接使用从特征提取模块获得的特征进行密度预测。相反,我们只使用样例特征和整个图像特征之间的相关性,样本特征与图像特征相关联以获得相关图,把相关图作为密度预测模块的输入。那相关图如何获取呢?在文章里,作者把样例当做卷积核与原图进行卷积,得到特征相关图。卷积实际是一种内积运算,内积可代表相关性。我们的目标物体可能有大有小,为了考虑不同尺度的物体,将卷积核大小进行缩放,将缩放后的样本特征与图像特征相关联以获得多个相关图,每个尺度一个。文中使用 0.9 和 1.1 的尺度,以及原始尺度,将不同尺度的相关图进行拼接,作为密度预测模块的输入。

  • Density Prediction Module:密度预测模块。由五个卷积块和放置在第一、第二和第三卷积层之后的三个上采样层组成。最后一层是 1×1 卷积层,它预测 2D 密度图。预测密度图的大小与输入图像的大小相同。为什么要上采样呢,因为骨干网将特征图缩小了,现在要还原成原图大小。

四、训练

为了生成目标密度图,我们使用具有自适应窗口大小的高斯平滑法。首先,我们使用点注释来估计物体的大小。考虑到点注释图,其中每个点都位于物体的近似中心,我们计算每个点与其最近的邻居之间的距离,并对图像中所有的点进行平均。这个平均距离被用作生成目标密度图的高斯窗口的大小。高斯的标准偏差被设定为窗口大小的四分之一。

为了训练FamNet,我们将预测的密度图和地面真实密度图之间的平均平方误差降到最低。我们使用Adam优化器,学习率为10的-5次方,批次大小为1。我们将每张图片的大小调整为固定的384高度,宽度也相应调整,以保持原始图片的纵横比。

五、测试

在测试时要先“热身,使网络更适应于当前的目标类别,要做某一个类别,先做100次迭代,更新参数。同时,在测试时选择了两个在训练的时候没有的损失函数。

第一个是Min-count Loss,要求在密度图的原图样例位置,方框内密度值求和至少大于等于1,否则损失就很大。因为我们给出的样例的方框里至少是有一个目标物体的,保证至少检测出自己。

image-20230315181309383

第二个是Perturbation Loss,将方框的中心视作密度值为1,周围的密度值呈高斯分布,离中心位置越远密度值越小。损失函数定义为预测值与中心点的距离(或者说预测密度值与所在位置的实际密度值之差)的平方和。

image-20230315181329053

六、效果

FamNet与两个简单的基线(平均值、中位数)和四个更强的基线(特征重加权(FR)几率检测器、FSOD几率检测器、GMN和MAML)的比较,这些都是经过调整和训练的几率方法,用于计数。FamNet在值和测试集上的MAE和RMSE都是最低的。

image-20230315181543111

比较FamNet和预先训练的物体检测器,对有预先训练的物体检测器的类别进行计数。

image-20230315181723643

随着样本数量的增加,FamNet在验证数据上的表现。FamNet可以提供一个合理的计数估计,即使只有一个例子,估计也会随着例子的增加而变得更加准确。

image-20230315181758806

分析FamNet的组成部分。FamNet的每个组成部分都会增加性能。

image-20230315181828628

在CARPK数据集上计算汽车的性能。FamNet-是一个FamNet模型,在没有任何Carpk图像或FSC-147的汽车类别的图像的情况下进行训练。其他方法使用整个CARPK训练集。预先训练的FamNet-的性能优于之前的三种方法。FamNet+,产生了更好的性能。

image-20230315181911260

七、测试

预测的密度图和FamNet的计数。

image-20230315182025384

测试时自适应。显示的是初始密度图(Pre Adapt)和适应后的最终密度图(Post Adapt)。在过度计数的情况下,适应性降低了密集位置的密度值。

image-20230315182052819

八、可改进方向

不同视角下的物体、光照和类内变化,目标体旋转和比例变化(如小物体)、精确的物体定位、密集和遮挡的物体检测。