中文站

人工智能图片鉴黄原理和应用

随着网络时代的高速发展,各式各样的UGC内容在丰富网络精神生活的同时,也让各类色情信息有机可乘。大量的色情图片夹杂在部分信息中,严重影响着互联网的健康发展,通过技术手段鉴别过滤色情图片是当下研究的热门问题。本文结合网易易盾图片鉴黄实践经验,简单介绍人工智能鉴黄原理和实现。点击体验网易易盾智能鉴黄服务

一、图片鉴黄的历史

互联网早期,我们主要通过人工审核识别黄图,由于早期网络带宽小、产品少、图片数据也少,人工审核效果还是很不错的。每天色情图片量一般也就几万,安排几个人人眼挑选,发现有不良的图片人工删掉即可。

伴随互联网产品普及率提升,网络信息量暴增,一个产品一天出现几百万的图片量也是很正常的情况,通过人工审核已经不可能。但是计算机视觉技术也有一定的进步,我们用肤色识别算法过滤掉一些没那么多“黄色”内容的图片,剩下的再进入到人工审核,可以大大节约审核量。据统计,经过机器肤色识别过滤后大约只有20%的图片还需要人工审核。

移动互联网全面普及后,各种类型的网络信息量暴增,人工审核连20%的信息量也无法承受了,加上视频、直播、音频等业务和数据的爆发式增长,我们迫切需要一个更加有效的方案来解决图片审核的问题。很自然的,我们也紧跟人工智能的技术热潮开始研发机器学习的鉴黄系统,并且取得了显著成果。

二、人工智能图片鉴黄原理

辨别一张图片是否是黄图,从机器学习的角度看,本质上是一个对图片分类问题:给定一张图片,让机器判断是否是“黄图”。我们要做的就是研发一个“分类器”,它能根据输入的图片计算出该图片属于“黄图”类别的概率,然后再根据这个概率值输出一个“是”或“否”的结果。计算机擅长的是数学运算,所以我们要把这个“分类器”先抽象成某种数学模型,这样才有可能用计算机来运算。

为了更加方便理解,我们把数学模型定义为:y=f(x)。即给定图片x,我们要找到一个函数f,通过计算f(x)可以得到这个图片的黄图概率y。很简单吧!理论上这个数学模型可以解决所有的分类问题。具体的实现分为以下几步:给出定义、收集样本、训练模型、验证。详细的步骤如下:

第一步:给出定义。教机器分类,首先需要有明确的分类标准。很自然的,我们先把露点的图片归类到黄图,再明确一点,就是男性露下体,女性露乳房或者下体的图。不过,多年的实践经验告诉我们只根据是否漏点来判断图片类别是远远不够的。比如这张图:


(图1: 没露点的色情)【介于图片尺度问题,无法公开】

它并没有露点,但是很明显不能认为它是一个正常图片。(不考虑政策监管因素,仅从学术研究的角度讲,也应该把这个图片归类到黄图的一种)。反之,也并不是所有露点的图片都是黄图,比如图2:


(图2 :特殊但合理)

这些仅仅是定义工作的开始,在真实世界的数据形态和政策法规的约束下,更多的图片需要被分类,比如图3、图4等等:


(图3: 低俗)


(图4 :泳装)

       通过这个例子是想要让大家明白,仅靠“黄图”这样一个笼统的定义是无法满足实际情况的。我们得把一个“二分类问题”演变成更加复杂的“多分类问题”,并且尽量把定义和标准清晰化,这显然是一个庞大和繁杂的工作。因此我们组建了专门的运营团队,对数据和政策法规进行研究,根据实际情况积累了众多的分类定义和标准。

       

       第二步:收集样本。有了定义之后,我们就要收集样本数据。我们之前多年的审核工作积累了大量的图片数据,其中有很多经过人工审核确认是黄图的,所以我们从里面筛选出部分图片作为训练的数据。由于定义的分类数量非常多,我们不得不开发专门的分类标签系统并组建额外的人工标注团队,把训练数据做进一步的筛选。训练数据的质量好坏对效果的影响非常大,所以我们必须很有耐心地投入到训练数据准备的工作中。这个工作消耗了大量的时间和人力成本,并且还一直在持续进行中。由于都是违禁的图片,为了避免二次传播,我们也难以像ImageNet一样通过众包的形式来完成。

       

第三步:训练模型。回到一开始的数学模型y=f(x),训练模型的目的就是为了得到f。我们通过前面的两步得到了标注好的图片样本集,把标注的结果定义为y*,图片为x,现在我们要想办法找到一个f,可以对样本集中所有的图片计算得到的y跟y*最接近,也就是得到使|y- y*|的值最小的f。我们可以把|y- y*|定义为损失函数。如何找一个函数的最小值在数学界已经有成熟的算法。一般采用梯度下降法去寻找合适的f。

虽然所有图片数据在电脑看来也都是0和1的二进制数据,比如下图就是前面图1的二进制形态的片段。但是直接拿这些0和1的数据计算,容易导致运算量过大,图片特征提取的效率和准确度都难以保证。


