本周文件交换精选

我们最好的用户提交

基于深度学习的人脸检测

布雷特本周的选择是MTCNN人脸检测,通过贾斯汀Pinkney他是我们咨询部门MathWorks的同事。

自2012年以来,我们已经提供了使用MathWorks工具检测人脸的功能。我们的面部探测器,生活在计算机视觉的工具箱依靠Viola-Jones算法,并且非常容易实现:

img = imread (“visionteam.jpg”);imshow(img) faceDetector = vision.CascadeObjectDetector();bboxes = step(faceDetector, img);图imshow (img)标题(“使用级联对象检测器进行人脸检测”Ii = 1:size(bboxes, 1) drawrectangle(“位置”bboxes (ii),“facealpha”, 0);结束

级联对象检测器(可调)的默认模型使用分类和回归树分析(CART)“Haar-like”特性.正如您在上面看到的,这些模型通常工作得相当好。此外,你可以使用“FrontalFaceLBP”模型来检测人脸“局部二进制模式。”这两种模型都适用于上面的图像,用于检测正面和正面的人脸。

还有其他的检测模型,你可以调用CascadeObjectDetector,包括'UpperBody', 'EyePair'(大和小),'LeftEye'和' rightye '(两个选项),'ProfileFace', 'Mouth'和'Nose'。(此外,你可以随时训练你自己的!

这让我想到了今天的Pick。

贾斯汀的提交实现多任务级联卷积网络(MTCCN)解决了人脸检测问题。有选择是件好事;内置型号则不然总是工作:

请注意,在这两种情况下都有大量的假阳性。

相比之下,MTCCN模型在这张图上工作得非常好:

[bboxes, scores, landmarks] = mtcnn.detectFaces(img);图imshow (img)标题(“MTCNN”Ii = 1:size(bboxes, 1) drawrectangle(“位置”bboxes (ii),“facealpha”, 0);结束

我欣赏的另一件事是,面部地标作为MTCNN模型的输出自动提供:

持有Xs = landmarks(:,:, 1);Ys = landmarks(:,:, 2);Ii = 1:size(xs, 1)Jj = 1:size(xs, 2) plot(xs(ii, Jj), ys(ii, Jj))“r”。结束结束

MTCNN模型似乎也相当稳健;它甚至可以在“摄影师”的图像上工作,尽管事实是,图像中的脸显然不是面向前方的。(包括视力。CascadeObjectDetector人脸检测器在图像上失败,至少使用默认参数。)

我还应该注意到,虽然内置的Toolbox函数可以适应RGB或灰度图像,但MTCNN检测器只能对RGB图像进行操作。但这是个很容易解决的问题:

如果Size (img, 3) == 1 img = repmat(img, [1 1 3]);结束

谢谢,贾斯汀!这是对我们的检测工具的一个很好的补充!

一如既往,我欢迎你的到来想法和意见




发布与MATLAB®R2021a

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。