小叽导读:在淘宝这个平台上,消费者每天都在浏览着琳琅满目的图片,图片是消费者与商品交互的第一媒介。图片的质量会极大影响消费者的消费体验和转化效果,高质量的图片会让消费者怦然心动,流连忘返,而低质量的“辣眼睛”图片会让消费者望而却步。在淘宝首页猜你喜欢(以下简称首猜)场景下,由于图片数量太多,让人工来审核所有图片是不现实的。作为阿里技术人,我们的使命就是使用技术手段过滤掉低质量的图片,将高质量的图片和素材呈现给消费者。

一、摘要

恶心图片,顾名思义,就是让人感到恶心,不适的图片。其大致可以被分为跟动物有关的,跟人有关的,以及物体这三种类型。要从数量巨大的商品池中精确地将恶心图片过滤出来,面临着以下几个技术难点:

(1)初始样本很少且难收集,面临模型冷启动的问题;

(2)线上真实数据场景下,正负样本比例差距过大,面临严重的类别不平衡问题;

(3)恶心样本多种多样,如昆虫,爬行动物,人的各个身体部位等等,样本的特征分布非常分散。

针对第一个问题,我们通过本团队的小样本平台从淘宝内容池中召回恶心图片扩充样本量,并通过半监督算法利用淘宝的无标签数据进行训练。针对第二个问题,我们在训练中通过online hard example mining +级联的方法,并且通过active learning和噪声样本识别算法加快模型迭代。针对第三个问题,我们在模型中引入了attention机制,让模型focus在恶心的局部区域。本文的二、三、四节分别论述了这三个解决方案。

模型于19年10月初在首猜上线,在集团的各个业务场景下累计召回了几万张恶心图片。最新版的模型的精确率为95%,召回率为94%。

二、冷启动方案

由于初始样本量比较少,面临冷启动的问题。我们从首猜负反馈数据里拿到了几百张恶心图片,并通过本团队的小样本召回平台,用图像检索的方法从淘宝内容池中召回了几百张恶心图片,组成了最开始的训练样本。为了防止过拟合,我们采用了轻量级的网络mobilenet v2。另外,我们通过半监督算法利用淘宝的无标签数据进行训练,提高模型的泛化能力。具体思想为:一个网络的输出可以被认为是,其中W是网络参数,X是输入图片。一个好的模型应该足够鲁棒,无论是W的扰动(本文称为参数扰动)还是X的扰动(本文称为输入扰动),输出都应该保持不变。训练流程如下所示:

对于有标签数据,对student网络的输出构造交叉熵损失函数,对于所有数据(无标签+有标签),对student网络和teacher网络(两个网络结构一致)的输出构造MSE损失函数。每次迭代的时候使用梯度下降法更新student网络参数并使得teacher网络的参数成为student网络参数的滑动指数平均。(具体可参考论文《Mean teachers are better rolemodels:Weight-averaged consistency targets improve semi-supervised deeplearning results》)如下式所示:

在参数扰动上,我们使用的是上述公式中的滑动指数平均。在输入扰动上,我们对student网络和teacher网络的输入做了不同的数据增强。我们使用了随机翻转,randomresizedcrop,random erasing等方法,在后来召回来的badcase中,发现有一部分召回来的负样本是化了妆的嘴唇、眼部、脸部等,这些区域和某些恶心图正样本比较相似。因此尝试了random_distort的方法,经过处理之后,类似的badcase基本消除。

三、算法迭代流程

在线上数据中,正负样本的比例非常不均衡(远低于千分之一),大部分都是各种各样的正常图片,只有少量的恶心图。这意味着,即使模型在验证集上能达到99%的准确率,剩下的1%的错误也会在线上被无限放大,而且线上还有很多训练集里没出现过的负样本。

在模型版本快速的更替中,我们采取了active learning,噪声样本识别,OHEM+级联的迭代流程,如下图所示。

1、active learning

在每次的版本迭代过程中,模型都会召回一批数据。在一开始数据量比较少的情况下,可以全部标注然后进行训练。但是当数据变多了以后,一方面标注成本是非常巨大的,而另一方面根据curriculum learning的思想,应该让模型的学习由易到难,先学习简单的样本,然后逐渐学习更难的样本,提高难例样本在训练集的权重,这样能够加快模型的训练,找到更好的局部最优。因此如果每次都将所有的召回样本全部标注投入训练,结果是吃力又不太讨好的。在此我们借鉴active learning的思想,去找出有标注价值的难例样本。样本选择策略有两方面:

