参考:
https://www.jianshu.com/p/a1006c4b6fdc
https://blog.csdn.net/wuyanxue/article/details/79642758

人群基数方法分类

(1) 基于目标检测的方法: 这类方法就是通过对图像上每个行人或这人头进行定位与识别,再根绝结果统计人数。优点在于可以做到准确的行人或者人头位置,但缺点在于对高密度的人群图像来说,其检测效果差;(2)基于回归的方法:这类方法可以叫做人群数目估计,没有精确定位行人位置,而是对大概的人群数目给出个估计值;优点在于对高密度人群图像来说,其效果是比基于目标检测方法的好,但缺点没有精确的定位。 基于回归的方法分为两类: 1)直接回归:如在深度学习的卷积神经网络中输入人群图像,直接输出一个人群数目估计值; 2)密度图回归:密度图回归的意思是(已知的数据集是这样的,每一张人群图像中的每个人头所在近似中心位置的坐标作为人工标注),根据已知的每个人头位置,再估计该位置所在人头的大小,这样可以得到该人头的覆盖区域,通过一种方法(MCNN中采用几何自适应高斯核),将该区域转化为该区域内可能为人头的概率,该区域概率和为1(或者表示每个像素可能有多少个人),最终我们可以得到一张人群密度图。

密度图的表示方法

密度图表示经过两个步骤:人群图像标注表示,人群图像标注转换为人群密度图(这里的描述语言是自己编的,为了更易于理解)1. 人群图像标注表示 如图1所示,19*19大小方格表示人群图像(绿色外层方格表示坐标),该图像包含3个人,以左上角为坐标原点,坐标(3, 6), (12, 9), (17, 15)表示标注的人头中心点位置(在图1中表示为方格对应坐标的值为1)。

2. 人群密度图转换表示(人群图像标注转换为人群密度图)

假设在图像中每个人头大小都是3*3像素(当然这只是示例假设,MCNN中用几何自适应高斯核来估计图像中每个人头的大小并转换为密度图,这是后话了,这里我们想讲述的是什么是密度图,以及转换为密度图的方法之一)

图2就是我们作为卷积神经网络进行人群计数的Ground Truth,各个人头区域的概率之和为1,得到对完整人群图像的密度图后,对其进行积分(求和)就是人群数目。

MCNN

这里我们先来描述MCNN具体的标签密度图生成方法,再来描述MCNN的网络结构和损失函数、训练方式、评价指标。1. 标签密度图生成方法 步骤a. 表示人头中心坐标位置,用函数表示,对于一张有个人头标注的人群图像来说可以表示为函数(其实得到的就是如图1的人群图像标注表示):

步骤b. 转化为连续密度函数,其中G_{\sigma _{i}} 所表示的就是高斯核,\sigma {i}为高斯核标准差,\beta 是个定值,论文里取0.3,\bar{d} i=\frac{1}{k}\sum\nolimits_{k}jd{j}^i 表示图像中该人头距离其k邻近人头的欧式距离和的平均,\bar{d} ^i也是用于表示估计的人头大小(在图2人群密度图表示的时候,使用二维高斯核时,需要设定高斯核大小用以表示估计的人头大小)

若人群分布密集,所计算的\bar{d} ^i值能够相对准确用于估计人头大小;但若人群分布稀疏,其k近邻人头距离过远,\bar{d} ^i值就会非常大,人头估计误差大,因此将\bar{d} ^i限制在100像素内。

高斯核介绍

线性支持向量机 (Linear-SVM) 被用于线性可分的数据集的二分类问题,当数据集不是线性可分的时候,需要利用到核函数将数据集映射到高维空间。这样数据在高维空间中就线性可分。

高斯核函数(Gaussian kernel),也称径向基 (RBF) 函数,是常用的一种核函数。它可以将有限维数据映射到高维空间,我们来看一下高斯核函数的定义:

上述公式涉及到两个向量的欧式距离(2范数)计算,而且,高斯核函数是两个向量欧式距离的单调函数。σσ 是带宽,控制径向作用范围,换句话说,σσ 控制高斯核函数的局部作用范围。当xx 和x′x′ 的欧式距离处于某一个区间范围内的时候,假设固定x′x′,k(x,x′)k(x,x′) 随x的变化而变化的相当显著。

一维情况
令x′=0x′=0,k(x,0)k(x,0) 随x的变化情况如下图所示

σ=1

σ=5
我们看到,随着x 与x′的距离的距离的增大,其高斯核函数值在单调递减。并且,σ越大,那么高斯核函数的局部影响范围就会越大。

二维情况

σ=1

二维可以更加明显的看出高斯核函数局部作用的范围随带通的变化情况。带通越大,高斯核函数的局部影响的范围就越大。在超出这个范围之后,核函数的值几乎不变。

高斯核将数据映射到高维甚至无穷维的原理
通过一些简单的推导,我们可以得到这样的结果,为了描述简单,我们令高斯核中的分母为1

MCNN网络结构


MCNN的多列主要体使用了三列卷积神经网络,表示为 L列(使用大尺度卷积核:, M列(使用中等尺度卷积核: ), S列(使用小尺度卷积核: , 其目的在于使用多种尺度的卷积核来适应不同尺度的人头大小。最后将L,M,S三列卷积神经网络进行合并,得到网络生成的密度图。同时MCNN也是比较轻量级的,网络参数少。 从图5中可观察到,MCNN实际的下采样l累积系数为4,因此网络输出的密度图也是原图宽高的1/4,在制作其作为训练数据的标签密度图时,除了要制作为原图1/4的密度图外,几何自适应高斯核相关的的限制,也要相应为1/4,将限制在100/4=25个像素之内。

损失函数

MCNN采用的如下公式的损失函数,L2范数的平方:

训练方式

在训练方式主要想提的是: 1)MCNN需要先对三个单列神经网络进行预训练,再合并训练才能达到更好的效果其数据处理的方式; 2)MCNN对原始数据集的每张训练集图像随机裁剪9次,得到9张图像子块,每个图像子块为原图的1/4。 (这样的图像子块训练有其优点a. 图像尺寸变小,加快网络训练速度;b. 通过局部图像块的训练完成对完整图像的训练,同样能达到很好的效果)