(图5 :图片的二进制值)

如何高效地提取出特征数据来代表图片x是很关键的一步。技术上称之为特征提取。幸好许多前辈科学家已经做了大量的研究,近些年来,基于深度学习的神经网络模型在各种图像识别的比赛中获得了突破性的进展。所以我们选用了CNN(卷积神经网络)、GoogLeNet、ResNet(残差网络)三种深度网络模型结构作为研究的基础。通过这些模型,我们就可以更加高效地把图片数据转变成了可以运算的数学模型,使我们可以更快更好地得到f。

当然实际情况下f是一个非常复杂的函数,为了简化运算,我们把f拆分成了fn(fn-1(fn-2(f(f2(f0)))),每一个f可以理解为神经网络的一层,n个f就是n层,这种层层递进的关系就是算法名称中“深度”的由来。理论上我们可以搭建任意深度(层次)的神经网络模型。把f拆分之后,我们用倒推的办法就能得到每一层的f。

我们以图4为例,经过不同层次的f运算得到的结果,如下图6:


(图6: 不同网络层次特征结果)

每一个层次的f可能会得到许多特征结果,有一些是模型对应特征的响应(对应图中有高亮的部分),有一些没有响应(图中黑色部分)。最终经过所有层级的f运算所得结果经过Sigmoid函数映射到0-1之间,得到的就是y值了。y越接近1,那么它命中类别的概率就越大。演化到多分类的问题上,y就是一个多维度的数,理论上每个维度都可以得到一个0-1之前的值,我们按照一定算法选择某一个维度的y作为结果输出即可(一般按照y值大的)。

第四步:验证。经过前面3步运算我们得到了f。(其实是n层神经网络的参数,也就是所谓的“黄图”模型)。f的可视化结果可以参看图7(以GoogLeNet为例),图7展示了10个224*224的RGB图片作为输入,在第二个卷积层的时候就需要64*3*3*64=36864个f的参数。当然这个是在计算一个非常简单的图示情况下的数据量,实际情况的输入数据和网络深度都要远远大于图片所展示的。我们常说的算法调参,就是指调整这些f的上万甚至上百万个参数。


(图7 :神经网络结构模型)

接下来我们需要有一个验证的图片集来测试f的效果。由于f是根据训练集生成的,那么直接用训练集不足以反映它在真实环境下的效果。得益于我们大量的历史样本数据集,我们专门挑选一些图片作为验证使用。通过一个自动化的测试平台不停地对迭代出来的f做验证。在准确率达到更优的程度之后再更新上线。

三、人工智能图片鉴黄现状

经过不断迭代,得到了越来越精准的f(模型),在验证图集上也达到了99.8%以上的准确率。那么,我们就可以高枕无忧了么?恐怕还不行。

首先我们考虑真实世界里的场景:虽然互联网产品类型多样,但产品里面黄图的比例往往很小,一般都是万里挑一甚至是十万分之一的级别(明目张胆玩情色的产品在中国活不久)。我们假设10k张图像中有1张是黄图,我们的系统准确率为99.9%,即1k张图像会判错一张,那么我们计算伪阳性率(False Positive Rate),即判断为违禁图像集合中正常样本的比例为:


即11张判定为黄图的结果里面竟有10张是误判!不过用户也不用过分担心,统计为误判的图像,多数情况属于一些边界的情况,实际使用效果会更好。

其次,深度学习的模型会有一些奇怪的行为表现,比如相关论文([1] Goodfellow, Ian J., Jonathon Shlens, and Christian Szegedy. “Explaining and harnessing adversarial examples.” arXiv preprint arXiv:1412.6572 (2014).)里面描述的情况(图8)


(图8)

一张原本能被正确识别的大熊猫图像,在添加人眼几乎不可辨认的微小变化之后,竟然以99.3%的置信度被判别为长臂猿。

是神经网络结构有问题吗?不是,这个实验是基于获得ILSVRC竞赛冠军的GoogLeNet网络进行的。

是训练数据的问题吗?也不是,网络是基于目前最大的物体识别分类数据集ImageNet训练的。

也就是说,对于一个卷积神经网络,出现难以解释的正常图像误判是普遍现象。即便是在实际应用或比赛中取得满意效果和优异成绩的算法,也会犯反人类直觉的“低级”错误。

基于以上的原因,在真实的场景下,我们往往采取机器审核+人工审核的方式来做到双重保险。

四、结语

本文简单描述了网易易盾反垃圾系统在图片鉴黄上所作的努力和成果。经过多年的数据积累和算法沉淀,目前智能鉴黄的识别效果可以做到非常高了,但也存在一定的误判率,因此机器可以很好的跟人工配合,减少工作量的同时提高准确度,图片鉴黄就能达到几乎完美的效果。

相关阅读:

智能鉴黄原理是什么?人工智能鉴黄靠谱吗?

解放鉴黄师,看网易易盾如何文本鉴黄

他们要消失了吗?探访人工智能浪潮下的鉴黄师