Views
No views yet
@inproceedings{albiero2021img2pose,
title={img2pose: Face Alignment and Detection via 6DoF, Face Pose Estimation},
author={Albiero, Vítor and Chen, Xingyu and Yin, Xi and Pang, Guan and Hassner, Tal},
booktitle={CVPR},
year={2021},
url={https://arxiv.org/abs/2012.07791},
}1import numpy as np
2import os
3import json
4import torch
5import torch.nn as nn
6from huggingface_hub import hf_hub_download
7from safetensors.torch import load_file
8from feat.facepose_detectors.img2pose.deps.models import FasterDoFRCNN, postprocess_img2pose
9from feat.utils.io import get_resource_path
10from torchvision.models.detection.backbone_utils import resnet_fpn_backbone
11
12
13# Load Model Configurations
14facepose_config_file = hf_hub_download(repo_id= "py-feat/img2pose", filename="config.json", cache_dir=get_resource_path())
15with open(facepose_config_file, "r") as f:
16 facepose_config = json.load(f)
17
18# Initialize img2pose
19device = 'cpu'
20backbone = resnet_fpn_backbone(backbone_name="resnet18", weights=None)
21backbone.eval()
22backbone.to(device)
23facepose_detector = FasterDoFRCNN(backbone=backbone,
24 num_classes=2,
25 min_size=facepose_config['min_size'],
26 max_size=facepose_config['max_size'],
27 pose_mean=torch.tensor(facepose_config['pose_mean']),
28 pose_stddev=torch.tensor(facepose_config['pose_stddev']),
29 threed_68_points=torch.tensor(facepose_config['threed_points']),
30 rpn_pre_nms_top_n_test=facepose_config['rpn_pre_nms_top_n_test'],
31 rpn_post_nms_top_n_test=facepose_config['rpn_post_nms_top_n_test'],
32 bbox_x_factor=facepose_config['bbox_x_factor'],
33 bbox_y_factor=facepose_config['bbox_y_factor'],
34 expand_forehead=facepose_config['expand_forehead'])
35facepose_model_file = hf_hub_download(repo_id= "py-feat/img2pose", filename="model.safetensors", cache_dir=get_resource_path())
36facepose_checkpoint = load_file(facepose_model_file)
37facepose_detector.load_state_dict(facepose_checkpoint)
38facepose_detector.eval()
39facepose_detector.to(device)
40
41# Test model
42face_image = "path/to/your/test_image.jpg" # Replace with your image
43
44img2pose_output = facepose_detector(face_image)
45
46# Postprocess
47img2pose_output = postprocess_img2pose(img2pose_output[0])
48bbox = img2pose_output['boxes']
49poses = img2pose_output['dofs']
50facescores = img2pose_output['scores']
51