评价指标

MCNN所采用的评价指标如下,平均绝对误差MAE与均方误差MSE(实际应该是均方根误差RMSE)

关于人群基数MCNN和高斯核相关推荐

  1. 人群计数 MCNN 解析 PGCNet

    人群计数研究的发展 传统的:直接回归计数法--- input(图片)-->outout(人数)  参考 目前深度学习主流的: input(图片)-->output(密度图)-->估计 ...

  2. CS131专题-2:高斯核、噪声、滤波

    目录 1 高斯核 1.1 一维定义 1.2 二维定义 1.2.1 应用高斯核的过程 1.2.2 不同σ值的高斯核情况 1.2.3 不同核宽度情况 1.2.4 高斯核(滤波)特性 1.2.5 使用高斯核 ...

  3. ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)

    ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核) 目录 输出结果 设计思路 设计代码(部分代码) 输出结果 设计思路 设计代码(部分代码) var doTest = functi ...

  4. 图像处理核函数:之高斯核的生成方法 python

    图像处理核函数:之高斯核函数的生成方法 python 高斯核函数(低通高斯滤波器核) 高斯分布函数 高斯核生成函数 代码 效果 高斯核函数的图像 高斯核函数(低通高斯滤波器核) 最近在看DIP(Dig ...

  5. python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...

    点击上方蓝色字体,关注AI小白入门哟 作者 | 文杰 编辑 | yuquanle 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失,然后 ...

  6. TensorFlow HOWTO 2.3 支持向量分类(高斯核)

    遇到非线性可分的数据集时,我们需要使用核方法,但为了使用核方法,我们需要返回到拉格朗日对偶的推导过程,不能简单地使用 Hinge 损失. 操作步骤 导入所需的包. import tensorflow ...

  7. matlab二分类svm高斯核 实例,16 SVM - 代码案例三 - 不同SVM核函数效果比较

    SVM的章节已经讲完,具体内容请参考:<01 SVM - 大纲> 常规操作: 1.头文件引入SVM相关的包 2.防止中文乱码 3.读取数据 4.数据分割训练集和测试集 6:4 import ...

  8. 高斯滤波的开始——高斯核的计算

    高斯滤波的开始--高斯核的计算 首先先说说高斯滤波的含义:高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程.通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点 ...

  9. C++性能优化系列——3D高斯核卷积计算(二)FMA向量化计算一维卷积

    高斯核的卷积计算是可分离的,即高斯核的每一个维度可以分开处理.因此,一维卷积计算成为了实现3D高斯卷积的基础.一维卷积计算的性能直接影响了整个程序的性能.本篇将实现一维卷积功能,同时引出ICC编译器对 ...

  10. 非参数估计-高斯核平滑Gaussian kernel smoothing-非参数密度估计

    目录 1 非参数回归-核平滑 1.1 概念和计算 1.2 Nadaraya-Watson回归 1.3 高斯核 2 高斯核平滑过程-Python实现 2.1 加载库和生成数据 2.2 Full Widt ...

最新文章

  1. python函数中参数前面的*和**的含义
  2. html插入不规则表格,如何构建HTML表格中的不规则形状?
  3. 安装mq的时候,计算机用户名是中文名的解决办法
  4. saleor设置braintree支付方式
  5. 分别使用 XHR、jQuery 和 Fetch 实现 AJAX
  6. 计算机编程老鸟的心得,java入门123——一个老鸟java学习心得.docx
  7. 信息系统状态过程图_操作系统中的增强型过程状态图
  8. 【OpenCV 例程200篇】16. 不同尺寸的图像加法
  9. 【拓扑排序】确定比赛名次
  10. onvif协议_大华的录像机添加海康摄像头,使用了onvif协议,为啥也添加不进去?...
  11. 中判断字符串是否为空_自己动手编写VBA代码,判断一个工作表是否为空,然后删除它...
  12. 一种基于语音识别的机器人语义识别系统的制作方法
  13. 使用Excel导出.xml文件
  14. MT4的交易记录导入“复盘大师3”的解决办法
  15. 做了6年的Java,java简历包装项目经验
  16. 从零开始的JAVA反序列化漏洞学习(一)
  17. 魔兽争霸平台显示服务器地址错误,发现(魔兽争霸出现错误的解决方法)
  18. Ubuntu下VMware安装win10虚拟机教程,以及卡死报错解决方法
  19. 【web安全学习篇2】kali基本命令
  20. 我是如何实现「朋友圈图片评论」的?

热门文章

  1. WebSocket connection to ‘ws://localhost:8081/ws‘ failed: Invalid frame header
  2. 未来改变世界的十大新技术
  3. 8uftp,什么是8uftp
  4. 3道js面试题引发的脑洞
  5. c语言除法计算和取模计算
  6. 计算机专业拼音怎样写,拼音汉字计算机输入方法
  7. 【Unity3D插件】AnyPortrait插件分享《(二)制作角色动画》
  8. Unity3D插件大全
  9. 图像数字水印技术研究及matlab实现,基于DCT的数字水印技术研究及matlab实现.doc...
  10. JS 绘制 Cardinal 样条曲线