一、需求背景
企鹅电竞是一款游戏直播产品,其中游戏短视频社区是其重要组成部分。
为了丰富游戏短视频内容,针对王者荣耀,需要一套自动化剪辑精彩时刻的系统,以能够快速根据主播直播内容生成精彩时刻反馈到游戏短视频社区。
二、问题思考
我们准备使用深度学习去探索这个问题。
该问题在计算机视觉中属于时序行为定位(Temportal Action Localization)问题,即,要在源视频中识别出包含某些行为的一段视频,包括该行为的起始帧和结束帧。
起初,我们尝试了CDC(Convolutional-De-Convolutional)这种端到端的解决方案,实验结果表明,通过标注的精彩时刻和非精彩时刻片段训练出来的模型并不能满足我们的要求,主要有以下不足:
一、识别率低
原因为王者荣耀的精彩时刻与非精彩时刻画面差别并不大。
相比其他行为,比如游泳场景和打篮球场景等的画面差别就比较大,因此CDC网络在这种行为检测上可以表现良好,但是并不适合王者荣耀精彩时刻。
二、CDC模型过大
CDC涉及到3D卷积所以比较大,不适合生产环境。
重新分析精彩时刻视频,我们发现其具有明显特征:起始点为双方英雄接触的时刻,结束点为击败敌方英雄的时刻。所以,只要我们可以识别出画面中我方和敌方英雄的特征以及击败敌方英雄时的特征就可以定位精彩时刻,也就是将时序行为定位问题转化为了图像检测的问题。
由于队友或者敌方英雄在击败对手时也会出现击败的特征,所以需要通过击败者的头像和技能区域识别是否为当前英雄的击败。
综上所述,问题可以转化为:
一、击败特征检测;
二、敌方和我方英雄检测;
三、分类击败者英雄和当前英雄。
三、模型训练
图像检测常用的模型有R-CNN、Fast R-CNN、Faster R-CNN、SSD、YOLO等,综合考虑运行速度与识别率,我们选取了YOLOv2来检测敌我英雄和击败时刻的特征;图像分类的模型就更多了,主要有AlexNet、VGGNet、GoogLeNet、ResNet、SqueezeNet等,考虑到SqueezeNet模型较小,准确率也不错,这里选择其作为英雄分类的模型。
1.数据准备
1.1 王者荣耀视频准备
通常情况下,一局王者荣耀的大部分画面是在清兵或者打野,画面中出现多个英雄或者出现击败时刻的情况比较少,但是通过王者荣耀的王者时刻功能录制的视频基本都是存在多个英雄或者有较多的击败时刻,因此我们可以选择使用王者时刻的视频来产生训练所需要的图片。
具体操作上,我们可以自己打游戏录制或者从YouTube上下载王者时刻视频,但是这两种方法都需要耗费较多时间。之后我们发现网站游戏时刻中存在大量优质的精彩视频,我们通过脚本将其批量下载下来使用。
1.2 标记精彩时刻特征
我们基于之前所做的采用传统图像识别算法识别精彩时刻特征的项目来确定当前画面中是否存在精彩时刻特征。
图像识别使用ORB(Oriented FAST and Rotated BRIEF)算法快速提取和描述特征点,使用GMS(Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence)算法将测试特征点与标准集的特征点进行比较。具体的实现步骤如下:
利用FAST特征点检测来检测特征点
利用Harris进行角点度量(Opencv还提供了FAST角点度量),