用算法在图像中画重点-浅谈物体识别
物体检测是计算机视觉中的最常见应用之一,有极为广泛的用途。例如识别体育影像,确定哪个是运动员那个是篮球。或者你在找在桌上丢失钥匙时,就是在用人眼做物体识别,这时如果能通过机器来帮你完成,该多好啊。又比如交警通过物体识别,能够判定视频中的哪些车辆违纪。
物体识别这个问题经过近三十年的发展,从深度学习之前的人工特征提取,到之后逐步使用卷积神经网络进行特征提取和分类以及候选框的确定,直到端对端的模型使用一个网络完成所有任务,从而做到了更快的速度,更低的资源消耗,最终达到了实时的物体检测。
不同与图像分类任务,物体识别要逐层的在图像中画出一个个框框,比如先识别出这是一只鸡,再识别出鸡的脑袋,翅膀等。之后对框中的图像进行分类,框框中的图像要尽可能的完整的包含待识别的物体。(如上图所示)
物体识别最简单粗暴的做法是在图片上滑动切割大大小小的框框,然后对每个框中的结果进行分类,从中选择那些分类可信度高的,但这样实在太慢了。在深度学习席卷计算机图像学之后,出现了一个系列的RCNN,包括基础板,加速板,升级加速版,,其中的R代表regional。这里对其逐个进行详细介绍,从其进化中试图总结深度学习算法改进的一般道理。RCNN家族虽然已不是物体识别领域最新最好的方法,但其思路仍值得借鉴。
ps. 对卷积神经网络不熟悉的,可以看看复习下。
先说RCNN,这个最简单,就算将手动的特征提取换成了由卷积神经网络去做,其他的和传统模型类似,也是先生成所有可能的框,之后对每个大小形状不同的子图缩放到同样的尺寸,最后对每个框由SVM来判定是不是待识别的物体。但就是这个创新,在不改变分类器的情况下,就能够比之前最好的模型提升任务的准确度50%,下图是13年RCNN文章中给出的结果,其中红色的31.4%的准确率相比之前最好的22.6%进步很大。
从这里看出深度学习的最大优点,就是其能够比之前的方法更好的提取图像的特征,这是卷积神经网络的结构决定的,局部的信息提取以及通过pooling来实现信息的汇总。然而RCNN的分类器依旧是线性的二分类SVM,因此分类的效果不好,而且RCNN要暴力的从一幅图中生成2000张大小不同的被裁剪的图片,再根据要识别的物体种类对每一幅子图片通过SVM进行01分类,判定这幅图片是每一个待识别物体的概念,因此运行时速度很慢。
RCNN之所以慢,是由于对于2000个候选框中每一个,都要通过卷积层来提取特征,这注定会有很多重复的计算,如果能避免这其中的重复,就可以对算法显著的加速。具体来说,利用了CNN中的池化操作,先对整张图片过卷积层进行信息提取,之后将每一个候选框内的特征进行池化操作。
这里的池化操作,为了考虑到不同颗粒图像带有的不同信息,也是层次化进行的,具体是想将一幅图中的全部特征中选出一个,再将这幅图等分成4个小正方形,从每一个中得出一个特征,最后再将每个子图再切分,最后从16个小图中每个得到一个特征。如此在池化层对不同的候选框中的信息进行汇总,达到提高效率的目的,使RCNN时一张图40-50秒的判别时间变到了2秒
但是fast RCNN仍然有候选框的选择这一步,而这种机械化的操作将花费很多时间,faster RCNN对此进行了改进,通过引入神经网络替代了候选框筛选(selective search)。将一整张图片通过卷积神经网络提取特征,之后通过Region proposal network对整张图中确定哪一部分对应着相对应的区域。之后通过卷积层将不同大小形状的子图的特征变为相同长度。最后再通过softmax函数进行分类,使用线性回归去微调筛选框的具体位置。
Region proposal network通过在一张图片中按照给定的形状,设置k个锚点(anchor box),从而针对每个区域的子图,先预判待识别的物体在这个框中的可能性,在通过训练更新每个框的可能性的估计,从而之关注哪些最有可能性的位置。每个框一开始并没有标注待识别的是什么物体,这里优化的只是物体本身是不是在这个框中的概率,之后的网络将负责分类这个框里究竟是什么。相比于Fast RCNN的2秒,Faster RCNN的识别速度达到了0.2秒。
Faster RCNN也有自身的问题,比如一幅图像仍然要经过多个筛选框的反复处理。另外Faster RCNN在特征提取的时候采取了训练好的成熟模型,例如Inception或Residual net等,如果待识别的物体和这些网络本身训练的东西类似还好,如果不是,那模型的特征提取就会效果不佳。
总结一下。由于物体识别在商业上的广泛应用,其发展很快。RCNN家族已经早已不是最新的模型,YOLO和RetinaNet等端对端的模型通过使用一个网络完成全部任务,实现了实时的物体识别,能够在视频中使用。但RCNN的发展过程,就是神经网络一步步替代掉传统模型的过程。从最初的只替代特征提取,到用softmax多元分类替代多个二元分类,再到使用Region proposal network替代机械化的筛选框穷举。模型运行时间上取得了数量级上的进步。
要想做到数量级层面的性能优化,一定要来源于一个突破性的创新。从RCNN的发展过程中,我们可以学到将具体任务拆解的方法,以及如何使用学习而不是穷举的方式来减少计算量。智能的标志就是能用最少的计算量达到相近的信息提取能力,而端对端的网络通过将一切步骤整合在一起,从而进一步提升了性能。
更多阅读