尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PyMAF 推理前向流程源码拆解:从 ResNet 编码器到迭代式 SMPL 参数回归的完整数据流

PyMAF 推理前向流程源码拆解:从 ResNet 编码器到迭代式 SMPL 参数回归的完整数据流 PyMAF 推理前向流程源码拆解从 ResNet 编码器到迭代式 SMPL 参数回归的完整数据流【免费下载链接】PyMAF[ICCV 2021, Oral] PyMAF: 3D Human Pose and Shape Regression with Pyramidal Mesh Alignment Feedback Loop项目地址: https://gitcode.com/gh_mirrors/py/PyMAF本文带你快速读透 PyMAFICCV 2021 Oral3D 人体姿态与体型回归的推理前向流程一张 224×224 的人体图片如何流过 ResNet 编码器、金字塔特征上采样与网格对齐特征提取MAF最终经过 3 轮迭代式 SMPL 参数回归输出 3D 网格顶点。面向新手尽量不讲长代码只讲数据怎么流、为什么这么流。一、先建立整体印象一张图到一个人偶PyMAF 的核心思路可以概括为一句话编码器提特征 → 先猜一个 SMPL 人偶 → 把猜出来的人偶投影回图像特征上采样特征 → 用特征修正参数 → 再投影再修正循环 3 次。完整数据流如下形状变化输入图像 [B, 3, 224, 224] │ ▼ ResNet50 编码器 s_feat [B, 2048, 7, 7] 空间特征供网格对齐采样 g_feat [B, 2048] 全局特征供第一轮回归 │ ▼ 初始回归 forward_init(g_feat) 初始 SMPL 网格平均体型 平均姿态6890 顶点 │ ▼ 金字塔反卷积上采样每轮 2 倍 14×14 ──► 28×28 ──► 56×56 特征图 │ ▼ 循环 3 轮N_ITER3 顶点降采样 6890→431 → 弱透视投影到 2D → 网格采样特征 → MLP 降维 → 回归器输出 pose 增量 / betas 增量 / cam 增量残差叠加 → SMPL 正向计算 → 新网格 │ ▼ theta [85 维: cam(3)betas(10)pose(72)]、verts [6890, 3]、kp_2d、kp_3d 下面逐段对照源码拆解。二、第一步图像预处理与 ResNet 编码器入口在demo.py的process_imageL54-L72用 OpenCV 读图 → 以图像中心为基准按 scale 裁剪 → 缩放到 224×224 → 除以 255 → 标准化。随后norm_img送入模型。编码器是 models/pose_resnet.py 中的PoseResNetResNet50L103-L229它的forward返回两路特征特征形状来源用途s_feat空间特征[B, 2048, 7, 7]layer4 卷积输出网格对齐特征提取的采样池g_feat全局特征[B, 2048]7×7 全局平均池化后展平第一轮初始参数回归这里有个新手容易忽略的点空间特征只有 7×7分辨率太低无法直接在网格顶点处取特征——这就是后面金字塔反卷积要解决的问题。三、第二步初始 SMPL 网格先猜再改在models/pymaf_net.py的PyMAF.forwardL258-L319中第一步是调用regressor[0].forward_init(g_feat)L278。RegressorL17-L103内部注册了三组 bufferinit_pose、init_shape、init_cam全部来自 SMPL 均值参数文件data/smpl_mean_params.npz见core/path_config.py。forward_init直接用均值参数跑一遍SMPL模块models/smpl.pyL50-L84扩展了额外关节回归器得到初始网格、关节点和 2D 关键点——相当于给网络一个标准站姿人偶作为起点。四、第三步金字塔特征上采样Pyramidal 的来源PyMAF 在初始化时预建了 9 层反卷积_make_deconv_layerL214-L256每层 ConvTranspose2d 上采样 2 倍7×7 → 14×14第 1 轮用14×14 → 28×28第 2 轮用28×28 → 56×56第 3 轮用N_ITER3时9 层被切成 3 块L270-L271每一轮迭代只推进一个块因此特征图分辨率逐轮翻倍——Pyramidal金字塔正来源于此。五、第四步网格对齐特征提取MAF核心创新MAF_Extractor定义在models/maf_extractor.pyL17-L138它是整篇论文的点睛之笔顶点降采样初始化时用data/mesh_downsampling.npz里的稀疏矩阵构建DmapL60-L71把 SMPL 的 6890 个顶点降到 431 个采样更省算力。3D→2D 投影forwardL124-L138接收上一轮预测的顶点已降采样和相机参数调用utils/geometry.py的projectionL241-L255。注意它用的是弱透视投影焦距固定 5000把cam的缩放分量s换算成平移2·f/(224·s)结果归一化到 [-1, 1]。网格采样samplingL101-L122用grid_sample在当轮特征图上按 2D 坐标插值得到每个顶点对应的 256 维特征。MLP 降维reduce_dimL73-L99是一串 1×1 卷积通道 256→128→64→5由配置MLP_DIM决定把每点特征压到 5 维最终拼成[B, 431×5]的网格对齐特征。 一个巧妙细节第 1 轮没有网格可投影代码L303-L305改用预注册的 21×21 均匀网格points_grid直接采样当前特征图从第 2 轮起才真正把自己的网格投回去取特征。这就是论文里 Mesh Alignment Feedback Loop网格对齐反馈回路的由来。六、第五步迭代式 SMPL 参数回归6D 旋转 残差回归器Regressor是一个紧凑的 MLPmodels/pymaf_net.pyL23-L32[参考特征, 上一轮pose(144), betas(10), cam(3)] → fc1 → 1024 → fc2 → 1024 → 三路输出Δpose(144) / Δbetas(10) / Δcam(3) → 与上一轮参数相加残差学习L67-L69三个设计值得记住6D 旋转表示24 个关节 × 6 维 144 维。网络输出 6 个连续数再由rot6d_to_rotmatutils/geometry.pyL212-L226解析出 3×3 旋转矩阵避免欧拉角不连续、四元数非流形的问题。残差更新每轮只学修正量并累加学习稳定、收敛快。逐轮 detachforward中对上一轮的 pose/shape/cam 都.detach()L292-L294推理时迭代之间不互传梯度行为与均值初始化、逐帧独立推理保持一致。每轮回归后新参数送入SMPL做正向计算L73-L78得到 6890 顶点、关节点并立刻投影回 2D 供下一轮 MAF 使用——参数 → 网格 → 投影 → 特征 → 参数闭环形成。七、第六步输出与渲染demo 视角forward最终返回一个字典列表out_list[smpl_out]每轮一个 dict。demo.py的run_image_demoL75-L152只取最后一轮L107-L109theta85 维切片即[cam(3), betas(10), pose(72)]pose 已转回轴角verts[6890, 3] 世界坐标顶点kp_2d/kp_3d2D、3D 关节点渲染前还有一次相机换算demo.py L112弱透视参数(s, tx, ty)→ 真实平移t_z 2·f/(224·s)之后PyRendererutils/renderer.py把紫色网格叠加到原图上输出*_smpl.png和侧视图。八、关键配置与常见疑问所有旋钮集中在configs/pymaf_config.yaml配置项默认值作用MODEL.PyMAF.N_ITER3反馈回路迭代轮数0~3MODEL.PyMAF.MLP_DIM[256,128,64,5]MAF 点特征 MLP 各层通道MODEL.PyMAF.AUX_SUPV_ONTrue是否带 DensePose IUV 辅助头RES_MODEL.NUM_DECONV_*3 层 × 256 通道金字塔反卷积规格新手 FAQ❓改成 1 轮会发生什么N_ITER1时反卷积一次上采样到 56×56只采样一轮均匀网格特征模型退化为单次回归精度下降但推理更快。❓为什么用 431 而不是 6890 个顶点6890 点 × 256 维的 MLP 开销太大431 点GraphCMR 降采样结果在精度与速度间取得平衡源码 L308-L309 的 TODO 也提到可进一步用 431 顶点 SMPL 加速。❓训练时迭代之间有梯度吗没有。逐轮detach保证推理均值初始化与训练迭代细化行为一致避免 train/test 不一致。九、一句话总结PyMAF 的前向流程 ResNet 双流编码 3 轮投影-采样-回归反馈回路 6D 旋转残差回归。读懂models/pymaf_net.py的forwardL258-L319这一个函数再回头看MAF_Extractor与Regressor两个模块整条数据流就完全通透了。如果你想继续深入建议下一步阅读训练脚本train.py中的损失组合2D/3D 关键点、顶点、IUV 联合监督看看这条回路是如何被对齐出来的。【免费下载链接】PyMAF[ICCV 2021, Oral] PyMAF: 3D Human Pose and Shape Regression with Pyramidal Mesh Alignment Feedback Loop项目地址: https://gitcode.com/gh_mirrors/py/PyMAF创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表