人脸检测——MTCNN

部署运行你感兴趣的模型镜像

本次介绍一篇速度还不错的人脸检测文章:

《2016 Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks》.

源代码作者刚刚公布,效果相当不错(只有测试代码):
https://kpzhang93.github.io/MTCNN_face_detection_alignment/index.html?from=timeline&isappinstalled=1

另外一位同学实现的MTCNN基于MXNET的训练代码,工作比较完整,参考价值比较大: https://github.com/Seanlinx/mtcnn

—————— Pipeline——————

JDA Pipeline

上面是该方法的流程图,可以看出也是三阶级联,和我之前的一篇博文CascadeCNN很像。

stage1: 在构建图像金字塔的基础上,利用fully convolutional network来进行检测,同时利用boundingbox regression 和 NMS来进行修正。(注意:这里的全卷积网络与R-CNN里面带反卷积的网络是不一样的,这里只是指只有卷积层,可以接受任意尺寸的输入,靠网络stride来自动完成滑窗)

stage2: 将通过stage1的所有窗口输入作进一步判断,同时也要做boundingbox regression 和 NMS。

stage3: 和stage2相似,只不过增加了更强的约束:5个人脸关键点。

————— Network —————

Stage1: Proposal Net

JDA Network1

Stage2: Refine Net

JDA Network2

Stage3: Output Net

JDA Network3

由上可以看出,其网络结构较CascadeCNN略深但每层参数较少,所以该方法性能较好同时速度和CascadeCNN也相差无几。

补充:

(1) 文中训练使用了Online Hard sample mining策略,即在一个batch中只选择loss占前70%的样本进行BP;

(2) 不同阶段,classifier、boundingbox regression 和 landmarks detection在计算Loss时的权重是不一样的;

(3) 训练数据共4类,比例3:1:1:2,分别是negative,IOU<0.3; positive,IOU>0.65; part face,0.4

—————— Result ——————

在FDDB上的表现:

JDA Network3

速度表现,CPU约15FPS

JDA Network3

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### MTCNN 人脸检测算法概述 MTCNN(Multi-task Cascaded Convolutional Networks)是一种基于深度学习的人脸检测和对齐方法,能够高效地完成人脸检测并提供精确的面部关键点定位[^1]。该算法通过三个阶段逐步处理输入图像: #### 阶段一:P-Net (Proposal Network) 在这一阶段,P-Net负责生成大量的初始候选区域。为了适应不同尺度下的人脸,原始图片会被按比例缩小构成一系列尺寸各异的版本,形成所谓的“图像金字塔”。对于每一张缩放后的图像,P-Net都会滑动扫描整个画面,并预测可能存在的人脸矩形框以及初步的关键点位置估计。 ```python def p_net(image_pyramid): proposals = [] for scaled_image in image_pyramid: # Apply P-Net to detect potential faces and keypoints detected_faces, keypoints = apply_pnet(scaled_image) proposals.extend(detected_faces) return non_maximum_suppression(proposals), keypoints ``` 此过程结束后,通常会产生许多重叠或接近的真实人脸框,因此需要执行非极大值抑制(NMS)操作去除冗余提案[^4]。 #### 阶段二:R-Net (Refinement Network) 经过首轮筛选后得到的大批候选项被送入更加精细的R-Net进行二次评估。此时模型不仅会判断这些区域是否真正为人脸,还会进一步剔除那些明显不符合条件的选择项。这一步骤有助于减少误报率的同时保持较高的召回率。 ```python def r_net(filtered_proposals): refined_boxes = [] for box in filtered_proposals: cropped_face = crop_and_resize(box) score = evaluate_rnet(cropped_face) if score > threshold: refined_boxes.append(box) return non_maximum_suppression(refined_boxes) ``` 同样地,在这个层次也需要运用NMS来精炼最终保留下来的边界框集合[^2]。 #### 阶段三:O-Net (Output Network) 最后一个环节采用更为复杂的O-Net来进行终极判定。除了继续验证哪些是有效的人脸外,它还承担着修正之前两步产生的误差、给出更精准的位置参数的任务——特别是五个重要特征点(双眼角、鼻尖、嘴角两端),这对于后续的应用场景非常重要。 ```python def o_net(final_candidates): final_detections = [] for candidate in final_candidates: aligned_face = preprocess(candidate) bbox, landmarks = predict_onet(aligned_face) final_detections.append((bbox, landmarks)) return finalize_results(final_detections) ``` 至此,完整的MTCNN工作流结束,输出高质量的人脸及其对应的地标信息供其他视觉任务使用[^3]。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值