CrowdNet: A Deep Convolutional Network for Dense Crowd Counting阅读笔记

Boominathan L , Kruthiventi S S S , Babu R V . CrowdNet: A Deep Convolutional Network for Dense Crowd Counting[J]. 2016.

贡献:

    使用深度和浅度,完全卷积网络deep and shallow, fully convolutional networks的组合来预测给定静态人群图像的密度图。这种组合用于有效地捕获高级语义信息high-level semantic information(面部/身体检测器)和低级特征low-level features(斑点检测器),这是大规模变化下人群计数所必需的。
    由于大多数人群数据集具有有限的训练样本(<100图像),并且基于深度学习的方法需要大量训练数据,因此我们执行多尺度数据增强multi-scale data augmentation。以这种方式增加训练样本有助于指导CNN学习尺度不变表示。

具体实现:

    摄像机附近的人通常被捕获在很大程度上的细节,即他们的脸部以及有时他们的整个身体被捕获。然而,在人们远离相机或从空中视点捕获图像的情况下,每个人仅被表示为头部斑点head blob。在这两种情况下对人的有效检测要求模型在高度语义水平(面部/身体检测器)同时操作,同时还识别低级别的头部模式。我们的模型使用深度和浅层卷积神经网络的组合来实现这一点。

CrowdNet: A Deep Convolutional Network for Dense Crowd Counting阅读笔记_第1张图片

深层网络:

    在深层网络中,类比了VGG的结构:VGG网络有5个max-pool层,每个层的步幅为2,因此得到的输出特征的空间分辨率仅为输入图像的1/32倍。
    在我们对VGG模型的改编中,我们将第四个max-pool层的步幅设置为1,并完全删除第5个max-pool层。 这使网络能够以输入分辨率的1/8进行预测。 我们使用膨胀卷积处理第四个最大池层中步幅的移除引起的感受野不匹配。

浅层网络:

    在我们的模型中,我们的目标是使用浅卷积网络识别从远离相机的人身上产生的低水平头部斑点图案。由于斑点检测不需要捕获高级语义,因此我们将该网络设计为仅具有3个卷积层的浅层。每一层都有24个过滤器,内核大小为5X5。为了使该网络的预测空间分辨率等于其深部对应的预测空间分辨率,我们在每个卷积层之后使用池层。我们的浅网络主要用于探测小的头部斑点。为了确保不因最大池而丢失计数,我们在浅网络中使用平均池层
    我们连接深层和浅层网络的预测,每个网络的空间分辨率是输入图像的1/8,并使用1x1卷积层进行处理。 使用双线性插值bilinear interpolation将该层的输出上采样upsample到输入图像的大小,以获得最终的人群密度预测。 可以通过对预测密度图的求和来获得图像中人的总数。 通过反向传播相对于地面实况计算的L2损失来训练网络。

标注方法:

    通过使用归一化为和的高斯核模糊每个头部注释来生成基本事实。这种模糊导致密度图的总和与人群中的总人数相同。以这样一种方式准备基本事实使CNN更容易了解基本事实,因为CNN不再需要准确的头部注释。它还提供了有关哪些区域对计数有贡献以及贡献多少的信息。这有助于培训CNN正确预测人群密度和人数。

数据扩充:

    由于CNN需要大量的训练数据,因此我们对我们的训练数据集进行了广泛的扩充。我们主要执行两种增强。第一种类型的增强有助于解决人群图像中的尺度变化问题,而第二种类型提高了CNN在极易出错的区域(即高度密集的人群区域)的表现
    一:为了使CNN对尺度变化具有鲁棒性robust,我们从每个训练图像的多尺度金字塔表示中裁剪patches 。我们考虑0.5到1.2的比例,以步骤0.1为单位,乘以原始图像分辨率(如图3所示)来构建图像金字塔image pyramid。我们从这个金字塔形表示中裁剪出225X225个patches ,重叠率为50%overlap。通过这种增强,CNN可以识别不同规模的人。
    二:我们观察到CNN和高度密集的人群本身难以处理。为了克服这个问题,我们通过更频繁地采样高密度patch来增加训练数据。

CrowdNet: A Deep Convolutional Network for Dense Crowd Counting阅读笔记_第2张图片

实验结果:

    使用5折交叉验证5-fold cross validation来评估方法的性能。我们将数据集随机分成五块split,每块包含10个图像。在交叉验证的每个折叠中,我们考虑用于训练网络的四个块(40个图像)和用于对其性能进行验证的剩余块(10个图像)。我们按照先前描述的数据增强方法从40个训练图像中的每一个中采样225X225个补丁。该程序每次平均产生50,292个训练补丁。我们的网络使用随机梯度下降SGD优化进行训练,学习率为1e-7。
    使用平均绝对误差(MAE)来量化我们方法的性能。MAE计算数据集中所有图像的实际计数和预测计数之间的绝对差异的平均值。

CrowdNet: A Deep Convolutional Network for Dense Crowd Counting阅读笔记_第3张图片

 

论文地址:https://arxiv.org/pdf/1608.06197v1.pdf
源码:github地址:deep-crowd-counting_crowdnet

 

可参考:

1、人群密度估计之CrowdNet
这种网络的训练一般有3种方法:1,自己撸一个data数据层。在caffe源码中实现原始图片和密度图向blob的传递。可以参考在caffe 中添加Crowd counting 数据层
2,自己使用matlab生成密度图,做成LMDB,输入的时候,分别读取data和label,这里需要注意,绝对不要使用shuffle,因为data和label需要一一对应
3,还是自己生成密度图,然后做成hdf5,这个好处就是支持double类型的密度图,感觉精度会更好点。

2、人群密度估计--CrowdNet: A Deep Convolutional Network for Dense Crowd Counting

3、人群密度估计-Crowd Density
论文采用了两个网络的融合,可以理解为不同的网络提取的特征不同,上面 Max Pool 对边缘特征(细节)提取较好,下面的 Shallow Net 采用 Avrg Pool 对于整体特征描述较好,两个网络通过一个 concat 进行连接,然后1*1的conv进行降维,非常简单。
这里面有两个细节要注意:
1)文中采用了膨胀卷积,提取整体特征,这个现在用的也比较多了,估计都很熟;
2)数据增广,采用了不同尺度的样本采样,Hard mining策略,也都是老套路了;

你可能感兴趣的:(CrowdNet: A Deep Convolutional Network for Dense Crowd Counting阅读笔记)