Sapiens人类行为AI模型
- Sapiens简介
- Sapiens模型的特点
- Sapiens模型的主要功能
- 安装使用
- 克隆存储库
- Lite 安装(仅限推理)
- 完整版安装
- 下载模型
- 推理
- Sapiens-Lite 推理
- 完整版推理
- 标准估计
- ControlNet 兼容输出
- 微调 Sapiens 的简单步骤
- 1.数据准备
- 2.更新配置
- 3.微调
- 单节点训练
- 多节点训练
Sapiens简介
Sapiens是Meta公司推出的一个专注于与人类相关的任务的模型。Meta Sapiens模型旨在理解和模拟人类行为,包括理解身体姿势、识别身体部位、预测深度,甚至确定皮肤纹理等表面细节。
Sapiens 为以人为中心的视觉任务(例如 2D 姿势、零件分割、深度、法线等)提供了一套全面的套件。该模型系列在 3 亿张野外人类图像上进行了预训练,并显示出对不受约束条件的出色泛化。这些模型还设计用于提取高分辨率特征,以 1024 x 1024 图像分辨率和 16 像素的补丁大小进行本机训练。
项目链接:https://github.com/facebookresearch/sapiens
论文链接:https://arxiv.org/abs/2408.12569
Huggingface在线运行: https://huggingface.co/collections/facebook/sapiens-66d22047daa6402d565cb2fc
Sapiens模型的特点
- 通用性:模型具备很强的泛化能力,能在不同场景中表现良好。
- 高适应性:只需少量微调即可用于特定任务。
- 高保真度:输出高分辨率、精确的结果,尤其适合人类图像的生成和处理。
Sapiens模型的主要功能
-
姿势估计(2D):检测图像中人体关键点的位置,如关节等部位,帮助分析人体的势和动作。
-
身体部位分割 :可以识别并分割图像中的不同人体部位,例如头部、躯干、手臂和腿部,对虚拟试穿和医学成像等领域非常有用。
-
深度估计:通过单张图像预测深度信息,Sapiens模型在真实世界和合成数据上均表现出色。
-
表面法线估计:模型可以预测图像中每个像素表面法线的方向,用于人类的3D数字化任务。
安装使用
克隆存储库
git clone https://github.com/facebookresearch/sapiens.git
export SAPIENS_ROOT=/path/to/sapiens
Lite 安装(仅限推理)
对于主要为在推理模式下运行现有模型而设置自己的环境的用户,建议安装 Sapiens-Lite。此设置提供优化的推理(速度提高了 4 倍),并且依赖项最少(仅 PyTorch + numpy + cv2)。
1.设置 sapiens_lite 代码根。
export SAPIENS_LITE_ROOT=$SAPIENS_ROOT/lite
2.设置最小 conda 环境 (pytorch >= 2.2):sapiens_lite
conda create -n sapiens_lite python=3.10
conda activate sapiens_lite
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
pip install opencv-python tqdm json-tricks
安装过程可能会报错,那就报啥错改啥。
完整版安装
cd $SAPIENS_ROOT/_install
./conda.sh
下载模型
huggingface模型下载路径:https://huggingface.co/facebook/sapiens
从 Hugging Face 下载需要的文件,选择适合的模型模式(torchscript 或 bfloat16)
- MODE=torchscript:所有使用 PyTorch2.2+ 的 GPU。推理速度较慢,但最接近原始模型性能。
- MODE=bfloat16:使用 PyTorch-2.3 的 A100 GPU 的优化模式。
export MODE=torchscript
export SAPIENS_LITE_CHECKPOINT_ROOT=/home/tl/sapiens/sapiens_lite_host/$MODE
推理
可选择一下任意推理任务
例如选择姿态估计,提供 4 种不同尺寸的型号。Sapiens-0.3B, Sapiens-0.6B, Sapiens-1B, Sapiens-2B。 通常,性能会随着模型大小的增加而提高。
Sapiens-Lite 推理
安装mmdet
export SAPIENS_ROOT=/path/to/sapiens
cd $SAPIENS_ROOT/engine; pip install -e .
cd $SAPIENS_ROOT/cv; pip install -e .
cd $SAPIENS_ROOT/det; pip install -e .
进入脚本目录
cd $SAPIENS_LITE_ROOT/scripts/demo/[torchscript,bfloat16]
身体:17 个关键点姿态估计执行
./pose_keypoints17.sh
身体 + 面部 + 手 + 脚:133 个关键点姿态估计执行
./pose_keypoints133.sh
身体 + 密脸 + 手 + 脚:308 个关键点姿态估计执行
./pose_keypoints308.sh
为您的图像目录和结果定义。JSON 格式的可视化和关键点将保存到 。自定义和根据需要。Adjust 和多 GPU 配置。
5.将模型转换为 Lite版
cd $SAPIENS_ROOT/scripts/[pretrain,pose,seg]/optimize/local
./[feature_extracter,keypoints*,seg,depth,normal]_optimizer.sh
完整版推理
标准估计
进入脚本目录
cd $SAPIENS_ROOT/pose/scripts/demo/local
身体:17 个关键点姿态估计执行
./keypoints17.sh
身体 + 面部 + 手 + 脚:133 个关键点姿态估计执行
./keypoints133.sh
身体 + 密脸 + 手 + 脚:308 个关键点姿态估计执行
./keypoints308.sh
ControlNet 兼容输出
在黑色背景上生成 OpenPose 骨架,与 ControlNet 兼容。
进入脚本目录
cd $SAPIENS_ROOT/pose/scripts/demo/local
身体:17 个关键点姿态估计执行
./keypoints17_openpose.sh
身体 + 面部 + 手 + 脚:133 个关键点姿态估计执行
./keypoints133_openpose.sh
微调 Sapiens 的简单步骤
还是以姿势估计为例并使用准备的两个数据集:
COCO-WholeBody :133 个关键点(身体 17 kps、脚部 6 kps、面部 68 kps、手部 42 kps)。
COCO:17 个关键点。
1.数据准备
从 COCO 下载图像和 17 kps 标注。从 COCO-WholeBody 下载 133 kps标注。将图像和标注数据作为子文件夹解压缩。.
此外,从 COCO_val2017_detections_AP_H_70_person.json 下载集上的边界框检测,并将其放在 下。$DATA_ROOT $DATA_ROOTval2017 $DATA_ROOT/person_detection_results。
数据目录结构如下:
2.更新配置
请将以下变量配置为133关键点或17关键点模式。
编辑配置文件路径
$DATASET coco-wholebody coco $SAPIENS_ROOT/pose/configs/sapiens_pose/$DATASET/sapiens_1b-210e_$DATASET-1024x768.py
需修改项:
- 预训练模型路径
pretrained_checkpoint ➔ 设置为您的模型检查点路径 - 数据根目录
更新 train_dataloader.dataset.data_root 和 val_dataloader.dataset.data_root 为您的数据路径(示例:$DATA_ROOT/data/coco) - 验证集标注文件
更新 val_evaluator.ann_file ➔ 指向 $DATA_ROOT 下的验证集标注文件 - 边界框检测文件
更新 bbox_file ➔ 指向 $DATA_ROOT 下的边界框检测结果文件
(注:所有$开头的变量需替换为实际路径,如$DATA_ROOT表示数据根目录)
3.微调
本指南适用于 Sapiens-1B 模型
-
其他预训练模型配置(支持133关键点/17关键点)位于:pose_configs_133 和 pose_configs_17目录下
-
训练脚本路径:$SAPIENS_ROOT/pose/scripts/finetune/$DATASET/sapiens_1b(需替换 $DATASET 为实际数据集名称,如 coco)
-
确保已激活 Sapiens 的 Python conda 环境
单节点训练
启动脚本路径:
$SAPIENS_ROOT/pose/scripts/finetune/$DATASET/sapiens_1b/node.sh
(需替换 $SAPIENS_ROOT 和 $DATASET 为实际路径及数据集名称)
关键变量配置:
-
DEVICES:GPU ID列表(例如 “0,1,2,3,4,5,6,7”)
-
TRAIN_BATCH_SIZE_PER_GPU:每个GPU的训练批次大小(默认值:2)
-
OUTPUT_DIR:模型检查点及日志输出目录
-
RESUME_FROM:恢复训练的检查点路径(从上一个epoch开始,默认值为空字符串)
-
LOAD_FROM:加载权重的检查点路径(训练从epoch 0开始,默认值为空字符串)
-
mode=multi-gpu:启动多GPU训练(自动分配数据并行,支持多数据加载进程)
-
mode=debug(可选):调试模式(单GPU试运行,仅单数据加载进程,支持 pdb/ipdb 交互调试)
请注意,如果您希望从现有的姿势估计检查点进行微调,请设置变量
启动:
cd $SAPIENS_ROOT/pose/scripts/finetune/$DATASET/sapiens_1b
./node.sh
多节点训练
启动脚本路径:
$SAPIENS_ROOT/pose/scripts/finetune/$DATASET/sapiens_1b/slurm.sh
其他变量:
- CONDA_ENV:conda 环境的路径
- NUM_NODES:节点数(默认 4 个,每个节点 8 个 GPU)
启动:
cd $SAPIENS_ROOT/pose/scripts/finetune/$DATASET/sapiens_1b
./slurm.sh