利用计算机视觉帮助在Mountain Dew的超级碗比赛中赢得100万美元

2021-02-09 20:30:52

昨晚在“超级碗LV”期间,Mountain Dew播放了一条广告,其中包含John Cena骑着以Mountain Dew为主题的游乐园的信息。瓶子散落在整个场景中:建筑物上的霓虹灯,娱乐室的镜子中的霓虹灯,以及从后备箱飞出的瓶子。

广告结尾处,约翰·塞纳(John Cena)向观众发起挑战:第一个在Mountain Dew上鸣叫确切人数出现在广告中的瓶子的人有资格赢得100万美元。

当我们听说需要进行仔细的视觉检查和计数的任务时,我们知道计算机视觉将是一个有用的工具。因此,我们做了所有开发人员都会做的事情:训练了对象检测模型以识别出现在整个场景中的瓶子。

在这种情况下,我们正在使用计算机视觉模型来帮助我们找到我们可能遗漏的任何瓶子。在发推文时,观看者仍应识别场景中每个瓶子的独特出现。

根据官方规则,任何类型的瓶子都可以计数-但是每个瓶子只能计数一次。 (例如,约翰·塞纳(John Cena)饮用的汽车中的瓶子存在多次不同的时间,但应仅计入理货一次。)

首先,我们需要一个来自广告的图像数据集。在这种情况下,我们可以获取广告的确切视频文件。我们需要将视频文件拆分为单独的图像帧,以便为图像添加注释并训练模型。

我创建了一个数据集,然后将Mountain Dew视频放到Roboflow中,该视频询问我要采样什么帧速率。我决定每秒做三帧,从大约30秒的“超级碗”位置中创建92张图像。

从视频中获取每个单独的帧是有帮助的:这意味着我们可以仔细查看可能存在Mountain Dew瓶的所有地方。

有了这些图像后,我们需要注释每个场景中可以找到的所有瓶子。尽管这与手动计数所有瓶子非常相似,但请记住,用我们自己的眼睛寻找所有瓶子可能并不完美。因此,希望在讲授计算机视觉模型时,瓶子看起来像什么,然后要求该模型为我们找到瓶子,我们会发现可能遗漏的任何东西。

标记(并从vid删除一幅全黑图像)后,我们在91张图像上有869个注释。我们开源了这个最终的Mountain Dew瓶子图像数据集:

收集并标记图像后,我们可以训练模型为我们找到瓶子。但是,在训练之前,我们可以使用图像增强来增加训练数据集的大小。

通过应用诸如亮度变化,视角变化,翻转等的随机失真,我们可以增加训练数据集的数量和可变性,从而使我们的模型有更多可借鉴的示例。

然后,我们使用了Roboflow Train,它使我们可以一键选择具有训练好的模型的选项。至关重要的是,在开始模型训练时,我们可以从先前的模型检查点开始。这种转移学习将加速模型训练并提高模型准确性。对于此数据集,从COCO数据集(“上下文中的公共对象”的数据集)开始训练将为模型提供一个良好的起点。

模型完成训练后,我们将提供一个API,我们可以调用该API对原始视频进行检测。借助少量的shell脚本,我们就可以逐帧遍历原始商业视频,并在存在边界框的情况下重建结果。