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

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 PyTorch2.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 mmdet3.0.0rc6 # download models bash download_models.sh其中 download_models.sh 会在当前目录创建models/文件夹并从 OpenMMLab 的 CDN 下载两个权重文件人体检测模型rtmdet_nano_8xb32-100e_coco-obj365-person-05d8511e.pthRTMDet-nano在 COCO 单人数据上训练姿态估计模型rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.pthRTMPose-mSimCC 编码。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_visualizationL42-L114分为五个阶段1人体检测。先用 mmdet 的inference_detector得到预测实例再按类别 ID 与置信度双重过滤并做 NMSdet_result inference_detector(detector, img_path) pred_instance det_result.pred_instances.cpu().numpy() bboxes np.concatenate( (pred_instance.bboxes, pred_instance.scores[:, None]), axis1) 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]2Top-Down 姿态估计。把过滤后的 bbox 交给 MMPose 的inference_topdown得到关键点与置信度随后把keypointsx, y和keypoint_scores拼成(-1, 17, 3)的数组——注意这里输出的是17 个 COCO 人体关键点pose_results inference_topdown(pose_estimator, img_path, bboxes) data_samples merge_data_samples(pose_results)317 关键点扩展为 18 关键点。OpenPose 格式的人体模型比 COCO 多一个「颈部」关节。脚本用双肩中点合成颈部且任一肩置信度不足时将该关节置信度置 0neck (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, axis1)4MMPose 索引重映射为 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_seqL25-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_heatmapsFalsepose_estimator init_pose_estimator( args.pose_config, args.pose_checkpoint, deviceargs.device, cfg_optionsdict(modeldict(test_cfgdict(output_heatmapsFalse))))这样inference_topdown只返回关键点坐标而不返回 384×288 的热力图内存占用更低也符合“只要骨架”的需求。2.4 姿态模型配置速览脚本使用的 RTMPose-m 配置 rtmpose-m_8xb256-420e_coco-256x192.py 有几个与 AIGC 场景相关的关键设定理解它们有助于按需替换模型num_keypoints 17、input_size (192, 256)COCO 17 关键点、256×192 输入是精度与速度的均衡点替换成同目录下的rtmpose-t/s/l/x配置即可改变精度—速度权衡codec dict(typeSimCCLabel, simcc_split_ratio2.0, ...)SimCC 把坐标回归建模为 1D 分类问题配合RTMCCHead与KLDiscretLoss使用骨干为_scope_mmdet的CSPNeXtarchP5deepen_factor0.67widen_factor0.75权重通过init_cfg从预训练 CSPNeXt checkpoint 热启动test_cfgdict(flip_testTrue)测试时做水平翻转增强可小幅提升关键点稳定性。检测侧的 rtmdet_nano_320-8xb32_coco-person.py 是单类personRTMDet-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.5cmake 3.14执行bash install_posetracker_linux.shinstall_posetracker_linux.sh 内部依次完成 5 件事理解顺序有助于排错wget下载mmdeploy-1.0.0-linux-x86_64-cxx11abi.tar.gz并解压对应 README 中要求的 cxx11abi 变体与系统 libc ABI 必须匹配source set_env.sh初始化 SDK 环境变量若系统未装 OpenCV 3执行bash install_opencv.sh已安装则跳过bash build_sdk.sh编译出bin/pose_tracker等可执行文件——这一步需要 GCC 与 cmake 满足上述版本要求下载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.jpgmmpose_style_skeleton.sh 的关键内容WORKSPACEmmdeploy-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可编辑安装与mmdet3.0.0rc6推理默认使用cuda:0mmdeploy 路线仅覆盖 Linux x86_64cxx11abi环境且需要 GCC 7.5、cmake 3.14 用于编译pose_tracker。两个模型权重均需联网下载请确保网络可达。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考