Crowd Counting ~ Density_map(密度估计)

本文探讨了基于密度图回归的人群密度估计方法,详细介绍了如何利用已知的人头位置坐标,通过几何自适应高斯核计算人头覆盖区域的概率,最终形成密度图。标签数据GT使用2d高斯核计算作为训练标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考: http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html

            https://www.jianshu.com/p/a1006c4b6fdc

            https://blog.youkuaiyun.com/qq_16013649/article/details/78784791

基于密度图回归的人群密度估计

密度图回归:密度图回归的意思是(已知的数据集是这样的,每一张人群图像中的每个人头所在近似中心位置的坐标作为人工标注),根据已知的每个人头位置,再估计该位置所在人头的大小,这样可以得到该人头的覆盖区域,通过一种方法(MCNN中采用几何自适应高斯核),将该区域转化为该区域内可能为人头的概率,该区域概率和为1(或者表示每个像素可能有多少个人),最终我们可以得到一张人群密度

训练数据(主要介绍label):标签数据GT为密度图,根据对应的人头坐标通过计算2d高斯核作为训练标签。

 

### 人群计数技术及其实现方法 #### 基于传统计算机视觉的方法 早期的人群计数研究主要依赖于传统的计算机视觉技术和手工特征提取。这些方法通常涉及背景建模、前景分割以及基于几何形状或颜色的简单特征来识别个体行人。然而,这种方法在复杂场景下表现不佳,尤其是在高密度人群中难以区分单个对象。 #### 深度学习驱动的方法 近年来,随着深度神经网络的发展,特别是卷积神经网络(CNNs),已经成为了主流的人群计数工具之一。这类模型可以直接从原始像素数据中自动学习到有用的表示形式用于预测人数。具体来说: - **回归型CNN**:训练一个端到端的框架去直接映射输入图片至对应的人头数量。这种方式不需要显式的检测每个人的位置而只需给出总数目即可[^1]。 ```python import torch.nn as nn class CrowdCountingNet(nn.Module): def __init__(self, num_classes=1): super().__init__() self.backbone = ... # Backbone network like ResNet or VGG self.regressor = nn.Sequential( nn.Conv2d(in_channels=..., out_channels=512, kernel_size=7), nn.ReLU(inplace=True), nn.AdaptiveAvgPool2d((1, 1)), nn.Flatten(), nn.Linear(512, num_classes) ) def forward(self, x): features = self.backbone(x) output = self.regressor(features) return output ``` - **密集预测型CNN**:不同于简单的全局统计,该类方法旨在生成一张与原图尺寸相同但每一点都代表局部区域内的人员密度的地图——即所谓的“密度图”。最终的人数可以通过对该地图求积分获得。这种策略能够提供更加精细的空间分布信息,并有助于处理遮挡等问题[^2]. ```python def generate_density_map(image_shape, points): """Generate a density map from point annotations.""" h, w = image_shape[:2] density_map = np.zeros([h,w], dtype=np.float32) for p in points: y,x = int(p[1]),int(p[0]) if not (y>=h or x>=w): sigma = min(h/8., w/8.) gaussian_kernel = get_gaussian_kernel(sigma=sigma) top_left = max(int(y-sigma), 0),max(int(x-sigma), 0) bottom_right = min(int(y+sigma)+1,h),min(int(x+sigma)+1,w) masked_gaussian = gaussian_kernel[top_left[0]-y+sigma :bottom_right[0]-y+sigma, top_left[1]-x+sigma :bottom_right[1]-x+sigma] density_map[top_left[0]:bottom_right[0], top_left[1]:bottom_right[1]] += masked_gaussian return density_map ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值