目标检测-RCNN的理解

目前在学习计算机视觉中的目标检测内容,了解到很多有关算法,如RCNN、FastRCNN、FasterRCNN、MaskRCNN、SSD、YOLO,在学习RCNN之前,已经对YOLO算法的设计思想有了大致的理解,并使用YOLOV5算法来实现相关有趣的项目。

对于RCNN,它是首先将CNN引入目标检测的,对于数据集的选择是PASCAL VOC 2007,人为标注每个图片中的物体类别和位置,一共有20类,再加上背景类别,一共21类,如:

RCNN主要有4个步骤:

1、候选区域的生成:输入进去一张图片,使用Selective Search方法,将一张图片中生成2000个候选区域。

2、特征提取:生成的候选区域大小不一样,那就全都resize到一样的大小,比如64*64的,将这些候选区域送到CNN网络中提取特征,得到一系列的特征向量。

3、类别判断:提取特征后,然后将这些特征送入20个SVM分类器中,注意SVM分类器只能做二分类,比如说这个候选区域中有物体,经过卷积之后,送到SVM,然后说这个物体是人的概率多大不是人概率多大。

4、NMS:不是有2000个候选区域嘛,也就是说可能一个物体就会有很多个候选框框住它,那就不行了,会重复,这时候就会用到非极大值抑制来抑制掉很多框,保证一个物体一个框,假如有很多框框住人这个物体,那就选择候选框与真实框具有最大IOU的那个框,然后让其他框来和这个框做IOU,设置一个阈值,比如0.5,如果其他框和这个候选框的IOU大于0.5,那就剔除这个其他框,说明这个其他框和我的最大候选框重复识别了一个物体,然后重复这样做,就剔除了很多重复框。具体可以看看关于NMS的讲解。

5、修改候选框的位置:使用回归的方法,来对候选框的位置调一调,如下图,红色框是候选框,绿色是真实的,根据真实框的位置和候选框的位置做回归来调整候选框位置。

对于上述步骤,论文有一张图:

对于损失函数:
rcnn生成的2000个候选框每一个都与真实框做iou,大于某个阈值就被认为正样本,反之为负样本,正样本与真实的框做分类交叉熵损失和边框的回归,负样本只计算交叉熵损失

比如说一张图片有猫和狗,猫在左边,狗在右边,生成的2000个候选框,其中有10个落在了猫的身上,框的还不错,iou也大于设置的阈值,说明这10个对于猫来说就是正样本,但对于狗来说,因为狗在右边,肯定碰不到狗,所以这10个对于狗来说就是负样本,那这10个计算与猫的概率损失,还计算真实猫框的回归损失,然后加权求和,但是对于狗来说,框住狗的真实框和这10个候选框就不计算回归,只计算预测概率的损失

剩下的1900个候选区域肯定还有框住背景的,也有框住狗的,框住背景的话,那和真实标注的猫和狗的框也是只计算分类的损失,不计算边框回归的损失,因为计算边框回归就是为了反向传播让预测的边框更好与真实框相近而已。本来预测阈值就达不到狗,就不能预测狗,你不可能还把这个框尽可能靠近狗的真实框吧

 

总结:根据上面步骤,会发现RCNN会很慢,因为一张图片就会生成2000个候选区域,然后送给CNN又提取,然后给SVM对每一个候选框再做分类,那要是大量图片的话就非常费劲了。。。分类器和回归器的训练是相互独立的

这是我对RCNN简单的理解,有错误的话请指正,后续深入学习后发现错误也会及时修改。

具体更细的话可以参考一篇博主文章:RCNN- 将CNN引入目标检测的开山之作 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值