深入探究递归神经网络 毕马威数据科学家领你入门
Rachel wagner – kaiser是佛罗里达大学的博士后研究员,她在2016年12月获得了天文学博士学位,现在是毕马威的数据科学家。她建立了一种算法,使用分层的递归神经网络来检测仪表盘摄像机(这款设备与很多车载记录仪很相似,放置于挡风玻璃前,摄像头可监测道路状况。其独到之处则是先进的识别系统。)拍摄的汽车事故。
人类认为理所当然的任务对于机器来说通常很难完成。在通过验证码来验证身份的时候,通常会被问一个“图像中是否包含路标”的问题,我们会很快的识别出来,但是,在环境中进行图像识别对于机器来说很困难,以自动化、高效的方式准确地回答这些问题,更为困难。
为了解决这个问题,像Facebook和亚马逊这样的公司花了很多钱来手工处理图像和视频分类的问题。例如,TechRepublic(为IT专业人士提供在线商业出版物和社会团体的网站)认为手工标注数据可能是“未来的蓝领工作”。通过审查数以百万计的图像和视频来识别某些类型的内容是非常繁琐和昂贵的。然而,尽管如此,很少有技术能够以自动化的方式有效地分析图像和视频内容。
在这篇文章中,要介绍一个分类机器学习算法(Crash Catcher !),它使用一个分层的递归神经网络来隔离特定的、相关的内容,从数百万小时的视频中分离出来。在这份案例中,算法会检查仪表盘摄像机的镜头,以确定是否发生了车祸。对于那些可能有数百万小时的视频来筛选的企业(例如,汽车保险公司),这个工具对于自动提取重要内容和相关内容非常有用。
建立数据集:仪表盘摄像镜头
在理想的情况下,对于这个特殊问题的数据集将是一个庞大的视频存储库,有成千上万的例子,包括车祸和非车祸。每一段视频还将包含清晰的元数据,并在视频(例如,汽车的摄像头位置、视频质量和持续时间)和内容(例如,汽车碰撞的类型)上保持一致。
然而,现实是这种类型的数据并不存在,或者几乎不可能出现。相反,它散布在网络上,并由世界各地广泛的个人提供。虽然数据收集和预处理并不是任何一种数据科学工作中最吸引人的方面,但它无疑是一个不可忽视的重要组成部分。
笔者从SLab研究公司(一个试图预测车祸的学术研究机构)获得了一组私人视频。他们的视频短,也有四个稍长的片段,大约有600个事故视频和1000个没有事故的视频(只是普通的,无聊的驾驶场景)。这些数据有两个主要的问题:在崩溃的类型中有太多的变化,数据集在崩溃(“正面”)和非崩溃(“负面”)视频之间不平衡。
在碰撞中有太多的变化
在最初的模型中,当模型能够准确的捕捉到数据时,数据变化巨大,而当没有足够的数据能充分模拟复杂的变化时,往往会出现不足。
如果想要准确地预测各种各样的事故需要比现有更多的数据。于是把这个项目缩小到一个更小的问题上——只专注于汽车碰撞,那么,这样可能会预测到一个视频是否包含了车祸。
Rachel手工整理了视频数据集,然后只关注汽车碰撞,只留下36个车祸视频,发现这些数据中有7.5%是积极的例子,这就产生了一个不平衡数据集的新问题。
处理不平衡数据
不平衡的数据处理起来可能很棘手。如果要对439个负面的例子和36个积极的例子在数据集中训练一个算法,结果模型可以很容易地预测,并且仍然有92.5%的准确性。然而,这92.5%的准确率并没有反映出当车祸发生时模型无法识别的事实。
为了用一个模型捕捉积极的例子,需要更多的例子来创建一个平衡的数据集,所以转向YouTube,从各种YouTube上传的仪表盘摄像镜头中截取了一些汽车事故的片段,有93个新的正面例子,总数达到129个。通过随机选择相同数量的负面例子,创建了一个258个视频的平衡数据集。
预处理的视频和图片
与视频打交道最大的挑战之一就是数据量。258个视频看起来不是很多,但是当每一个视频被分解成单独的帧时,就会有超过25,000张图片。
每一个图像都可以被认为是一个二维的像素阵列(最初的尺寸为1280x720),每个像素都有关于红色、绿色和蓝色(RGB)颜色层次的信息,这些颜色可以创建一个三维形状。这个初始数据结构并不需要进行分析,所以将每个3d RGB颜色数组还原为一维灰度数组。然后将每个图像的采样值下调了5个,以减少每个图像中像素的数量到256x144数组。所有这些都减少了数据的大小,而不会丢失任何来自图像的真正重要的信息。
一个层次的递归神经网络
视频数据集尤其具有挑战性,因为在它们的结构方面,虽然视频中的每一个帧都可以使用标准的图像识别模型来理解,但理解整体上下文更加困难。每段视频都是一个数据点,把它分类为有或没有发生车祸。然而,每一段视频实际上都是一组按时间顺序排列的独立图像。对于数据和时间依赖都有一个层次结构,经过选择的模型要能同时处理这两个特性。
为了解决这些依赖关系,最初使用了一个预先训练的卷积神经网络(谷歌初始模型),将每个视频中的每个图像向矢量量化成一组特性。但是,由于帧到帧之间没有发生太大的变化,没有得到有用的信息,而模型的表现也仅仅是随机的。于是,开始训练递阶神经网络(HRNN)。
HRNN本质上是一个循环的神经网络,包裹在另一个经常使用的神经网络中(特别是,长短时记忆)。第一个神经网络分析了每个视频中图像的时间依赖序列,跟踪物体或特征,当它们移动或改变整个剪辑(例如,汽车前灯或汽车保险杠)。第二种递归神经网络采用第一个神经网络编码的模式和特征,并学习模式来辨别哪些视频含有事故,哪些没有。
这些视频都是4秒的片段,所以调整了代码,让算法能够解释任何长度的视频。这种设置对于企业更有用,他们想要分析更长的视频。这段代码将长视频分割成可以独立的短段,同时由HRNN进行筛选,以检测视频中是否包含了事故。这意味着对每个段的分析可以并行处理多个gpu /节点,以减少处理视频所需的总时间,更为实用。
结论
随着任务变得越来越复杂,或者数据变得更加多样化,需要更多的数据来训练精确的神经网络。一般来说,更多的数据+多样性=更一般化的模型。为了准确预测更广泛的情况(例如,将正面碰撞与追尾碰撞和汽车卡车碰撞进行分类),需要更多的数据。
获得更多数据的途径是找到更多的例子——但从个人经验来看,这是一项繁琐、耗时的任务。通过稍微改变我们已经拥有的数据生成“新的”数据是一个更可行的选择。应用旋转,水平翻转,改变图像质量,或每个视频的其他变化将为HRNN创造新的内容。虽然人类可以很容易地将更改的视频识别为原始内容的转换,但对于机器来说,它看起来就像新的和不同的数据。这些改变产生了一个“更大的”数据集,并且可以将预测的泛化提高到前所未见的数据。
这个项目最困难的部分是将适当的数据集与适当的深度学习方法配对,以了解视频上下文。这段经历非常具有挑战性,但也很有意义。