在前面几篇文章中分别简单介绍了人脸检测、人脸特征提取、大规模人脸识别、提升人脸识别结果稳定性。其中,大规模人脸识别和提升人脸识别结果稳定性都需要依赖大量的标准人脸特征,如何才能快速的完成大规模标准人脸图像的选择、入库,决定了人脸识别能力的部署响应速度以及识别范围的快速扩充。


        今天这篇文章就来简单介绍一下我在工作中用到的进行标准人脸图像快速标注的方法。

使用场景:在大规模人脸识别应用中,要保证较高的识别准确率,准确识别同一人物在各年龄段、各种角度、光照、对比度下的人脸图像,需要进行大量的数据清洗、标注工作,一个人物需要准备几十或数百张标准人脸图像(大小如112*112)。

现有标注方案:

        a)、使用爬虫工具从互联网上爬取大量的公开图片,然后使用人脸检测算法批量裁剪出所有检测到的人脸图像

        b)、由专业的数据标注团队或数据标注众包平台完成图像筛选工作

困难和挑战:

        a)、人工成本高,标注效率低

        b)、标注质量无法保障

人脸图像标注示例:

        a)、从互联网上爬取对应人物(如刘德华)公开的各种各样的,各种场合、各种场景、各种时期的图片,如下:

深度学习怎样给图片打标签 图像识别打标签_标准人脸图像标注

         b)、裁剪出图片中的所有人脸区域,删除不是刘德华的图片,保留刘德华的图片,如下:

深度学习怎样给图片打标签 图像识别打标签_聚类_02

         至此,刘德华图片的标注工作就完成了,那么能不能弄一套代码逻辑来自动的实现呢?答案是可以的。

人脸图像自动标注方案流程:

        1)、爬取公开图片,将每个人物爬取到的图片单独保存,比如以刘德华关键字爬取的图片就保存在刘德华目录下,以张学友关键字爬取的图片就保存在张学友目录下

        2)、对图片进行人脸检测,保存每个目录下检测得到的人脸区域

        3)、基于人脸识别中,属于同一身份的人脸图像之间相似度大于不同身份的人脸之间的相似度,基于这一原则设计一个聚类方法,自动筛选出每个目录中占大多数的人脸图像,具体流程如下:

        a)、使用人脸特征提取模型提取每张人脸图像的特征向量

        b)、设置滑动窗口,在滑动窗口内依次计算每个特征向量与其余特征向量的度量距离,计算结果依度量距离取由小到大排列的top N。计算过程如下:

                i)、任意选取一个特征向量作为聚类中心,记为f_i∈{f_1,  f_2,⋯,  f_k },设f_i属于P类别。

计算下一个特征向量f_j与f_i的度量距离dist,若d𝑖𝑠𝑡<0.95(依自己使用的方法而定阈值),则f_j与f_i属于同一身份,也归为P类别,否则f_i属于P类别,f_j属于N类别

                iii)、依次将每个特征向量f_i∈{f_1,  f_2,⋯,  f_k }作为聚类中心,计算其余的特征向量f_j到各中心f_i的距离,重复此步至遍历所有的聚类中心。

对于每个聚类中心f_i∈{f_1,  f_2,⋯,  f_k }的聚类结果,依据聚类分类规则,如果P类别集合大小小于阈值K,则将聚类中心f_i判定为负类,反之将聚类中心f_i判定为正类。正类即为有效数据,负类即为噪声数据。

        c)、可以以每个人物具体爬取的数据量来设定不同的滑动窗口大小,多次执行上述步骤,逐步清除掉爬取到的无效人脸图片

备注:这套自动标注的方案基于一个假设,就是以刘德华关键字爬取的所有图片中包含刘德华的图片肯定是占多数的,不然这套规则失效。