SDPose / models /HeatmapHead.py
teemosliang's picture
realease: publish the huggingface space demo of SDPose
d5532b9 verified
# Author: T. S. Liang @ Rama Alpaca
# Emails: tsliang2001@gmail.com | shuangliang@ramaalpaca.com | sliang57@connect.hku.hk
# Date: Jun. 2025
# Description: SDPose heatmap head factory using mmpose `HeatmapHead` + `UDPHeatmap` codec.
# - mode="body" β†’ 17 keypoints, in_channels=320
# - mode="wholebody"β†’ 133 keypoints, in_channels=640
# Defaults: image_size=(768,1024), scale=4 (β†’ heatmap size = (w/4, h/4)), sigma=6.
# License: MIT License (see LICENSE for details)
from mmpose.registry import MODELS
def get_heatmap_head(mode = "body"):
if mode == "body":
image_size = [768, 1024] ## width x height
sigma = 6 ## sigma is 2 for 256
scale = 4
embed_dim = 320
num_keypoints = 17
codec = dict(
type='UDPHeatmap', input_size=(image_size[0], image_size[1]), heatmap_size=(int(image_size[0]/scale), int(image_size[1]/scale)), sigma=sigma) ## sigma is 2 for 256
head_cfg = dict(
type='HeatmapHead',
in_channels=embed_dim,
out_channels=num_keypoints,
deconv_out_channels=(320,),
deconv_kernel_sizes=(4,),
conv_out_channels=(320,),
conv_kernel_sizes=(1,),
loss=dict(type='KeypointMSELoss', use_target_weight=True),
decoder=codec
)
elif mode == "wholebody":
image_size = [768, 1024] ## width x height
sigma = 6 ## sigma is 2 for 256
scale = 4
embed_dim = 640
num_keypoints = 133
codec = dict(
type='UDPHeatmap', input_size=(image_size[0], image_size[1]), heatmap_size=(int(image_size[0]/scale), int(image_size[1]/scale)), sigma=sigma) ## sigma is 2 for 256
head_cfg = dict(
type='HeatmapHead',
in_channels=embed_dim,
out_channels=num_keypoints,
deconv_out_channels=(640,),
deconv_kernel_sizes=(4,),
conv_out_channels=(640,),
conv_kernel_sizes=(1,),
loss=dict(type='KeypointMSELoss', use_target_weight=True),
decoder=codec
)
head = MODELS.build(head_cfg)
return head