目标检测-Faster RCNN论文总结(RPN)

Faster R-CNN是Ross Girshick提出的高效目标检测模型,它通过区域建议网络(RPN)取代传统Selective Search,显著提升了检测速度。RPN包括特征提取、RPN分类、Proposal Layer和ROI Pooling四个关键步骤,其中RPN分类确定前景和背景,bounding box regression获取目标大致位置。经过训练和ROI Pooling,模型能精确检测目标。
摘要由CSDN通过智能技术生成
个人微信公众号:AI研习图书馆,欢迎关注~

深度学习知识及资源分享,学习交流,共同进步~

1. 引言

Faster R-CNN是大神Ross Girshick 2015年提出的一个很经典的检测结构,它将传统的Selective Search提取目标的方法替换成网络训练来实现,使得全流程的检测、分类速度大幅提升。

图1是Faster R-CNN的基本结构,由以下4个部分构成:
在这里插入图片描述
1、特征提取部分:用一串卷积+pooling从原图中提取出feature map;

2、RPN部分:这部分是Faster R-CNN全新提出的结构,作用是通过网络训练的方式从feature map中获取目标的大致位置;

3、Proposal Layer部分:利用RPN获得的大致位置,继续训练,获得更精确的位置;

4、ROI Pooling部分:利用前面获取到的精确位置,从feature map中抠出要用于分类的目标,并pooling成固定长度的数据;

2. 特征提取部分

特征提取部分是输入图片和feature map间的那一串卷积+pooling,这部分和普通的CNN网络中特征提取结构没有区别,可以用VGG、ResNet、Inception等各种常见的结构实现(只使用全连接层之前的部分),这部分不再详述。

3. RPN部分

目标识别有两个过程:首先你要知道目标在哪里,要从图片中找出要识别的前景,然后才是拿前景去分类。

在Faster R-CNN提出之前常用的提取前景(本文称为提取proposal)的方法是Selective Search,简称SS法,通过比较相邻区域的相似度来把相似的区域合并到一起,反复这个过程,最终就得到目标区域,这种方法相当耗时以至于提取proposal的过程比分类的过程还要慢,完全达不到实时的目的。

到了Faster R-CNN时,作者就想出把提取proposal的过程也通过网络训练来完成,部分网络还可以和分类过程共用,新的方法称为Reginal Proposal Network(RPN),速度大大提升。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Keras中实现Faster R-CNN旋转目标检测算法可以按以下步骤进行: 1. 数据预处理:将训练数据转换为网络需要的格式,包括图片大小的调整、数据增强等等。 2. 构建模型:搭建Faster R-CNN网络模型,包括特征提取层、RPN层、ROI Pooling层、分类和回归层等。 3. 编译模型:设置模型的优化器、损失函数等参数。 4. 训练模型:对构建好的模型进行训练,并保存训练好的权重。 5. 模型评估:使用测试数据对训练好的模型进行评估,计算模型的精度、召回率等指标。 以下是一个基于Keras实现Faster R-CNN旋转目标检测算法的示例代码: ``` # 数据预处理 # TODO: 数据预处理代码 # 构建模型 input_shape = (None, None, 3) img_input = Input(shape=input_shape) shared_layers = nn.nn_base(img_input, trainable=True) # RPN网络 num_anchors = len(config.RPN_ANCHOR_RATIOS) * len(config.ANGLE_BINS) rpn = nn.rpn(shared_layers, num_anchors) # ROI Pooling层 roi_input = Input(shape=(config.TRAIN_ROIS_PER_IMAGE, 5)) roi_pooling = PyramidROIAlign([config.POOL_SIZE, config.POOL_SIZE], name="roi_align")([shared_layers, roi_input]) # 分类和回归层 x = TimeDistributed(Flatten(name='flatten'))(roi_pooling) x = TimeDistributed(Dense(4096, activation='relu', name='fc1'))(x) x = TimeDistributed(Dropout(0.5))(x) x = TimeDistributed(Dense(4096, activation='relu', name='fc2'))(x) x = TimeDistributed(Dropout(0.5))(x) # 分类和回归输出 cls_output = TimeDistributed(Dense(config.NUM_CLASSES, activation='softmax', kernel_initializer='zero'), name='dense_class_{}'.format(config.NUM_CLASSES))(x) angle_output = TimeDistributed(Dense(num_anchors * config.NUM_ANGLES, activation='linear', kernel_initializer='zero'), name='dense_angle_{}'.format(num_anchors * config.NUM_ANGLES))(x) bbox_output = TimeDistributed(Dense(num_anchors * 4, activation='linear', kernel_initializer='zero'), name='dense_regress_{}'.format(4))(x) # 编译模型 model = Model([img_input, roi_input], [cls_output, angle_output, bbox_output]) model.compile(optimizer=Adam(lr=config.LEARNING_RATE), loss=[losses.class_loss(), losses.angle_loss(), losses.rpn_regress_loss(config.NUM_ANCHORS)]) # 训练模型 # TODO: 训练模型代码 # 模型评估 # TODO: 模型评估代码 ``` 需要注意的是,在实现旋转目标检测时,需要对RoI Pooling和NMS等部分进行修改,以支持旋转矩形的处理。具体实现可以参考上述项目中的代码和论文《R2CNN: Rotational Region CNN for Orientation Robust Scene Text Detection》。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI研习图书馆

您的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值