在前面的文章中我们提到(
图像定位的深度学习解决方法
),Fast R-CNN提高了R-CNN的性能,但这两个算法的速度仍然很慢。现在我们再介绍两种改进算法,即 Faster R-CNN和YOLO。
1. Faster R-CNN:
在Fast R-CNN 中,我们将所有的任务统一到同一种网络中,直接预测感兴趣对象的类别和边框,但我们仍然需要运行单独的算法在原图中找到候选区域。在Faster R-CNN中,我们将寻找候选区域的算法也和其他的算法统一起来,使整个训练过程都基于同一个CNN网络。
下图是训练Faster R-CNN的网络结构:
通过 Region Proposal Network 来获得候选的区域,主要的想法是用滑动窗口和Anchor Box代替原来计算候选区域的算法。流程如下:
1). 把预先训练好的一个CNN用在图像上后,会得到这幅图像的特征表示层(最后一层)。我们在这个特征表示层上用滑动窗口来形成一个个的区域,这些区域对应原来的图像上相应的区域。这个滑动窗口在特征表示层的中心点也是在原来图像上的中心点。而每个中心点的周围可以得到K个预先定义好的 Anchor Box。这些Anchor Box有不同的大小和ratio比例,如下图所示。
2).每一个Anchor Box对应的输出有两种,一种是Classifier来决定有还是没有感兴趣的对象,另一个是定位这个对象相应的边框的四个坐标,所以一个滑动窗口有K个 Anchor和(2k+4K)个输出。根据这些Anchor Box在原图中和对象的IOU标记成正负样本。
3). 有了训练数据,就可以构造相应的Region Proposal Network 来获得候选区域,之后的步骤和Fast R-CNN相似。但有一个不同,Fast R-CNN是直接预测边框的坐标和区域大小,而Faster R-CNN预测的是这些Anchor Box的坐标,以及偏移量和缩放比例。
2. YOLO
Faster R-CNN的速度还可以再提高,即不再区分Region Proposal Network的预测和最终Faster R-CNN作出的预测,所有的过程只训练一次。不同版本的YOLO算法还有很多不同的改进,基本的算法如下:
1)将原始图像划分为网格,例如3×3网格。对于网格中的每个单元格,也同样构造Anchor Boxes。对于每个Anchor Box,相应的预测内容包括:这个Box里是否存在感兴趣的对象,对象是哪个,以及Bounding Box 的位置和大小。同样使用IOU确定正负样本,而后直接在这个网络上训练,不像Faster R-CNN还要训练一个Region Propsal Network.
2)在进行预测时,对于每个网格中的单元,运行之前训练出来的网络。这样,我们会得到很多的预测结果,之后运行 Non-max Suppression 产生最终的预测。
备注:Non-max Suppression 是如何工作的
对于多个可能的包含对象的边框,我们首先扔掉那些包含物体概率非常小的边框,而后选择一个包含感兴趣物体的最大概率的边框,而后再丢掉其它和这个最大概率边框的IOU 小于一定的阈值的所有边框。如果要预测多个对象,我们对每个对象运行这个算法,找到对应的边框。
不同版本的YOLO算法做了不同的改进,提升运算的速度,比如以下的两个改进:
1). 用Kmeans对 Anchor Box 做Clustering, 把不常用的Anchor Box去掉。
2). Multi-scale training:网络使用同样的参数,Filter 大小也不改变。但re-scale 输入图像的大小,并resize网络。
迄今介绍的四种算法检测物体的速度不同,据某些实验结果显示,检测一幅图片所需要的时间是:R-CNN(20秒), Fast R-CNN(2 秒),Faster R-CNN(140 毫秒),YOLO(22毫秒)。YOLO是目前做物体检测最快的算法,也可能是最有前景的一个算法。
领取专属 10元无门槛券
私享最新 技术干货