RCNN目标检测算法内容详解(依托论文讲解)

简介: RCNN目标检测算法内容详解(依托论文讲解)

作为目标检测的开山鼻祖,对于RCNN的学习一定是有里程碑的意义的,RCNN的横空出世让我们对神经网络有了更深的认识,在CNN识别盛行的年代开创了先河,因此了解RCNN对于我们学习目标检测算法有非常重大的意义。


image.png


我在学习目标检测算法的时候,发现有些概念总是模糊不清,因为我是直接学习yolo系列的,但是学了好几遍总感觉差点什么,对于一些大佬给我的建议是要重头撸一遍目标检测算法,RCNN作为目标检测的第一个算法,他的出现影响了后续一大堆目标检测算法,因此我打算从RCNN开始将经典的目标检测算法都学习一下,同时也会写下随笔博客,对于文中不对的地方欢迎大家批评指正。


这里有个很有意思的论文翻译,对于阅读英文论文有困难的同学,可以看一下


R-CNN论文详解(论文翻译)_目标检测_v1_vivian-DevPress官方社区


RCNN算法结构:

RCNN算法总的分为如下四步:如下图所示


image.png


1、使用Selective Search(选择性搜索)算法,将图片生成1K-2K个Region propsals:

可以理解成就是根据SS算法的方法将图片分成2000个可能含有目标的候选框


2、对于每个生成的Region propsals,使用深度网络提取feature:

       我们将图像切割成了2000个区域,那就相当于产生了2000个小图片,然后我们将这2000个小图片打入神经网络进行训练,就是所谓的用CNN提取这2000个小图片的特征。


       RCNN这里使用的CNN神经网络是Alexnet神经网络,然而这里出现了一个问题就是Alexnet网络的输入均为277*277大小的图片,但是我们切割的2000个候选区域不一定是刚好符合这个大小的,因此作者在这里对着2000个图片进行了resize,即将所有的候选区域小图片均调整为了277*277,然后再在候选区域周围加上了16的padding,再进行异性缩放,作者在文中指出这种方法使得RCNN的mAp提高了3到5个百分点。


      另外在这里需要解释一下,我们使用的Alexnet卷积神经网络是迁移学习过的,因为如果从头开始训练一个网络的话,数据量太小效果会很差,因此我们使用迁移学习的方法训练我们的网络。


3、将feature送入每一类对应的SVM支持向量机:

    如果bounding box 没包含到车辆部分叫正样本;如果bounding box 没有包含到车辆的某部分,我们称它为负样本。接触过目标检测的同学们都知道,正负样本的区分是需要阈值划分的,划分的基础是IOU(IOU不知道是啥的自行百度),作者测试了IoU阈值的多个值, 0.1, 0.2, 0.3, 0.4, 0.5 。最后通过测试发现,IOU阈值为0.3效果最好(选择为0精度下降了4个百分点,选择0.5精度下降了5个百分点),即当重叠度小于0.3的时候,我们就把它标注为负样本。



    到这里我们的RCNN已经在经过Alexnet神经网络之后提取到了我们想要的特征,因为作者在Alexnet最后一层中去掉了全连接层,因此我们这个特征即为2000*4096-D的向量(D为物体的种类+背景),然后我们将这D类的特征向量送入D个SVM进行训练,(这里解释一下,因为SVM只能做二分类,因此我们需要建立D个SVM分类器对特征向量进行打分),注意这个打分很重要,这D个SVM的打分又会组成一个新的特征向量,同时SVM训练过程是将打分和真实的label进行比较,计算出loss然后再对SVM进行反复训练。


    另外在这里需要解释一下,RCNN在这里用到了一个比较特别的算法叫做hard negative mining方法(因为刚开始训练的时候,很多情况下负样本远远高于正样本,这样会导致训练的优化过程很慢,hard negative mining算法是将经过一轮训练后得分最高,即最容易被误判的负样本加入新的样本训练集,进行再次训练,重复上述步骤,直到算法收敛)。hard negative mining方法的作用就是去掉负样本中对优化作用影响很小的负样本,保留最接近阈值(最接近正样本容易分辨错误的负样本)。


4、最后使用回归算法对候选框进行微调,然后进行NMS(非极大值抑制选出最合适的候选框):

image.png


Selective search算法会生成1K~2K的候选区域,这些候选区域存在这种那种的问题,因此我们需要在最后一步对候选框进行微调。在RCNN中,作者使用线性回归器对候选框位置进行微调,得到更加准确的候选框。训练样本:判定为本类的候选框中和真值重叠面积大于0.6 的候选框。


