OpenMMLab AI实战营笔记
OpenMMLab 简介
- OpenMMLab 概述:
- 中国人工智能计算机视觉算法体系
- 每一种计算机视觉任务对应OpenMMLab的一个算法库
- 内容:
- 视觉基础库:MMCV,MMEngine
- 算法框架:MMPretrain, MMDetection, MMDetection3D, ...
- 常用算法库:
- MMDetection(最有影响力的算法库)
- 任务支持:目标检测、实例分割、全景分割
- 算法丰富:两阶段检测器、一阶段检测器、级联检测器、无锚框检测器
- MMYOLO(YOLO算法库)
- MMOCR(文字检测识别算法库)
- 任务支持:文本检测、文本识别、关键信息提取
- MMDetection3D(三维目标检测算法)
- MMRotate(旋转目标检测算法库)
- MMSegmentation(图像分割/语义分割算法库)
- 常用领域:遥感监测、医疗检测、表面缺陷检测
- MMPretrain(图像分类+预训练+多模态算法库)
- MMPose(姿态估计算法库)
- 任务支持:服装关键点、脸部关键点、人体2D/3D关键点、...
- MMHuman3D(三维人体姿态估计算法库)
- MMAction2(视频动作识别算法库)
- 任务支持:动作识别、时序检测、时空检测、...
- MMagic(生成模型+底层视觉+AIGC算法库)
- 任务支持:Video Super-Resolution、Video Interpolation、Image Generation、Image Super-Resolution、Image Colorization、Inpainting、Matting、...
- 实例:CycleGAN 照片风格迁移
- MMDeploy(模型部署工具箱)
- 模型终端部署应用:
- 部署场景:图像分类、2D/3D视频目标追踪、图像分割、图像超分、姿态估计、机器翻译、...
- 部署物理基础:硬件、芯片、厂商
- 模型终端部署应用:
- MMPlaygroud(趣味运动游乐场)
- MMTracking(目标追踪算法库)
- MMDetection(最有影响力的算法库)
MMPose 理论教学
- 支持任务:
- 人体姿态估计:从给定的图像中识别人脸、收不、身体等关键点
- 输入:图像
- 输出:所有关键点的坐标
- 3D姿态估计(预测人体关键点在三维空间中的坐标,可以在三维空间中还原人体的姿态)
- 人体参数化模型:从图像或者视频中恢复出运动的3D人体模型
- 人体姿态估计:从给定的图像中识别人脸、收不、身体等关键点
- 下游任务:动作识别、CG动画、动物行为分析
- 2D人体姿态估计:
- 任务内容:在图像上定位人体关键点的坐标(通常为人体主要关节)
- 基本思路:基于回归(输入图片,输出关键点)
- 问题:深度模型直接回归坐标有些困难,精度不是最优
- 改进思路:基于热力图(不直接回归关键点的坐标,而是预测关键点位于每个位置的概率分布)
- 概率分布:
- 热力图可以基于原始关键点坐标生成,作为训练网络的监督信息
- 热力图尺寸大小通过调节 调整
- 网络预测的热力图也可以通过求极大值等方法得到关键点的坐标
- 模型预测热力图比直接回归坐标相对容易,模型精度相对更高,但预测热力图的计算消耗大于直接回归
- 通过热力图还原关键点:
- 朴素方法:求热力图最大值位置
- 问题:无法解决多个点的问题
- 改进方法:取期望 (Integral Human Pose Regression)
- 优点:
- 可微分(坐标可以 guide 一个热力图)
- 连续,没有量化误差
- 朴素方法:求热力图最大值位置
- 多人姿态估计:
- 自顶向下方法:
- 步骤:
- 使用目标检测算法检测出每个人体
- 基于单任务项估计每个人的姿态
- 问题:
- 整体精度受限于检测器的精度
- 速度和计算量会正比于人数
- 一些新工作(如 SPM)考虑将两个阶段聚合成一个阶段
- 基于回归的自顶向下方法:
- DeepPose:以分类网络为基础,将最后一层分类改为回归,一次性预测所有 个关键点
- Loss Function:
- 通过级联提升精度:
- 第一级以全身图像为输入,预测所有关键点坐标,位置精度较低
- 以每个预测点为中心,裁剪局部图像送入第二季网络,再次回归该点坐标,提升精度
- 多级级联
- 优势:
- 回归模型理论上可以达到无限精度,热力图方法的精度受限于特征图的空间分辨率
- 回归模型不需要维持高分辨率特征图,计算层面更高效,相比之下热力图方法需要计算和存储高分辨率的热力图和特征图,计算成本高
- 劣势:图像到关键点坐标的映射高度非线性,导致回归坐标比回归热力图更难,回归方法的精度也弱于热力图方法
- Residual Log-likelihood Estimation (RLE)
- 核心思路:对杆件点的位置进行更准确的概率建模,从而提高位置预测的精度
- 经典回归范式:模型假设概率分布满足高斯分布,预测关键点位置 ,与真值 计算误差作为损失
- 问题:实际分布不一定是高斯分布(应该是沿着人的身体的一种分布,不是均匀的)
- RLE的范式:显示建模关键点的概率分布 ,通过最大似然拟合最优的位置分布
- 经典回归范式:模型假设概率分布满足高斯分布,预测关键点位置 ,与真值 计算误差作为损失
- 回归和最大似然估计之间的联系:基于二范数误差的回归 基于高斯似然的最大似估计
- RLE的思路即使将简单的高斯分布替换为一个可学习的、表达能力更强的分布,更好拟合关键点位置的实际分布
- 具体方法:模型给出基础分布的参数,RLE模块基于标准化流给出位置的分布
- 标准化流:一种生成建模的方法,通过一系列科学系的可逆的映射,将标准分布的随机变量映射成复杂分布的随机变量,可用于建模复杂的概率分布
- 函数:用神经网络构建
- 初始分布:一般采用高斯分布
- 模型的推理:给定模型,计算给定数据点的概率密度
- 因为映射可逆,有
- 为标准分布,解析式已知,可以计算 为 在 点的 Jacobian 矩阵
- 形式已知,也可以计算,可以适当设计 上逆函数和 Jacobian 矩阵更容易计算
- 模型的学习:给定一系列数据,通过最大似然计算最优模型参数,使模型最佳拟合这组数据
- 概率分布 受=构建该分部的神经网络 的全体参数 控制
- 可以通过梯度下降优化 (需要对 Jacobian 行列式的梯度的计算,可以通过适当设计 让这一项容易计算)
- RLE使用的标准化流模型是 RealNVP
- 标准化流:一种生成建模的方法,通过一系列科学系的可逆的映射,将标准分布的随机变量映射成复杂分布的随机变量,可用于建模复杂的概率分布
- 其他简化拟合难度的方法:
- 重参数化:建设所有关键点的分布属于同一位置尺度族,即所有分布由某个零均值的基础分布通过平移缩放而来
- 基于这个假设,让标准化流拟合该基础分布 ,卷积网络预测平移缩放参数 和
- 推理阶段,将卷积网络预测的平移参数 作为关键点的预测结果,不需要推理标准化流,保证计算高效性
- 残差似然函数:假设 的概率密度是标准高斯分布 和一个变形分布 的积,让标准化流拟合该变形分布
- 如果 已经可以很好拟合数据,则白案型分布的对数退化为
- 重参数化:建设所有关键点的分布属于同一位置尺度族,即所有分布由某个零均值的基础分布通过平移缩放而来
- 核心思路:对杆件点的位置进行更准确的概率建模,从而提高位置预测的精度
- DeepPose:以分类网络为基础,将最后一层分类改为回归,一次性预测所有 个关键点
- 基于热力图的自顶向下方法:
- CPM
- Hourglass:
- 设计思路:准确的姿态估计需要结合不同尺度的信息
- 局部信息:检测不同的身体组件
- 全部信息:建模组件之间的关系,在大尺度变形、遮挡时也可以准确推断出姿态
- 级联 Hourglass 模块
- 每级模块分支输出热力图,和 GT 热力图比较,计算 loss
- 短模块级联以及在中间添加监督信号总体来说能得到更好的效果
- 设计思路:准确的姿态估计需要结合不同尺度的信息
- Simple Baseline
- HRNet:
- 核心思路:在下采样时通过保留原分辨率分支来保持网络全过程特征图的高分辨率与空间位置信息,并设计了独特的网络结构实现不同分辨率的多尺度特征融合
- 步骤:
- 自底向上方法:
- 步骤:
- 使用目标检测算法检测出每个人体
- 基于位置关系或其他辅助信息将关键点组合成不同的人
- 优点:推理速度与人数无关
- Part Affinity Fields & OpenPose
- 基本思路:基于图像同时预测关节位置和四指走向,利用肢体走向辅助关键点的聚类(如果两个关键点由某段肢体相连,则这两个关键点属于同一个人)
- 步骤:
- 单阶段方法:
- SPM
- Hierarchical SPR
- 基于 Transformer 的方法:
- PRTR
- TokenPose
- 自顶向下方法:
- 3D人体姿态估计:
- 任务内容:
- 难点:如何从2D图像中获取3D图像
- 思路1:直接预测(直接基于2D图像回归得到3D图像)
- Coarse-to-fine prediction
- Simple Baseline 3D
- 思路2:利用视频信息
- VideoPose3D
- 思路3:利用多视角图像
- VoxelPose
- 思路1:直接预测(直接基于2D图像回归得到3D图像)
- 评估指标:
- PCP(Percentage of Correct Parts)
- 指标:肢体的检出率(如果两个预测管家而为之和真实肢体关节位置之间的距离)
- 公式:
- PDJ(Percentage of Detected Joints)
- PCK(Percentage of Correct Key-points)
- OKS(Object Keypoint Similarity based mAP)
- PCP(Percentage of Correct Parts)
- 人体表面参数化:
- 网络结构:Mask-RCNN + DensePose
- 身体表面网络:
- 混合蒙皮技术(Blend Skinning)
- 线性混合蒙皮 LBS
- 混合蒙皮技术(Blend Skinning)
- SMPL 人体参数化模型
- 形态参数
- 姿态参数
- 公式:
-
- :形态参数函数
- :姿态参数函数
- :动态姿态函数
-
- 损失:
- 关键点偏移损失
- 人体姿态损失