news 2026/9/17 5:45:50

MMPose for AIGC:生成姿态骨架图,为姿态引导式 AI 图像生成提供条件输入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MMPose for AIGC:生成姿态骨架图,为姿态引导式 AI 图像生成提供条件输入

MMPose for AIGC:生成姿态骨架图,为姿态引导式 AI 图像生成提供条件输入

【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

本文以 MMPose 官方项目projects/mmpose4aigc为主体,讲解如何用 MMPose 把一张普通人物照片转换成「姿态骨架图」,并把它作为姿态条件(pose condition)输入到 T2I-Adapter 这类文生图模型中,实现“指定姿势、生成图像”的 AIGC 工作流。读完后你可以:① 用 Python + PyTorch 流水线生成 OpenPose 风格的彩色骨架图;② 用 mmdeploy 部署包中的 C++ 可执行文件pose_tracker生成 MMPose 风格骨架图;③ 看懂骨架生成脚本背后的检测—姿态两级调用链与关键点重映射逻辑。

1. 项目定位:骨架图是姿态引导 AIGC 的“中间表示”

姿态引导的 AI 图像生成(pose guided image generation)通常需要一个轻量的中间条件:先把参考照片里的身体姿态抽成骨架图,再让扩散模型根据骨架绘制出姿势一致、外观可自由控制的人物。MMPose for AIGC 项目(见 README 与 中文说明)就是官方提供的这一环节的实现,当前支持对接的项目是T2I-Adapter

整个项目在projects/mmpose4aigc/下只有 5 个可执行文件加两份 README,职责非常清晰:

文件作用
openpose_visualization.pyPython 推理脚本:检测 + 姿态估计 + OpenPose 风格骨架绘制
mmpose_openpose.sh调用上述脚本,一键生成 OpenPose 风格骨架图
download_models.sh下载人体检测模型与姿态估计模型的 PyTorch 权重
install_posetracker_linux.sh安装 mmdeploy 部署包并编译pose_tracker可执行文件
mmpose_style_skeleton.sh调用pose_tracker,生成 MMPose 风格骨架图

下面分别展开两条生成路线。

2. 路线一:生成 OpenPose 风格骨架图(Python + PyTorch)

2.1 准备工作

按照 README 的步骤,先安装 mmpose 与 mmdet,再下载模型:

# install mmpose mmdet pip install openmim git clone https://gitcode.com/GitHub_Trending/mm/mmpose cd mmpose mim install -e . mim install "mmdet>=3.0.0rc6" # download models bash download_models.sh

其中 download_models.sh 会在当前目录创建models/文件夹,并从 OpenMMLab 的 CDN 下载两个权重文件:

  • 人体检测模型rtmdet_nano_8xb32-100e_coco-obj365-person-05d8511e.pth(RTMDet-nano,在 COCO 单人数据上训练);
  • 姿态估计模型rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.pth(RTMPose-m,SimCC 编码)。

2.2 一键生成骨架图

# generate a skeleton image bash mmpose_openpose.sh ../../tests/data/coco/000000000785.jpg

仓库自带的 tests/data/coco/000000000785.jpg 就是官方示例输入图。该命令实际执行的是 mmpose_openpose.sh 中的 Python 调用:

python openpose_visualization.py \ ../rtmpose/rtmdet/person/rtmdet_nano_320-8xb32_coco-person.py \ models/rtmdet_nano_8xb32-100e_coco-obj365-person-05d8511e.pth \ ../rtmpose/rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-256x192.py \ models/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.pth \ --input $INPUT_IMAGE \ --device cuda:0 \

四个位置参数依次是:检测器配置、检测权重、姿态估计器配置、姿态权重。脚本内部引用的两份模型配置分别对应仓库中的 rtmdet_nano_320-8xb32_coco-person.py 与 rtmpose-m_8xb256-420e_coco-256x192.py。

2.3 核心脚本解析:从检测到骨架图的完整调用链

openpose_visualization.py 是这条路线的全部逻辑所在,核心函数mmpose_to_openpose_visualization(L42-L114)分为五个阶段:

