拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何用MTCNN对齐数据集:FaceNet训练前的数据预处理完全手册

如何用MTCNN对齐数据集FaceNet训练前的数据预处理完全手册【免费下载链接】facenetFace recognition using Tensorflow项目地址: https://gitcode.com/gh_mirrors/fa/facenet在 FaceNet基于 TensorFlow 的人脸识别项目中训练一个高精度模型的关键往往不在模型本身而在训练前的数据预处理——尤其是使用MTCNN 对数据集做人脸对齐。本手册将带你完整走通这一流程从为什么要对齐、MTCNN 的工作原理到一条命令完成全数据集对齐并输出可直接用于训练的人脸缩略图。为什么训练前要用人脸对齐很多新手直接用 Dlib 检测器预处理数据却发现模型在真实场景遮挡、侧脸、逆光剪影等困难样本中表现不佳。原因很简单检测器漏掉的困难样本恰恰是模型最需要学习的样本。FaceNet 项目 README 中明确指出Dlib 人脸检测器会漏掉一些困难样本部分遮挡、剪影等这使得训练集变得太简单导致模型在其他基准上的表现变差。为此项目集成了 MTCNNMulti-task CNN 的 TensorFlow 实现——它同时完成人脸检测和5 个关键点定位效果与原版 Matlab/Caffe 实现非常接近。MTCNN 三级级联检测是怎么完成的MTCNN 的核心源码在 src/align/detect_face.py它由三个小型 CNN 级联组成阶段网络职责权重文件第一阶段PNet在尺寸金字塔上粗筛人脸候选框det1.npy第二阶段RNet对候选框精确分类去除误检det2.npy第三阶段ONet回归人脸 5 个关键点精修边界框det3.npy三级网络在 detect_face.py 的create_mtcnn中统一加载随后detect_face函数输出每张人脸的边界框 关键点——关键点正是对齐的几何依据。几个内置默认参数见 align_dataset_mtcnn.pyminsize 20最小人脸尺寸像素控制金字塔缩放范围threshold [0.6, 0.7, 0.7]三级网络的置信度阈值factor 0.709尺度金字塔的缩放因子一条命令完成整个数据集对齐准备工作目录FaceNet 的数据集要求是按身份类划分的目录结构每个子目录存放同一人的多张人脸图。项目内置的示例数据在 data/images/目录组织方式由 facenet.py 中的get_dataset函数解析。对齐入口是 src/align/align_dataset_mtcnn.py只需传入输入目录和输出目录python align_dataset_mtcnn.py input_dir output_dir主要可选参数参数默认值说明--image_size182对齐后缩略图的边长像素Inception ResNet v1 模型建议 160/182--margin44边界框外扩的边距像素保证五官不贴边--random_order关闭打乱图片顺序配合多进程并行对齐--gpu_memory_fraction1.0GPU 显存占用上限--detect_multiple_facesFalse是否检测并保存每张图中的多张人脸对齐后你会得到什么运行完成后输出目录中包含两类产物对齐后的人脸缩略图PNG按身份分类存放与输入目录结构一致。每张图都是裁剪边界框 → 外扩 margin → 缩放到 image_size × image_size的结果位置统一、可直接喂给训练管线边界框记录文件bounding_boxes_XXXXX.txt逐行记录输出文件名及其在原图中的四个坐标。对齐失败如没检测到人脸的图片也会记入该文件方便事后排查。对每张图的完整处理流程读图 → 三级检测 → 裁剪 → 缩放 → 存盘都在 align_dataset_mtcnn.py 的主循环中代码非常直白建议对照阅读。一图多张人脸时选哪张默认策略是不区分多人脸图中的每张脸而是挑选面积最大且最靠近图像中心的那一张index np.argmax(bounding_box_size - offset_dist_squared * 2.0)align_dataset_mtcnn.py如果需要保留全部人脸例如聚类场景加上--detect_multiple_faces即可输出文件名会带_0、_1序号。加速大规模对齐多进程并行对齐几百万张图如 CASIA-WebFace 的 45 万 张、VGGFace2 的 330 万张时单机单进程太慢。项目通过--random_order参数设计了天然的多进程方案它先打乱数据集顺序再为每个进程分配独立任务输出文件名带有随机 key多个进程写同一输出目录不会互相覆盖脚本还会在 facenet.store_revision_info 中记录 git 版本和启动命令便于复现。典型用法是同时启动多个进程分别附加--random_order即可。常见调参与排错清单检测不到人脸适当调大--margin、检查图片是否为灰度/损坏文件脚本会打印Unable to align并跳过人脸贴边被切默认margin44已覆盖多数情况裁剪比例特殊的可再调大输出尺寸与模型不匹配--image_size必须与后续训练脚本一致Inception ResNet v1 常用 160项目默认 182对齐质量验证抽查bounding_boxes_*.txt中坐标与对应缩略图是否吻合。对齐之后通往训练的下一步对齐完成后数据集就处于 FaceNet 训练管线可消费的状态分类器训练src/train_softmax.py官方推荐的当前最佳训练方式支持 CASIA-WebFace / VGGFace2 学习率调度表见 data/learning_rate_schedule_classifier_casia.txt三元组损失训练src/train_tripletloss.pyLFW 基准验证src/validate_on_lfw.py注意 2018 版新模型需使用--use_fixed_image_standardization。 小建议官方提供的预训练模型LFW 准确率 0.9965 的 VGGFace2 版本本身就是用 MTCNN 对齐的数据训练出来的——对齐质量就是模型上限的一部分。总结步骤工具/文件产出组织数据按身份分目录 get_dataset标准数据集结构检测对齐align_dataset_mtcnn.py对齐缩略图 边界框记录核心算法detect_face.pyPNet/RNet/ONet 三级检测与关键点并行加速--random_order多进程大规模数据集快速处理后续训练train_softmax.py / train_tripletloss.py高精度人脸嵌入模型按这份手册走完你就拥有了一个与官方预训练模型同等标准的预处理数据集——这是复现 FaceNet 99.65% LFW 准确率的第一步也是最容易被忽略的一步。【免费下载链接】facenetFace recognition using Tensorflow项目地址: https://gitcode.com/gh_mirrors/fa/facenet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门