作者简介:秃头小苏,致力于用最通俗的语言描述问题
往期回顾:目标检测系列——开山之作RCNN原理详解 目标检测系列——Fast R-CNN原理详解 目标检测系列——Faster R-CNN原理详解
近期目标:拥有10000粉丝
支持小苏:点赞、收藏⭐、留言
最近在看RCNN系列的目标检测算法时,发现自己对回归和分类的概念不是很清楚。对于分类来说,直观上很好理解,就是把一些列物体分成若干类,如分成猫类狗类等等但涉及到回归,对其概念就比较模糊了,分类和回归的区别也不清楚如若你和我有一样的困惑,那么这篇文章或许可以帮到你
我看了网上许多关于分类回归区别的资料,我选一种来帮助大家理解,这也是谈的最多的,但是也人质疑这种表述,首先在我看来,这种表述是非常好理解的,是可以很好的帮助我们来解决问题的。那么这样的话我认为就足够了,至于一些不同的观点可能会更严谨,但是大致的思想还是一样的,只是关注重点发生了变化,这样有时候对于理解分类和回归反而加大了难度。
分类,顾名思义,就是将一些物体分成若干类,例如分成猫类和狗类等等。在计算机程序中,这些类别我们往往是用 0 , 1 , 2 ⋯ 0,1,2 \cdots 0,1,2⋯ 这样的数字表述,即0表述猫类,1表述狗类,2表示羊类,以此类推。【注:之后用一个字典表示数字和类别的对应关系即可】可以看出 0 , 1 , 2 ⋯ 0,1,2 \cdots 0,1,2⋯ 这些数字都是离散的,也即输出是离散的,对于这样的任务我们就认为其是分类任务。
那么回归该怎么理解呢?在我的印象中,我听过线性回归这个词,就是通过一系列的点拟合出一条直线。其实这就是回归啦,但是我们还没有谈到回归的本质,这条拟合的直线是连续的,即回归任务的输出的连续的。
通过上文的描述,总结分类和连续的区别:分类输出的数据类型是离散数据,回归输 出的是连续数据类型。 这里我再举一个生活中的小例子来帮助大家理解。现有一个球场,若要预测球场上的人数,因为人数是只能是 0 , 1 , 2 ⋯ 0,1,2 \cdots 0,1,2⋯ 这样的离散数据,故这个任务是一个分类任务;若要预测某个前锋踢出足球的速度,因为速度可以是 0 , 0.11 , 0.12 ⋯ 0,0.11,0.12 \cdots 0,0.11,0.12⋯ 等等任何值,是一个连续的数据,故这个任务是回归任务。
通过上文的讲述,我认为你已经对分类和回归有了一定的了解。那么接下来我将来谈谈分类和回归是怎么应用到RCNN的目标检测算法中的。
首先来思考目标检测的需求是什么?——目标检测即是要检测出图片中物体的位置和类别,并用矩形框框选出来。如下图所示:
接着我们考虑实现目标检测的需求能否直接用回归算法来实现?——在我看来,仅靠回归算法是不能完成任务的,严谨点说是很难完成任务的,因为目标检测需要检测矩形框中物体的类别,而识别物体类别显然采用分类算法更合适。但是回归算法能很好的画出包围物体的矩形框,首先明确一点,我们绘制一个矩形框需要四个参数 ( x c e n t e r , y c e n t e r , h , w ) {\rm{(}}{{\rm{x}}_{center}},{y_{center}},h,w) (xcenter,ycenter,h,w) 即矩形框中心点坐标和矩形框的高和宽。显然,这四个参数值是任意的,是连续的数据,因此我们使用回归来进行预测。
下面来考虑实现目标检测的需求能否直接用分类算法来实现?——在我看来,这个是可以的,但是实现起来比较复杂。具体的我们可以采用滑动窗口来实现,参考下图:我们会使用一个个滑动窗口遍历下图,直至发现矩形框中框住物体,其实很明显,这种方式存在很大缺陷,即物体的大小和矩形框大小不一致,不能框住整个物体。有人可能想到,那我们采用不同尺寸的矩形框来遍历整个图像,这样就可以了,这个思路的确很棒,但是对于任意一幅图像,物体的大小千差万别,设置多少不同尺寸的矩形框合适呢,这很难确定,而且这样做的准确率也不高。因此仅使用分类算法来实现目标检测效果也不好。
既然单独使用分类和回归都不能很好的完成目标检测任务,我们应很自然的想到能否可以将二者结合使用从而达到更好的效果呢?答案是肯定的,在目标检测算法中,基本都采用了这种多任务的方式,即既采用分类又采用了回归。这里说说大体的思路,以RCNN为列,分类主要就用来检测矩形框中物体的类别,而回归往往用来对矩形框进行微调以使矩形框能更好的包裹物体,有关RCNN的介绍可以参考我的这篇博文。
如若文章对你有所帮助,那就
咻咻咻咻~~duang~~点个赞呗