Background overlay
2232 字
11 分钟
InhwanBae Project - 代码和创新点
2026-06-03
更新中...

人群发射模型 - Crowd Eimtter#

1. 传统扩散模型 - Traditional Diffusion#

早期的 DDPM 传统的扩散模型是直接在像素空间中工作

  • 工作原理: 它拿一张真实的高清图片,一步一步地往上面加高斯噪声,直到图片变成纯粹的雪花噪点。然后,模型U-Net学习如何一步一步地把这些噪点去掉,最终还原出清晰的图片。

  • 缺陷: 如果要生成一张 1024x1024 的彩色图片,由于包含 RGB 三个通道,模型在每一步去噪时,都需要计算和预测 1024 × 1024 × 3 ≈ 314 万个数据点。这意味着它需要极其庞大的显存和漫长的计算时间。

2. 潜在扩散模型 - Latent Diffusion Model, LDM#

Latent Diffusion是为了解决传统模型“太慢、太吃显存”而诞生的革命性升级。它的核心思路是:降维打击,在压缩空间里做扩散。 核心原理是利用VAE的隐空间压缩维度减少资源消耗。

  1. Encode: VAE 的编码器就像一个超级压缩软件,把庞大像素图片,压缩成一个体积非常小,但包含了所有关键特征的“Latent Space”矩阵。
  2. Diffusion: 所有的加噪和去噪过程,全部在这个微小的 潜在空间中进行。因为数据量极小,计算速度呈指数级提升。
  3. Decode: 在潜在空间里把图去噪后,再用 VAE 的解码器,把这个微小的矩阵“解压”回高清像素图片。

3. 论文中的机制 - Dimension-Expanded Diffusion#

  1. Encode: 首先执行标准化 - Normalization,随后通过显式的张量复制 - Replication,将其拓展至高维空间。
  2. Diffusion: 所扩散过程在此扩展维度上运行,在更高纬潜空间中进行。每次都独立加载以求融合更多的特征。
  3. Decode: 解码时则通过平均池化与反标准化还原。

训练阶段
原始人群参数
(batch, max_agents, 7)
VAEEncoder
归一化 + repeat 复制 16 份
扩维 latent
(batch, max_agents, 16 * 7)
DDIMScheduler.add_noise
加入随机噪声
noisy latent z_t
(batch, max_agents, 112)
CrowdESEmitterModel
输入:z_t + mask + environment condition + timestep
输出:预测噪声 noise_pred
MSE(noise_pred, noise)

作者学习的是标准 DDPM/DDIM 风格的 噪声预测任务。

  • 把人群发射建模成条件扩散生成问题 传统方法可能会直接回归起点、终点、速度或用规则采样。这里作者把整个 crowd emission 表示成一个可去噪生成的 latent,使模型能够生成多样化的人群配置。

  • 同时生成多个 agent,而不是逐个生成 模型输入是: (batch_size, max_num_agents, latent_dim) 并且使用 mask 处理不同人数。这说明它一次生成一个 crowd set,而不是一个人一个人生成。 这有利于建模群体层面的分布,而不是只看单个行人。

  • 使用 social transformer 建模群体关系 social_transformer 让每个 agent 之间可以互相注意,从而捕获群体行为模式。例如:

    1. 多个行人的起点不能完全重叠
    2. 不同 agent 的目标区域可能有结构性关系
    3. 人群出现时间可能存在先后模式
    4. 不同人的运动方向需要整体协调这比独立采样每个 agent 更合理。
  • 环境条件图驱动生成 模型不是无条件生成人群,而是根据 condition 图生成。环境图经过 CNN 编码后参与调制 agent 表示,使生成结果受场景约束。 这意味着模型可以根据不同场景生成不同的人群发射配置。

  • 时间步 + 环境条件联合调制 模型把 diffusion timestep 和环境 embedding 拼接后作为条件: condition + timestep_embed 这使得模型在不同去噪阶段使用不同的环境引导强度。

  • latent 扩维机制 作者没有真正训练 VAE,而是把原始 7 维参数复制成更长 latent: 7 -> 16 x 7 这可能是为了让扩散模型在更高维空间中工作,增强表达能力,同时避免真实 VAE 的训练复杂度。

  • Leapfrog 初始化 推理阶段不是完全从纯随机噪声开始,而是先利用 appearance density map 采样起点和终点,再只扩散其他属性或局部扰动。这可以:

    1. 减少采样步数
    2. 提高起点/终点与场景密度图的一致性
    3. 让生成结果更稳定

人群模拟模型 - Crowd Simulator#