NMS(非极大值抑制的过程)首先我们需要先计算出每一个bounding box的面积,然后根据它的score进行排序,把score最大的bounding box作为我们选定的框,然后计算其余bounding box与我们上述最大score与box的IoU,删除IoU大于设定的阈值的bounding box。反复进行上述过程,直至所有bounding box用完,然后再删除score小于一定阈值的选定框。


这就是RCNN的全部过程了,后续会更新其他系列的RCNN的文章,欢迎关注


相关文章
|
9天前
|
监控 算法 自动驾驶
目标检测算法:从理论到实践的深度探索
【7月更文第18天】目标检测,作为计算机视觉领域的核心任务之一,旨在识别图像或视频中特定对象的位置及其类别。这一技术在自动驾驶、视频监控、医疗影像分析等多个领域发挥着至关重要的作用。本文将深入浅出地介绍目标检测的基本概念、主流算法,并通过一个实际的代码示例,带您领略YOLOv5这一高效目标检测模型的魅力。
52 11
|
4天前
|
机器学习/深度学习 人工智能 监控
人工智能 - 目标检测算法详解及实战
目标检测需识别目标类别与位置,核心挑战为复杂背景下的多目标精准快速检测。算法分两步:目标提取(滑动窗口或区域提议)和分类(常用CNN)。IoU衡量预测与真实框重叠度,越接近1,检测越准。主流算法包括R-CNN系列(R-CNN, Fast R-CNN, Faster R-CNN),YOLO系列,SSD,各具特色,如Faster R-CNN高效候选区生成与检测,YOLO适用于实时应用。应用场景丰富,如自动驾驶行人车辆检测,安防监控,智能零售商品识别等。实现涉及数据准备、模型训练(示例YOLOv3)、评估(Precision, Recall, mAP)及测试。
28 4
|
13天前
|
机器学习/深度学习 人工智能 算法
计算机视觉:目标检测算法综述
【7月更文挑战第13天】目标检测作为计算机视觉领域的重要研究方向,近年来在深度学习技术的推动下取得了显著进展。然而,面对复杂多变的实际应用场景,仍需不断研究和探索更加高效、鲁棒的目标检测算法。随着技术的不断发展和应用场景的不断拓展,相信目标检测算法将在更多领域发挥重要作用。
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
|
16天前
|
机器学习/深度学习 数据采集 算法
Python实现Prophet时间序列数据建模与异常值检测(Prophet算法)项目实战
Python实现Prophet时间序列数据建模与异常值检测(Prophet算法)项目实战
|
16天前
|
机器学习/深度学习 算法 计算机视觉
|
22天前
|
机器学习/深度学习 人工智能 文字识别
一种基于YOLOv8改进的高精度红外小目标检测算法 (原创自研)
【7月更文挑战第2天】 💡💡💡创新点: 1)SPD-Conv特别是在处理低分辨率图像和小物体等更困难的任务时优势明显; 2)引入Wasserstein Distance Loss提升小目标检测能力; 3)YOLOv8中的Conv用cvpr2024中的DynamicConv代替;
95 3
|
18天前
|
机器学习/深度学习 运维 算法
Python基于局部离群因子LOF算法(LocalOutlierFactor)实现信用卡数据异常值检测项目实战
Python基于局部离群因子LOF算法(LocalOutlierFactor)实现信用卡数据异常值检测项目实战
|
18天前
|
机器学习/深度学习 数据采集 运维
Python基于孤立森林算法(IsolationForest)实现数据异常值检测项目实战
Python基于孤立森林算法(IsolationForest)实现数据异常值检测项目实战
|
9天前
|
传感器 算法
基于无线传感器网络的MCKP-MMF算法matlab仿真
MCKP-MMF算法是一种启发式流量估计方法,用于寻找无线传感器网络的局部最优解。它从最小配置开始,逐步优化部分解,调整访问点的状态。算法处理访问点的动态影响半径,根据带宽需求调整,以避免拥塞。在MATLAB 2022a中进行了仿真,显示了访问点半径请求变化和代价函数随时间的演变。算法分两阶段:慢启动阶段识别瓶颈并重设半径,随后进入周期性调整阶段,追求最大最小公平性。
基于无线传感器网络的MCKP-MMF算法matlab仿真

热门文章

最新文章