快手Y-tech
最新技术干货分享
弹幕防挡指的是通过技术手段将视频中感兴趣区域的弹幕屏蔽掉,只保留非感兴趣区域的弹幕,如下面的视频所示。
可以看到,视频中络绎不绝驰过的弹幕,在提升我们的交互感同时,又丝毫没有挡住我们感兴趣的目标即人像。这就是我们Y-tech自研的人像弹幕防挡功能!它的技术核心是人像语义分割。目前弹幕防挡功能已经上线应用于A站和快手。
视频弹幕防遮挡框架
视频弹幕防挡的算法技术核心即Y-tech自研人像分割算法,我们想要在端上看到带防挡弹幕的视频效果,大致经过两个步骤,第一步利用人像分割算法对视频进行人像掩码图的离线生成,接着在有了人像掩码图之后,前端播放器结合视频和人像掩码图进行渲染播放。
项目的整体框架逻辑如下图所示,在用户上传完视频后,由业务侧根据业务策略主动触发视频生成人像掩码图。业务侧会告诉视频云服务器需要生成弹幕防挡的视频 id,视频云服务器调用 Y-tech AI算法云服务器的防挡服务,防挡服务会从视频云服务器的视频库中取出相应的视频,然后生成人像掩码图返回给视频云服务器,视频云服务器将相应的人像掩码图放到缓存池中。其他用户在播放A站上面视频的时候,会获取播放地址和弹幕防挡地址,如果有人像掩码图资源地址,则下载人像掩码图,随着视频播放,根据端上防挡帧加载策略,选取视频帧对应的防挡信息,达到最终的弹幕防挡效果。
弹幕防挡流程图
技术实现细节
我们是基于人像分割算法实现字幕防挡效果的。对于用户上传的视频,我们先对视频解帧,接着使用人像分割算法处理视频流的每一帧图像。人像分割,主要指利用计算视觉技术将图片/视频中的人像从背景中分离出来,其技术核心是端到端的深度学习神经网络,输入一张图像,网络输出一张与输入大小同样大的掩码图,掩码图上的每一个像素点用来表示,该像素点是人像/非人像。如下图所示,右边图像表示分割网络预测出的人像掩码图,黑色像素表示背景部分,白色像素表示人像部分。
人像分割示例图
人像分割技术的进展与语义分割密切相关。语义分割的相关论文和工作有很多,与我们的任务紧密相关的主要可以分为以下几个类别:1. 通过探索更强大的语义分割网络,将公开数据集例如cityscapes[1]指标持续刷新,如HRNet-OCR[2]等。2. 在半监督语义分割领域,主要研究如何通过有标签数据和无标签数据相结合的方式,提升目标数据集的分割效果,如在12.5%的有标签cityscapes数据集上达sota的CPS[3]等。3. 探索更高效的模型结构,使得语义分割算法能够实时稳定运行,实现效果和效率的平衡,例如能够在2080Ti GPU上达230fps的DDRNet[4]等。
在人像分割算法落地到弹幕防挡业务的实践中,我们面临的挑战与难点主要有以下几个方面:
1. 数据集构建:考虑到人像场景、姿态、语义边界等维度的复杂性,需要构建一个多样性强,能够尽可能提高人像分割泛化性的数据集。为了高效获得符合业务分布的数据集,我们主要通过全监督+半监督相结合的方式进行数据集构建,如下图所示。
人像语义分割数据集
(第一行:原图,第二行:半监督方式构建的分割伪标签)
2. 效率和效果的平衡:在弹幕防挡任务中,人像分割算法是部署在云端服务上,利用高效的显卡进行模型运算,计算资源相对较多。但随着模型计算量增大,模型的效果提升趋于平缓,模型运算时间以及显存占用逐步增大,单卡GPU显存有限,能支持的线程数减少,服务器资源占用随之增大。为了平衡效果和效率问题,我们在模型设计过程中综合考虑了模型效果、运行时间、显存占用等因素,并结合TensorRT和FP16技术进行模型前向运算,在较少的资源占用情况下取得了不错的分割效果。
3. 弹幕防挡的时序稳定性:用户在视频观看过程中,对于弹幕防挡的稳定性要求较高。我们在模型训练阶段采用一致性约束等方法提升模型对于序列帧预测的稳定性,并在后处理阶段利用时序平滑等方法进一步提升分割效果的时序稳定性。
4. 服务端与客户端的时间戳对齐:在防挡业务中,视频防挡掩码的离线生成和在线应用不是同步进行的,需要进行服务端视频帧掩码生成和客户端视频帧应用的精准校时,避免掩码错位,影响用户体验。
接下来将从人像分割数据集、语义分割模型、分割结果后处理,上线部署四个方面,来介绍弹幕防挡的核心实现细节。
全监督+半监督伪标签数据
A站的视频场景分布非常广泛,有舞蹈区、生活区、娱乐区等等。舞蹈区又分为现代舞、古装舞、偶像舞等,不同场景下数据的特点各异,这对人像分割算法鲁棒性提出了很高的要求。我们针对性的采集了部分人像数据,并使用人工的方式进行了精细化、像素级的标注。然而人工标注的低效、昂贵使得我们不可能针对全部的场景都进行手动标注。
A站有大量未标注的原始视频,为了合理利用这部分未标注的原始视频数据,我们使用全监督+半监督结合的方式训练语义分割模型。具体来说,我们使用半监督领域的伪标签学习技术,迭代优化神经网络模型。如下图所示,我们先使用有标签数据,按照有监督的方式训练语义分割模型,生成初始模型。接着我们迭代优化此神经网络模型K轮,每轮有两个步骤:(a)更新未标记数据的伪标签;(b)使用伪标签扩展的标记数据集以及有监督数据共同训练模型。在每一轮的迭代中,我们只保留置信度较高的预测像素点作为伪标签,忽略置信度较低的预测像素。
通过这种方式,最终构建了一个包含十万级的精细标注数据和百万级的伪标签数据的数据集,显著的提升了弹幕防挡业务场景下的鲁棒性。
半监督人像分割训练流程
语义分割模型
语义分割基本网络结构
我们的语义分割模型整体架构为端到端的encoder-decoder结构,输入一张原始图像,经过分割网络,输出一张和输入尺寸大小一致的分割掩码图,掩码图上的每一个像素点表示当前像素是人像还是背景。
人像分割pipline
我们在encoder部分使用resnet18作为网络的backbone,将输入图像整体下采样16倍,用来提取输入图像的特征。同时在decoder部分,将特征图逐级上采样回原始的输入图像大小,保证输出的掩码图在尺寸上与输入图像保持一致。在encoder和decoder之间,我们使用了跳跃连接,保证encoder部分提取到的浅层表观特征,能够顺利的传到decoder的每一层。在跳跃连接的末端,我们使用channel attention模块进行浅层表观特征和深层语义特征融合。在网络的监督信号上,我们使用了多监督头,即分割网络能够在不同尺度上都具有监督信号,能够在不增加推理耗时的基础上,提高模型的预测准确率。
上下文attention助力人像分割
对于人像分割任务,其两大关键性因素分别是人像的分辨率和上下文表示。作为像素密集型预测任务,人像的空间分辨率对分割结果至关重要,我们主要通过提升网络的输入图像分辨率和使用长跳连接,恢复人像的边缘细节信息。而像素的上下文指的是它的邻近像素。像素本身不具备语义信息,它的语义由图像整体或目标区域决定,因此每个像素的上下文表示与它周围的像素息息相关。为了获得每个像素更好的上下文表示,我们参考了OCRNet[5],通过attention的操作,显示的增强与当前像素属于同一类物体的其余像素的贡献,构建像素的上下文信息。
具体来说,我们在encoder的8x下采样阶段的特征图上,应用了OCRNet模块,如下图所示。我们首先从8x下采样的特征图中提取像素的特征表示,并保持特征图的8x下采样分辨率,同时通过1x1卷积得到一组粗精度的人像分割掩码图,并使用下采样8倍的标签进行监督。与原始的OCRNet不同的是,我们使用8x下采样的特征图而不是与原始输入图像大小一致的特征图,是考虑到人像分割任务本身的2分类特性,相比较于cityscapes[1]数据集的19类,较小的分辨率即可获得较好的区域特征表示,同时能够显著提高模型的计算效率。
上下文表示增强人像分割网络
我们计算网络输出的像素特征表示与计算得到的物体区域特征表示之间的关系矩阵,然后根据每个像素和物体区域特征表示在关系矩阵中的数值把物体区域特征加权求和,得到最后的物体上下文特征表示。最后我们将上下文特征表示与像素表示进行concatenation,通过1x1卷积得到最终增强后的特征表示。
语义分割后处理
形态学后处理保证人像分割完整性
在有了人像分割网络输出的人像掩码图后,紧接着我们对结果进行了进一步的后处理操作。考虑到在字幕防挡的场景下,人像分割对于边缘的精确度要求不高,但对人像的整体性要求较高,我们在神经网络输出的人像掩码图上,进行了进一步的形态学后处理,保证人像身体的完整性。具体的我们组合使用腐蚀膨胀操作,先对输出mask执行开运算(先腐蚀后膨胀),去掉输出mask图上的分割噪声点。接着再对开运算后的mask执行闭运算(先膨胀后腐蚀),填充上人像分割输出结果中存在的细小空洞。
时序稳定性约束
除了对单张输出图像进行形态学后处理,保证视频时序帧间稳定性也是我们的工作重点。
在训练结束后的finetune模型阶段,我们进一步通过一致性学习来对视频帧的时序一致性进行显式约束。核心思想是我们鼓励模型对经过不同变换的同一样本有相似的输出,在这里变换是指我们使用“高斯噪声”对输入图像增加扰动,使用“仿射变换”模拟人像对着镜头上下左右移动,使用“点光平行光光照增强”模拟外界光照变化等手段,模拟视频的连续帧变换。同时在另一端,我们也对mask使用了相同的数据增强手段。在监督阶段,我们除对网络输出的logits进行监督之外,也对网络的输出图像进行了one-hot标签的硬监督,如下图所示,我们对同一样本X进行如上所述的数据增强,生成X1和X2,同时输入到神经网路中,得到P1和P2两个概率图,并通过argmax操作得到对应的one-hot标签。我们除了对P1和P2的一致性进行了约束,同时也用Y2作为P1的监督,Y1作为P2的监督,并用cross entropy loss进行约束。
显式时序一致性约束
在推理过程中,我们发现网络对于人体边缘像素点预测抖动较大。对于人像分割二分类问题,网络输出概率值接近1表示当前像素是【人像】像素,概率值接近0表示当前像素是【背景】像素,而对于人像边缘所在的像素,网络输出概率值介于0.5附近,表示网络对于当前像素的预测类别模糊不清。为此我们对网络输出概率值介于0.5附近的像素做了平滑处理,具体来说我们参考了上一帧对应位置的像素值,同时计算了当前帧与上一帧的相似性,作为平滑系数,来保证相似度大的相邻帧,在相同位置上预测的概率值接近。如下视频所示,中间视频是未做时序平滑后处理的效果,右边是加入了时序平滑后处理的效果,可以看到对于网络预测不稳定的头发和胳膊位置,加入时序平滑的人像分割效果表现更加稳定。
时序平滑后处理前后对比结果
SVG后处理输出
在有了最终的人像分割掩码图,我们需要对图像进行进一步的转svg后处理。svg(Scalable Vector Graphics)是一种可缩放的矢量图像图形文件格式,这种格式的文件具有文件体积小、传输方便、易于解析等特点。svg矢量图可呈现在任何尺寸的屏幕上而不降低其质量,并且结合弹幕防挡的业务特点,可以对mask边缘做适当的平滑处理,进一步压缩svg的体积,并最终压缩为gzip格式,能够有效减少网络传输数据量。
部署上线
在完成以上的人像分割算法工作后,如何部署算法模型与上游sdk对接,保证最佳的效果和最优的性能,是我们项目落地中十分关键的一环。肩负着如此重要使命的正是快手Y-tech自研的快手端侧AI SDK框架YKit,它是一套从模型训练到端上推理的完整AI架构。YKit以一套C++原生代码支持iOS、安卓、macOS、Windows和Linux各端,结合Y-tech自研推理引擎KwaiNN,针对不同的芯片进行了适配和优化,最终达到最佳的效果与性能的平衡。
在NVIDIA的GPU上,我们进一步使用了TensorRT对训练好的模型进行推理加速。TensorRT是NVIDIA开发的一套用于高性能深度学习推理的SDK,它提供了网络层的构建接口,从而可以按照设计的结构逐层构建出完整的网络,并且还会在实际运行的设备上进行搜索调优,选择最佳的实现,充分发挥GPU的性能。KwaiNN推理引擎提供了模型转化和解析的解决方案,我们将其作为TensorRT的前端,实现了从模型到推理的流程,最终能够将我们的模型推理性能提升约30%。
总结
本文主要介绍了弹幕防挡功能的解决方案,我们充分打磨了人工智能算法三要素:数据、算法和算力。结合Y-tech自研AI框架YKit和推理引擎KwaiNN,成功的将人像分割算法部署到了云端,并上线到了A站和快手的弹幕防挡业务。在未来,我们将持续提升人像分割算法能力,力求极致,满足用户最佳体验。
参考文献:
[1] Marius Cordts, Mohamed Omran, Sebastian Ramos, Timo Rehfeld, Markus Enzweiler, Rodrigo Benenson, Uwe Franke, Stefan Roth, and Bernt Schiele. The cityscapes dataset for semantic urban scene understanding. In: CVPR (2016).
[2] Tao, A., Sapra, K., Catanzaro, B. Hierarchical multi-scale attention for semantic segmentation. arXiv:2005.10821 (2020)
[3] Xiaokang Chen, Yuhui Yuan, Gang Zeng, Jingdong Wang.Semi-Supervised Semantic Segmentation with Cross Pseudo Supervision. In:CVPR(2021)
[4] Yuanduo Hong, Huihui Pan, Weichao Sun, Senior Member, IEEE, Yisong Jia.Deep Dual-resolution Networks for Real-time and Accurate Semantic Segmentation of Road Scenes. arXiv:2101.06085v1(2021)
[5] Yuhui Yuan, Xilin Chen, and Jingdong Wang. Object-contextual representations for semantic segmentation. In: ECCV (2020)
你可能还想看
等你来
Y-tech
Y-tech团队是快手公司在人工智能领域的探索者和先行者。我们致力于通过计算机视觉、计算机图形学、机器学习、AR/VR/HCI等多领域的交叉探索,一方面帮助每个人更好地进行自我表达和内容创作,另一方面也为用户提供更好的内容体验和交互方式。Y-tech在北京、深圳、杭州、Palo Alto均有研发团队。如果你对我们做的事情感兴趣,欢迎联系并加入我们!
Y-tech长期招聘(全职和实习生):计算机视觉、计算机图形学、多模态技术、机器学习、AI工程架构、美颜技术、特效技术、性能优化、平台开发、工具开发、技术美术、技术产品经理等方向的优秀人才。联系方式:ytechservice@kuaishou.com
Y-tech///