本文主要是介绍人脸遮挡检测的几种思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
遮挡是一直以来困扰研究人员及技术人员的问题,原因是存在遮挡后,不管是对人脸进行检测,还是其它属性识别(如关键点、角度、姿态、年龄等)的效果都会有很大影响。
为了消除这些影响,一种思路是先判断是否被遮挡,再进行属性识别,另一种思路是在对人脸进行属性识别时加入对遮挡的处理,提高算法的鲁棒性。
目前,暂时还没有通用的解决方案。
如何判断是否被遮挡或者定位?
1、分类器:将是否被遮挡作为分类器的一个标签,可以用单标签,也可用多标签来区分不用部位的遮挡。或者将单个部位抠patch出来,进行单个部位的遮挡分类。这种方案简单易用,是目前的主流方案,但是全脸的遮挡检测存在一定的瓶颈,适用于对准确率要求不高的问题,而单个部分的遮挡检测强依赖于预处理,难以迁移且不利于对badcase进行后期维护。
2、CNN直接识别出人脸的各个部分(眼睛、鼻子及嘴巴等)生成partness maps,利用已经标注好的遮挡标签,进行打分,例如Faceness Net。这种思路不新了,但应用也不多,适用于不要求将手部遮挡分开的情况。
3、利用空间三维关系判断遮挡物与被遮挡物的前后生成遮挡关系边界图,再分割出人脸与遮挡物,从而根据分割轮廓判断是否被遮挡。这是学术界存在的一种思路,但是相对来说,概念(三维关系的判断)与步骤(三维关系-边界图-分割轮廓)都较为复杂,难以应用于实际。
如何在对人脸属性识别时加入对遮挡的处理?
1、在标注数据时就加上对遮挡的标注处理,将遮挡物的边缘区分开来。
这种思路适用于需要准确识别出遮挡部位并作下一步处理的情况,先加入标注好的遮挡数据再根据遮挡部位的连贯性不同进行区分,例如在人脸分割中将遮挡物从人脸的mask之间划分出来,或者在人脸关键点中带遮挡的landmark标注为遮挡物边缘。如果采用这种思路,后期还可根据分割区域的IoU来计算遮挡面积的大小。
2、进行多任务训练,把是否被遮挡的属性作为一个分支任务。
这种思路适用于遮挡只是一个辅助信息来帮助提高原有的算法效果。
附:人脸遮挡相关数据集
1、各种遮挡物:The MAFA dataset、the IJB-C dataset
2、主要为墨镜遮挡:Pgu-Face: A dataset of partially covered facial images
3、其它遮挡数据集:the Caltech Occluded Faces in the Wild (COFW) benchmark dataset、Large-scale Datasets: Faces with Partial Occlusions and Pose Variations in the Wild
数据集还可以利用其它数据集+人脸数据集自行制造,如这篇中的将手部数据集(ego-hands)加入人脸数据集:On Face Segmentation, Face Swapping, and Face Perception
这篇关于人脸遮挡检测的几种思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!