查看原文
其他

智能新闻整形师——为图片美容,给新闻长脸

QOP 搜狐技术产品 2019-04-21

导   读

新闻资讯类APP越来越注重新闻图片的美观以提升用户的体验,而本文要介绍的技术项目智能新闻整形师是一套基于多种模型的列表图裁剪及优选系统。文章将就项目的技术理论及实现具体来阐述。


01

业务背景


    新闻资讯类产品的界面通常都是有新闻标题和新闻列表图组成的,相信大家在刷新闻的时候都会有这种体验,首先映入眼帘印象深刻的一定是列表图,研究也表明人们对于图片的关注度明显高于文字,所以列表图的美观成为了一大课题。而列表图的常见问题主要在两大方面:列表图裁剪问题,列表图选择问题。

图1 新闻列表图裁图问题

图2 问题裁图对应原图

    举个栗子:这篇新闻的列表图(图1)没有显示全宁泽涛的人脸,原始图为图2,明显影响用户的视觉体验,如果图片恰好是重要的人物,脸又没有裁全,那就很尴尬了……

图3 新闻列表图选图问题

图4 新闻内包含的图片

    图3这篇新闻列表图选择了字太多的图片,这样的图片缩小到列表图尺寸就会没有信息含量,没有人会拿着放大镜来看列表图,作为列表图应该选择一些缩小尺寸也不影响信息传达的图片,比如图4这种人物图。

图5 相似列表图

图6 相似列表图

    还有这种相似图片的问题,虽然单个图片来说非常适合做列表图,橘猫和志玲姐姐的姿势也很撩人,但是图片之间太相似了,信息量立马损失了1/3,用户想要的是尽量多看到一些不同情景的美照,获取的信息量达到最大。

    为了解决这些问题,我们开启了新闻整形师的项目,下面就阐述一下我们的解决方案。


02

列表图剪裁


    针对列表图裁剪问题,解决策略可借助人脸检测+目标检测来确定重要信息的坐标位置,识别出人脸的位置,以及车辆、动物、人体等位置,从而在裁图的时候可以保留图片重要的信息。

    这里人脸检测算法用于确定人脸在图像中的大小和位置,即解决“人脸在哪里”的问题,把真正的人脸区域从图像中裁剪出来,便于进行后续的裁图策略。如图7是对一张图像的检测结果,小框是检测到的人脸区域,大框是检测到的人体区域。

图7 检测结果


人脸检测

    经典的人脸检测算法流程是这样的:用大量的人脸和非人脸样本图像进行训练,得到一个解决二分类问题的分类器,利用二分类判断输入图片是否为人脸。

    人脸检测分为两类算法,一种是传统的浅层机器学习算法,另一种是深度学习算法。

    浅层机器学习算法中,用于人脸识别的经典算法是HOG, 是用于目标检测的特征描述子,该技术将图像局部出现的方向梯度次数进行计数,通过将整幅图像分割成子区域,每个区域生成一个方向梯度直方图,这些直方图的组合可表示出所检测目标的描述子。与其他描述子比较,HOG没有旋转和尺度不变性,因此计算量小更加适合线上人脸识别中使用。如图8—图12是一个完整的HOG算法流程[3]

图8 原图像经过crop与resize[3]

图9 处理resize后的图像,划分cell,计算梯度,图上的箭头就是梯度的方向[3]

图10  X方向的梯度与Y方向的梯度,作为边缘检测和噪音去除[3]

图11 计算histogram of gradients[3]

图12 提取到了图像的特征[3]


    深度学习在人脸检测方面比较有代表性的算法是DeepFace,DeepFace可以谓之CNN在人脸识别的奠基之作,目前深度学习在人脸识别中也取得了非常好的效果,算法主要采用了基于检测点的人脸检测方法(fiducial Point Detector)

  1. 先选择6个基准点,2只眼睛中心点、1个鼻子处的点、3个嘴上的点。

  2. 通过LBP特征用SVR来学习得到基准点。

    DeepFace在训练神经网络前,使用了3D对齐方法。论文[1]认为神经网络能够很好的work的重要原因在于,一旦人脸经过对齐后,人脸区域的特征就固定在某些像素上了,此时,可以用卷积神经网络来学习特征。而DeepID和FaceNet并没有人脸对齐,DeepID的解决方案是将一个人脸切成很多部分,每个部分都训练一个模型,然后进行模型聚合。FaceNet,并没有采用这种方法,它的网络结构灵活性较大,其主要特点采用三元对之间的距离构建损失函数。


目标检测


    目标检测算法分为两类算法,一为传统机器学习算法;二为深度学习的目标检测典型代表有:RCNN系列,YOLO,SSD。


two-stage目标检测器

    目标检测需要明确input是图片,output是各个目标的分类与位置。初步的解决方法是从左到右、从上到下滑动窗口,所以最后应该接一个回归器+分类器。为了在不同观察距离处检测不同的目标类型,我们使用不同大小和宽高比的窗口,如图13。

