[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-AITTSMD--MTCNN-Tensorflow":3,"tool-AITTSMD--MTCNN-Tensorflow":61},[4,18,26,36,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},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",144730,2,"2026-04-07T23:26:32",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"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,"2026-04-06T11:32:50",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"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",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":79,"owner_website":79,"owner_url":80,"languages":81,"stars":90,"forks":91,"last_commit_at":92,"license":79,"difficulty_score":93,"env_os":94,"env_gpu":95,"env_ram":96,"env_deps":97,"category_tags":103,"github_topics":104,"view_count":32,"oss_zip_url":79,"oss_zip_packed_at":79,"status":17,"created_at":106,"updated_at":107,"faqs":108,"releases":144},5464,"AITTSMD\u002FMTCNN-Tensorflow","MTCNN-Tensorflow"," Reproduce MTCNN using Tensorflow","MTCNN-Tensorflow 是一个基于 TensorFlow 框架复现的经典人脸检测与对齐工具。它核心解决了在复杂场景下如何精准定位人脸位置并同步校准面部关键点（如眼睛、鼻子、嘴角）的难题。该工具采用多任务级联卷积网络架构，通过 PNet、RNet 和 ONet 三个阶段的层层筛选与优化，实现了从粗略检测到精细对齐的高效流程。\n\n该项目特别适合计算机视觉领域的开发者、算法研究人员以及需要构建人脸识别系统前端的工程师使用。对于希望深入理解级联网络结构或需要在自有数据集上训练定制化人脸模型的用户来说，这是一个极具参考价值的开源实现。\n\n其技术亮点在于完整还原了原论文中的多任务学习机制，将人脸分类、边界框回归和关键点定位整合在一个统一的训练流程中。项目不仅提供了从数据准备（支持 WIDER Face 等主流数据集）、困难样本挖掘到模型训练的全套脚本，还针对正负样本不平衡问题设计了细致的数据处理策略。虽然依赖较早期的 TensorFlow 1.x 环境，但其清晰的代码结构和详尽的数据生成逻辑，使其成为学习传统深度学习人脸算法的优秀范例。","## Description\nThis work is used for reproduce MTCNN,a Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks.\n\n## Prerequisites\n1. You need CUDA-compatible GPUs to train the model.\n2. You should first download [WIDER Face](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Fprojects\u002FWIDERFace\u002F) and [Celeba](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Fprojects\u002FCelebA.html).**WIDER Face** for face detection and **Celeba** for landmark detection(This is required by original paper.But I found some labels were wrong in Celeba. So I use [this dataset](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Farchive\u002FCNN_FacePoint.htm) for landmark detection).\n\n## Dependencies\n* Tensorflow 1.2.1\n* TF-Slim\n* Python 2.7\n* Ubuntu 16.04\n* Cuda 8.0\n\n## Prepare For Training Data\n1. Download Wider Face Training part only from Official Website , unzip to replace `WIDER_train` and put it into `prepare_data` folder.\n2. Download landmark training data from [here]((http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Farchive\u002FCNN_FacePoint.htm)),unzip and put them into `prepare_data` folder.\n3. Run `prepare_data\u002Fgen_12net_data.py` to generate training data(Face Detection Part) for **PNet**.\n4. Run `gen_landmark_aug_12.py` to generate training data(Face Landmark Detection Part) for **PNet**.\n5. Run `gen_imglist_pnet.py` to merge two parts of training data.\n6. Run `gen_PNet_tfrecords.py` to generate tfrecord for **PNet**.\n7. After training **PNet**, run `gen_hard_example` to generate training data(Face Detection Part) for **RNet**.\n8. Run `gen_landmark_aug_24.py` to generate training data(Face Landmark Detection Part) for **RNet**.\n9. Run `gen_imglist_rnet.py` to merge two parts of training data.\n10. Run `gen_RNet_tfrecords.py` to generate tfrecords for **RNet**.(**you should run this script four times to generate tfrecords of neg,pos,part and landmark respectively**)\n11. After training **RNet**, run `gen_hard_example` to generate training data(Face Detection Part) for **ONet**.\n12. Run `gen_landmark_aug_48.py` to generate training data(Face Landmark Detection Part) for **ONet**.\n13. Run `gen_imglist_onet.py` to merge two parts of training data.\n14. Run `gen_ONet_tfrecords.py` to generate tfrecords for **ONet**.(**you should run this script four times to generate tfrecords of neg,pos,part and landmark respectively**)\n\n## Some Details\n* When training **PNet**,I merge four parts of data(pos,part,landmark,neg) into one tfrecord,since their total number radio is almost 1:1:1:3.But when training **RNet** and **ONet**,I generate four tfrecords,since their total number is not balanced.During training,I read 64 samples from pos,part and landmark tfrecord and read 192 samples from neg tfrecord to construct mini-batch.\n* It's important for **PNet** and **RNet** to keep high recall radio.When using well-trained **PNet** to generate training data for **RNet**,I can get 14w+ pos samples.When using well-trained **RNet** to generate training data for **ONet**,I can get 19w+ pos samples.\n* Since **MTCNN** is a Multi-task Network,we should pay attention to the format of training data.The format is:\n \n  [path to image][cls_label][bbox_label][landmark_label]\n  \n  For pos sample,cls_label=1,bbox_label(calculate),landmark_label=[0,0,0,0,0,0,0,0,0,0].\n\n  For part sample,cls_label=-1,bbox_label(calculate),landmark_label=[0,0,0,0,0,0,0,0,0,0].\n  \n  For landmark sample,cls_label=-2,bbox_label=[0,0,0,0],landmark_label(calculate).  \n  \n  For neg sample,cls_label=0,bbox_label=[0,0,0,0],landmark_label=[0,0,0,0,0,0,0,0,0,0].  \n\n* Since the training data for landmark is less.I use transform,random rotate and random flip to conduct data augment(the result of landmark detection is not that good).\n\n## Result\n\n![result1.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_388ab9a3ed59.png)\n\n![result2.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_45fa23dfec81.png)\n\n![result3.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_89c92faa3cf6.png)\n\n![reult4.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_8b6c472a26b4.png)\n\n![result5.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_6cf86eb727d3.png)\n\n![result6.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_fffd828843bf.png)\n\n![result7.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_f64834e99806.png)\n\n![result8.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_e574ecad331f.png)\n\n![result9.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_4f5d4cf31912.png)\n\n**Result on FDDB**\n![result10.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_ab04618f1da8.png)\n\n## License\nMIT LICENSE\n\n## References\n1. Kaipeng Zhang, Zhanpeng Zhang, Zhifeng Li, Yu Qiao , \" Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks,\" IEEE Signal Processing Letter\n2. [MTCNN-MXNET](https:\u002F\u002Fgithub.com\u002FSeanlinx\u002Fmtcnn)\n3. [MTCNN-CAFFE](https:\u002F\u002Fgithub.com\u002FCongWeilin\u002Fmtcnn-caffe)\n4. [deep-landmark](https:\u002F\u002Fgithub.com\u002Fluoyetx\u002Fdeep-landmark)\n","## 描述\n本项目用于复现 MTCNN，即一种基于多任务级联卷积网络的人脸检测与对齐方法。\n\n## 前置条件\n1. 训练模型需要支持 CUDA 的 GPU。\n2. 首先需要下载 [WIDER Face](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Fprojects\u002FWIDERFace\u002F) 和 [Celeba](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Fprojects\u002FCelebA.html)。**WIDER Face** 用于人脸检测，**Celeba** 用于地标检测（这是原始论文的要求）。不过我发现 Celeba 数据集中部分标注存在错误，因此我使用了 [这个数据集](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Farchive\u002FCNN_FacePoint.htm) 来进行地标检测）。\n\n## 依赖项\n* Tensorflow 1.2.1\n* TF-Slim\n* Python 2.7\n* Ubuntu 16.04\n* Cuda 8.0\n\n## 准备训练数据\n1. 仅从官方网站下载 Wider Face 的训练部分，解压后替换 `WIDER_train` 文件夹，并将其放入 `prepare_data` 文件夹中。\n2. 从 [这里](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Farchive\u002FCNN_FacePoint.htm) 下载地标训练数据，解压后放入 `prepare_data` 文件夹中。\n3. 运行 `prepare_data\u002Fgen_12net_data.py` 生成 **PNet** 的人脸检测部分训练数据。\n4. 运行 `gen_landmark_aug_12.py` 生成 **PNet** 的地标检测部分训练数据。\n5. 运行 `gen_imglist_pnet.py` 将两部分训练数据合并。\n6. 运行 `gen_PNet_tfrecords.py` 生成 **PNet** 的 TFRecord 文件。\n7. 训练完 **PNet** 后，运行 `gen_hard_example` 生成 **RNet** 的人脸检测部分训练数据。\n8. 运行 `gen_landmark_aug_24.py` 生成 **RNet** 的地标检测部分训练数据。\n9. 运行 `gen_imglist_rnet.py` 将两部分训练数据合并。\n10. 运行 `gen_RNet_tfrecords.py` 生成 **RNet** 的 TFRecord 文件。（**需运行该脚本四次，分别生成负样本、正样本、部分样本和地标样本的 TFRecord 文件**）\n11. 训练完 **RNet** 后，再运行 `gen_hard_example` 生成 **ONet** 的人脸检测部分训练数据。\n12. 运行 `gen_landmark_aug_48.py` 生成 **ONet** 的地标检测部分训练数据。\n13. 运行 `gen_imglist_onet.py` 将两部分训练数据合并。\n14. 运行 `gen_ONet_tfrecords.py` 生成 **ONet** 的 TFRecord 文件。（**需运行该脚本四次，分别生成负样本、正样本、部分样本和地标样本的 TFRecord 文件**）\n\n## 一些细节\n* 在训练 **PNet** 时，我将正样本、部分样本、地标样本和负样本四部分数据合并为一个 TFRecord 文件，因为它们的数量比例大致为 1:1:1:3。而在训练 **RNet** 和 **ONet** 时，由于各类样本数量不平衡，我分别生成了四个 TFRecord 文件。在训练过程中，我会从正样本、部分样本和地标样本的 TFRecord 中各读取 64 个样本，而从负样本的 TFRecord 中读取 192 个样本来构建小批量数据。\n* 对于 **PNet** 和 **RNet** 而言，保持较高的召回率非常重要。使用训练良好的 **PNet** 生成 **RNet** 的训练数据时，可以获得 14 万多个正样本；而使用训练良好的 **RNet** 生成 **ONet** 的训练数据时，则可以获得 19 万多个正样本。\n* 由于 **MTCNN** 是一个多任务网络，我们需要特别注意训练数据的格式。其格式如下：\n\n  [图片路径][类别标签][边界框标签][地标标签]\n\n  对于正样本：类别标签 = 1，边界框标签由计算得出，地标标签 = [0,0,0,0,0,0,0,0,0,0]。\n\n  对于部分样本：类别标签 = -1，边界框标签由计算得出，地标标签 = [0,0,0,0,0,0,0,0,0,0]。\n\n  对于地标样本：类别标签 = -2，边界框标签 = [0,0,0,0]，地标标签由计算得出。\n\n  对于负样本：类别标签 = 0，边界框标签 = [0,0,0,0]，地标标签 = [0,0,0,0,0,0,0,0,0,0]。\n\n* 由于地标样本的数据量较少，我采用了变换、随机旋转和随机翻转等数据增强技术（但地标检测的效果并不理想）。\n\n## 结果\n\n![result1.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_388ab9a3ed59.png)\n\n![result2.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_45fa23dfec81.png)\n\n![result3.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_89c92faa3cf6.png)\n\n![reult4.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_8b6c472a26b4.png)\n\n![result5.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_6cf86eb727d3.png)\n\n![result6.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_fffd828843bf.png)\n\n![result7.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_f64834e99806.png)\n\n![result8.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_e574ecad331f.png)\n\n![result9.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_4f5d4cf31912.png)\n\n**FDDB 数据集上的结果**\n![result10.png](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_readme_ab04618f1da8.png)\n\n## 许可证\nMIT 许可证\n\n## 参考文献\n1. Kaipeng Zhang, Zhanpeng Zhang, Zhifeng Li, Yu Qiao , “Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks,” IEEE Signal Processing Letter\n2. [MTCNN-MXNET](https:\u002F\u002Fgithub.com\u002FSeanlinx\u002Fmtcnn)\n3. [MTCNN-CAFFE](https:\u002F\u002Fgithub.com\u002FCongWeilin\u002Fmtcnn-caffe)\n4. [deep-landmark](https:\u002F\u002Fgithub.com\u002Fluoyetx\u002Fdeep-landmark)","# MTCNN-Tensorflow 快速上手指南\n\n本指南基于 `MTCNN-Tensorflow` 项目，帮助开发者快速复现多任务级联卷积网络（MTCNN），实现人脸检测与关键点定位。\n\n## 1. 环境准备\n\n在开始之前，请确保您的开发环境满足以下硬件和软件要求。由于该项目基于较早期的 TensorFlow 版本，建议搭建独立的虚拟环境。\n\n### 系统要求\n*   **操作系统**: Ubuntu 16.04 (推荐)\n*   **硬件**: 必须配备支持 CUDA 的 NVIDIA GPU 用于模型训练。\n\n### 前置依赖\n请安装以下特定版本的依赖库：\n*   **Python**: 2.7\n*   **TensorFlow**: 1.2.1\n*   **TF-Slim**: TensorFlow 官方 slim 库\n*   **CUDA**: 8.0\n*   **cuDNN**: 对应 CUDA 8.0 的版本\n\n> **注意**：由于原项目依赖 Python 2.7 和 TF 1.x，若在现代环境中运行遇到困难，建议使用 Docker 容器或专门配置的虚拟机。\n\n## 2. 安装与数据准备\n\n### 步骤一：克隆项目与安装依赖\n```bash\ngit clone \u003C项目仓库地址>\ncd MTCNN-Tensorflow\npip install tensorflow-gpu==1.2.1\npip install tf-slim\n```\n\n### 步骤二：下载数据集\n本项目需要两个主要数据集：\n1.  **WIDER Face**: 用于人脸检测训练。\n2.  **Landmark Dataset**: 用于关键点定位训练（原论文使用 CelebA，但作者发现标签有误，推荐使用修正后的数据集）。\n\n请将下载的数据解压并放置到 `prepare_data` 文件夹中：\n*   下载 [WIDER Face](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Fprojects\u002FWIDERFace\u002F) 的训练集部分，解压后重命名为 `WIDER_train` 放入 `prepare_data`。\n*   下载 [关键点训练数据](http:\u002F\u002Fmmlab.ie.cuhk.edu.hk\u002Farchive\u002FCNN_FacePoint.htm)，解压后放入 `prepare_data`。\n\n> **国内加速提示**：如果上述官网下载速度慢，可尝试在 GitHub 或 Gitee 搜索相关数据集的国内镜像备份。\n\n### 步骤三：生成训练数据 (TFRecords)\n\n按照顺序执行以下脚本以生成 PNet、RNet 和 ONet 所需的训练数据。\n\n#### 3.1 准备 PNet 数据\n```bash\n# 生成人脸检测部分数据\npython prepare_data\u002Fgen_12net_data.py\n# 生成关键点检测部分数据\npython prepare_data\u002Fgen_landmark_aug_12.py\n# 合并数据列表\npython prepare_data\u002Fgen_imglist_pnet.py\n# 生成最终的 tfrecord 文件\npython prepare_data\u002Fgen_PNet_tfrecords.py\n```\n\n#### 3.2 准备 RNet 数据\n*注意：在运行此步骤前，您需要先完成 PNet 模型的训练，并使用训练好的 PNet 生成难例（Hard Example）。*\n\n```bash\n# 生成难例数据 (Face Detection Part)\npython prepare_data\u002Fgen_hard_example.py\n# 生成关键点增强数据 (Face Landmark Detection Part)\npython prepare_data\u002Fgen_landmark_aug_24.py\n# 合并数据列表\npython prepare_data\u002Fgen_imglist_rnet.py\n# 生成 tfrecord (需运行 4 次，分别对应 neg, pos, part, landmark)\npython prepare_data\u002Fgen_RNet_tfrecords.py\n```\n\n#### 3.3 准备 ONet 数据\n*注意：同样需要先完成 RNet 的训练并生成难例。*\n\n```bash\n# 生成难例数据\npython prepare_data\u002Fgen_hard_example.py\n# 生成关键点增强数据\npython prepare_data\u002Fgen_landmark_aug_48.py\n# 合并数据列表\npython prepare_data\u002Fgen_imglist_onet.py\n# 生成 tfrecord (需运行 4 次，分别对应 neg, pos, part, landmark)\npython prepare_data\u002Fgen_ONet_tfrecords.py\n```\n\n## 3. 基本使用\n\n数据准备完成后，即可启动训练流程。MTCNN 包含三个级联网络，需按顺序训练：**PNet -> RNet -> ONet**。\n\n### 训练 PNet\n```bash\npython train_net\u002Ftrain_pnet.py\n```\n\n### 训练 RNet\n确保已使用训练好的 PNet 生成了 RNet 的难例数据后运行：\n```bash\npython train_net\u002Ftrain_rnet.py\n```\n\n### 训练 ONet\n确保已使用训练好的 RNet 生成了 ONet 的难例数据后运行：\n```bash\npython train_net\u002Ftrain_onet.py\n```\n\n### 数据格式说明\n训练数据采用多任务格式，每行包含：`[图片路径] [分类标签] [边界框标签] [关键点标签]`。\n*   **Pos (正样本)**: `cls_label=1`, 计算 bbox, landmarks 全为 0。\n*   **Part (部分脸)**: `cls_label=-1`, 计算 bbox, landmarks 全为 0。\n*   **Landmark (关键点)**: `cls_label=-2`, bbox 全为 0, 计算 landmarks。\n*   **Neg (负样本)**: `cls_label=0`, bbox 和 landmarks 全为 0。\n\n训练完成后，模型将具备高精度的人脸检测与五点关键点定位能力（参考 FDDB 测试结果）。","某安防科技公司的算法团队正在开发一套实时门禁系统，需要从监控视频流中精准捕捉人脸并定位五官以进行活体检测。\n\n### 没有 MTCNN-Tensorflow 时\n- **检测与对齐分离**：团队需分别部署人脸检测模型和关键点定位模型，导致推理流程繁琐，整体延迟高达 200 毫秒，无法满足实时开门需求。\n- **复杂场景漏检率高**：在侧脸、遮挡或光照不均的情况下，传统单任务模型经常丢失人脸目标，或虽检测到人脸但无法准确对齐五官，导致后续识别失败。\n- **数据准备极其耗时**：自行复现多任务级联网络时，处理 WIDER Face 和 CelebA 数据集的格式转换、难例挖掘（Hard Example Mining）及数据增强脚本编写耗费了数周时间。\n- **训练资源调配困难**：缺乏成熟的正负样本平衡策略，模型难以收敛，尤其是在处理大量背景负样本时，显存利用率低且训练效果不稳定。\n\n### 使用 MTCNN-Tensorflow 后\n- **端到端高效推理**：利用 MTCNN-Tensorflow 的级联架构，一次性完成人脸检测与五点 landmarks 对齐，将单次处理耗时压缩至 50 毫秒以内，实现丝滑通行。\n- **鲁棒性显著提升**：借助其内置的多任务学习机制，系统在侧脸和轻微遮挡场景下的召回率大幅提高，确保关键五官坐标精准输出，活体检测通过率提升 30%。\n- **数据流水线开箱即用**：直接复用项目提供的 `gen_12net_data.py` 等脚本，快速生成 PNet、RNet、ONet 所需的 TFRecord 格式数据，将数据预处理周期从数周缩短至两天。\n- **样本平衡策略成熟**：沿用其针对 RNet 和 ONet 设计的负样本采样逻辑（如 64:192 比例），模型训练快速收敛，无需手动调整复杂的超参数即可达到论文复现效果。\n\nMTCNN-Tensorflow 通过复现经典的多任务级联架构，将原本割裂的检测与对齐任务合二为一，大幅降低了高精度人脸系统的落地门槛与时间成本。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAITTSMD_MTCNN-Tensorflow_388ab9a3.png","AITTSMD","陈少萌萌哒","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FAITTSMD_055f9b61.jpg","DL lover","GDUT","GuangZhou","2286542750@qq.com",null,"https:\u002F\u002Fgithub.com\u002FAITTSMD",[82,86],{"name":83,"color":84,"percentage":85},"Python","#3572A5",92.2,{"name":87,"color":88,"percentage":89},"Jupyter Notebook","#DA5B0B",7.8,1506,706,"2026-03-10T01:37:09",5,"Linux (Ubuntu 16.04)","必需 NVIDIA GPU (兼容 CUDA)，需安装 CUDA 8.0","未说明",{"notes":98,"python":99,"dependencies":100},"该项目用于复现 MTCNN 人脸检测与对齐模型。训练前需手动下载 WIDER Face（人脸检测）和 CNN FacePoint（ landmarks 检测，作者建议替代有错误的 CelebA）数据集，并运行一系列脚本生成 PNet、RNet 和 ONet 的 tfrecord 训练数据。由于代码基于较旧的 Tensorflow 1.2.1 和 Python 2.7，在现代环境中运行可能需要配置兼容的旧版环境或修改代码。","2.7",[101,102],"Tensorflow 1.2.1","TF-Slim",[14],[105],"mtcnn-tensorflow","2026-03-27T02:49:30.150509","2026-04-08T17:46:28.440580",[109,114,119,124,129,134,139],{"id":110,"question_zh":111,"answer_zh":112,"source_url":113},24805,"训练 PNet 后运行 gen_hard_example.py 生成 RNet 训练数据时，报错找不到 pos_24.txt 等文件怎么办？","这是因为在生成难例样本前未正确配置网络类型。解决方法：\n1. 打开 gen_hard_example.py，将第 220 行左右的 net 变量修改为 'RNet'（默认可能是 PNet）。\n2. 运行脚本生成数据。\n3. 如果后续需要生成其他类型数据（如 landmark, neg, part），需在代码中依次修改 item 变量为对应的文件名格式（例如 '%s\u002Flandmark_%s_aug.txt' % (net,net)），每次修改后重新运行脚本。","https:\u002F\u002Fgithub.com\u002FAITTSMD\u002FMTCNN-Tensorflow\u002Fissues\u002F8",{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},24806,"运行 hard example mining 时出现 \"Key fc1\u002Falphas not found in checkpoint\" 错误如何解决？","该错误通常与 TensorFlow 版本兼容性或激活函数定义有关。解决方案是将模型中全连接层的激活函数从 PReLU 改为 ReLU。具体操作：找到模型定义文件（通常在 mtcnn_model 相关文件中），将全连接层的激活函数参数由 'prelu' 修改为 'relu'，然后重新训练模型即可解决。","https:\u002F\u002Fgithub.com\u002FAITTSMD\u002FMTCNN-Tensorflow\u002Fissues\u002F132",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},24807,"使用 CelebA 数据集训练 Landmark 时效果不佳或 Loss 不收敛，需要注意什么？","CelebA 数据集中存在部分标注损坏的图片（例如 101283.jpg 的 bbox 标注为 0 0 0 0），这会严重影响训练。建议在数据预处理阶段添加过滤逻辑，剔除 bbox 宽高为 0 或坐标无效的样本。此外，Landmark 的坐标计算应相对于 gt bbox 进行归一化偏移量计算，确保输入数据的准确性。","https:\u002F\u002Fgithub.com\u002FAITTSMD\u002FMTCNN-Tensorflow\u002Fissues\u002F15",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},24808,"运行 train_ONet.py 时出现 \"DataLossError: truncated record\" 错误是什么原因？","这通常是因为 TFRecord 文件写入不完整导致的。常见原因是生成 TFRecord 数据时程序异常退出，导致 tfrecord_writer.close() 未被正确调用。解决方法是重新运行数据生成脚本（如 gen_*_data.py），确保所有数据完整写入并正常关闭文件句柄后再开始训练。","https:\u002F\u002Fgithub.com\u002FAITTSMD\u002FMTCNN-Tensorflow\u002Fissues\u002F131",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},24809,"想要进行多于 5 个关键点（如 68 点或 106 点）的增点训练，应该如何修改模型？","主要需要修改 ONet 网络的输出层维度以匹配新的关键点数量。注意：\n1. 仅修改输出层可能导致 Loss 波动大且不收敛，需检查数据预处理部分，确保源数据中的 Landmark 坐标处理逻辑（如归一化、越界处理）已适配新点数。\n2. 涉及 Landmark 操作的预处理和提取代码（如 face++ 或商汤的数据格式解析）均需相应修改。\n3. 如果增加点数过多（如 106 点），可能会出现某些点漂移过大的情况，需进一步优化网络结构或调整 Loss 权重。","https:\u002F\u002Fgithub.com\u002FAITTSMD\u002FMTCNN-Tensorflow\u002Fissues\u002F206",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},24810,"代码中损失函数使用的是 tf.reduce_mean 而论文公式似乎是求和，是否应该改为 tf.reduce_sum？","不需要修改。论文中的公式描述可能存在笔误。在实际实现中，使用 tf.reduce_mean（均值）是标准做法，能够保持梯度的稳定性。如果强行改为 tf.reduce_sum，可能会导致数值过大从而产生 NaN（Not a Number），导致训练失败。请保持代码中的 reduce_mean 不变。","https:\u002F\u002Fgithub.com\u002FAITTSMD\u002FMTCNN-Tensorflow\u002Fissues\u002F129",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},24811,"自定义目标（如检测人体而非人脸）时，回归 Loss 不下降且维持在高位怎么办？","首先检查数据归一化方式是否正确，回归目标值数量级应在合理范围（如 0.01-0.1 之间）。如果 Loss 依然不降，建议优先检测 PNet 阶段的召回率（Recall）。如果 PNet 漏检严重，后续网络无法接收到正样本，会导致回归 Loss 无法优化。可以通过可视化 PNet 的输出结果来排查召回率问题。","https:\u002F\u002Fgithub.com\u002FAITTSMD\u002FMTCNN-Tensorflow\u002Fissues\u002F57",[]]