(1)在每次召回来的样本中,选择置信度在以上的和在以下的样本进行标注,挑选出前者中的负样本和后者中的正样本;

(2)在训练时引入损失预测模块,训练的时候预测各个样本的相对损失大小。通过该模块对召回来的样本进行loss预测,并取出排名靠前的样本进行标注。

上面两个策略都是挑选出难例样本进行标注。选择第一个策略是因为,一般情况下,我们希望模型对正样本预测的置信度越高越好,希望模型对负样本的置信度越低越好,而置信度在以上的负样本和以下的正样本对于模型来说都是难例样本。实际中选择的阈值可以根据情况来进行调节。选择第二个策略是因为,我们可以根据loss的大小来判断是否是难例样本,但是这些样本都没有现成的label,因此我们借鉴论文《learning loss for active learning》的方法,在训练的时候加入一个损失预测(loss prediction,以下简称LP)模块,来预测各个样本的loss。

LP模块从target prediction模块(简称TP)的一些中间层抽取特征(使其特征更加丰富),组合起来用于loss预测。训练流程为:每次一个batch进来B个样本(B为偶数),将这B个样本拆分成B/2个样本对,分别送入TP模块和下面的LP模块。LP模块的loss如下所示:

对于每个样本对,LP模块预测出来的loss的相对大小要与TP模块预测出来的相对大小保持一致,且绝对值要大于一定的阈值,才会使loss等于0。TP模块的loss在这里就是Ground Truth。由于Ground Truth是随着训练不断变化的,直接对两个模块的输出计算MSE损失函数会导致效果非常差。而且在做inference的时候,并不需要知道每个样本具体的loss大小,而只需要知道他们的loss的排名。

在实际场景运用中,我们同时运用了置信度选择和LP模块两个策略,并且在线上做了测试。结果如下:

每一行表示的是,从上一版的模型召回的数据中,用相应的策略选择样本,进行标注后加入训练,然后相比于上一版的模型的精确率提升量和召回率提升量(注:本文所有的提升量都是指的绝对值)。最后一行是指标注全部数据,|代表取并集。从中可以看出,相比于最后一行,只需要标注30%的数据(25%的数据和置信度选择的数据取并集),就获得大部分的精确率提升和召回数量提升。也就是说,后续performance的提升主要来源于这些难例数据,而在这个过程中可以减少约70%的标注量。

2、噪声样本识别

在解决业务问题时,我们总希望能获得高质量的训练样本,而从业务场景中拿到的数据都含有一定比例的噪声样本,可能是因为标注规则不清晰,培训不够完善,或者是有一些边界样本,或者是其他的一些原因,即使是外包同学标注的数据往往也存在误标的情况。如下图所示,这些都被标注成了正样本,如果将这些数据送入模型训练,很容易造成误杀。

在实验中我们发现,如果不对噪声样本进行处理的话,无论怎么改进算法本身,在验证集的精度一直上不去,到达了一个瓶颈。

经过调研之后,我们发现,针对噪声样本问题,大致有以下四种解决方案:

(1)多人标注后进行投票,这种方法能在根源上消除噪声样本,但是成本巨大;

(2)训练时采取更大的batch size,这种方法能够在一定程度上降低噪声样本带来的影响,但是无法完全消除,而且容易受到计算资源的限制;

(3)设计一个noise-robust model,这种方法一般会设计特殊的网络结构或者loss函数,来提高模型的抗噪性能,但是其设计往往过于复杂;

(4)通过噪声样本识别方法来识别出噪声样本并进行校验,然后在干净的数据集重新训练。

最终,我们选择了上面第四种方案。我们使用本团队发表在ICCV2019的论文《O2U-Net: A Simple Noisy Label Detection Approachfor Deep Neural Networks》。其基本思想为:在训练过程中循环调整学习率,使得模型在过拟合和欠拟合状态间反复切换。突然增大学习率,使得网络跳出局部最优,进入欠拟合状态,此时噪声样本产生的loss较大,而干净样本的loss偏小,随着训练,学习率衰减,网络慢慢进入过拟合状态。此时噪声样本和干净样本的loss都很小。在此过程中噪声样本的loss的均值和方差都比干净样本大。论文中学习率和样本loss的周期性变化如下图所示:

网络的训练分为三步:

(1)pre-training阶段。学习率设为正常值,训练直到在验证集的accuracy达到稳定。

