乐于分享
好东西不私藏

AI引论 笔记 | 仿真

AI引论 笔记 | 仿真

著名的人工智能学家孙笑川曾经说过:爱引论是PKU最好的课程!

这是PKU爱引论的课程笔记,主要全景式介绍了仿真的各种方法,细节和原理有待诸君自行考究。这个文档的最大作用可能是把PPT中的AI变成公众号里的AI(其实我也不是很清楚这个算审美降级还是审美升级)

仿真的主要研究内容

  • 外观的仿真
  • 现象的仿真
  • 行为的仿真

几何与绘制:外观仿真

这可以辅助计算机更好地认识世界,主要任务有两个:

  • 判断空间中的一个点在物体的内部还是外部
  • 能够画出空间中物体的边界

表示方法

几何表示的基本方法有两大类,隐式表示和显式表示。这两者的区别用圆这个几何对象来说,可以姑且认为一般方程和参数方程的区别。

隐式表示的方法

unsetunset带符号距离函数unsetunset

通过拟合神经网络或者人工离散化近似,通过距离场表示物体的形状。

unsetunset体素表示unsetunset

将空间拆成多个单位立方体/正方形(即网格),看网格里面有没有物体。

表示的精度取决于分辨率。

显式表示的方法

unsetunset点云表示unsetunset

记录形状表面上一定数量样本点的坐标(以及颜色)

  • 需要大量采样点才能较为准确的描述形状
  • 通常为采集设备的直接输出,需要进一步处理为其他几何表示
unsetunset多边形网格表示unsetunset
  • 形状近似的多边形面片表示
  • 三角网格/四边形网格最为常见
  • 只需要记录顶点的坐标,面片上点的坐标可以通过插值计算。

几何获取方法:

  • 三维扫描
    • 时差测距(Time of Flight)
    • 结构光(Structured Light)
    • 立体视觉(Stereoscopic)

绘制的方法

将几何模型以图像形式展现的过程

两个目标:

  • 真实感
  • 速度

三维形状绘制的两个思路

unsetunsetM1unsetunset
  • 初始化图像为背景颜色
  • 遍历每个三维形状
    • 将形状投影到平面
    • 光栅化,并填充覆盖像素颜色
    • 距离相机较近的物体的颜色会覆盖/替换远的
unsetunsetM2unsetunset
  • 遍历点阵上每一个像素:
    • 从每个像素发出一条射线
    • 如果射线与物体相交,计算交点颜色
  • 否则计算背景颜色
    • 射线可能反射和折射

基于光线追踪的绘制

  • 遍历点阵上每一个像素:
    • 从每个像素发出一条射线
    • 如果射线与物体相交,根据交点计算颜色
    • 否则计算背景颜色
unsetunset投影方法unsetunset

主要的投影方法有两种,一种是正交投影,一种是透视投影。

  • 正交投影指的是所有光线平行发出,大小和距离无关
  • 透视投影为所有光线从同一个视点发出,近大远小
unsetunset着色方法unsetunset

反应三维图形,着色需要同时考虑颜色和光线。

最简单的光照模型:朗伯模型

假设空间中有均匀的环境光照亮物体 物体颜色 = 环境光 × 反射系数

理想漫反射: 均匀、粗糙的表面将接收到的入射的光均匀的反射到各个方向

反射的光强在各方向上均匀分布

朗伯余弦定律(Lambert’s Cosine Law)

物体表面单位面积接收到的光强与入射光和物体表面的夹角相关

结合两个定律可以给出计算公式

更加复杂的光照模型

  • 物体的颜色可能跟很多因素相关:
  • 入射光方向、视点方向、折射方向、散射等
  • 颜色-各种因素的关系可以表示为函数
    • BRDF,BSSRDF,BSSTDF,BSSDF等
  • 物体材质:表面每个点的颜色、光照函数分布

光线追踪

一个空间里面可能最后会形成不止一个光源:

全局光照:

  • 当场景里面物体较多时,每个物体的反射均可视为新的光源
  • 物体的颜色是所有“光源”的效果总和

光线追踪

  • 从视点出发,沿着光路逆向迭代
    • 考虑光线的反射与折射
    • 对光路上每个物体,应用光照模型计算颜色,并累加

统一的方法:神经网络

  • 将三维形状绘制成点阵图像
    • 遍历点阵上每一个像素:
    • 从每个像素发出一条射线
  • 如果射线与物体相交,根据交点计算颜色
  • 否则计算背景颜色

注意这里存在两个不同的运算: • 判断相交:几何信息(几何运算) • 计算颜色:外观信息(着色模型)

是否可能统一?

几何外观的神经表达

• 将三维形状绘制成点阵图像 • 遍历点阵上每一个像素: • 从每个像素发出一条射线 • 沿着射线方向采样,获得一系列空间点 • 对每个空间点计算其颜色及“透明度” • 将颜色按“透明度”累加得到像素颜色