负责持续轨迹和行为状态切换

  1. MLP 条件 用于把条件信息编码成一个综合的特征隐藏层表示输出8个行为状态: 历史轨迹 traj_hist 目标点 goal agent 属性 attr 控制向量 control 邻居交互信息 neighbor 环境地图特征 env_data

  2. Conditional VAE / Latent Variable Model

    • 人类选择的“离散性”: 假设你正在往前走,正前方有一棵树。你的选择只有两个:要么从左边绕,要么从右边绕。不应该选择一种“50%向左 + 50%向右”的中间状态。人类的宏观决策 — 左转、右转、直行、停止 往往是离散的。

    • 离散分布的降维打击: 作者使用 KMeans 将未来轨迹的终点聚类成 8 个离散的锚点。模型被迫做出明确的站队:你要么选状态 1(向左),要么选状态 2(向右)。一旦做出了明确的离散选择,解码器就能专心画出合理的轨迹,彻底杜绝了“撞树的平均轨迹”。

  3. Mixture Density / Anchor-based Trajectory Prediction 作者的行为状态很像 anchor-based trajectory prediction: 先定义若干行为/终点 anchor 再预测当前样本属于哪个 anchor 最后根据 anchor 生成具体轨迹 代码里就是对归一化未来终点做 KMeans,得到 latent_dim 个 behavior states。

  4. Markov Chain / Hidden Markov Model 推理时不是每段轨迹独立采样,而是让当前行为状态受上一状态影响: p(z_t | condition_t, z_{t-1}) 代码实现是把 previous_state * alpha 加到当前状态概率上。

  5. Transformer / Social Attention 它用 social_transformer 编码邻居轨迹。你需要理解 self-attention 如何让一个 agent 关注附近 agent,从而建模避让、跟随、群体运动。

  6. CNN 环境编码 局部环境图 env_data 经过 CNN 编码成环境 embedding。理解普通 CNN 特征提取即可,不需要复杂视觉模型背景。

  7. Navigation Mesh / Path Planning 基础 这不是生成模型,但对 Simulator 很关键。NavMesh 用来计算 control point,相当于给模型一个局部导航方向,避免只朝终点直线走。

1. Navigation Mesh & Polyline Path#

感知:全局导航数据、局部环境视觉 这是整个模型的“输入感知层”,负责提供宏观与微观的物理世界信息。

  • Navigation Mesh / Path Planning 基础 - 7

    • 体现:图中左侧明确画出的橙色网格和彩色路径。这部分不通过复杂的神经网络处理,而是通过传统路径规划算法,提取出局部的 control point 作为后续的输入条件。
  • CNN 环境编码 - 6

    • 体现:在代码中,这块局部地图被裁剪成 env_data,通过 CNN 提取出环境特征向量,告诉模型哪里是障碍物。

2. Switching Probability#

感知:环境+自身状态 负责模型的决策,判断当前应该做什么动作。

  • MLP 条件模型 - 1

    • 体现:它把前面所有的环境、导航、自身属性等特征拼接起来,通过多层全连接网络进行特征提取。
  • Conditional VAE / 离散 Latent Variable Model - 2

    • 体现:该模块不直接输出坐标,输出离散潜在变量 zz 的概率。
  • Anchor-based Trajectory Prediction - 3

    • 体现:它输出的具体概率维度(8 维),正是对应了提前用 KMeans 算好的 8 个“意图锚点”。这把无限的轨迹预测变成了一个有限类别的分类问题。

3. Markov chain#

感知:社交交互动态 这是模型的社交与惯性处理,负责处理人与人、当前与过去的动态关系。

  • Markov Chain / Hidden Markov Model - 4

    • 体现:它接收 Switching Probability 输出的概率,并结合上一时刻的决策(上一帧的 zz),确保行人的意图不会发生物理上不合理的突变,实现平滑的状态切换。
  • Transformer / Social Attention - 5

    • 体现:粉色箭头代表了 Agent 之间的交互。在输入给预测器之前,模型必须先通过 Social Transformer 提取邻居对自身的影响。

4. State-Switching Trajectory Predictor#

负责把意图翻译成具体的物理动作。

  • Conditional VAE / Latent Variable Model (生成阶段) - 2

    • 体现: CVAE 流程的后半程 。将 Markov 链确定下来的当前离散状态 zz 作为额外条件拼接入网络,最终解码输出未来具体的轨迹坐标 (x,y)(x, y)
InhwanBae Project - 代码和创新点
https://icemeow.top/blog/posts/graduate/projects/inhwanbae/note-2/
作者
ICEMeow
发布于
2026-06-03
许可协议
CC BY-NC-SA 4.0