(1)人体检测。先用 mmdet 的inference_detector得到预测实例,再按类别 ID 与置信度双重过滤,并做 NMS:

det_result = inference_detector(detector, img_path) pred_instance = det_result.pred_instances.cpu().numpy() bboxes = np.concatenate( (pred_instance.bboxes, pred_instance.scores[:, None]), axis=1) bboxes = bboxes[np.logical_and(pred_instance.labels == args.det_cat_id, pred_instance.scores > args.bbox_thr)] bboxes = bboxes[nms(bboxes, args.nms_thr), :4]

(2)Top-Down 姿态估计。把过滤后的 bbox 交给 MMPose 的inference_topdown得到关键点与置信度,随后把keypoints(x, y)和keypoint_scores拼成(-1, 17, 3)的数组——注意这里输出的是17 个 COCO 人体关键点

pose_results = inference_topdown(pose_estimator, img_path, bboxes) data_samples = merge_data_samples(pose_results)

(3)17 关键点扩展为 18 关键点。OpenPose 格式的人体模型比 COCO 多一个「颈部」关节。脚本用双肩中点合成颈部,且任一肩置信度不足时将该关节置信度置 0:

neck = (keypoints[:, 5] + keypoints[:, 6]) / 2 if keypoints[:, 5, 2] < args.kpt_thr or keypoints[:, 6, 2] < args.kpt_thr: neck[:, 2] = 0 new_keypoints = np.insert(keypoints[:, ], 17, neck, axis=1)

(4)MMPose 索引重映射为 OpenPose 索引。OpenPose 的 18 关节顺序与 COCO 完全不同(例如 OpenPose 的 0/1/2 是右髋、左髋、骨盆),脚本用两张索引表整体搬移:

openpose_idx = [15, 14, 17, 16, 2, 6, 3, 7, 4, 8, 12, 9, 13, 10, 1] mmpose_idx = [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17] new_keypoints[:, openpose_idx, :] = new_keypoints[:, mmpose_idx, :]

这一步正是“OpenPose 风格”得以成立的关键——T2I-Adapter 的 skeleton 条件是按 OpenPose 关节顺序定义的,索引不对则骨架条件整体错位。

(5)绘制骨架图。关节连线表limb_seq(L25-L27)定义了 17 条连线,colors表为每条连线/关节分配彩虹色;绘制时只画两端置信度都超过阈值kpt_thr的连线,并用cv2.ellipse2Poly画椭圆条带作为四肢骨架,最终输出黑底图,文件名为openpose_<原图名>.png。黑底正是 OpenPose 骨架条件图的典型形式,可直接喂给姿态编码器。

可调命令行参数(见main(),L117-L170):

参数默认值含义
--input必填输入图片路径(按 MIME 类型判断,仅处理 image)
--devicecuda:0推理设备
--det-cat-id0检测模型中“人”的类别 ID
--bbox-thr0.4人体框置信度阈值
--nms-thr0.3人体框 NMS 的 IoU 阈值
--kpt-thr0.4关键点置信度阈值,同时影响颈部合成与骨架绘制

另外,脚本在构建姿态估计器时显式覆盖output_heatmaps=False

pose_estimator = init_pose_estimator( args.pose_config, args.pose_checkpoint, device=args.device, cfg_options=dict(model=dict(test_cfg=dict(output_heatmaps=False))))

这样inference_topdown只返回关键点坐标而不返回 384×288 的热力图,内存占用更低,也符合“只要骨架”的需求。

2.4 姿态模型配置速览

脚本使用的 RTMPose-m 配置 rtmpose-m_8xb256-420e_coco-256x192.py 有几个与 AIGC 场景相关的关键设定,理解它们有助于按需替换模型:

  • num_keypoints = 17input_size = (192, 256):COCO 17 关键点、256×192 输入,是精度与速度的均衡点,替换成同目录下的rtmpose-t/s/l/x配置即可改变精度—速度权衡;
  • codec = dict(type='SimCCLabel', simcc_split_ratio=2.0, ...):SimCC 把坐标回归建模为 1D 分类问题,配合RTMCCHeadKLDiscretLoss使用;
  • 骨干为_scope_='mmdet'CSPNeXtarch='P5'deepen_factor=0.67widen_factor=0.75),权重通过init_cfg从预训练 CSPNeXt checkpoint 热启动;
  • test_cfg=dict(flip_test=True):测试时做水平翻转增强,可小幅提升关键点稳定性。

