人群密度估计 - CVPR2018最新论文CSRNet原理、配套代码解析

1 简介

CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes 

CVPR 2018论文原文:https://arxiv.org/abs/1802.10062

CSRNet 网络可以理解高度拥挤的场景并执行准确的计数估计以及呈现高质量密度图。

该网络主要包括两个部分,前使用一个卷积网络用于 2D 特征提取,后用一个空洞卷积网络代替池化操作。

对label文件进行高斯滤波处理,作为模型预测的GroundTruth。

CSRNet通过网络将输入图像映射到其各自的密度图。

该模型不使用任何全连接层,因此输入图像的大小是可变的。

模型从大量不同的数据中学习,并且考虑到图像分辨率,没有信息丢失。

在预测时不需要重新、调整图像大小。

模型体系结构使得输入图像为(x,y,3),输出是尺寸(x / 8,y / 8,1)的desnity图。 

在四个数据集(ShanghaiTech数据集,UCF_CC_50数据集,WorldEXPO_10数据集和UCSD数据集)上应用CSRNet,展现了最先进的性能。

作者代码:https://github.com/leeyeehoo/CSRNet-pytorch (Pytorch版本)

本文讲解代码:https://github.com/luckyluckydadada/CSRnet (keras版本 配套本博客文章讲解 注释完整)

2 提出问题

人群场景分析的潜在解决方案可以分为三类:基于检测的方法,基于回归的方法和基于密度估计的方法。

目前基于密度图估计多数采用了 multi-column (MCNN) 的架构和密度级别分类器,在这些方法中观察到四个缺点:

(1)很难训练multi-column CNN。

这种膨胀的网络结构需要更长时间训练。

(2)multi-column CNN引入冗余结构。

不同的列似乎表现相似而没有明显的差异。 

作者实验验证了采用 multi-column 表现的效果没比没采用 multi-column 的要好,该实验设计了一个具有相似数量参数的更深入,更规则的网络(表中A deeper CNN)。

设计 multi-column CNN (MCNN) 的本意是希望可以学习不同尺寸感受野的特征,

但是下图显示三个column 学习到的特征相似,没有达到设计之初的目的

(3)在MCNN中发送图像之前,需要密度级别分类器。

然而,由于对象的数量在大范围内变化,因此在实时拥塞的场景分析中难以定义密度水平的粒度。

此外,使用细粒度分类器意味着需要实现更多列,这使得设计更复杂并且导致更多冗余而且计算量比较大 。

(4)这些工作花费大部分参数进行密度等级分类,以标记输入区域,而不是将参数分配给最终密度图生成。

由于MCNN中的分支结构效率不高,因此缺少用于生成密度图的参数会降低最终精度。

考虑到上述所有缺点,我们提出了一种新的方法,专注于编码拥挤场景中的更深层特征并生成高质量密度图。

3 解决办法

拥挤场景解析的发展从简单的人群数值估计到人群密度图估计,生成准确的人群分布图挑战性比较大。

其中一个主要的困难就是离散化的问题,人在图像中不是只占用一个像素,密度图需要保持局部邻域的连续性。

其他的困难包括场景的多样性,相机角度的多样性。

3.1 Label数据预处理

在数据预处理中,主要目标是将数据集提供的图像转换为密度图

对于给定图像,数据集提供了由该图像中的头部标注组成的稀疏矩阵。

通过高斯滤波器将该稀疏矩阵转换为2D密度图。

密度图中所有单元格的总和为图像中的实际人数。

具体请参阅Preprocess.ipynb注释

过程:

  • 1 生成一张和原图一样大小的单通道图片,其中像素点全部取0。
  • 2 将label中有人头的点标记为1。
  • 3 通过高斯滤波处理这张图,形成的图就是人群密度图。

通俗解释,假如这张图只有1个人头点,那么通过高斯滤波这个凸点就会压在这张图上,以高斯分布的方式压入这张图,图上的所有点都被填充了值,图像上点的值形成空间上的高斯分布,这些值的总和为1。同理,有两个人头时,就通过第二次高斯分布转换,叠加在前一个高斯分布上,这样所有的像素点的求和为2。有几个人,像素点的值求和就是几。

3.2 网络

我们不采用多分支网络结构。具体网络架构如图:

 

  • 1 网络输入为(x,y,3)。
  • 2 网络的前端我们采用 VGG-16 卷积部分,三次pooling使宽高各为原来八分之一,并在其中加入了BatchNorm防止梯度消失。
  • 3 在后端我们采用空洞卷积来增加感受野。