神经辐射场

(NeRF, Neural Radiance Fields)

以上表示人工神经网络 • 神经网络同时定义了物体的几何形状以及颜色光照信息 • 思考:这是隐式表示还是显式表示

物理仿真

从给定初始状态出发,推演物体位置、形状、状态等随时间的变化。我们通常很难处理连续的时间和空间,解决方案是离散化。

两大视角

欧拉视角 (Eulerian Viewpoint) — 对物体存在的空间进行离散化 拉格朗日视角 (Lagrangian Viewpoint) — 对物体本身进行离散化

实例:如何进行数学上的建模分析?

对于平抛运动等简单的情况,我们很容易求出解析解,但是现实中的问题很少有有解析解的,只能通过数值积分求解数值解

第一种方法叫做显式/前向Euler方法,利用当前点的数值,用前一个时刻的

利用下一点的解方程,直接解出下一个点的数值,叫做隐式(后向)Euler方法

例子:将物理过程用微分方程来进行描述,然后用前后向Euler方法进行求解。

  • 显式/前向欧拉积分
  • 隐式/后向欧拉积分

加速度的计算用到待求变量,需要解方程!

  • 半隐式欧拉积分

分析方法评估

  • 数值稳定性:隐式 >> 半隐式 >> 显式

    • 条件稳定:显式积分(需要较长的时间和迭代周期来达到稳定)
    • 无条件稳定:隐式积分
  • 速度:隐式 << 半隐式 << 显式

仿真精度问题

通常越小,积分的稳定性越强,精度也随之越高

总结:仿真系统的设计需要平衡精度和效率

通常使用足够小的时间步长进行仿真 • 改善数值稳定性和仿真精度 • 仿真相同的时间长度,小步长需要更大的仿真步数和更多计算量

同样的准则也适用于空间离散过程 • 对复杂系统,通常使用隐式积分方法 • 隐式积分的单步计算量通常大于显式积分 • 显式方法往往需要非常小的时间步长保证数值稳定,总计算量可能更高

实例:粒子系统和弹簧质点系统

粒子系统

for i in range(0, N):    f[i] = 0for each j in range(0, N):    f[i] += force(x_i, x_j)for i in range(0, N):    a[i] = f[i] / m[i]    v[i] = v[i] + a[i] * h    x[i] = x[i] + v[i] * h

上面这个系统中,x使用了刚刚算出的新情况之下的v[i],属于半隐式Euler方法。

弹簧质点系统

以上就建立了弹簧质点系统的模型,这可以用来做衣物表面仿真

动作仿真

这一部分主要作为科普来了解

角色

  • 数字角色
  • 关节角色(需要进行Skinning流程,即蒙皮)

关键帧动画(Keyframe Animation)

动作捕捉

机械动作捕捉

基于机械外骨骼,典型应用为数据手套

惯性动捕

使用惯性测量单元 (IMU) • 加速度传感器 + 角速度传感器 • 常与其他传感器配合使用(光学、电磁等) • 可能有漂移问题

目前常常用于廉价动捕方案

光学动捕

• 使用反光或自发光的标记点 • 利用多视角几何重建标记点位置 • 根据标记点位置重建骨骼动作 (IK) • 结果准确、稳定,但受到空间限制较大

动作数据的重用

动作图(Motion Graphs)/ 状态机( State Machines)

  • 当前动作片段播放结束时:
    • 检查用户输入
    • 在动作库中搜索下一个动作片段
  • 播放

现代动作仿真技术

  • 基于机器学习的动作生成模型
  • 真实世界的物理交互
  • 基于仿真的动作生成

仿真的应用以及sim2real gap问题

  • 目标:在仿真中训练的智能体可以直接应用于真实环境
    • 例如:机器人、机械臂、无人车

Sim2real Gap

  • 然而仿真与真实环境通常具有巨大的偏差,即Sim2Real Gap
    • 仿真系统中的信息可能过多,部分信息在真实场景可能无法获取
    • 仿真系统中的信息可能过于“干净”,无法准确模拟真实传感器的感知模式
    • 感知偏差,例如:
    • 仿真系统中的信息可能不足,缺少真实场景的信息
  • 系统偏差,例如:
    • 仿真系统无法准确对某些真实现象进行建模,例如碰撞、摩擦的内在机制
    • 仿真系统的运动模型过于简化或不准确,参数含义与真实世界区别较大
    • 仿真系统未能预见真实世界中可能出现的场景

如何应对虚实鸿沟

  1. 系统识别 (System Identification) • 更准确的系统建模 • 利用数据校准系统参数
  2. 域自适应 (Domain Adaptation) • 建立仿真数据分布与真实数据分 布的映射 • 利用该映射校准学习过程
  3. 域随机化 (Domain Randomization) • 将Sim2Real Gap看作噪音 • 在仿真中加入随机化因素,让智能体能够直接处理Gap影响