自动识别一张对工作做来说并不适合/不保险的图像(Not Suitable/Safe For Work - NSFW)——包括暴力图像和成人图像——是研究者们几十年来一直在试图解决的重要问题。由于当下图像与用户生成的内容主宰了互联网,过滤NSFW图像成为网页应用和移动应用的一个重要组成部分。
随着计算机视觉、改进的训练数据和深度学习算法的发展,计算机现在能够以更高的精度来自动分类NSFW图像内容。
NSFW素材的定义是主观的,而识别这些图像的任务并非没有价值。此外,在某一语境下使人反感的东西却可以适合于另一语境。为此,我们下文所描述的模型只侧重于一种NSFW内容:色情图像。NSFW简笔图、漫画、文字、写实暴力图像或其他不当内容的识别解决方案不适用于此模型。
据我们目前所知,还没有用以识别NSFW图像的开源模型或算法。秉承合作精神并怀揣推进这一努力的希望,我们发布了自己的深度学习模型,它能让开发者使用一个NSFW检测分类器来进行实验,同时向我们提供反馈以改善分类器的性能。
我们的通用Caffe深度神经网络模型(general purpose Caffe deep neural network model)以图像作为输入并输出一个概率(即一个介于0和1之间的数字),可用于检测和过滤NSFW图像。开发者可以针对具体使用情况来用这个概率过滤掉ROC曲线上低于某个适当阈值的图像,或用在搜索结果中进行图像排名。
▲卷积神经网络架构和权衡
近年来,卷积神经网络已经在图像分类问题中取得了巨大成功。自2012年以来,新的卷积神经网络架构一直在不断改进标准ImageNet分类挑战的精度。一些主要突破包括了AlexNet(2012)、GoogLeNet、VGG(2013)和残差网络(Residual Networks)(2015)。
这些网络在运行时间、内存需求和准确性方面有不同的权衡。运行时间和内存需求的主要指标是:
Flops或连接——一个神经网络中的连接数量决定了向前传播过程之中的计算操作数量,这与图像识别时的网络运行时间成比例。
参数——一个神经网络中的参数数量决定了加载网络所需的内存量。
理想情况下,我们希望一个网络拥有最少的flops和最少的参数,而达到最大精度。
训练用于NSFW识别的深度网络
我们使用一个包含正(即NSFW)图像和负(即SFW-suitable/safe for work)图像的数据集来训练模型。
由于数据属性的问题,我们没有发布训练图像或其他细节,但我们开源了可用于开发者独立进行分类的输出模型。
我们使用Caffe深度学习库(Caffe deep learning library)和CaffeOnSpark;后者是一个用于分布式学习的强大开源框架,令你可以在Hadoop和Spark模型训练集群中使用Caffe深度学习。
在训练过程中,图像被重新调整到256x256像素,水平翻转进行数据增强,并被随机裁剪为224x224像素,然后送入网络。在训练残差网络时,我们使用了ResNet论文中所描述的规模增大(scale augmentation)来避免过度拟合。我们评估各种架构来找到运行时间和精度之间的权衡。
MS_CTC——这种架构是由微软限制时间成本的那篇论文提出。它在卷积层和全连接层相结合的速度和精度方面秒杀了AlexNet。
Squeezenet——这种架构提出了fire模块——包含层挤压,然后扩大输入数据团。这有助于节省参数数量,使Imagenet的精度与AlexNet的一样好,尽管内存需求仅为6MB。
VGG——这种架构有13层卷积层和3层FC层。
GoogLeNet——GoogLeNet提出了Inception模块并拥有20个卷积层阶段。它还在中间层中使用hanging loss functions来解决深度网络中的梯度递减问题。
ResNet——ResNet使用快捷连接来解决梯度递减问题。我们使用了作者所发布的50层的残差网络。
ResNet-thin——该模型是使用我们的pynetbuilder工具生成,并复制了残差网络论文中的50层网络(每层过滤器的半数)。你可以在这里(https://github.com/jay-mahadeokar/pynetbuilder/tree/master/models/imagenet)找到更多有关如何生成和训练模型的细节。
深度模型首次在ImageNet 1000类数据集上进行预训练。我们将每个网络的最后一层(FC1000)更换为2节点的全连接层。然后我们精调NSFW数据集中的权重。注意我们让与最后的FC层相乘的学习率是精调后的其他层的5倍。我们还调整了超参数(hyper parameters)(步长、基本学习率)以优化性能。
我们观察到,NSFW分类任务的模型性能与ImageNet分类任务中的预训练模型性能有关,所以如果我们有一个更好的预训练模型,它将有助于精调分类任务。下面的图表显示了我们所提出的NSFW评估集合的相对性能。请注意,图中的假正率(FPR)和一个固定的假负率(FNR)所针对的是我们的评估数据,在这里作说明用。要用该模型进行NSFW过滤的话,我们建议你们使用自己的数据来绘制ROC曲线并挑选一个合适的阈值。
我们发布了thin ResNet 50模型,因为它在准确度方面做了很好的折中,并且该模型在运行时间(CPU上运行时间< 0.5秒)和内存(~ 23 MB)方面体量轻巧。请参阅我们的Git库来查看我们的模型指令和用法。我们鼓励开发者尝试将此模型用于NSFW过滤的情况。如有任何关于模型性能的问题或反馈,我们都会支持并尽快回复。
结果可以通过在你的数据集上精调模型来改进。如果你改善了性能或者训练了一个使用不同架构的NSFW模型,我们都鼓励那么为模型贡献出力或将链接分享到我们的描述页面。
开源地址:https://github.com/yahoo/open_nsfw
本文来源:不详 作者:佚名