目标检测 - 二阶段检测 - Faster-RCNN

2024-04-24 11:08
文章标签 目标 检测 阶段 faster rcnn

本文主要是介绍目标检测 - 二阶段检测 - Faster-RCNN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

部分内容参考:
1、https://blog.csdn.net/liuxiaoheng1992/article/details/81843363
2、mmdetection源码(下面简称为mmdet)

论文解读

模型结构

论文中的图
在这里插入图片描述
一个更详细的图
在这里插入图片描述

Faster-RCNN有两部分组成:RPN和Fast-RCNN。两者共享同一个backbone。具体来说,Faster-RCNN由以下几部分组成:
1、backbone(VGG,ResNet等)
2、neck(FPN,原版的faster没有,FPN出来之后后人才加上的)
3、rpn_head(RPNHead)
4、bbox_roi_extractor(SingleRoIExtractor > RoIAlign,RoIPool)
5、bbox_head(SharedFCBBoxHead)
上面是参考mmdet的config来分类的。backbonhe和neck无需多言,很常见的操作。下面讲以下剩下的三个部分。
rpn_head
在这里插入图片描述上图是论文中的图,conv feature map是backbone出来的,或者是neck出来的特征。在mmdet代码中,滑动窗用一个3x3的conv来实现,独立的分类和回归层分别用两个1x1的conv来实现。代码如下:

@HEADS.register_module
class RPNHead(AnchorHead):def __init__(self, in_channels, **kwargs):super(RPNHead, self).__init__(2, in_channels, **kwargs)def _init_layers(self):self.rpn_conv = nn.Conv2d(self.in_channels, self.feat_channels, 3, padding=1)  # in:256, out:256self.rpn_cls = nn.Conv2d(self.feat_channels,self.num_anchors * self.cls_out_channels, 1)# self.cls_out_channels = 2 前景和背景self.rpn_reg = nn.Conv2d(self.feat_channels, self.num_anchors * 4, 1)def init_weights(self):normal_init(self.rpn_conv, std=0.01)normal_init(self.rpn_cls, std=0.01)normal_init(self.rpn_reg, std=0.01)# 对单个feature map做操作,forward在AnchorHead中定义,将forward_single应用到feats上def forward_single(self, x):x = self.rpn_conv(x)x = F.relu(x, inplace=True)rpn_cls_score = self.rpn_cls(x)rpn_bbox_pred = self.rpn_reg(x)return rpn_cls_score, rpn_bbox_pred

rpn_head输出proposal的得分+框的位置信息。

bbox_roi_extractor
从名字就可以知道,bbox_roi_extractor是对bbox_roi进行特征提取的组件,faster-rcnn论文中用的是roi_pooling,mask-rcnn中用的是roi_align,R-FCN中的position-sensitive RoI pooling layer等。

训练
论文中的训练方式

论文中,给出了三种训练方式
1、交替训练
先训RPN,然后将RPN得到的proposal拿去训Fast-RCNN,接着Fast-RCNN微调后的网络去初始化RPN,然后训RPN,这个过程交替进行。(这里有一个疑问,是在每一个batch进行交替,还是训好RPN,再训Fast-RCNN这样进行,如果是每一个batch进行交替,那么可以保证proposal在batch内是不变的,如果是另一种,那么需要保证训好RPN之后,要把RPN冻住,才能保证proposal的稳定)
2、近似联合训练
RPN和Fast-RCNN当成一个整体,前向过程中,RPN生成的proposal当成是预先生成好去训练Fast-RCNN,反向传播过程,对于共享的卷积层,计算梯度的是RPN loss和Fast RCNN的losss相加,其他独立的部分就是各自的Loss。"approximate"体现在反向传播阶段RPN产生的置信误差能够获得梯度以更新参数,但是region proposals的坐标预测则直接把梯度舍弃了,也就是说box误差不参与loss的计算(和交替训练相比,这种方法的好处在于缩短训练时间)。
3、非近似联合训练
和近似联合训练相比,非近似联合训练,把RPN生成的proposal的loss也考虑进行梯度回归,通过“RoI warping” 层进行梯度反传???
四步训练法
第一步:imagenet初始化,训RPN,得到proposal
第二步:imagenet初始化,用RPN的proposal训Fast-RCNN
第三步:Fast-RCNN初始化共有卷积,训RPN(fix共有卷积)
第四步:fix共有卷积和RPN,训Fast-RCNN

mmdetection中的训练
RPN生成proposals->RCNN样本匹配(FPN)
# 超参
# 1. nms_pre: 进行nms之前的数目, 2. nms_post: nms之后的输出个数, 3. nms_thr: nms阈值
# 4. max_num: 单张图片最终输出proposals最多的个数, 5. nms_across_levels: 是否在跨levels进行nms操作mlvl_proposals = []
for stride in strides:# 1. 在多个strides下对模型预测值进行解码,获取预测框# 2. 做一些过滤的操作do clipremove smallnms # nms_pre和nms_post通常等于2000# 得到每个stride的proposals# 3. mlvl_proposals.append(proposals)
# 将各个strides的proposals给concat起来
if nms_across_levels:proposals, _ = nms(proposals, cfg.nms_thr)proposals = proposals[:cfg.max_num, :]
else:scores = proposals[:, 4]num = min(cfg.max_num, proposals.shape[0])_, topk_inds = scores.topk(num)proposals = proposals[topk_inds, :]
return proposals

这篇关于目标检测 - 二阶段检测 - Faster-RCNN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931584

相关文章

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

MySQL中的两阶段提交详解(2PC)

《MySQL中的两阶段提交详解(2PC)》:本文主要介绍MySQL中的两阶段提交(2PC),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言两阶段提交过程sync_binlog配置innodb_flush_log_at_trx_commit配置总结引言在Inn

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X