(2)循环学习率阶段。

(3)对疑似噪声样本进行校验,在干净的数据集上重新训练。

我们对loss均值排名前5%的疑似噪声数据重新进行了标注。发现其中有约71%的是错标的噪声样本(其他的是难例样本),将这些噪声样本重新标注后加入训练集训练,在验证集的精度提高了0.74%,在线上的精确率提高了约8%。从此可以看出,验证集的一个小的进步可以在线上改进很多,反之一个小的错误在线上会被放大很多倍。

3、OHEM +级联

在数据量达到一定的规模之后,此时mobilenet_v2的performance表现非常疲软,在线上的结果表明,densenet的精确率比mobilenet_v2高5个百分点,于是我们果断切到了densenet。另一方面,面临样本不平衡问题,如何保证精确率达到90%以上,同时要保证召回率,就构成一个挑战。我们调研了一些处理样本不平衡问题的方法。其中,我们注意到目标检测领域的经典的adaboost+cascade的算法。目标检测领域里会生成很多候选区域,所以会产生很多负样本。用adaboost算法构建强分类器,然后将多个分类器级联就可以使大部分正样本通过的同时拒绝掉几乎所有的负样本。在我们的业务场景下,我们采用了OHEM(online hard example mining)+级联的方法,如下图所示:

在训练的时候,第一个网络densenet161的batch size为A,然后将其loss最大的B个样本,送入到第二个网络resnet50进行训练。这样每次第二个网络学习到的是第一个网络觉得比较难的样本。在inference的时候,对两个模型的结果取与。第二个网络选择resnet50是因为其表现优异,在验证集的精度只比densenet161低0.2%,之所以不选择同系列更大的网络是为了防止过拟合。另一方面,OHEM算法本身就可以处理样本不平衡问题,因此不需要像某些two stage的目标检测算法,在第一个网络中设置1:3的超参数来进行欠采样。

采用级联的方法后,在线上的精确率和召回率的变化见下表。相比于单网络densenet161,精确率提高了21%,召回率降低了4.3%。

四、attention机制

恶心图大致可以分为三类。第一种类型是跟动物有关的,包括各种令人感到惊悚的爬行动物(从无腿的到无数条腿的都有),昆虫,以及一些颜色鲜红的死体活体,动物内脏等。第二种类型,是跟人有关的,展示的是人体的各个丑陋、病态的部位。如过度肥胖,脏牙齿,脸部、鼻子、身体、手脚等各种皮肤问题。第三种是其他类型,即一些物体,包括惊悚的衣服、模型,脏乱的洗衣机、房间,马桶等。(下图高能,可直接跳过)

恶心样本多种多样,样本的特征分布非常分散。我们分析样本后观察到,大部分图片都是某个或者某几个局部区域表现出令人恶心的特征,而不是全局都呈现出恶心的特征。所以针对各种各样的恶心图,如何让模型focus到这些局部的恶心区域,对于提高模型的performance和泛化能力至关重要。我们首先调研了论文《Learning Deep Features for DiscriminativeLocalization》,作者将分类网络中最后的全连接层换成了GAP(Global average pooling)层,针对某一个类别,将最后一次卷积操作得到的feature map与其权重进行累加求和,于是就得到了这个类别的class activation map(CAM),如下图所示:

CAM反映了这个类别关注图片中的哪个区域。那么反过来,如果我们能够调整各个feature map的权重,对每个通道进行加权,那么就能够调整网络所关心的区域。另一方面,卷积操作本身涉及到通道和空间两个维度,我们不仅可以对每个通道的特征进行加权,也可以对每个空间位置的特征进行加权。因此我们采用了下图的方案。

我们在网路的基础block中嵌入了上图中的attention block。其中,每个attentionblock由一个channel attention module和一个spatial attention module组成。(具体实现细节可参考《CBAM:Convolutional Block Attention Module》)。我们使用Grad-CAM的方法,利用梯度信息对网络关注的特征进行了可视化,如下图所示(高能,可直接跳过),反映出模型focus在恶心的区域上。

五、业务结果

目前,我们的恶心图模型已经在首猜上线,持续扫描首猜的增量商品池。主要取得的业务结果如下:

(1)在今年双十一的前两天,对首猜的全量商品池进行扫描,为双十一期间消费者购物体验的提升作出了贡献;

(2)对便宜好货和阿里妈妈的广告图片进行扫描,运营根据扫描结果进行手动商品下线;