作者实验发现B方案最好,也就是Dilation rate(膨胀率) =2。

 

  • 4 最后用一个1*1卷积(没有fc层),卷积核数为1,作为输出。所以输出为一张宽高各为原来1/8的单通道图(x/8,y/8,1)。

具体请参阅Model.ipynb

3.3 loss

我们先将密度图宽高转为原来1/8,这样网络输出的结果(pred)的shape 就和密度图(truth)的shape一样了,都为(x/8,y/8,1)。

所以我们采用欧式距离作为我们的损失函数。就是pred的各点和truth各点的均方差。

具体请参阅Model.ipynb注释

 

3.4 训练Trike

在keras中,难以训练输入图像的大小可变的模型,Keras不允许在同一批次中训练可变大小的输入。

解决此问题的一种方法是组合具有相同图像尺寸的所有图像并将它们作为批次进行训练。

另一种方法是独立地训练每个图像并在所有图像上运行循环(随机梯度下降,batch_size=1),这种方法在内存使用和计算时间方面效率不高。

因此,最好的一种方法是在keras中构建了自定义数据生成器,以有效地训练可变大小的图像,使用数据生成器,可以实现高效的内存使用,并且培训时间大幅缩短。

论文还指定了图像裁剪作为数据增强的一部分,但是,Pytorch的版本实现不会在训练时使用图像裁剪。

因此,我们提供了一个函数preprocess_input(),可以在image_generator()中使用它来添加裁剪功能。

具体请参阅Model.ipynb注释

3.5 预测

将原图输入模型,得到单通道图(x/8,y/8,1),也就是预测的密度图,对密度图上所有值求和,即为预测人数,密度图上值大的表示该区域人流密集。

4 评估和比较

4.1 ShanghaiTech数据集

ShanghaiTech人群计数数据包含1198个带注释的图像,总数为330,165人。

该数据集由两部分组成,A部分包含482张图像,这些图像具有从互联网上随机下载的高度拥挤的场景,而B部分包含716张图像,这些图像具有从上海街道拍摄的相对稀疏的人群场景。

结果如图,很好就对了。

4.2 其他数据集表现

其他数据集不多解释了,直接上图,表现依然很好。

 

5.结论

在本文中,提出了一种名为CSRNet的新型架构,用于人群计数和高质量密度图生成,并采用易于训练的端到端方法

我们使用扩张卷积层来聚集拥挤场景中的多尺度上下文信息,通过利用扩张的卷积层,CSR-Net可以在不损失分辨率的情况下扩展感受野

我们在四个人群计数数据集中演示了我们的模型,发现均具有最好性能的。

我们还将模型扩展到车辆计数任务,也达到了最佳精度。可以作为其他的拥挤场景计数。

  • 10
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
人工智能API是指人工智能技术公司提供的应用程序编程接口,用于让开发者能够使用这些公司的人工智能技术进行开发和应用。百度、腾讯和阿里是国内三家知名的互联网巨头,它们也提供了人工智能API。 百度的人工智能API主要有语音识别、人脸识别和自然语言处理等。语音识别API可以将语音转换为文字,支持多种语言和方言,可以应用于语音翻译、语音搜索等场景。人脸识别API可以识别人脸的性别、年龄、表情等信息,可以应用于人脸验证、人脸检索等场景。自然语言处理API可以对文本进行分词、词性标注、情感分析等处理,可以应用于智能客服、文本分类等场景。 腾讯的人工智能API主要有图像识别和机器翻译等。图像识别API可以识别图片中的物体、场景、文字等信息,可以应用于图像搜索、智能广告等场景。机器翻译API可以将文本进行自动翻译,支持多种语言,可以应用于在线翻译、多语种交流等场景。 阿里的人工智能API主要有人脸识别、语音合成和机器学习等。人脸识别API可以识别人脸的年龄、性别、表情等信息,可以应用于人脸验证、人脸检索等场景。语音合成API可以将文字转换为语音,支持多种语音风格和音色,可以应用于智能播报、语音导航等场景。机器学习API可以根据数据进行模型的训练和预测,可以应用于推荐系统、广告投放等场景。 总之,百度、腾讯和阿里的人工智能API提供了丰富的功能和接口,为开发者提供了丰富的人工智能技术支持,帮助开发者快速构建和应用人工智能相关的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值