小叽导读:想象一下,当电视播放到白雪公主吃下“毒苹果”死亡的那刹那,屏幕中跳出某品牌的苹果广告“xx苹果,新鲜卫生,食用后无不良效果”。屏幕前的你会不会对某品牌印象深刻?今天,我们要探索的是物体检测算法在视频内容广告中的应用,来瞧瞧如何才能让商品广告与视频内容达到完美融合。
背景
业务背景
传统的视频网站广告以贴片为主(视频前贴、中插、后贴等),目前大部分视频网站除会员外用户均不可跳过广告,随着用户对观影体验要求的提高,影响体验的贴片硬广将有可能带来用户的流失。同时,越来越多用户将倾向于成为网站付费会员以享受更高品质的观影体验,会员的增加必然会导致传统贴片可曝光的容量减少。
内容广告不占用用户观影时间,会员可见。在广告质量上,广告内容与视频内容、场景的结合会给用户带来不一样的广告体验。因此,视频内容广告将会成为未来视频广告的主流形式。下图为“可口可乐”在优酷投放的场景广告,广告主定向的场景为“家庭团聚”和“聚餐”。
优酷内容识别现状
目前,优酷场景广告点位来源主要有2个:字幕词和场景识别。字幕经过 ocr 区块识别+nlp 理解得到字幕词,广告主根据广告内容购买相关字幕词,如“手机”、“打电话”、“吃饭”等;场景识别则是根据视频片段内容识别视频场景(如聚餐和婚礼等)。
在投放内容广告的过程中发现,字幕词广告存在以下两个问题:
1 . 广告内容与字幕意思不符,比如可口可乐购买的“可乐”,会在以下对话中投放,两者内容不相关。
2 . 字幕词所在片段无相关内容,比如字幕出现“手机”并不一定有手机内容,此时出现手机广告比较生硬。
内容点位的另一个来源是视频场景的识别,虽然场景识别可以解决以上字幕词出现的2个问题,但是场景识别建模较复杂,场景定义比较主观,人工标注成本高,训练样本采集难度大,同时由于很难预测未来广告主行业特点及其所需要的场景,无法快速支持新增场景。因此,场景识别的扩展性较差,很难满足广告形式灵活多变的需求。
视频物体检测解决的问题
视频物体是介于字幕和场景之间的内容,在某些视频场景中,不一定会出现与其关联的字幕信息,所以在内容描述上,物体强于字幕。同时,物体又是构成场景的基本元素,所以,视频物体能在一定程度上描述视频场景。总的来说,视频物体检测解决了以下问题:
解决字幕存在的图文不符问题、内容连续性问题。物体检测基于视频中出现的内容,保证了内容的准确性,同时由于物体内容的连贯性强于字幕,在帧之间出现内容突变的概率比较小,可以避免字幕一闪而过的问题,更适合出内容广告。
解决场景识别的局限性。物体检测建模相对场景识别较简单,训练样本标注成本低,可以快速扩展物体品类。同时,物体内容点位不受场景限制,比如“酒杯”可以关联饮食类场景,投放酒水饮料广告,也关联多个场景投放广告,比如“宠物狗”,除了可以投放狗粮外,还可以投放过敏药类广告,这是场景识别做不到的,下图为“辅舒良”药品广告,这个 case 出现了无法描述的场景,只能依赖物体检测对“猫”、“狗”等宠物的检测结果。
内容点位快速扩容。技术上,目前检测算法较成熟,模型迭代效率高,支持上千种物体的检测,可在短时间内快速批量化产出视频内容点位。
检测技术介绍
物体检测一直以来都是计算机视觉领域的一个经典问题。在深度学习爆发之前,具有代表性的方法是 Ross Girshick 的 DPM[1],将传统特征在目标检测领域提高一定水平。从2012年后,深度卷积网络开始流行,深度学习技术也被应用于物体检测。之后6年时间里,各种深度卷积的检测模型层出不穷,这些模型主要基于两大思路,其一以 fast/faster rcnn 为代表的 two stage 的检测框架,其二是以 yolo,ssd 为代表的 one stage 的检测框架。两种检测框架各有千秋,two stage 优势在于精度上,one stage 在速度上更加强悍。之后有 top-down,feature pyramid network,retinanet 等创新和优化,比较有挑战是在小物体、遮挡物体、以及实现又快又准又小的网络。物体检测技术发展历程如下图:
算法选型
基于以上业务背景和目标检测领域现状,急需从众多算法模型中选择一个适配业务。考虑业务需求和机器资源,比较关注如下两点:(a)较高的精准度;(b)较快的速度。比较目标检测各类方法,在精准度和速度的 trade-off 下,最终选择 yolov3[2]。其给出的相关数据如下:
模型概述和优化
YOLOv3
yolo 系列算法到目前为止有3个版本,整体物体检测思路基本没有变化。主要在backbone,detection 和loss function 上有一些升级。如下图,是在inputsize=416,预测类别个数=274下 yolov3 的框架图:
- backbone 是 darknet53,是由一组普通卷积+23个residual_unit 构成。
- detection 是由3个分支构成。从底层 feature map 到高层 feature map,分别负责小、中、大物体的检测。值得注意的是高层特征有回传到底层进行融合,增强底层特征的语义信息。
- feature map output 维度是[3*(4+1+274)]×N×N,不同 anchor 的分类score 不共享。
yolov3 损失函数如下:
第一部分对应 bounding box 坐标和长宽预测损失,第二部分对应有无物体的预测损失,第三部分是边界框有物体时的分类损失。值得注意的是第三部分对每个bounding box 用 logistic regression 分类,支持多标签分类。
算法优化
我们的初始模型的训练集来自 openimages,原始类别数量为600类,在此基础上我们增加了 ImageNet 部分数据集。在实际应用中我们挑选了具有商业价值的274类物体,并重新训练模型。在新的模型中,我们还做了以下的优化:
■ 数据优化
数据中主要存在不平衡问题,下图是274个类别30类目的数据分布,x轴代表类目,y轴代表 bounding box 的个数。
针对数据不平衡的问题,我们采取了如下2个措施解决:
重采样:训练集中有些类别量是是正常数量样本的1/10000,对这些样本做重复采样,同时对数据做旋转、高斯噪声、图像拼接等数据增强。
尝试采用 focal loss[3] 来优化损失函数,但是效果不佳。训练过程已经完全收敛,测试效果不好,可能与 yolov3 损失函数用 logistic regression 有关或者focal loss 超参数调参不到位。以下是实验中采用的损失函数:
此外,我们使用一些数据和训练上的细节优化:
多尺度训练:在训练过程中从[320,416,608]随机选择一种大小作为模型的input_size,可以有效的地增强模型的鲁棒性。
kmeans 聚类候选框:针对我们筛选的具有业务价值的物体在训练集中的边框分布进行聚类,得到9个初始锚点框。有利于模型的收敛和训练加速。距离公式如下:
label smoothing:标签平滑是 Inception-v2[4] 中提出,主要是为了防止模型训练时过于自信而导致 over-fitting 的问题。其表达式如下:
■ 模型优化
模型优化一般会根据优化目标从 backbone 以及 loss function 方面考虑。在实验中我们尝试了如下的方式:
考虑视频中人物等非刚体的形变概率较大,因而采用 Jifeng Dai 等人提出的deformable conv[5,6],增强传统卷积的建模能力。如下图,deformabel conv 在传统的卷积上的每个 pixel 上增加水平和垂直2个 offset 来表示形变。
考虑业务希望尽可能多的检测出物体,对位置精准度要求稍低,因此调整 loss function 中位置和类别的权重比例,让模型更关注物体类别准确率。
■ 后处理优化
通过观察和计算测试集中同类标注框重叠情况,发现有很多标注框 iou>0.5 的现象,因此,我们采用 soft-nms[7]进行后处理,相对于 nms(如果 iou 大于阀值则粗暴的丢弃)以较平滑的方式来处理重叠,其中包含 Linear 核和 Gaussian 核两种。如下公式:
平台化
我们将已训练好的模型进行接口封装,在经过 docker 打包,发布到线上调度平台。目前我们的视频内容识别平台单机每日可处理约600个正片视频,集群的处理能力可达到1w+正片视频/天,模型检测结果导出到离线数据库,经过筛选和分类处理后导入到线上打点平台,在打点平台上审核通过后进入投放系统,整个流程如下图所示:
效果
算法优化结果
我们在274类和93类物体模型上对比了优化前后的 mAP-50 指标:
如下图是我们在93类模型上优化之路,最终达到了0.596的 map。
广告业务落地
在视频类别上,我们检测了电影、电视剧、综艺3个主要频道上的正片,同时过滤掉古装类、惊悚类、仙侠类、宫廷类、动画类这些不适合出内容广告的视频。截止目前,我们的模型已经处理了5万+个视频,产出了9000万+帧图结果。在业务应用上,我们对挑选的具有商业价值的274个物体做了归类,在实际应用中,根据品牌内容属性和广告创意匹配相关类目的物体所能关联的场景。各品类检测结果数分布如下图:
我们已经在正常支持的3个场景为饮食、汽车、手机,分别投放了可口可乐、康师傅、福特汽车、三星手机4个场景广告订单,这些场景的点位由相关物体的检测结果构成。
我们在三星手机订单上对字幕和物体检测的点位投放效果对比,实际展现效果图如下:
为了在投放数据上进行对比,我们在已检测出“手机”点位的视频上对比了物体检测点位和字幕词点位投放的点击率差异,物体检测点位的曝光量是字幕词的3.5倍情况下,点击率依然能提升20%,在质量和数量上都有很大的提升。
总结与展望
总结
近6年,随着深度学习的快速发展,物体检测技术已经非常成熟,本文的工作尝试将物体检测技术应用于优酷视频内容广告中,并取得了不错的效果。在算法上我们选择了 yolov3 算法,结合我们的业务背景,有针对性地对商业价值较大的物体建模,检测速度和检测结果的准确度上都获得了很大的提升。
在实际业务场景的应用中,物体检测结果给现有的场景广告业务增加了大量的可投放点位,在保证广告内容和视频内容的相关性的同时,也带来了曝光量和点击率的巨大提升。
展望
目前,技术上采用静态图像检测的方法,接下来我们将在截帧策略上做优化,以及用LSTM 和 Optical Flow 融合视频上下文信息[8,9,10],加速物体检测、减小单帧图片检测中由于运动模糊、物体面积过小带来的检测难度,提高检测精度和速度。未来也会将物体检测算法应用在其他场景中,如视频同款中的服装检测。
参考文献:
1.Cascade Object Detection with Deformable Part Models
2.YOLOv3: An Incremental Improvement
3.Focal Loss for Dense Object Detection
4.Rethinking the Inception Architecture for Computer Vision
5.Deformable Convolutional Networks
6.Deformable ConvNets v2: More Deformable, Better Results
7.Soft-NMS -- Improving Object Detection With One Line of Code
8.Towards High Performance Video Object Detection
9.T-CNN: Tubelets with Convolutional Neural Networks for Object Detection from Videos
10.Flow-guided feature aggregation for video object detection
11.Deep Learning for Generic Object Detection- A Survey