资讯动态

从密度图到图神经网络:人群计数技术演进与工程实践全解析

发布时间:2026/8/28 7:54:28 来源:尧图企业网站定制
1. 项目概述为什么我们需要重新审视“人群计数”如果你在科技公司负责安防产品线或者在智慧城市项目里搞算法落地又或者只是个对计算机视觉感兴趣的学生那么“密集人群检测与计数”这个课题你大概率听过甚至可能觉得它有点“老生常谈”了。毕竟从早期的检测框、密度图到后来的各种CNN、Transformer变体相关的论文和开源代码已经多如牛毛。我自己在安防和智慧交通领域摸爬滚打了快十年从最早的基于Haar特征的检测器开始到后来部署各种深度学习模型感觉这个领域的技术栈似乎已经相当成熟了。但最近当我看到“Large Language Models on Graphs: A Comprehensive Survey”这类关于大模型与图结构结合的综述成为热点时我突然意识到我们可能正站在一个重新审视“人群计数”问题的十字路口。传统的“密集人群检测与计数survey”往往聚焦于如何从一张静态图片或一段视频中更精确地数出人头数。这当然重要尤其是在地铁站、演唱会、景区入口等场景精确的计数是客流管理、安全预警的基础。然而仅仅“数数”就够了吗在实际项目中我遇到的痛点远不止于此。比如在大型交通枢纽管理者不仅想知道“现在有多少人”更想知道“人群正在向哪个方向移动”、“哪些区域即将形成拥堵瓶颈”、“异常聚集是如何发生和演变的”。这些问题本质上是对人群动态、群体关系、时空演化的理解而不仅仅是像素级的计数。这恰恰是传统方法尤其是基于CNN的密度图回归的短板它们擅长处理外观特征但对场景中个体与个体、个体与环境的复杂交互关系建模能力有限。因此这篇“survey”我想换个角度来写。它不仅仅是对现有计数方法的罗列和比较更是一次对“人群分析”任务边界拓展的探讨。我们将从最基础的“数人头”需求出发逐步深入到人群动态分析、异常行为识别、以及未来与大模型、图神经网络等新技术结合的可能性。我会结合我过去在项目里踩过的坑、做的妥协、以及看到的新机会来聊聊这个看似古老却充满新意的领域。2. 核心思路演进从“数数”到“理解”要理解这个领域的全貌我们得先理清它的技术发展脉络。这不是简单的时间线罗列而是理解每一代技术解决了什么核心矛盾又留下了什么新问题。2.1 传统方法与早期深度学习解决“看得见”的问题最早的思路非常直接把人头当作一个普通物体用目标检测的方法如Viola-Jones框架、HOGSVM去框出来然后数框。这个方法在稀疏场景下还行但一到“密集”场景就彻底抓瞎。人与人之间的严重遮挡让检测器根本分不清谁是谁。于是研究者们转换了思路我们不检测单个个体了我们直接回归整个场景的“人数”。这就是密度图估计Density Map Estimation的经典范式。它的核心思想是给输入图片的每个像素点分配一个“人头可能性”的密度值整张图所有像素的密度值加起来就是总人数。2015年左右的《Single-Image Crowd Counting via Multi-Column Convolutional Neural Network (MCNN)》是里程碑式的工作。它用多个不同尺寸卷积核的CNN列来捕捉不同大小的人头特征最后融合得到密度图。注意密度图方法有一个非常关键的预处理步骤——生成“真值密度图Ground Truth Density Map”。通常做法是在每个人头标注点一个坐标上放置一个高斯核人头密集的地方高斯核会重叠形成一片高密度区域。这个高斯核的方差σ设置很有讲究设置小了密度图峰值尖锐不利于训练设置大了会模糊化细节。在实际项目中我们常常需要根据数据集中人头的平均尺寸来动态调整这个σ而不是用一个固定值。这个阶段的核心矛盾是如何从严重遮挡的图片中提取有效特征。解决方案是设计更精巧的CNN网络结构比如利用多尺度特征CSRNet、结合注意力机制SANet、或者引入透视信息通过预估计的透视图来调整感受野。这些方法在公开数据集如ShanghaiTech, UCF_CC_50上刷高了指标但也带来了新问题模型变得复杂计算成本高并且严重依赖大量精细标注的数据每个头都要标点。2.2 当前主流范式效率、泛化与上下文理解随着落地需求越来越迫切研究重点开始转向提升效率与轻量化很多计数场景需要部署在边缘设备如摄像头、闸机上。像DM-Count、Bayesian Loss等方法在保证精度的同时开始关注模型的计算量和参数量。我们团队曾尝试将一个大模型蒸馏成一个小模型发现在一些固定场景下小模型的精度损失在可接受范围内但推理速度提升了3倍以上这对实时预警至关重要。解决域适应与泛化这是工业落地最大的“坑”。一个在ShanghaiTech数据集上表现SOTA的模型直接用到我们自己的商场摄像头画面上效果可能骤降。原因包括光照差异、摄像头角度、人群服饰、图像分辨率等。目前主流方法是利用无监督或弱监督学习比如循环一致性学习、风格迁移等让模型能快速适应新场景。我的经验是与其追求一个“万能”模型不如准备一个“基础模型少量新场景数据微调”的流水线更务实有效。引入上下文与拓扑信息纯视觉特征在极端密集如音乐节前排或视角畸变严重如高空俯拍时仍然乏力。一些工作开始显式地引入场景的拓扑结构比如将人群视为一个图Graph每个人头是节点人与人之间的空间或特征相似性是边然后用图神经网络GNN来聚合信息。这已经有点“理解”人群结构的味道了。2.3 新范式萌芽走向“具身”人群分析这正是当前最让我兴奋的地方也是受到“大语言模型与图”这类综述的启发。传统方法把人群计数当作一个独立的、静态的视觉任务。但真实世界的人群是动态的、有交互的、有意图的。从静态到动态视频计数与轨迹预测只分析单张图片丢失了最重要的时序信息。视频人群计数不仅要数出每一帧的人数更要保证时序上的平滑和一致并可以跟踪特定区域的客流变化。更进一步我们可以预测个体的短期移动轨迹Trajectory Prediction这对于预防对冲和踩踏风险意义重大。这需要结合时序模型如3D CNN, ConvLSTM和运动学模型。从计数到行为理解数出100个人和识别出“这100个人正在慌乱奔跑”价值完全不同。后者属于群体异常行为检测。这需要模型能理解“正常”的人群运动模式比如有序通过闸机并检测出偏离该模式的异常比如突然四散奔跑。这通常需要建立更复杂的场景模型并定义有效的异常度量指标。大模型与多模态的冲击尽管目前直接将百亿参数的大语言模型LLM用于像素级人群计数不现实计算成本太高但其思想正在渗透。比如提示学习Prompt Learning能否用自然语言描述场景“地铁早高峰站台”、“夕阳下的海滩”来引导计数模型更好地适应不同场景多模态融合除了视觉是否可以结合音频嘈杂程度、Wi-Fi信号强度、甚至社交媒体数据来综合判断人群规模和状态这在大型活动安保中很有价值。图结构与大模型结合这正是前沿热点。将人群、环境中的关键物体出入口、栏杆、屏幕建模为异构图Heterogeneous Graph利用图神经网络学习其关系再将这些结构化的知识与大模型的强大推理能力结合或许能回答更复杂的问题“如果A出口关闭人群将如何分流B区域的压力有多大”3. 技术方案深度拆解以经典与前沿为例光讲思路太虚我们拆两个具体的技术方案看看门道一个代表经典的、以精度为核心的密度图方法另一个代表前沿的、引入图结构思考的方法。3.1 经典方案解析自适应密度图生成与多尺度融合我们以CSRNet这个经典网络为例。它之所以经典不是因为结构最复杂而是因为它清晰地展示了如何通过改进网络“后端”来提升性能。CSRNet使用VGG-16作为前端特征提取器后端则替换为一系列扩张卷积Dilated Convolution层。扩张卷积可以在不增加参数、不降低分辨率的情况下扩大感受野。这对于人群计数至关重要因为判断一个像素是否属于人头往往需要看到它周围一大片区域尤其是密集时。实操中的一个关键细节密度图真值的自适应生成。大部分开源代码和论文都使用固定σ的高斯核。但在实际数据集中由于透视效应近处的人头大远处的人头小。一个固定大小的核近处可能覆盖不完整一个人头远处则可能覆盖了好几个人头这会导致真值密度图失真。我们的改进方法是根据每个人头标注框的大小如果有点标注可以估算一个近似的头部尺寸来动态决定高斯核的σ。具体来说σ可以与标注点与其最近邻的K个点的平均距离成正比。这样近处头部大、间距大的σ就大生成的高斯核范围大远处头部小、间距小的σ就小生成的高斯核更集中。这一步预处理对最终模型性能的提升有时比换一个更复杂的网络结构还明显。另一个心得多尺度训练与测试。人群图像中目标尺度变化极大。除了使用像MCNN那样的多列结构一个简单有效的技巧是多尺度训练Multi-Scale Training。在训练时随机将输入图片缩放到不同尺寸例如0.8x, 1x, 1.2x这相当于让模型同时学习不同尺度的人头特征。在测试时可以采用多尺度测试融合Multi-Scale Test Augmentation对同一张测试图生成多个缩放版本分别输入模型得到密度图再缩放到原图尺寸后取平均或加权平均能有效平滑预测结果提升鲁棒性。3.2 前沿方案窥探图神经网络在人群分析中的应用我们来看一个将人群建模为图Graph的思路。假设我们已经通过一个基础检测器或特征提取网络得到了图像中N个可能的人头区域的特征向量作为图节点以及这些区域之间的空间关系作为边。图的构建节点Node每个人头区域的特征可以是CNN提取的视觉特征。边Edge定义节点间连接关系。常用的是K近邻K-Nearest Neighbors法基于节点的空间坐标如密度图峰值点每个节点只与其最近的K个节点相连。也可以根据特征相似度来建边。图神经网络GNN的运作GNN的核心操作是“消息传递Message Passing”。每一层GNN中每个节点会聚合其邻居节点的信息更新自身的特征。聚合Aggregate对于节点i收集所有邻居节点j的特征。更新Update将聚合后的邻居信息与节点i自身的特征结合通过一个可学习的函数如神经网络生成节点i的新特征。经过几层这样的消息传递每个节点的特征就不再是孤立的视觉特征了而是包含了局部人群结构信息的“增强特征”。这个特征包含了“我周围有多挤”、“我和旁边的人朝向是否一致”等隐含信息。如何用于计数一种方式是将更新后的节点特征输入一个回归器直接预测该节点代表的人数通常是分数如0.8个人。另一种更巧妙的方式是利用图的结构来优化密度图。我们可以将初始的、可能噪声较大的密度图峰值点作为节点通过GNN学习节点间的相关性然后反过来“修正”每个峰值点对应的密度值。例如如果一个孤立的峰值点被周围节点“认为”不应该存在它的密度值就会被抑制。踩坑实录我们尝试将GNN引入到一个商场顶视摄像头的计数项目中。最初直接使用坐标KNN建图效果不稳定。后来我们发现在顶视视角下人与人之间的遮挡模式与平视不同单纯的空间距离不足以反映关联。我们改为结合两种边一是空间距离边物理接近二是外观特征相似度边颜色、纹理相似。用余弦相似度计算外观特征超过阈值的也连上边。这样即使两个人被柱子隔开一段距离但如果穿着类似的衣服可能是同一旅行团它们之间也会建立连接。这个简单的改进让计数误差MAE降低了约15%。这说明了先验知识对场景的理解融入模型结构的重要性。4. 完整项目实践从数据准备到模型部署纸上得来终觉浅我们以一个虚拟的“智慧公园人流监控系统”为例走一遍完整的流程。假设我们需要在公园的几个关键路口和广场部署算法实时统计人数并预警过度聚集。4.1 数据准备与标注策略数据收集来源安装摄像头最好是固定机位视角稳定采集不同时段早、中、晚、不同天气晴、雨、不同人流密度工作日、节假日的视频。关键点一定要获取摄像头的内参如果做几何校正和安装高度、角度信息这对后续估计真实世界人数和区域面积有帮助。标注工作这是最耗时但最基础的一环。对于计数任务主流是“点标注”即在每个人头的顶部中心点点击一下。工具使用LabelImg、CVAT或更专业的VGG Image Annotator (VIA)。我们内部开发了一个带快捷键的标注工具标注员按空格键打点可以极大提升效率。标注规范遮挡处理只要能看到头顶的一部分就标一个点。完全看不见头部的不标。儿童与成人统一标注但在数据统计时可以记录儿童头部通常更小。密集区域放大图像仔细标避免漏标。可以使用“动态高斯核σ”的脚本预生成一些密度图给标注员参考让他们感受标注点如何影响密度扩散。数据增强除了常规的翻转、旋转、裁剪对于人群计数随机裁剪Random Cropping尤为重要。因为我们需要模型适应各种局部密集模式。裁剪时要注意裁剪块的大小必须远大于数据集中最大人头的尺寸否则会把人裁碎。4.2 模型选择与训练技巧模型选型权衡高精度场景服务器部署可以选择最新的一些基于Transformer或复杂CNN的模型如BL或SASNet追求在公开数据集上的最优指标。边缘计算场景嵌入式设备优先考虑轻量化模型如MobileCount、TinyFaces或者对现有模型进行剪枝、量化。记住一个原则在边缘端推理速度的优先级往往高于绝对精度。一个误差在10%以内但能跑30fps的模型比一个误差5%但只能跑5fps的模型更有用。训练细节与技巧损失函数最常用的是欧几里得距离Euclidean Loss即预测密度图与真值密度图像素之间的MSE。近年来贝叶斯损失Bayesian Loss和SSIM损失也很流行它们能更好地处理计数的不确定性和保持密度图的结构相似性。我的经验是对于初学者先用MSE Loss跑通基线再尝试更复杂的损失函数。学习率与优化器使用Adam优化器初始学习率设为1e-4。采用学习率衰减策略比如当验证集损失在连续5个epoch不下降时将学习率减半。验证策略不要只看整个验证集的平均MAE平均绝对误差和MSE均方误差。把验证集按密度分级稀疏、中等、密集分别看各级别的误差。很多时候模型在稀疏场景下表现很好拉低了整体MAE但在最关键的密集场景下却崩了。你需要确保模型在你最关心的密度区间是可靠的。4.3 部署与后处理模型部署格式转换将训练好的PyTorch/TensorFlow模型转换为部署框架支持的格式如ONNX、TensorRT、或OpenVINO IR。转换后一定要做数值精度验证确保转换前后在同一输入下的输出差异极小。推理引擎优化利用TensorRT/OpenVINO进行图优化、层融合、精度校准INT8量化可以大幅提升推理速度。我们曾将一个FP32的模型量化到INT8速度提升了2倍精度仅损失1.5%完全可接受。后处理与业务逻辑模型输出的是密度图求和得到总人数。但这只是开始。区域计数在视频画面中划定感兴趣区域ROI只对该区域内的密度图进行求和实现分区域统计。比如分别统计公园入口、中心广场、湖边长廊的人数。时序平滑视频流中逐帧计数会有抖动。采用一个简单的时间滑动窗口比如5帧取中位数或均值可以平滑结果避免数字跳变。人流量统计在ROI的边界如门口设置虚拟线通过比较相邻帧间人在线的哪一侧判断进出方向实现人流量统计。这需要结合轻量的跟踪算法如ByteTrack。预警规则将区域计数与阈值结合。例如“当中心广场人数超过500人时触发黄色预警超过800人时触发红色预警并通知安保人员疏导”。阈值需要根据场地面积和安全规范来设定。5. 常见问题、避坑指南与未来展望5.1 实战问题排查清单在实际部署中你会遇到各种各样模型在实验室里遇不到的问题。下面是一个快速排查表问题现象可能原因排查步骤与解决方案计数结果普遍偏高1. 真值标注漏标严重。2. 背景中有类似人头纹理的物体圆形灯具、石头。3. 密度图高斯核σ设置过大导致真值密度扩散过度。1.检查标注质量随机抽样一些训练图片将预测密度图叠加显示看高响应区域是否对应真实人头。2.数据清洗与增强加入更多包含干扰背景的负样本或使用注意力机制让模型聚焦于人体特征。3.调整真值生成复查并调整自适应高斯核的生成参数。计数结果普遍偏低1. 标注点位置不准确如标在了肩膀而不是头顶。2. 模型感受野不够无法捕捉密集小目标。3. 训练数据中密集样本不足。1.统一标注规范重新审核标注标准对标注员进行再培训。2.修改模型引入扩张卷积或特征金字塔FPN扩大感受野。3.数据重采样在训练时对高密度图片进行过采样。视频计数时数字剧烈跳动1. 单帧模型本身存在波动。2. 光照突变或相机抖动。3. 没有进行时序平滑。1.模型层面尝试使用视频数据集训练或引入光流信息作为额外输入。2.预处理增加视频稳像算法或使用直方图均衡化缓解光照变化。3.后处理必须加入时序平滑滤波如移动平均、卡尔曼滤波。在新场景摄像头下效果差域差异问题。新场景的光照、视角、分辨率与训练集不同。1.快速适配在新场景采集少量图片50-100张进行模型微调Fine-tuning。2.无监督适应如果没有标注尝试使用生成对抗网络GAN进行风格迁移将新场景图像风格转换到训练集域。3.设计时考虑泛化在原始训练中就使用更多样化的数据增强如颜色抖动、模拟不同噪声。边缘设备上推理速度慢模型过于复杂未针对硬件优化。1.模型轻量化选择或设计轻量网络使用深度可分离卷积。2.模型压缩进行剪枝移除不重要的神经元连接和量化将FP32转为INT8。3.引擎优化使用TensorRT/OpenVINO并开启所有优化选项。5.2 那些容易忽略的“坑”“标注一致性”比“标注数量”更重要10个人标1万张图如果标准不统一不如2个专业标注员标3000张图。前期花大力气制定详细的标注规范、进行多轮培训和交叉审核后期能省下大量调参和清洗数据的麻烦。小心“数据泄露”的变种在划分训练集和测试集时如果数据来自一段长视频切忌随机抽帧。因为相邻帧高度相似这会导致测试集信息“泄露”到训练集。必须按视频片段或时间段来划分。评估指标不能只看MAE/MSEMAE平均绝对误差告诉你平均差几个人MSE均方误差对大的误差更敏感。但还要看RMSE均方根误差和在误差阈值内的图片比例例如误差在10%以内的图片占多少。后者更能反映模型的稳定性。业务逻辑的复杂性算法工程师容易陷入“追求更低MAE”的怪圈。但业务方可能更关心“超过阈值的预警准确率”或“区域人数变化的趋势”。从一开始就要和业务方对齐核心指标这可能意味着你需要调整模型输出或后处理逻辑。5.3 未来方向与个人思考回顾这个领域从数人头到理解人群技术的演进始终围绕着如何让机器更好地感知和理解人类的集体行为。对于未来我觉得有几个方向值得深入1. 多任务协同学习计数不应该是一个孤立的任务。与其训练一个单独的计数模型不如设计一个网络同时输出人数、人群分布热力图、个体检测框在稀疏处、甚至粗略的人群流动方向。这些任务共享底层特征相互促进。比如检测框可以帮助修正密度图的定位流动方向信息可以帮助区分静止和移动的人群密度。我们在一个项目中尝试了“计数滞留检测”的多任务模型发现两个任务的性能都有小幅提升因为模型学到了更丰富的人群场景表示。2. 仿真数据与合成数据的价值标注真实世界密集人群数据成本极高且涉及隐私。利用游戏引擎如Unity、Unreal Engine或3D建模软件生成高度逼真的合成人群数据是一个越来越可行的路径。你可以自由控制人群数量、密度、移动模式、光照、天气生成无限量的、自带完美标注的数据。关键挑战在于“域鸿沟”——如何让模型将在合成数据上学到的知识迁移到真实世界。这本身就是一个前沿的研究课题仿真到真实Sim2Real。3. 与小模型、大模型的结合这是一个有趣的思路。大语言模型LLM或大型多模态模型拥有强大的常识和推理能力但计算成本高。我们可以设想一个协作系统轻量级的、专精于像素级感知的“小模型”负责快速生成密度图、检测关键点将结构化信息如“区域A约有120人人群正缓慢向B方向移动”传递给一个“大模型”智能体。这个智能体结合地图信息、历史数据、规则库进行更高层次的推理和决策“根据预案建议开放C出口分流”。这样既保证了实时性又提升了系统的智能水平。技术总是在解决老问题的同时揭开新问题的大门。密集人群计数从纯粹的计算机视觉问题正在演变为一个融合了视觉、时空推理、群体行为学甚至社会力模型的交叉领域。作为从业者我们既要深耕底层的感知精度也要抬头看看更上层的业务价值和应用场景。毕竟任何技术最终的价值不在于指标榜上的数字而在于它是否真的让我们的公共场所更安全、更高效、更有序。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价