图13 滑动窗口[5]

    变形图像块被输入 CNN 分类器中,提取出图片特征,之后使用分类器识别类别和该边界框的线性回归器,如图14所示。

图 14 two-stage流程图[5]

    RCNN系列中效率相对较高的算法是Faster R-CNN,它用内部深层网络代替了候选区域方法[2]。候选区域网络(RPN)在生成 ROI 时效率更高,并且以每幅图像10 毫秒的速度运行。

图 15 Faster R-CNN流程图[5]

    Faster R-CNN 的RPN 将第一个卷积网络的输出特征图作为输入。它在特征图上滑动一个卷积核,最后输出的值将馈送到两个独立的全连接层,以预测边界框和两个 objectness 分数,Faster R-CNN 使用只有两个类别的分类器:带有目标的类别和不带有目标的类别,这样使得流程更加简洁方便,如图16。

图 16 Fater R-CNN网络图


One-stage目标检测器

    前面说完了two-stage目标检测器,需要先生成候选区域,然后进行物体检测。这里需要进一步的思考,是否真的需要候选区域步骤?可不可以直接得到边界框和类别吗? One-stage 算法应运而生,可以直接在网络中提取特征来预测物体分类和位置,这也正是我们线上采用的算法。one-stage目标检测器包括SSD、YOLO系列。

    解决办法:采用一个单独的CNN模型实现end-to-end的目标检测。如图17CNN网络将输入的图片分割成S×S网格,每个单元格检测中心点落在该格子内的目标,每个单元格给出B个边界框,预测每个边界框含有目标的可能性c,及边界框的准确度,边界框位置 (x, y, w, h),均在[0,1]范围内,中心坐标的预测值(x, y)是相对于单元格,左上角坐标点的偏移值,相对于单元格的大小,而边界框的 w 和 h 预测值是相对于整个图片的宽与高的比例,每一个单元格要预测C个类别概率值。

图 17 one-stage流程图

图 18 one-stage目标检测[4]

    单次检测器通常需要在准确率和实时处理速度之间进行权衡,它们在检测太近距离或太小的目标时容易出现问题。与one-stage算法相比,two-stage效果更好,但效率较差。下面列出一些常用的one-stage算法。

    YOLO网络采用卷积网络提取特征,全连接层预测,网络结构参考GoogleNet模型,包含24个卷积层和2个全连接层,对于卷积层,主要使用1x1卷积来做channle reduction,然后紧跟3x3卷积层,对于卷积层和全连接层,采用Leaky ReLU激活函数,最后一层采用线性激活函数,如图19。

图 19 YOLO网络结构

如图20所示是YOLO的训练流程。

图 20 YOLO训练流程图[4]

    SSD 是使用 VGG19 网络作为特征提取器的单次检测器。我们在该网络之后添加自定义卷积层,并使用卷积核执行预测,对类别和位置执行单次预测。然而,卷积层降低了空间维度和分辨率。为了解决该问题,我们从多个特征图上执行独立的目标检测,如图21所示。

图 21 SSD网络结构图

    SSD的设计理念:采用多尺度大小不同的特征图,CNN网络前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,比较大的特征图和比较小的特征图,都用来做检测 。与YOLO最后采用全连接层不同,SSD直接采用卷积对不同的特征图检测结果。

图 22 SSD目标检测

如图23—25是最终结合人脸检测与目标检测的效果。

图23 多人图片

图24 歪头杀图片

图25 侧颜杀图片


03

列表图选择


    列表图选择方面存在两个常见问题:低质量图片做列表图、相似图片做列表图,下面分别来解决这两个问题。


图片低质量

    之前提到了有些不适合做列表图的图片,这里要解决这个问题,可以把它作为图像分类问题,通过预测得到的分类结果来过滤掉低质量分类的图片。

    图像分类的深度学习算法经过了四五年的发展,衍生出了各种各样不同的架构并取得一系列的突破。最常用的处理图像的方法:AlexNet,VGG16,GoogleNet,ResNet50。

    AlexNet在卷积层和全连接层后面都使用了激活函数Relu,解决了梯度消失问题,同时网络中也使用了Dropout,以一定的概率随机地关闭当前层中神经元激活值,结构如图 26:

图 26 AlexNet网络结构图

    到了VGG,相比AlexNet有一些改进:采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核,对于给定的视野,堆积小卷积核优于大卷积核,因为多层非线性层可以增加网络深度,且参数更少,多次重复使用同一大小的卷积核,网络的通道数从64开始,每经过一个下采样或者池化层成倍增加,当然特征图大小成倍地减小。

    然而当网络更深时,简单地增加网络深度反而出现更高的训练误差。为了解决退化问题,ResNet做了一些适当的改进:在VGG的基础上增加残差结构,如图 27是ResNet50的网络结构,其中stage2-stage5增加了残差的网络设计,两种残差块分别是identity block和convolutional block。identity block是ResNet中使用的标准块,对应于输入激活与输出激活具有相同维度,如图28。convolutional_block是另一种类型的残差块,当输入和输出尺寸不匹配时,可以使用这种类型的块,如图29。与identity block恒等残差块不同的地方是:在shortcut路径中是一个CONV2D的层。因为加和的计算,可以保证信息不会随着网络深度的增加而消失。