(3)最新一版的模型在首猜达到了95%的精确率,召回率为94%。

目前,恶心图的精确率和召回率都达到了要求。在图像质量维度上,淘宝对素材质量有以下诉求:

(1) 电商图像信息表达准确度要高(卖家秀和买家秀差异吐槽,误导购买的平台风险)

(2) 高质量图片的转化效率更高;

(3) 不同场景运营标准和颗粒度差异。

因此,我们打造了一个水滴平台,对于各个业务方关注的图像质量问题,比如清晰度、牛皮癣、拼接图、白底图、多主体、插画图、纯色背景图、低俗、恶心图等等,利用各任务间的共享特征、以及海量的无标签数据,通过multi-task learning提高图像任务的识别精度同时加快模型迭代的效率、减少数据标注量。目前已用于素材质量检测、基于视觉的自动化测试、基础处理(空窗、天坑、错误页)等方面。

参考资料:

1、《MobileNetV2: Inverted Residuals and Linear Bottlenecks》

2、《Mean teachers are better role models:Weight-averaged consistencytargets improve semi-supervised deep learning results》

3、《Learning Loss for Active Learning》

4、《O2U-Net: A Simple Noisy Label Detection Approach for Deep NeuralNetworks》

5、《Training Region-Based Object Detectors With Online Hard ExampleMining》

6、《Deep Residual Learning for Image Recognition》

7、《Densely Connected Convolutional Networks》

8、《Squeeze-and-Excitation Networks》

9、《CBAM: Convolutional Block Attention Module》

10、《Learning Deep Features for Discriminative Localization》

11、《Grad-CAM:Visual Explanations from Deep Networks viaGradient-based Localization》

公众号近期荐读:

  • GAN整整6年了!是时候要来捋捋了!

  • 新手指南综述 | GAN模型太多,不知道选哪儿个?

  • 数百篇GAN论文已下载好!配一份生成对抗网络最新综述!

  • 图卷积网络GCN的理解与介绍

  • 【CapsulesNet的解析】了解一下胶囊网络?

  • 结合GAN的零次学习(zero-shot learning)

  • GAN的图像修复:多样化补全

  • CVPR2020之MSG-GAN:简单有效的SOTA

  • CVPR2020之姿势变换GAN:图像里谁都会劈叉?

  • CVPR2020之多码先验GAN:预训练模型如何使用?

  • 两幅图像!这样能训练好GAN做图像转换吗?

  • 单图训GAN!如何改进SinGAN?

  • 有点夸张、有点扭曲!速览这些GAN如何夸张漫画化人脸!

  • 见微知细之超分辨率GAN!附70多篇论文下载!

  • 天降斯雨,于我却无!GAN用于去雨如何?

  • 脸部转正!GAN能否让侧颜杀手、小猪佩奇真容无处遁形?

  • 容颜渐失!GAN来预测?

  • 强数据所难!SSL(半监督学习)结合GAN如何?

  • 弱水三千,只取你标!AL(主动学习)结合GAN如何?

  • 异常检测,GAN如何gan ?

  • 虚拟换衣!速览这几篇最新论文咋做的!

  • 脸部妆容迁移!速览几篇用GAN来做的论文

  • 【1】GAN在医学图像上的生成,今如何?

  • 01-GAN公式简明原理之铁甲小宝篇


GAN&CV交流群,无论小白还是大佬,诚挚邀您加入!

一起讨论交流!长按备注【进群】加入:

更多分享、长按关注本公众号:

