背景
在数字化时代的浪潮下,企业对保护敏感图像信息的需求已变得迫在眉睫。诸如证件照片和票据等纸质文件的扫描版本携带着个人隐私和关键的商业信息,一旦这些信息遭到泄露或滥用,都可能对企业和个人造成严重的风险和损失。因此,确保这些图像的安全性和机密性已经成为数据安全和数据合规工作的核心焦点。
然而,如何有效识别这些敏感图像却是一项复杂且充满挑战的任务。首先,企业需要确保敏感图片识别与保护技术的可靠性和准确性,以避免误判和遗漏。但是,事先开发的模型很难覆盖所有的敏感图像类别,如果在使用过程中不断引入新的敏感图像类别,同时更新和优化模型,这无疑显著地增加了使用和维护成本。何况除了通用的敏感图像类别之外,企业还可能拥有特定的敏感数据类别,这些企业特有的数据是无法通过公开渠道获取的。此外,在模型训练过程中,确保敏感图像的收集和数据处理流程合法且合规,这也是需要特别注意的地方。
本文将介绍我们在证件、票据类敏感图片识别中的一些洞察,以及对上述问题的原创性的解决方案,以帮助企业合法合规、低成本的解决敏感图片识别的难题。在本文第二部分,我们将回顾一些相关的机器视觉(CV)技术。第三部分我们将介绍我们的做法以及达到的效果。
分析
当遇到难题时,最好的做法是看看已有的技术以及他们解决了什么问题,并试图将我们遇到的难题转化成已解决的问题或者他们的组合。
在证件、票据类敏感图片识别中,遇到的最大挑战是类别的不确定性。这个问题其实非常地常见,通常会使用度量学习(Metric Learning)的技术来解决。其中,大家最常见的就是人脸识别任务了,以手机或门禁为例,显然系统不可能预先知道使用者是谁。因此,要使用人脸解锁,需要先使用者配合采集多张脸部图像,解锁时则只需配合让摄像头拍摄到正脸图片即可。其核心的工作原理如下:录入过程中,系统将多个角度的人脸图片使用深度神经网络提取的特征进行融合并存储,而在使用过程中,系统再次使用深度神经网络提取人脸特征,并与存储的特征进行比对,达到一定相似度即可。开发者则使用度量学习的技术训练好用于人脸特征提取的神经网络,来保证产品的核心功能正常运作。
类似的,如果我们训练一个能很好的提取证件、票据类图片的特征的神经网络,并且将敏感图片的特征存储在系统中,在扫描时只需要比较提取的特征与系统中敏感图片进行比较就行。但是这真能解决我们的问题吗,或者更确切地说我们能训练出这样一个神经网络并且达到不错的准确率吗?
很可惜,答案是否定的。首先,人脸识别模型通常使用数百万乃至上亿的人脸图片进行训练,而收集如此之多的敏感图片简直是无法想象且非常危险的。其次,人脸图片本身具有一定的特殊性,因为不管长相如何怪异,总是两只眼睛一张嘴,且位置都相对固定,模型能正确区分眼睛鼻子形状等,也能取得不错的效果。如果有心观察过超市生鲜区越来约普及的、类似工作原理的智能电子秤,就会发现其准确率确实是差强人意。
图1. 图片匹配的示意图,通过卷积神经网络获取局部特征,然后使用如RANSAC方法计算匹配的点,验证是否匹配。
当然,证件、票据图片也有自己的特殊性,即他们是二维的,而且通常有相对固定的图标、文字和布局,扭曲也比较小,因此在不同视角下获取的图像通常只相差一个仿射变换。熟悉的计算机视觉的读者一定想到了,也许我们能使用图片检索(Image retrieval)的做法——完成图片召回后,然后通过几何验证(Geometric Verification)进行重排序,排除错误召回的图片,以及找出最匹配的图片。这里必须指出一个意外的好处,在证件、票据类敏感图片识别中,要求满足几何验证并不是重排序的一种方案,而是天然需要符合的条件,这来源于证件、票据等印刷在二维纸张上必然的结果。
至此,我们已经对如何解决我们遇到的难题有了很清晰的思路,概括起来就是把敏感图片当作待检索的图片,并使用需扫描的图片作为query图片去检索出敏感图片库中的图片,召回使用度量学习的方法训练的全局特征,而后使用几何验证来保证正确率。
实践
在有了清晰的路线图之后,我们就很容易知道我们要做什么来达到目标了。首先,我们在公开互联网上收集并人工清洗得到了约11,000 张,约150种类别证件及票据图片作为测试图片*,用于验证效果。计算准确率时,我们采用了一个非常严格的标准,即当我们选择某类别中的一张图片作为query,如果Top 1 的结果是同类别其他图片的话,我们才认为结果是准确的。(*局限性:我们收集的图片中证件、票据等主体普遍占据图片面积的30%以上,超过半数整张图片就是证件或票据。虽然如此,我们认为这也比较符合敏感图片的特点。)
图2. 我们收集的部分测试图片,涵盖了各类卡、证和发票等敏感文件。数据来源为Google Image、Yandex、duckduckgo等搜索引擎。
有了测试集后,我们测试了多种特征提取方案,从传统的SIFT,到Imagnet 预训练的VGG、ResNet、MobileNet等卷积神经网络,以及使用DINO自监督训练的ResNet和视觉transformer (VIT)。在召回阶段,我们发现使用GeM池化得到的全局特征,显著优于比MaxPool得到的全局特征,以及计算局部特征匹配的数量的方案。而在几何验证阶段,我们发现用DINO自监督预训练的模型效果最好。
图3. 训练使用的合成数据示意图。ID卡中布局和文字均为随机生成,而人脸图片生成使用了styleGAN2;火车票图片则通过模版填充随机生成的文字/数字生成。
在此基础上,我们还人工合成了卡片类图片,混合了海报、表格等开源数据,共计超过50万张图片,在开源的DINO ResNet基础上,使用DINO自监督方法,以及Adapters 进行了继续训练。对于全局特征,我们使用arcface loss,以及我们人工合成的卡片类图片,对模型stage4的参数进行了微调。最终,在我们收集的测试集上,敏感图片识别的准确率超过了93%,配合上一些简单的策略则能让最后整体的准确率达到95%,实现了可工业使用的标准。(当然,要落地还缺不了通过选择轻量化的模型架构、模型蒸馏、权重量化等技术让模型更加高效!)
在用九智汇分类分级平台,我们也已经集成了所有前文中提到的功能,让用户可以开箱即用。除了内置的一些敏感图片类别,如身份证、驾驶证、护照、教师资格证、营业执照等之外,我们支持添加新的类别,流程如图4所示,这里添加的是越南的身份证明,用户只需上传一些示例图片即可,平台将会提取特征并存储起来,而示例图片本身则不会被存储。
图4. 用九智汇-分类分级平台中,自定义图片标识的使用。上传示例图片即可提取和存储特征。用户还可以验证,确认效果。在后续的扫描任务中,同类图片即可被识别出来。
总结
在本文中,我们介绍了在证件、票据类敏感图片识别的一些思考、观察和实践。通过对图片检索技术的创造性应用,以及对证件、票据类敏感图片的二维特性的洞察,我们解决了敏感图片识别中类别不确定、准确率要求高等难点,在无需频繁更新或添加模型的情况下,使用一套稳定的方案,完成敏感图片识别的任务。
用九智汇-分类分级平台已经集成了这些工作,欢迎感兴趣的读者咨询,同样欢迎做算法的朋友们多多交流,三人行必有我师焉!
特别声明:本文中介绍的敏感图片识别方法已申请专利保护。
阅读原文:数据分类分级-敏感图片识别