[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-vitoralbiero--img2pose":3,"tool-vitoralbiero--img2pose":64},[4,18,26,35,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,2,"2026-04-06T11:32:50",[14,15,13],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":10,"last_commit_at":41,"category_tags":42,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[43,15,13,14],"语言模型",{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":10,"last_commit_at":50,"category_tags":51,"status":17},4292,"Deep-Live-Cam","hacksider\u002FDeep-Live-Cam","Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具，用户仅需一张静态照片，即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点，让高质量的数字内容创作变得触手可及。\n\n这款工具不仅适合开发者和技术研究人员探索算法边界，更因其极简的操作逻辑（仅需三步：选脸、选摄像头、启动），广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换，还是制作趣味短视频和直播互动，Deep-Live-Cam 都能提供流畅的支持。\n\n其核心技术亮点在于强大的实时处理能力，支持口型遮罩（Mouth Mask）以保留使用者原始的嘴部动作，确保表情自然精准；同时具备“人脸映射”功能，可同时对画面中的多个主体应用不同面孔。此外，项目内置了严格的内容安全过滤机制，自动拦截涉及裸露、暴力等不当素材，并倡导用户在获得授权及明确标注的前提下合规使用，体现了技术发展与伦理责任的平衡。",88924,"2026-04-06T03:28:53",[14,15,13,52],"视频",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85013,"2026-04-06T11:09:19",[15,16,52,61,13,62,43,14,63],"插件","其他","音频",{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":77,"owner_avatar_url":78,"owner_bio":79,"owner_company":80,"owner_location":79,"owner_email":81,"owner_twitter":79,"owner_website":82,"owner_url":83,"languages":84,"stars":105,"forks":106,"last_commit_at":107,"license":108,"difficulty_score":109,"env_os":110,"env_gpu":111,"env_ram":112,"env_deps":113,"category_tags":120,"github_topics":121,"view_count":32,"oss_zip_url":79,"oss_zip_packed_at":79,"status":17,"created_at":127,"updated_at":128,"faqs":129,"releases":159},5044,"vitoralbiero\u002Fimg2pose","img2pose","The official PyTorch implementation of img2pose: Face Alignment and Detection via 6DoF, Face Pose Estimation - CVPR 2021","img2pose 是一款基于 PyTorch 的开源 AI 模型，专为实时人脸姿态估计与对齐而设计。它源自 CVPR 2021 的研究成果，核心突破在于无需预先进行人脸检测或关键点定位，即可直接估算图像中多张人脸的六自由度（6DoF）刚性变换参数。\n\n传统方法通常依赖繁琐的人脸检测器和 landmarks 定位来实现 3D 对齐，而 img2pose 发现直接回归 6DoF 姿态是更简单且信息量更大的路径。通过改进的 Faster R-CNN 架构，它能直接从原始图片中输出精确的 3D 人脸姿态，不仅简化了处理流程，还在 AFLW2000-3D 和 BIWI 等基准测试中超越了现有最先进模型。有趣的是，即便未针对边界框标签进行专门优化，其在 WIDER FACE 人脸检测任务上的表现也优于同类复杂模型。\n\n这款工具非常适合计算机视觉研究人员、AI 开发者以及需要高效人脸预处理方案的技术团队。用户利用它可以轻松实现人脸的可视化渲染、自定义投影边界框生成，或直接裁剪并对齐人脸以用于后续的识别与分析任务。如果你正在寻找一种既快速又精准，且能摆脱传统检测依赖的 3D 人脸处理方案，img2po","img2pose 是一款基于 PyTorch 的开源 AI 模型，专为实时人脸姿态估计与对齐而设计。它源自 CVPR 2021 的研究成果，核心突破在于无需预先进行人脸检测或关键点定位，即可直接估算图像中多张人脸的六自由度（6DoF）刚性变换参数。\n\n传统方法通常依赖繁琐的人脸检测器和 landmarks 定位来实现 3D 对齐，而 img2pose 发现直接回归 6DoF 姿态是更简单且信息量更大的路径。通过改进的 Faster R-CNN 架构，它能直接从原始图片中输出精确的 3D 人脸姿态，不仅简化了处理流程，还在 AFLW2000-3D 和 BIWI 等基准测试中超越了现有最先进模型。有趣的是，即便未针对边界框标签进行专门优化，其在 WIDER FACE 人脸检测任务上的表现也优于同类复杂模型。\n\n这款工具非常适合计算机视觉研究人员、AI 开发者以及需要高效人脸预处理方案的技术团队。用户利用它可以轻松实现人脸的可视化渲染、自定义投影边界框生成，或直接裁剪并对齐人脸以用于后续的识别与分析任务。如果你正在寻找一种既快速又精准，且能摆脱传统检测依赖的 3D 人脸处理方案，img2pose 是一个值得尝试的强大选择。","# img2pose: Face Alignment and Detection via 6DoF, Face Pose Estimation\n\n## Paper accepted to the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2021\n\n[![License: CC BY-NC 4.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-CC%20BY--NC%204.0-lightgrey.svg)](https:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby-nc\u002F4.0\u002F)\n[![PWC](https:\u002F\u002Fimg.shields.io\u002Fendpoint.svg?url=https:\u002F\u002Fpaperswithcode.com\u002Fbadge\u002Fimg2pose-face-alignment-and-detection-via\u002Fhead-pose-estimation-on-aflw2000)](https:\u002F\u002Fpaperswithcode.com\u002Fsota\u002Fhead-pose-estimation-on-aflw2000?p=img2pose-face-alignment-and-detection-via)\n[![PWC](https:\u002F\u002Fimg.shields.io\u002Fendpoint.svg?url=https:\u002F\u002Fpaperswithcode.com\u002Fbadge\u002Fimg2pose-face-alignment-and-detection-via\u002Fhead-pose-estimation-on-biwi)](https:\u002F\u002Fpaperswithcode.com\u002Fsota\u002Fhead-pose-estimation-on-biwi?p=img2pose-face-alignment-and-detection-via)\n\n\u003Cfigure>\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fvitoralbiero_img2pose_readme_eb8506a23a2a.jpeg\" style=\"width:100%\">\n  \u003Cfigcaption>Figure 1: We estimate the 6DoF rigid transformation of a 3D face (rendered in silver), aligning it with even the tiniest faces, without face detection or facial landmark localization. Our estimated 3D face locations are rendered by descending distances from the camera, for coherent visualization.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>\n\n## TL;DR\nThis repository provides a novel method for six degrees of fredoom (6DoF) detection on multiple faces without the need of prior face detection. After prediction, one can visualize the detections (as show in the figure above), customize projected bounding boxes, or crop and align each face for further processing. See details below.\n\n## Table of contents\n\n\u003C!--ts-->\n- [Paper details](#paper-details)\n  * [Abstract](#abstract)\n  * [Video Spotlight](#video-spotlight)\n  * [Citation](#citation)\n- [Installation](#installation)\n- [Training](#training)\n  * [Prepare WIDER FACE dataset](#prepare-wider-face-dataset)\n  * [Train](#train)\n  * [Training on your own dataset](#training-on-your-own-dataset)\n- [Testing](#testing)\n  * [Visualizing trained model](#visualizing-trained-model)\n  * [WIDER FACE dataset evaluation](#wider-face-dataset-evaluation)  \n  * [AFLW2000-3D dataset evaluation](#aflw2000-3d-dataset-evaluation)\n  * [BIWI dataset evaluation](#biwi-dataset-evaluation)\n  * [Testing on your own images](#testing-on-your-own-images)\n- [Output customization](#output-customization)\n- [Align faces](#align-faces)\n- [Resources](#resources)\n- [License](#license)\n\u003C!--te-->\n\n## Paper details\n\n[Vítor Albiero](https:\u002F\u002Fvitoralbiero.netlify.app), Xingyu Chen, [Xi Yin](https:\u002F\u002Fxiyinmsu.github.io\u002F), Guan Pang, [Tal Hassner](https:\u002F\u002Ftalhassner.github.io\u002Fhome\u002F), \"*img2pose: Face Alignment and Detection via 6DoF, Face Pose Estimation,*\" CVPR, 2021, [arXiv:2012.07791](https:\u002F\u002Farxiv.org\u002Fabs\u002F2012.07791)\n\n\n### Abstract\n> We propose real-time, six degrees of freedom (6DoF), 3D face pose estimation without face detection or landmark localization. We observe that estimating the 6DoF rigid transformation of a face is a simpler problem than facial landmark detection, often used for 3D face alignment. In addition, 6DoF offers more information than face bounding box labels. We leverage these observations to make multiple contributions: (a) We describe an easily trained, efficient, Faster R-CNN--based model which regresses 6DoF pose for all faces in the photo, without preliminary face detection. (b) We explain how pose is converted and kept consistent between the input photo and arbitrary crops created while training and evaluating our model. (c) Finally, we show how face poses can replace detection bounding box training labels. Tests on AFLW2000-3D and BIWI show that our method runs at real-time and outperforms state of the art (SotA) face pose estimators. Remarkably, our method also surpasses SotA models of comparable complexity on the WIDER FACE detection benchmark, despite not been optimized on bounding box labels.\n\n### Video Spotlight\n[CVPR 2021 Spotlight](https:\u002F\u002Fyoutu.be\u002FvDGlvpnzXGo)\n\n### Citation\nIf you use any part of our code or data, please cite our paper.\n```\n@inproceedings{albiero2021img2pose,\n  title={img2pose: Face Alignment and Detection via 6DoF, Face Pose Estimation},\n  author={Albiero, Vítor and Chen, Xingyu and Yin, Xi and Pang, Guan and Hassner, Tal},\n  booktitle={CVPR},\n  year={2021},\n  url={https:\u002F\u002Farxiv.org\u002Fabs\u002F2012.07791},\n}\n```\n\n## Installation\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython%20-%2314354C.svg?&style=for-the-badge&logo=python&logoColor=white\"\u002F> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPyTorch%20-%23EE4C2C.svg?&style=for-the-badge&logo=PyTorch&logoColor=white\" \u002F>\n\nInstall dependecies with Python 3.\n```\npip install -r requirements.txt\n```\nInstall the renderer, which is used to visualize predictions. The renderer implementation is forked from [here](https:\u002F\u002Fgithub.com\u002Fcleardusk\u002F3DDFA_V2\u002Ftree\u002Fmaster\u002FSim3DR).\n```\ncd Sim3DR\nsh build_sim3dr.sh\n```\n\n## Training\n### Prepare WIDER FACE dataset\nFirst, download our annotations as instructed in [Annotations](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FAnnotations).\n\nDownload [WIDER FACE](http:\u002F\u002Fshuoyang1213.me\u002FWIDERFACE\u002F) dataset and extract to datasets\u002FWIDER_Face.\n\nThen, to create the train and validation files (LMDB), run the following scripts.\n\n```\npython3 convert_json_list_to_lmdb.py \\\n--json_list .\u002Fannotations\u002FWIDER_train_annotations.txt \\\n--dataset_path .\u002Fdatasets\u002FWIDER_Face\u002FWIDER_train\u002Fimages\u002F \\\n--dest .\u002Fdatasets\u002Flmdb\u002F \\\n--train\n```\nThis first script will generate a LMDB dataset, which contains the training images along with annotations. It will also output a pose mean and std deviation files, which will be used for training and testing.\n```\npython3 convert_json_list_to_lmdb.py  \\\n--json_list .\u002Fannotations\u002FWIDER_val_annotations.txt  \\\n--dataset_path .\u002Fdatasets\u002FWIDER_Face\u002FWIDER_val\u002Fimages\u002F  \\\n--dest .\u002Fdatasets\u002Flmdb\n```\nThis second script will create a LMDB containing the validation images along with annotations.\n\n### Train\nOnce the LMDB train\u002Fval files are created, to start training simple run the script below.\n```\nCUDA_VISIBLE_DEVICES=0 python3 train.py \\\n--pose_mean .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations_pose_mean.npy \\\n--pose_stddev .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations_pose_stddev.npy \\\n--workspace .\u002Fworkspace\u002F \\\n--train_source .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations.lmdb \\\n--val_source .\u002Fdatasets\u002Flmdb\u002FWIDER_val_annotations.lmdb \\\n--prefix trial_1 \\\n--batch_size 2 \\\n--lr_plateau \\\n--early_stop \\\n--random_flip \\\n--random_crop \\\n--max_size 1400\n```\nTo train with multiple GPUs (in the example below 4 GPUs), use the script below.\n```\npython3 -m torch.distributed.launch --nproc_per_node=4 --use_env train.py \\\n--pose_mean .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations_pose_mean.npy \\\n--pose_stddev .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations_pose_stddev.npy \\\n--workspace .\u002Fworkspace\u002F \\\n--train_source .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations.lmdb \\\n--val_source .\u002Fdatasets\u002Flmdb\u002FWIDER_val_annotations.lmdb \\\n--prefix trial_1 \\\n--batch_size 2 \\\n--lr_plateau \\\n--early_stop \\\n--random_flip \\\n--random_crop \\\n--max_size 1400 \\\n--distributed\n```\n\n### Training on your own dataset\nIf your dataset has facial landmarks and bounding boxes already annotated, store them into JSON files following the same format as in the [WIDER FACE annotations](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FAnnotations).\n\nIf not, run the script below to annotate your dataset. You will need a detector and import it inside the script.\n```\npython3 utils\u002Fannotate_dataset.py \n--image_list list_of_images.txt \n--output_path .\u002Fannotations\u002Fdataset_name\n```\nAfter the dataset is annotated, create a list pointing to the JSON files there were saved. Then, follow the steps in [Prepare WIDER FACE dataset](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose#prepare-wider-face-dataset) replacing the WIDER annotations with your own dataset annotations. Once the LMDB and pose files are created, follow the steps in [Train](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose#train) replacing the WIDER LMDB and pose files with your dataset own files.\n\n## Testing\nTo evaluate with the pretrained model, download the model from [Model Zoo](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FModel-Zoo), and extract it to the main folder. It will create a folder called models, which contains the model weights and the pose mean and std dev that was used for training.\n\nIf evaluating with own trained model, change the pose mean and standard deviation to the ones trained with.\n\n### Visualizing trained model\nTo visualize a trained model on the WIDER FACE validation set run the notebook [visualize_trained_model_predictions](evaluation\u002Fjupyter_notebooks\u002Fvisualize_trained_model_predictions.ipynb).\n\n### WIDER FACE dataset evaluation\nIf you haven't done already, download the [WIDER FACE](http:\u002F\u002Fshuoyang1213.me\u002FWIDERFACE\u002F) dataset and extract to datasets\u002FWIDER_Face.\n\nDownload the [pre-trained model](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1OvnZ7OUQFg2bAgFADhT7UnCkSaXst10O\u002Fview?usp=sharing).\n\n```\npython3 evaluation\u002Fevaluate_wider.py \\\n--dataset_path datasets\u002FWIDER_Face\u002FWIDER_val\u002Fimages\u002F \\\n--dataset_list datasets\u002FWIDER_Face\u002Fwider_face_split\u002Fwider_face_val_bbx_gt.txt \\\n--pose_mean models\u002FWIDER_train_pose_mean_v1.npy \\\n--pose_stddev models\u002FWIDER_train_pose_stddev_v1.npy \\\n--pretrained_path models\u002Fimg2pose_v1.pth \\\n--output_path results\u002FWIDER_FACE\u002FVal\u002F\n```\n\nTo check mAP and plot curves, download the [eval tools](http:\u002F\u002Fshuoyang1213.me\u002FWIDERFACE\u002F) and point to results\u002FWIDER_FACE\u002FVal.\n\n### AFLW2000-3D dataset evaluation\nDownload the [AFLW2000-3D](http:\u002F\u002Fwww.cbsr.ia.ac.cn\u002Fusers\u002Fxiangyuzhu\u002Fprojects\u002F3DDFA\u002FDatabase\u002FAFLW2000-3D.zip) dataset and unzip to datasets\u002FAFLW2000.\n\nDownload the [fine-tuned model](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1wSqPr9h1x_TOaxuN-Nu3OlTmhqnuf6rZ\u002Fview?usp=sharing).\n\nRun the notebook [aflw_2000_3d_evaluation](.\u002Fevaluation\u002Fjupyter_notebooks\u002Faflw_2000_3d_evaluation.ipynb).\n\n### BIWI dataset evaluation\nDownload the [BIWI](http:\u002F\u002Fdata.vision.ee.ethz.ch\u002Fcvl\u002Fgfanelli\u002Fkinect_head_pose_db.tgz) dataset and unzip to datasets\u002FBIWI.\n\nDownload the [fine-tuned model](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1wSqPr9h1x_TOaxuN-Nu3OlTmhqnuf6rZ\u002Fview?usp=sharing).\n\nRun the notebook [biwi_evaluation](.\u002Fevaluation\u002Fjupyter_notebooks\u002Fbiwi_evaluation.ipynb).\n\n### Testing on your own images\n\nRun the notebook [test_own_images](.\u002Fevaluation\u002Fjupyter_notebooks\u002Ftest_own_images.ipynb).\n\n## Output customization\n\nFor every face detected, the model outputs by default:\n- Pose: r\u003Csub>x\u003C\u002Fsub>, r\u003Csub>y\u003C\u002Fsub>, r\u003Csub>z\u003C\u002Fsub>, t\u003Csub>x\u003C\u002Fsub>, t\u003Csub>y\u003C\u002Fsub>, t\u003Csub>z\u003C\u002Fsub>\n- Projected bounding boxes: left, top, right, bottom\n- Face scores: 0 to 1\n\nSince the projected bounding box without expansion ends at the start of the forehead, we provide a way of expanding the forehead invidually, along with default x and y expansion. \n\nTo customize the size of the projected bounding boxes, when creating the model change any of the bounding box expansion variables as shown below (a complete example can be seen at [visualize_trained_model_predictions](evaluation\u002Fjupyter_notebooks\u002Fvisualize_trained_model_predictions.ipynb)).\n```python\n# how much to expand in width\nbbox_x_factor = 1.1\n# how much to expand in height\nbbox_y_factor = 1.1\n# how much to expand in the forehead\nexpand_forehead = 0.3\n\nimg2pose_model = img2poseModel(\n    ...,    \n    bbox_x_factor=bbox_x_factor,\n    bbox_y_factor=bbox_y_factor,\n    expand_forehead=expand_forehead,\n)\n```\n\n## Align faces\nTo detect and align faces, simply run the command below, passing the path to the images you want to detect and align and the path to save them.\n```\npython3 run_face_alignment.py \\\n--pose_mean models\u002FWIDER_train_pose_mean_v1.npy \\\n--pose_stddev models\u002FWIDER_train_pose_stddev_v1.npy \\\n--pretrained_path models\u002Fimg2pose_v1.pth \\\n--images_path image_path_or_list \\\n--output_path path_to_save_aligned_faces\n```\n\n## Resources\n[Model Zoo](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FModel-Zoo)\n\n[Annotations](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FAnnotations)\n\n[Data Zoo](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FData-Zoo)\n\n## License\nCheck [license](.\u002Flicense.md) for license details.\n","# img2pose：基于6DoF的人脸对齐与检测、人脸姿态估计\n\n## 论文已被IEEE计算机视觉与模式识别会议（CVPR）2021收录\n\n[![许可证：CC BY-NC 4.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-CC%20BY--NC%204.0-lightgrey.svg)](https:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby-nc\u002F4.0\u002F)\n[![PWC](https:\u002F\u002Fimg.shields.io\u002Fendpoint.svg?url=https:\u002F\u002Fpaperswithcode.com\u002Fbadge\u002Fimg2pose-face-alignment-and-detection-via\u002Fhead-pose-estimation-on-aflw2000)](https:\u002F\u002Fpaperswithcode.com\u002Fsota\u002Fhead-pose-estimation-on-aflw2000?p=img2pose-face-alignment-and-detection-via)\n[![PWC](https:\u002F\u002Fimg.shields.io\u002Fendpoint.svg?url=https:\u002F\u002Fpaperswithcode.com\u002Fbadge\u002Fimg2pose-face-alignment-and-detection-via\u002Fhead-pose-estimation-on-biwi)](https:\u002F\u002Fpaperswithcode.com\u002Fsota\u002Fhead-pose-estimation-on-biwi?p=img2pose-face-alignment-and-detection-via)\n\n\u003Cfigure>\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fvitoralbiero_img2pose_readme_eb8506a23a2a.jpeg\" style=\"width:100%\">\n  \u003Cfigcaption>图1：我们估计3D人脸的6DoF刚性变换（以银色渲染），即使面对极小的人脸也能实现对齐，且无需进行人脸检测或面部关键点定位。我们估计的3D人脸位置按距离相机远近依次渲染，以确保可视化的一致性。\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>\n\n## 简要说明\n本仓库提供了一种新颖的方法，可在无需预先进行人脸检测的情况下，对多张人脸进行六自由度（6DoF）检测。预测完成后，用户可以可视化检测结果（如上图所示）、自定义投影边界框，或将每张人脸裁剪并对其齐，以便进一步处理。详情请见下文。\n\n## 目录\n\n\u003C!--ts-->\n- [论文详情](#paper-details)\n  * [摘要](#abstract)\n  * [视频亮点](#video-spotlight)\n  * [引用](#citation)\n- [安装](#installation)\n- [训练](#training)\n  * [准备WIDER FACE数据集](#prepare-wider-face-dataset)\n  * [训练](#train)\n  * [在自有数据集上训练](#training-on-your-own-dataset)\n- [测试](#testing)\n  * [可视化训练好的模型](#visualizing-trained-model)\n  * [WIDER FACE数据集评估](#wider-face-dataset-evaluation)  \n  * [AFLW2000-3D数据集评估](#aflw2000-3d-dataset-evaluation)\n  * [BIWI数据集评估](#biwi-dataset-evaluation)\n  * [在自有图像上测试](#testing-on-your-own-images)\n- [输出自定义](#output-customization)\n- [人脸对齐](#align-faces)\n- [资源](#resources)\n- [许可证](#license)\n\u003C!--te-->\n\n## 论文详情\n\n[Vítor Albiero](https:\u002F\u002Fvitoralbiero.netlify.app)、Xingyu Chen、[Xi Yin](https:\u002F\u002Fxiyinmsu.github.io\u002F)、Guan Pang、[Tal Hassner](https:\u002F\u002Ftalhassner.github.io\u002Fhome\u002F)，“img2pose：基于6DoF的人脸对齐与检测、人脸姿态估计”，CVPR，2021年，[arXiv:2012.07791](https:\u002F\u002Farxiv.org\u002Fabs\u002F2012.07791)\n\n\n### 摘要\n> 我们提出了一种无需人脸检测或关键点定位的实时六自由度（6DoF）3D人脸姿态估计方法。我们观察到，估计人脸的6DoF刚性变换比常用于3D人脸对齐的面部关键点检测更为简单。此外，6DoF提供的信息量也多于仅使用人脸边界框标签的情况。基于这些观察，我们做出了多项贡献：(a) 我们描述了一种易于训练、高效的基于Faster R-CNN的模型，该模型可直接回归照片中所有人脸的6DoF姿态，而无需进行预处理的人脸检测。(b) 我们解释了如何在输入照片与训练和评估过程中生成的任意裁剪图像之间保持姿态的一致性。(c) 最后，我们展示了如何用人脸姿态替代检测边界框的训练标签。在AFLW2000-3D和BIWI数据集上的测试表明，我们的方法能够实现实时运行，并且性能优于当前最先进的人脸姿态估计算法。值得注意的是，尽管我们的方法并未针对边界框标签进行优化，但在WIDER FACE检测基准上，其表现仍超越了同等复杂度的最先进模型。\n\n### 视频亮点\n[CVPR 2021亮点](https:\u002F\u002Fyoutu.be\u002FvDGlvpnzXGo)\n\n### 引用\n如果您使用了我们的代码或数据中的任何部分，请引用我们的论文。\n```\n@inproceedings{albiero2021img2pose,\n  title={img2pose: Face Alignment and Detection via 6DoF, Face Pose Estimation},\n  author={Albiero, Vítor and Chen, Xingyu and Yin, Xi and Pang, Guan and Hassner, Tal},\n  booktitle={CVPR},\n  year={2021},\n  url={https:\u002F\u002Farxiv.org\u002Fabs\u002F2012.07791},\n}\n```\n\n## 安装\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython%20-%2314354C.svg?&style=for-the-badge&logo=python&logoColor=white\"\u002F> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPyTorch%20-%23EE4C2C.svg?&style=for-the-badge&logo=PyTorch&logoColor=white\" \u002F>\n\n使用Python 3安装依赖项。\n```\npip install -r requirements.txt\n```\n安装渲染器，用于可视化预测结果。该渲染器的实现基于[此处](https:\u002F\u002Fgithub.com\u002Fcleardusk\u002F3DDFA_V2\u002Ftree\u002Fmaster\u002FSim3DR)的代码。\n```\ncd Sim3DR\nsh build_sim3dr.sh\n```\n\n## 训练\n### 准备WIDER FACE数据集\n首先，按照[注释](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FAnnotations)中的说明下载我们的标注文件。\n\n下载[WIDER FACE](http:\u002F\u002Fshuoyang1213.me\u002FWIDERFACE\u002F)数据集，并解压到datasets\u002FWIDER_Face目录下。\n\n然后，运行以下脚本以创建训练和验证数据集（LMDB格式）。\n\n```\npython3 convert_json_list_to_lmdb.py \\\n--json_list .\u002Fannotations\u002FWIDER_train_annotations.txt \\\n--dataset_path .\u002Fdatasets\u002FWIDER_Face\u002FWIDER_train\u002Fimages\u002F \\\n--dest .\u002Fdatasets\u002Flmdb\u002F \\\n--train\n```\n此脚本将生成一个包含训练图像及其标注的LMDB数据集，并输出姿态的均值和标准差文件，供训练和测试使用。\n```\npython3 convert_json_list_to_lmdb.py  \\\n--json_list .\u002Fannotations\u002FWIDER_val_annotations.txt  \\\n--dataset_path .\u002Fdatasets\u002FWIDER_Face\u002FWIDER_val\u002Fimages\u002F  \\\n--dest .\u002Fdatasets\u002Flmdb\n```\n第二个脚本将创建一个包含验证图像及其标注的LMDB数据集。\n\n### 训练\n一旦LMDB格式的训练\u002F验证文件创建完毕，只需运行以下脚本即可开始训练。\n```\nCUDA_VISIBLE_DEVICES=0 python3 train.py \\\n--pose_mean .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations_pose_mean.npy \\\n--pose_stddev .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations_pose_stddev.npy \\\n--workspace .\u002Fworkspace\u002F \\\n--train_source .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations.lmdb \\\n--val_source .\u002Fdatasets\u002Flmdb\u002FWIDER_val_annotations.lmdb \\\n--prefix trial_1 \\\n--batch_size 2 \\\n--lr_plateau \\\n--early_stop \\\n--random_flip \\\n--random_crop \\\n--max_size 1400\n```\n若要使用多块GPU进行训练（例如下面的例子中使用4块GPU），请使用以下脚本：\n```\npython3 -m torch.distributed.launch --nproc_per_node=4 --use_env train.py \\\n--pose_mean .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations_pose_mean.npy \\\n--pose_stddev .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations_pose_stddev.npy \\\n--workspace .\u002Fworkspace\u002F \\\n--train_source .\u002Fdatasets\u002Flmdb\u002FWIDER_train_annotations.lmdb \\\n--val_source .\u002Fdatasets\u002Flmdb\u002FWIDER_val_annotations.lmdb \\\n--prefix trial_1 \\\n--batch_size 2 \\\n--lr_plateau \\\n--early_stop \\\n--random_flip \\\n--random_crop \\\n--max_size 1400 \\\n--distributed\n```\n\n### 使用自己的数据集进行训练\n如果您的数据集中已经标注了人脸关键点和边界框，请按照与[WIDER FACE标注](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FAnnotations)相同的格式将其存储为JSON文件。\n\n如果没有，则可以运行以下脚本来标注您的数据集。您需要一个检测器，并在脚本中导入它。\n```\npython3 utils\u002Fannotate_dataset.py \n--image_list list_of_images.txt \n--output_path .\u002Fannotations\u002Fdataset_name\n```\n数据集标注完成后，创建一个指向已保存JSON文件的列表。然后，按照[准备WIDER FACE数据集](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose#prepare-wider-face-dataset)中的步骤操作，将WIDER的标注替换为您自己的数据集标注。当LMDB文件和姿态文件创建完毕后，再按照[训练](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose#train)中的步骤，将WIDER的LMDB和姿态文件替换为您数据集的相应文件。\n\n## 测试\n若要使用预训练模型进行评估，可从[模型库](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FModel-Zoo)下载模型并解压到主目录下。这将创建一个名为models的文件夹，其中包含模型权重以及训练时使用的姿态均值和标准差。\n\n如果使用自己训练的模型进行评估，则需将姿态均值和标准差替换为对应于您所训练模型的值。\n\n### 可视化训练好的模型\n要在WIDER FACE验证集上可视化训练好的模型，请运行笔记本[visualize_trained_model_predictions](evaluation\u002Fjupyter_notebooks\u002Fvisualize_trained_model_predictions.ipynb)。\n\n### WIDER FACE数据集评估\n如果您尚未完成，请下载[WIDER FACE](http:\u002F\u002Fshuoyang1213.me\u002FWIDERFACE\u002F)数据集并解压到datasets\u002FWIDER_Face目录下。\n\n下载[预训练模型](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1OvnZ7OUQFg2bAgFADhT7UnCkSaXst10O\u002Fview?usp=sharing)。\n\n```\npython3 evaluation\u002Fevaluate_wider.py \\\n--dataset_path datasets\u002FWIDER_Face\u002FWIDER_val\u002Fimages\u002F \\\n--dataset_list datasets\u002FWIDER_Face\u002Fwider_face_split\u002Fwider_face_val_bbx_gt.txt \\\n--pose_mean models\u002FWIDER_train_pose_mean_v1.npy \\\n--pose_stddev models\u002FWIDER_train_pose_stddev_v1.npy \\\n--pretrained_path models\u002Fimg2pose_v1.pth \\\n--output_path results\u002FWIDER_FACE\u002FVal\u002F\n```\n\n要检查mAP并绘制曲线，请下载[WIDER FACE评估工具](http:\u002F\u002Fshuoyang1213.me\u002FWIDERFACE\u002F)，并将路径指向results\u002FWIDER_FACE\u002FVal目录。\n\n### AFLW2000-3D数据集评估\n下载[AFLW2000-3D](http:\u002F\u002Fwww.cbsr.ia.ac.cn\u002Fusers\u002Fxiangyuzhu\u002Fprojects\u002F3DDFA\u002FDatabase\u002FAFLW2000-3D.zip)数据集并解压到datasets\u002FAFLW2000目录下。\n\n下载[微调后的模型](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1wSqPr9h1x_TOaxuN-Nu3OlTmhqnuf6rZ\u002Fview?usp=sharing)。\n\n运行笔记本[aflw_2000_3d_evaluation](.\u002Fevaluation\u002Fjupyter_notebooks\u002Faflw_2000_3d_evaluation.ipynb)。\n\n### BIWI数据集评估\n下载[BIWI](http:\u002F\u002Fdata.vision.ee.ethz.ch\u002Fcvl\u002Fgfanelli\u002Fkinect_head_pose_db.tgz)数据集并解压到datasets\u002FBIWI目录下。\n\n下载[微调后的模型](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1wSqPr9h1x_TOaxuN-Nu3OlTmhqnuf6rZ\u002Fview?usp=sharing)。\n\n运行笔记本[biwi_evaluation](.\u002Fevaluation\u002Fjupyter_notebooks\u002Fbiwi_evaluation.ipynb)。\n\n### 在自己的图像上测试\n运行笔记本[test_own_images](.\u002Fevaluation\u002Fjupyter_notebooks\u002Ftest_own_images.ipynb)。\n\n## 输出自定义\n对于每个检测到的人脸，模型默认输出以下信息：\n- 姿态：r\u003Csub>x\u003C\u002Fsub>, r\u003Csub>y\u003C\u002Fsub>, r\u003Csub>z\u003C\u002Fsub>, t\u003Csub>x\u003C\u002Fsub>, t\u003Csub>y\u003C\u002Fsub>, t\u003Csub>z\u003C\u002Fsub>\n- 投影后的边界框：左、上、右、下\n- 人脸置信度：0至1\n\n由于未扩展的投影边界框会止于额头起始处，我们提供了一种单独扩展额头区域的方法，同时保留默认的宽度和高度扩展。\n\n若要自定义投影边界框的大小，在创建模型时，可以修改如下所示的边界框扩展参数（完整示例可在[visualize_trained_model_predictions](evaluation\u002Fjupyter_notebooks\u002Fvisualize_trained_model_predictions.ipynb)中查看）。\n```python\n# 宽度扩展倍数\nbbox_x_factor = 1.1\n# 高度扩展倍数\nbbox_y_factor = 1.1\n# 额头扩展比例\nexpand_forehead = 0.3\n\nimg2pose_model = img2poseModel(\n    ...,    \n    bbox_x_factor=bbox_x_factor,\n    bbox_y_factor=bbox_y_factor,\n    expand_forehead=expand_forehead,\n)\n```\n\n## 人脸对齐\n要检测并对齐人脸，只需运行以下命令，传入待检测和对齐的图像路径以及保存路径即可。\n```\npython3 run_face_alignment.py \\\n--pose_mean models\u002FWIDER_train_pose_mean_v1.npy \\\n--pose_stddev models\u002FWIDER_train_pose_stddev_v1.npy \\\n--pretrained_path models\u002Fimg2pose_v1.pth \\\n--images_path image_path_or_list \\\n--output_path path_to_save_aligned_faces\n```\n\n## 资源\n[模型库](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FModel-Zoo)\n\n[标注](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FAnnotations)\n\n[数据集库](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FData-Zoo)\n\n## 许可证\n许可证详情请参阅[license.md]文件。","# img2pose 快速上手指南\n\nimg2pose 是一个基于 CVPR 2021 论文的开源工具，能够通过估计人脸的 6 自由度（6DoF）姿态，在无需预先进行人脸检测或关键点定位的情况下，直接实现多个人脸的对齐与检测。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**: Linux (推荐 Ubuntu)\n*   **Python**: 3.x\n*   **深度学习框架**: PyTorch\n*   **硬件**: 支持 CUDA 的 NVIDIA GPU（用于训练和加速推理）\n*   **编译器**: g++ (用于构建渲染器)\n\n## 安装步骤\n\n### 1. 安装 Python 依赖\n克隆仓库后，进入目录并安装所需的 Python 包：\n\n```bash\npip install -r requirements.txt\n```\n\n> **提示**：国内用户建议使用清华源或阿里源加速安装：\n> `pip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`\n\n### 2. 编译渲染器 (Sim3DR)\n为了可视化预测结果（如绘制 3D 人脸模型），需要编译自带的渲染器模块：\n\n```bash\ncd Sim3DR\nsh build_sim3dr.sh\ncd ..\n```\n\n### 3. 下载预训练模型\n对于大多数使用者，直接下载预训练模型即可开始使用，无需重新训练。\n请访问 [Model Zoo](https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fwiki\u002FModel-Zoo) 下载模型文件（如 `img2pose_v1.pth` 及对应的 pose mean\u002Fstd 文件），并将其放置在项目根目录下的 `models\u002F` 文件夹中。\n\n## 基本使用\n\n### 场景一：批量检测并对齐人脸\n这是最常用的功能，可以将输入图片中的人脸裁剪并对齐保存。\n\n```bash\npython3 run_face_alignment.py \\\n--pose_mean models\u002FWIDER_train_pose_mean_v1.npy \\\n--pose_stddev models\u002FWIDER_train_pose_stddev_v1.npy \\\n--pretrained_path models\u002Fimg2pose_v1.pth \\\n--images_path .\u002Fyour_images_folder \\\n--output_path .\u002Faligned_faces_output\n```\n\n*   `--images_path`: 输入图片所在文件夹路径，或包含图片路径列表的文本文件。\n*   `--output_path`: 对齐后的人脸图片保存路径。\n\n### 场景二：在自定义图片上测试并可视化\n如果您想查看带有 3D 姿态估计结果的可视化图像（包含银色的 3D 人脸渲染），可以使用提供的 Jupyter Notebook 进行交互式测试。\n\n1.  启动 Jupyter Notebook：\n    ```bash\n    jupyter notebook evaluation\u002Fjupyter_notebooks\u002Ftest_own_images.ipynb\n    ```\n2.  在 Notebook 中修改 `image_path` 变量为您自己的图片路径，运行单元格即可看到检测结果和姿态可视化。\n\n### 场景三：自定义输出边界框\n默认输出的边界框可能较紧（仅到额头起始位置）。您可以在代码中调整扩展系数来优化裁剪范围。在加载模型的代码段中修改如下参数：\n\n```python\n# 宽度扩展系数\nbbox_x_factor = 1.1\n# 高度扩展系数\nbbox_y_factor = 1.1\n# 额头区域额外扩展比例\nexpand_forehead = 0.3\n\nimg2pose_model = img2poseModel(\n    ...,    \n    bbox_x_factor=bbox_x_factor,\n    bbox_y_factor=bbox_y_factor,\n    expand_forehead=expand_forehead,\n)\n```\n\n完成上述配置后，模型输出的边界框将包含更多的额头区域，更适合后续的人脸识别或分析任务。","某安防团队正在开发一套实时会议行为分析系统，需要从多角度监控视频中精准捕捉参会者的头部姿态以判断其专注度。\n\n### 没有 img2pose 时\n- **流程繁琐且误差累积**：必须先运行独立的人脸检测器定位人脸，再串联关键点模型进行对齐，最后才能估算姿态，多阶段流水线导致误差逐级放大。\n- **小目标与遮挡失效**：在远距离或侧身遮挡场景下，传统检测器容易漏检人脸，导致后续姿态分析完全中断，无法获取数据。\n- **计算延迟高**：串行处理多个模型消耗大量算力，难以在边缘设备上维持实时帧率，视频分析出现明显卡顿。\n- **信息维度单一**：仅能获取二维边界框，缺乏精确的三维空间旋转信息，难以准确判断用户是“低头看手机”还是“转头看屏幕”。\n\n### 使用 img2pose 后\n- **端到端一步到位**：img2pose 直接回归人脸的 6DoF（六自由度）刚性变换，无需预检测或关键点定位，单模型即可同时完成检测与姿态估计。\n- **极强的小目标鲁棒性**：凭借对 3D 面部几何的直接建模，img2pose 能有效捕捉极小尺寸或部分遮挡的人脸，显著降低漏检率。\n- **实时高效运行**：基于优化的 Faster R-CNN 架构，img2pose 在单张图像上实现实时推理，大幅降低延迟，满足流畅的视频流分析需求。\n- **获取精确 3D 姿态**：直接输出包含平移和旋转的完整 3D 信息，能精准区分头部的细微转动，为行为分析提供高价值数据支撑。\n\nimg2pose 通过摒弃传统的级联检测流程，以单一的 6DoF 估计任务实现了更精准、更快速且抗干扰能力更强的人脸姿态分析。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fvitoralbiero_img2pose_e9b9adc8.png","vitoralbiero","Vítor Albiero","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fvitoralbiero_3b50f74a.jpg",null,"Meta AI","valbiero@fb.com","https:\u002F\u002Fvitoralbiero.netlify.com\u002F","https:\u002F\u002Fgithub.com\u002Fvitoralbiero",[85,89,93,97,101],{"name":86,"color":87,"percentage":88},"Python","#3572A5",82.1,{"name":90,"color":91,"percentage":92},"C++","#f34b7d",14.3,{"name":94,"color":95,"percentage":96},"Cython","#fedf5b",3.3,{"name":98,"color":99,"percentage":100},"CMake","#DA3434",0.2,{"name":102,"color":103,"percentage":104},"Shell","#89e051",0,607,112,"2026-03-28T09:03:19","NOASSERTION",4,"Linux","需要 NVIDIA GPU（训练脚本使用 CUDA_VISIBLE_DEVICES 和 torch.distributed.launch），具体型号和显存未说明，需支持 CUDA","未说明",{"notes":114,"python":115,"dependencies":116},"1. 安装包含一个名为 Sim3DR 的渲染器组件，需要进入 Sim3DR 目录并运行 'sh build_sim3dr.sh' 脚本进行编译，这通常意味着需要 Linux 环境和 C++ 编译工具链。\n2. 训练和测试依赖 WIDER FACE、AFLW2000-3D 或 BIWI 等数据集，需单独下载并转换为 LMDB 格式。\n3. 预训练模型权重需从提供的链接（如 Google Drive）手动下载。","3.x (README 提及 'Install dependecies with Python 3' 及使用 'python3' 命令)",[117,118,119],"PyTorch","requirements.txt 中定义的库 (具体列表未在 README 文本中展示)","Sim3DR (需手动编译)",[62,15],[122,123,124,125,126],"face-pose-estimators","face-detection","face-alignment","bounding-box-labels","3d-face","2026-03-27T02:49:30.150509","2026-04-07T22:51:02.787219",[130,135,140,145,150,155],{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},22934,"如何从模型输出的 6DoF 姿态中获取相机的外参（旋转和平移）？","img2pose 的整个输出格式与 OpenCV 的 SolvePnP 函数输出格式相同。输出包含旋转矢量（rotvec）和平移矢量。如果你发现平移分量（如 tx）有偏差，建议先检查转换前的预测是否正确。你可以使用官方提供的 Jupyter Notebook（test_own_images.ipynb）来渲染原始估计的姿态以进行验证。注意：对于某些数据集（如 BIWI），由于缺乏地标点，可能无法获得真实的平移向量作为对比。","https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fissues\u002F32",{"id":136,"question_zh":137,"answer_zh":138,"source_url":139},22935,"论文中报告的 Yaw、Pitch、Roll 结果是如何计算的？欧拉角的顺序是什么？","在最新的评估代码中，旋转部分直接使用 `pose_para` 作为标签，而平移向量仍通过 `get_pose` 获取（因为原始平移向量是基于无法访问的 3D 模型计算的，单位不同）。关于角度顺序：AFLW2000-3D 数据集的标准格式是 `pitch, yaw, roll`。代码中使用 `Rotation.from_matrix(rot_mat_2).as_euler('xyz', degrees=True)` 获取角度，返回顺序对应为 `[angle[0], -angle[1], -angle[2]]`，即分别对应 Pitch, Yaw, Roll。如果需要特定的 Yaw, Pitch, Roll 顺序，请注意索引映射关系。","https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fissues\u002F23",{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},22936,"如何根据网络输出的姿态值绘制坐标轴（X, Y, Z）？输出值的顺序代表什么？","输出变量 `poses` 中每个检测到的人脸包含 6 个值，顺序依次为：`pitch, yaw, roll, tx, ty, scale`（前三个是旋转角度，后三个是水平平移、垂直平移和尺度）。要绘制坐标轴，可以从边界框计算中心点 `(tdx, tdy)`，然后调用绘图函数。参考代码逻辑如下：\n1. 获取 pose: `pitch, yaw, roll, _, _, scale = pose`\n2. 计算中心：`tdx = bbox[0] + (bbox[2] - bbox[0]) \u002F 2`, `tdy = bbox[1] + (bbox[3] - bbox[1]) \u002F 2`\n3. 绘制：`draw_axis(..., yaw, pitch, roll, tdx=tdx, tdy=tdy, size=1000 \u002F scale)`。\n确保传入绘图函数的角度顺序正确，否则坐标轴方向会错误。","https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fissues\u002F2",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},22937,"仓库中是否包含用于人脸姿态评估的 300W-LP 数据集微调代码？","如果你最关心的是欧拉角形式的姿态评估性能，那么应该使用经过微调的模型。虽然仓库中可能没有直接展示微调过程的独立脚本，但维护者确认了微调模型的存在及其对结果的影响。测试数据显示，未经微调的模型平均误差（MAE）约为 6.150，而经过微调后 MAE 降至 3.913，显著提升。此外，通过选择 xyz 和 zxy 解码中的最小值并进行修正，未微调模型的性能也可提升至 MAE 4.812。","https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fissues\u002F59",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},22938,"RPN（区域提议网络）的锚框尺度（scales）设置对性能有多大影响？可以使用 3 个尺度代替默认的 5 个吗？","该项目代码中应用了 FPN（特征金字塔网络）。在 FPN 架构下，不同尺度的锚框会被应用到不同大小的特征图上。这与不使用 FPN 的原始 Faster R-CNN 实现不同。维护者指出，由于 FPN 的机制已经处理了多尺度问题，改变 RPN 的基础尺度数量（例如从 5 个改为 3 个）可能不会像在没有 FPN 的情况下那样对性能产生巨大影响，但具体效果取决于实现细节。官方代码默认使用了 5 个尺度。","https:\u002F\u002Fgithub.com\u002Fvitoralbiero\u002Fimg2pose\u002Fissues\u002F53",{"id":156,"question_zh":157,"answer_zh":158,"source_url":144},22939,"如何获取用于重新训练模型的 5 点格式边界框并转换为 WIDER FACE 格式？","你可以继续使用 5 个关键点（5 pts）格式。为了获得更能捕捉整个人脸的边界框输出，需要修改模型初始化部分，加载 3D 68 点参考文件：\n```python\nthreed_68_points = np.load('\u002Fapp\u002Fdetectors\u002Fimg2pose\u002Fpose_references\u002Freference_3d_68_points_trans.npy')\nimg2pose_model = img2poseModel(\n    DEPTH, MIN_SIZE, MAX_SIZE,\n    pose_mean=pose_mean, pose_stddev=pose_stddev,\n    threed_68_points=threed_68_points,\n)\n```\n之后，你可以将处理后的 3D 点传递给 `align_faces_lm(threed_points, img, poses)` 函数来获取对齐的人脸，进而转换为所需的格式。",[]]