方案分享 | 淘宝首页那些“辣眼睛”的图去哪了?相关推荐

  1. 淘宝首页serverless升级后的质量保障方案

    本文主要介绍了serverless 架构升级在淘宝首页的应用,新架构对底层所依赖的容器.环境资源等与之前相比差异较大,并且对应的预发.安全生产.生产等环境,与旧架构的完全隔离. 背景 阿里巴巴集团大淘 ...

  2. 火狐浏览器打不开淘宝首页的解决办法

    火狐浏览器打不开淘宝首页的解决办法 今天想打开淘宝看看双11有没有什么好东西可以买买买,但是火狐跳出来意思是淘宝网站有问题无法访问,要去咨询网站管理员,囧~~~ 然后上网搜了一圈,说只要按下Ctrl+ ...

  3. 7.25 web前端-淘宝首页设计

    hello everybody,许久不见,甚是想念,关于我为什么四天没更新博客的原因就是本次文章的标题,没错,我们老师布置了项目设计,而我这个大怨种选择了淘宝首页这个页面内容多的,以至于我这个小白敲了 ...

  4. 还原淘宝首页最顶部的导航栏(含下拉菜单,图标等)

    还原了淘宝首页最顶部的导航栏,包括了各个导航的下拉列表等(位置对齐稍微有些偏差,毕竟没有原版设计图),用到了jquery,js,CSS3等知识.没有花时间去做录屏GIF,就几张效果图看下:如下 原始导 ...

  5. HTML+CSS零基础学习笔记(五)— 模拟淘宝首页(静态)

    内容概览 模拟淘宝首页(静态) 一.项目重难点 二.效果图及源码 模拟淘宝首页(静态) 一.项目重难点 样式重置:在实际开发过程中,我们往往会新建一个单独的CSS文件(reset.css),用于对应H ...

  6. 页面布局(1):淘宝首页

    大家好,我是梅巴哥er. 入职前端后,我相信有很多小伙伴都是从写简单页面或者简单的功能开始入手的.比如活动页面,活动详情页,活动某项交互等. 为了快速适应开发需求,在较短时间内完成手头工作,以便挤出更 ...

  7. 淘宝首页链接跳转,非taobao.com域名下的链接处理

    淘宝首页需要实现这样一个功能,对于页面上非taobao.com域名下的链接,在用户点击时,需要在链接处弹出提示框,提示用户此链接非淘宝域名下的链接,并给与用户选择是否继续访问.如果用户确认继续访问,则 ...

  8. 2016淘宝首页改版 细说淘宝首页设计变化史

    近日,从微博上看到有网友说淘宝首页改版,现在淘宝正在一步步接入新版本,知情人士从3月22日就已经得到了淘宝官方人员的消息:新版资源位3月24日开始会接入部分流量,到时新旧版资源位会共存一段时间,直到旧 ...

  9. 批一批淘宝首页的源代码

    [url=http://ued.taobao.com/blog/]淘宝UED[/url]团队经常写一些很棒的技术文章,令我印象深刻的有一句话,大意如下: [quote]虽然这种方法比较hack,但是可 ...

  10. 微信小程序淘宝首页双排图片布局排版代码

    小程序淘宝首页双排图片布局排版代码 效果图: 使用技术主要是flex布局,绝对定位布局,小程序前端页面开发,以及一些样式! 直接贴代码,都有详细注释,熟悉一下,方便以后小程序开发! wxml: < ...

最新文章

  1. Spark在Windows下的环境搭建
  2. 9 Django 模型层(2)
  3. 数据降维工具箱drtoolbox
  4. jquery对Select的操作
  5. Ollydbg中断方法浅探
  6. 必须声明标量变量_Excel VBA解读(136): 在用户定义函数中的变体、引用、数组、计算表达式、标量...
  7. 设计模式-创建型模式-模板方法
  8. 安卓案例:初试谷歌图表
  9. c# npoi 公式不计算_玉米扣量因素:水分、杂质、不完善粒、生霉粒,检测方法及计算公式...
  10. Laravel深入学习3 - 接口约定
  11. 网站采集工具免费采集发布网站后台
  12. matlab定积分矩形法实验报告,矩形法求定积分
  13. ubuntu20.04 firefox flashplayer 安装教程
  14. 如何判断关系是否自反,反自反,对称,反对称,传递
  15. 排序专题——8.基数排序之LSD法
  16. android 钉钉考勤日历,Flutter仿钉钉考勤日历
  17. linux 查看显卡信息及显卡驱动信息
  18. 微信公众平台开发教程
  19. SDEdit一点成画,小白也能是绘画大师!
  20. 返回多字段并用数组分割方式展示

热门文章

  1. android 悬浮窗截屏,GitHub - tyhjh/ScreenShot: Android截屏的封装
  2. 企业无线产品认证好吗
  3. GitLab 创建项目组及将代码导入项目
  4. python 主函数传参_Python函数传参详解
  5. 免费作图软件draw.io 软件输入数学公式和文本
  6. Steam WIN+R喜加一游戏管理工具 Steam Code Manager
  7. 《刘润·5分钟商学院》学习总结01
  8. 【转载】蚁群算法原理及实现
  9. 「 运动控制 」“ADRC自抗扰控制技术”(Active Disturbance Rejection Control)研究
  10. 覆盖计算机网络分类有哪些 英语缩写,简述按覆盖范围划分计算机网络的分类类型有哪些?英语缩写分别是什么?...