图27 ResNet50网络结构

图28 Identity block

图29 Convolutional block

低质量图片模块训练过程即是在预训练模型的基础上fine-tune模型,在自己定义的训练集上训练模型。如图30—32是过滤低质量图片的结果。

图30 素材图

图31 二维码

图32 文字类


相似图片

   解决相似图片的问题主要思路是通过将图像转化为特征向量的形式,然后计算特征向量的相似度。而图片转化为特征向量的常用方式有两种,一种哈希算法,另一种基于深度学习的特征提取。

   常用的图像哈希算法:ahash,dhash,phash

   哈希算法主要的步骤是缩放图片,将图片转化为灰度图,做哈希计算得到信息指纹,所以差别主要在哈希计算的过程。

    ahash 即平均哈希算法,计算进行灰度处理后图片的所有像素点的平均值,遍历灰度图片每一个像素,如果大于平均值记录为1,否则为0。

    dhash 即差异哈希,dHash算法工作在相邻像素之间,这样每行9个像素之间产生了8个不同的差异,一共8行,则产生了64个差异值,如果左边的像素比右边的更亮,则记录为1,否则为0。

    以上两个方法,计算快速,但是计算结果容易受到亮度等的干扰,且特征计算过于简单,导致失去很多信息,所以效果并不好,更适合搜索缩略图。

    phash采用的是DCT(离散余弦变换)来降低频率的方法,DCT是把图片分解频率聚集和梯状形,得到如图33的结果。

图 33 DCT效果

    根据图像频域分析的基础知识可以知道,图片的高频代表图片细节和噪声,低频区域代表图片轮廓,所以低频能更好的的代表图片,因此我们保留左上角的8*8,这些代表的图片的最低频率,然后类似ahash的方式,计算缩小DCT后的所有像素点的平均值,生成最后哈希结果。

    图片哈希计算相似度的方法能识别出大部分内容相似,只有细节不同的两张图片,细节部分例如水印、清晰程度等,如下面图34—37中的几个case。

图 34 相似图1.a

图 35 相似图1.b

图 36 相似图2.a

图 37 相似图2.b

     但是图片哈希计算相似度不能解决场景相同,人物姿态表情不同的情况,例如下面图38—41这几种情况。

图 38 相似图3.a

图 39 相似图3.b

图 40 相似图4.a

图 41 相似图4.b

    这两种情况用哈希计算的话距离会相对比较大,阈值不好设定,而列表图这种一定出现在同一文章中的几张图片,多数都是场景相同,人物动作不同的情况,而非图片基本相同的情况。另一种方法可以利用深度学习提取图片特征向量,利用预训练的深度学习模型获得图片的特征向量,计算向量之间的距离即图像的相似性。

    经过深度学习模型的特征提取顺利解决了上面两个例子,通过过滤相似图片,让该问题得到了良好的解决,算法检测结果以下图42—45几个样例。

图 42 相似图5.a

图 43 相似图5.b

图 44 相似图6.a

图 45 相似图6.b


04

总   结


图片裁剪

    线上裁剪效果大部分能够达到预期效果,但是有些特殊的图片,比如漫画类,识别到的人体头顶超出了人体框,还有一些策略需要进行一定的调整。


图片过滤

    由于训练集有限,很多低质量的图片没有囊括在训练集中,因此导致线上还有一些质量不高的图片没有过滤,后期需要通过日常更新训练集,更新线上模型的方式不断完善线上列表图选择。


参考文献


[1].Taigman Y, Yang M, Ranzato M A, et al. Deepface: Closing the gap to human-level performance in face verification[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1701-1708.

[2].Fast-RCNN: Girshick R. Fast R-CNN[C]. ICCV, 2015.

[3].SATYA, MALLICK. Histogram of Oriented Gradients[EB/OL].https://www.learnopencv.com/histogram-of-oriented-gradients/, 2016-12-06[ZB1] 

[4].Joseph Redmon, Santosh Divvala, Ross Girshick, and Ali Farhadi,Real-Time Object Detection[C],CVPR,2016.

[5].九三山人. 目标检测算法综述 | 基于候选区域的目标检测器 | CV | 机器视觉[EB/OL]. https://zhuanlan.zhihu.com/p/36262901, 2018-04-29


咚咚咚!1024攻城狮节最终结果出炉啦!

Top1

个性化音频合成

Top2

AI同声传译

Top3

狐  音

在上篇文章末尾的投票中,完全猜对的朋友请将自己的投票截图发送到后台,领取我们可爱的搜狐周边吧!


另外,季军项目的主要负责人曾经在我们的公众号上发过文章哟~戳下方链接即可查看↓

强化学习+Transformer:TensorFlow构建加速的新闻召回

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存