欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

单图人群计数的多列卷积神经网络方法学习笔记

最编程 2024-02-10 20:54:34
...

Zhang Y , Zhou D , Chen S , et al. Single-Image Crowd Counting via Multi-Column Convolutional Neural Network[C]// 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2016.


贡献:

(1)多列架构的原因是:三列对应于不同大小的感受野(大,中,小),使每个列卷积神经网络的功能对由于透视或不同的图像分辨率造成的人/头大小变化是自适应的(因此,整体网络是强大的)。
(2)用一个1*1滤波器的卷积层代替了完全连接的层,因此模型的输入图像可以是任意大小的,避免了失真。网络的直接输出是一个人群密度估计图,从中可以得到的整体计数。
(3)收集了一个新的数据集用于人群计数方法的评价。比现有的数据集包含更复杂的情况,能更好地测试方法性能,1198张图,330,165精确标定的人头。数据集分A和B两个部分,A是从互联网上随机找的图,B是上海的闹市截取图,如图5所示为A、B部分图。


主要实现:

几何适应高斯核:

训练数据中的人群密度的标定质量决定了CNN模型的性能。这里介绍下如何将带有标签的人头图像转换为人群密度图。
一幅有N个头的图像label表示为:



为了使得密度图能够更好地与不同视角(不同人头大小)且人群很密的图像对应起来,作者对传统的基于高斯核的密度图做了改进,提出了基于几何适应高斯核的密度图,由下式表示:



xi表示人头在图像中的像素位置,δ(x−xi)表示图像中人头位置的冲击函数,N为图像中的人头总数,

CNN结构:

MCNN主要是受到MDNNs[6] 在图像分类上取得成功的启发而提出来的。MCNN网络的每一列并行的子网络深度相同,但是滤波器的大小不同(大,中,小),因此每一列子网络的感受野不同,能够抓住不同大小人头的特征,最后将三列子网络的特征图做线性加权(由1x1的卷积完成)得到该图像的人群密度图,类似模型融合的思想。采用了2*2的max-pooling和ReLU激活函数。(注意,因为这里用到了两次max-pooling,所以需要先对训练样本也缩小到1/4,再生成对应的密度图ground truth)


评估方法:

论文地址:

https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Zhang_Single-Image_Crowd_Counting_CVPR_2016_paper.pdf

github地址(官方):

https://github.com/svishwa/crowdcount-mcnn

(非官方):

https://github.com/wwq-online/MCNN_REPRODUCTION

参考:
1、翻译——人群计数:Single-Image Crowd Counting via Multi-Column Convolutional Neural Network(CVPR2016)
2、人群计数之MCNN
3、人群密度估计之MCNN--有代码