检测侧的 rtmdet_nano_320-8xb32_coco-person.py 是单类(person)RTMDet-nano 配置,320 输入,适合在 GPU 上作为轻量级前置检测器。

3. 路线二:生成 MMPose 风格骨架图(mmdeploy 部署包 + C++ 推理)

这条路线不依赖 PyTorch 运行时,而是使用 mmdeploy 1.0.0 的 Linux x86_64 SDK 中预编译的 ONNX Runtime 推理引擎与 C++ 可执行文件pose_tracker,产物是 MMPose 风格(彩色关节点 + 骨架,黑色背景)的骨架图。

3.1 环境要求与安装

  • GCC >= 7.5
  • cmake >= 3.14

执行:

bash install_posetracker_linux.sh

install_posetracker_linux.sh 内部依次完成 5 件事,理解顺序有助于排错:

  1. wget下载mmdeploy-1.0.0-linux-x86_64-cxx11abi.tar.gz并解压(对应 README 中要求的 cxx11abi 变体,与系统 libc++ ABI 必须匹配);
  2. source set_env.sh初始化 SDK 环境变量;
  3. 若系统未装 OpenCV 3+,执行bash install_opencv.sh(已安装则跳过);
  4. bash build_sdk.sh编译出bin/pose_tracker等可执行文件——这一步需要 GCC 与 cmake 满足上述版本要求;
  5. 下载rtmpose-cpu.zip并解压,得到 ONNX 格式的 RTMDet-nano 与 RTMPose-m 模型。

安装完成后目录结构如下(README 原文):

|----mmdeploy-1.0.0-linux-x86_64-cxx11abi | |----README.md | |----rtmpose-ort | | |----rtmdet-nano | | |----rtmpose-m | | |----000000147979.jpg | | |----t2i-adapter_skeleton.txt

其中rtmpose-ort/下包含 ONNX 检测模型rtmdet-nano、ONNX 姿态模型rtmpose-m、示例输入图000000147979.jpg以及骨架绘制配置t2i-adapter_skeleton.txt

3.2 生成骨架图

# generate a skeleton image bash mmpose_style_skeleton.sh \ mmdeploy-1.0.0-linux-x86_64-cxx11abi/rtmpose-ort/000000147979.jpg

mmpose_style_skeleton.sh 的关键内容:

WORKSPACE=mmdeploy-1.0.0-linux-x86_64-cxx11abi export LD_LIBRARY_PATH=${WORKSPACE}/lib:${WORKSPACE}/thirdparty/onnxruntime/lib:$LD_LIBRARY_PATH ${WORKSPACE}/bin/pose_tracker \ ${WORKSPACE}/rtmpose-ort/rtmdet-nano \ ${WORKSPACE}/rtmpose-ort/rtmpose-m \ $INPUT_IMAGE \ --background black \ --skeleton ${WORKSPACE}/rtmpose-ort/t2i-adapter_skeleton.txt \ --output ./skeleton_res.jpg \ --pose_kpt_thr 0.4 \ --show -1

要点说明:

  • 第一个参数LD_LIBRARY_PATH必须先导出,否则pose_tracker找不到 SDK 与 ONNX Runtime 的动态库;
  • pose_tracker的命令行前两个参数是检测模型与姿态模型(ONNX 工程目录),第三个是输入图;
  • --background black指定黑色背景,与 T2I-Adapter 的 skeleton 条件格式一致;--skeleton指定关节连接关系文件t2i-adapter_skeleton.txt,保证画出的拓扑符合 T2I-Adapter 约定;
  • --pose_kpt_thr 0.4是关键点置信度阈值,与 Python 路线中的kpt_thr语义一致;
  • --output ./skeleton_res.jpg指定输出文件,--show -1表示不开启实时窗口显示(离线批处理场景)。

