本文主要是介绍faster RCNN/YOLO/SSD算法的比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
只要是做过物体检测(object detection)的人,都会对这三种算法比较熟悉,起码听说过。那么这三种算法各自有什么特点呢?为什么他们不能相互取代?接下来我们将慢慢分析。
RCNN系列
SSD
YOLO系列
faster RCNN
这个算法是一个系列,是RBG大神最初从RCNN发展而来,RCNN->fast RCNN->faster RCNN,那么简单的介绍下前两种算法。
- 首先RCNN,在这个算法中神经网络实际上就是一个特征提取器,作者用selective search的方法提取了一定数量(2000个)region proposal,然后对region proposal做卷积操作,将fc7这一层的特征提取出来用于分类和坐标回归,这里分类用的还不是softmax而是SVM。这个算法的贡献主要是提出了一种有效的特征利用方式,后续很多人在工程实践中都是用的fc7层的特征来做基于faster RCNN的应用。
- 到fast RCNN,fast RCNN将除了region proposal提取以外的部分都用一个网络来实现,与RCNN不同的是,1)他的分类和坐标回归的loss一起通过反向传播来更新网络参数;2)它在提取feature时并不会把每个region proposal都放入提取,而是将整幅图提取特征后,用坐标映射的方式提取feature,这样有两个好处a)快,因为一张图片只走一次网络;b)feature的特征受感受野的影响,能融合相邻的背景的特征,这样“看”得更远一些。
- 最后是faster RCNN,作者发现selective search的方法导致算法没有实时性的可能,因此,作者尝试用region proposal network来取代selective search的方法,并且与fast RCNN的分类和回归网络共用特征提取层,因此这样并不会带来太多额外的计算量,而实验结果也表明了,作者这样做确实提高的速度,并且还提高了准确率。因此,综上所述,region proposal network是faster RCNN的精华所在,也是精度高于以及速度慢于后续YOLO和SSD算法的原因。
YOLO
YOLO个人平时接触的不多,对YOLO v2也知之甚少,不敢妄言,这里简单介绍下YOLO v1
- YOLO的一个贡献是将检测问题转化为了回归问题,相信这句话很多人见过很多次了。那到底是什么意思呢?指的就是之前faster RCNN是先分两步,先提取region proposal,也就是判断是前景还是背景的问题,之后再分类,具体看前景是什么东西。而YOLO直接通过regression一次既产生坐标,又产生每种类别的概率。
- YOLO的特点在于快,其中一方面来源于regression机制,还有一个原因就在于region proposal的提取过程了。再YOLO中很少提region proposal的概念,但是为了类比faster RCNN我们可以这样理解,YOLO中粗暴地分成了7X7的网格,每个位置默认可能属于2个object,那么事实上就是提取了98个region proposal,而faster RCNN是一种滑动窗口机制,每个feature map上都回归出9个anchor,大约一共20k个anchor,在通过非极大值抑制等方法最终会得到300个region proposal。两者之间候选框差别巨大,因此,faster RCNN会准一点也是情理之中,而既然每个位置都要精修,当然效率就会低很多,也就不能满足实时性要求了。另外,YOLO精简了网络,比VGG要稍微计算量小一些,可能也会加快一些速度,但这些计算量比起前面提到的两点已经不足为道。
SSD
SSD有人说是faster RCNN和YOLO的结合体,是有道理的。首先说SSD的贡献,它的贡献在于它利用了多层网络特征,而不仅仅是FC7。那么为什么说它像YOLO呢,这主要是因为,SSD还是借鉴了detection转化为regression的机制,而说它像faster RCNN是因为借鉴了anchor的机制,只不过它的anchor不是每个位置的精调,是跟YOLO一样画网格,然后在网格上产生anchor,由于利用了多层特征,anchor的scale每层都不同,因此产生了较多的超参数,增加了训练难度。
所以说,三种算法在实际应用中faster RCNN鲁棒性会可能会强一些,但是鱼与熊掌不可兼得,速度也会较慢。
这篇关于faster RCNN/YOLO/SSD算法的比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!