README 建议更多细节参阅 RTMPose 项目文档。

3.3 两条路线如何选择

从两条脚本的实现看,Python 路线(路线一)胜在可改:阈值、设备、模型配置、绘制逻辑都可以直接在源码里调整,适合调试与批量改造;mmdeploy 路线(路线二)胜在轻:无需安装 PyTorch 与 mmpose Python 环境,推理走 ONNX Runtime CPU 引擎,适合把“照片→骨架图”做成独立可分发的预处理小工具。两者的姿态模型本质相同(都是 RTMPose-m + RTMDet-nano),只是运行时不同。

4. 对接 T2I-Adapter:骨架图的去向

生成骨架图只是手段。按 README 的“Upload to T2I-Adapter”一节,把生成的骨架图连同文本描述一起输入 T2I-Adapter 的在线 Demo,即可得到姿态与参考图一致、但外观由提示词控制的人物图像——例如“参考照片的站立姿势 + 文本描述的服装风格”。T2I-Adapter 本身是外部 AIGC 项目,本文不展开其训练与推理细节;MMPose 在本工作流中的职责到“输出一张关节顺序正确、背景干净、拓扑与 T2I-Adapter 约定一致的骨架条件图”为止。

5. 小结与延伸阅读

  • 项目入口:projects/mmpose4aigc/README.md(英文)/ README_CN.md(中文);
  • 核心推理脚本:projects/mmpose4aigc/openpose_visualization.py,重点看 17→18 关键点扩展(L68-L78)与 OpenPose 索引重映射;
  • 模型配置:RTMDet-nano 单类检测、RTMPose-m SimCC 姿态;
  • 部署路线参考 RTMPose 项目,其中包含 mmdeploy 部署与端侧推理的完整文档。

适用前提提醒:Python 路线要求 mmpose(可编辑安装)与mmdet>=3.0.0rc6,推理默认使用cuda:0;mmdeploy 路线仅覆盖 Linux x86_64(cxx11abi)环境,且需要 GCC >= 7.5、cmake >= 3.14 用于编译pose_tracker。两个模型权重均需联网下载,请确保网络可达。

【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 5:45:14

VirtualBox搭建Linux开发环境:从安装到调优的完整指南

如果你跟我一样&#xff0c;日常主力机是 Windows&#xff0c;但手头又经常需要跑 Linux 环境来编译内核、调嵌入式交叉工具链&#xff0c;或者就是想验证某个开源项目在 Linux 下的表现&#xff0c;那 VirtualBox 大概率是你绕不开的第一个选项。我这几年用它搭过 Ubuntu、Deb…

作者头像 李华
网站建设 2026/9/17 5:42:56

RediSearch实战:从ES迁移的性能跃迁与避坑指南

1. 这不是“替代ES”的噱头&#xff0c;而是重新定义搜索性能边界的实战方案最近在几个技术群里看到有人反复问&#xff1a;“有没有比ElasticSearch快5倍的搜索引擎&#xff1f;”——这问题本身就很值得拆解。它背后藏着三类真实诉求&#xff1a;一类是业务QPS突然翻了3倍&am…

作者头像 李华
网站建设 2026/9/17 5:42:52

嵌入式工程师的三层能力栈:裸机C、RTOS、Linux硬核进阶路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 5:42:45

拆解DL16 Plus逻辑分析仪:1GHz采样背后的国产FPGA技术解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 5:42:35

PyTorch模型部署全攻略:从ONNX转换到推理优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 5:42:15

构建AI可理解的代码认知基础设施:Cursor工程化实践

1. 项目概述&#xff1a;这不是又一个“AI写代码”演示&#xff0c;而是让AI真正理解你思维脉络的工程化实践“让 AI 真正读懂你的代码”——这句话听起来像营销话术&#xff0c;但如果你已经用过 Cursor、Copilot 或其他代码助手&#xff0c;大概率会心一笑&#xff1a;它们确…

作者头像 李华