(二十)mmdetection源码解读:config配置文件models Faster R-CNN

一、配置文件models理解


model = dict(
    type='FasterRCNN',                         # model类型
    pretrained='modelzoo://resnet50',          # 预训练模型:imagenet-resnet50
   ####### resnet50
    backbone=dict(
        type='ResNet',                         # backbone类型
        depth=50,                              # 网络层数
        num_stages=4,                          # resnet的stage数量
        out_indices=(0, 1, 2, 3),              # 输出的stage的序号,//stride=(4, 8, 16, 32),channel=(256, 512, 1024, 2048)
        frozen_stages=1,                       #该参数表示你想冻结前几个 stages 的权重,ResNet 结构包括 stem+4 stage
#frozen_stages=-1,表示全部可学习
#frozen_stage=0,表示stem权重固定
#frozen_stages=1,表示 stem 和第一个 stage 权重固定
#frozen_stages=2,表示 stem 和前两个 stage 权重固定
        style='pytorch'),                      # 网络风格:如果设置pytorch,则stride为2的层是conv3x3的卷积层;如果设置caffe,则stride为2的层是第一个conv1x1的卷积层
  ####### FPN,原理参考后面原理图        
    neck=dict(
        type='FPN',                            # neck类型
        in_channels=[256, 512, 1024, 2048],    # 输入的各个stage的通道数
        out_channels=256,                      # 输出的每个特征层的通道数
        num_outs=5),                           # 输出的特征层的数量
        ######## rpn_head   经过RPN后,我们得到了Classification/Regression loss和Proposal Region,接下来要对得到的loss和
        ##proposals做后续处理,其中包括proposal的细分类和再回归,以及ROI Pooling等操作
 	#feat_size=[image_size/4,image_size/ 8,image_size/ 16, image_size/32, image_size/64]
 	anchor_size=[32, 64,128, 256,512] 不同宽高比,面积相同,每个特征图生成对应三个anchor,五个特征图也就是生成15个anchor
    rpn_head=dict(
        type='RPNHead',                        # RPN网络类型
        in_channels=256,                       # RPN网络的输入通道数
        feat_channels=256,                     # 特征层的通道数
        anchor_scales=[8],                     # 生成的anchor的baselen,baselen = sqrt(w*h),w和h为anchor的宽和高
        anchor_ratios=[0.5, 1.0, 2.0],         # anchor的宽高比
        anchor_strides=[4, 8, 16, 32, 64],     # 在每个特征层上的anchor的步长(对应于原图)
        target_means=[.0, .0, .0, .0],         # 均值
        target_stds=[1.0, 1.0, 1.0, 1.0],      # 方差
        use_sigmoid_cls=True),                 # 是否使用sigmoid来进行分类,如果False则使用softmax来分类

#### roi_head主要做了以下几件事:
######1、对rpn得到的proposals做了随机筛选,保证正样本和负样本比例一定(默认1:3),并且总数量一定(默认512)
######2、通过roi_align对feature map做剪裁,得到固定尺寸的feature
######3、roi_align得到的feature经过全连接层得到分类和回归结果
######4、对分类和回归结果进行后处理,包括:box_decode,过滤分类置信度过小或者box size过小的结果,并进行nms

       ######## bbox_roi_extractor      
    bbox_roi_extractor=dict(
        type='SingleRoIExtractor',                                   # RoIExtractor类型
        roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2),   # ROI具体参数:ROI类型为ROIalign,输出尺寸为7,sample数为2
        out_channels=256,                                            # 输出通道数
        featmap_strides=[4, 8, 16, 32]),                             # 特征图的步长
        ######## bbox_head     
    bbox_head=dict(
        type='SharedFCBBoxHead',                     # 全连接层类型
        num_fcs=2,                                   # 全连接层数量
        in_channels=256,                             # 输入通道数
        fc_out_channels=1024,                        # 输出通道数
        roi_feat_size=7,                             # ROI特征层尺寸
        num_classes=81,                              # 分类器的类别数量+1,+1是因为多了一个背景的类别,2.0之后不需要+1
        target_means=[0., 0., 0., 0.],               # 均值
        target_stds=[0.1, 0.1, 0.2, 0.2],            # 方差
        reg_class_agnostic=False))                   # 是否采用class_agnostic的方式来预测,class_agnostic表示输出bbox时只考虑其是否为前景,后续分类的时候再根据该bbox在网络中的类别得分来分类,也就是说一个框可以对应多个类别

二、模型算法FasterRCNN介绍

resnet50 示意图----图片来源知乎作者臭咸鱼
图中的stage0对应stem,stage1,stage2,stage3,stage4,对应out_indices=(0, 1, 2, 3)
FPN示意图----图片来源知乎作者Hans
ResNet用每级最后一个Residual Block的输出,记为{C1,C2,C3,C4,C5}。FPN用2~5级参与预测(因为第一级的语义还是太低了),{C2,C3,C4,C5}表示conv2,conv3,conv4和conv5的输出层(最后一个残差block层)作为FPN的特征,分别对应于输入图片的下采样倍数为{4,8,16,32}。
Faster R-CNN整体框架结构 -----图片来源bilibili作者 深蓝学院
Extrator进行特征提取、RPN 生成候选框、RoIHead对候选框进行分类并调整目标预测框的位置与大小。

RPN是一个设计出来专门生成候选区域的网络,这个网络的输入是特征图,输出是一堆候选区域

RoI Pooling 与 RoI Align 的区别:https://zhuanlan.zhihu.com/p/161540817
RoI Pooling, 对于具有不同特征大小的的输入区域, 都可以得到相同大小输出特征。
每一次量化操作都会对应着轻微的区域特征错位(misaligned), 这些量化操作在RoI和提取到的特征之间引入了偏差。这些量化可能不会影响对分类任务,但它对预测像素精度掩模有很大的负面影响。
RoI Align, 对于具有不同特征大小的的输入区域, 都可以得到相同大小输出特征。
将量化RoI 特征进一步细分为量化的空间单元(bin)

backbone–resnet50:提取特征
neck–FPN:多尺度特征
RPN: 网络比较简单,就一个卷积进行特征通道变换,加上两个输出分支即可,生成候选框,前景和背景二分类,候选框粗回归。
ROIhead:目标具体分类,候选框精确回归,主要做了以下几件事
1、对rpn得到的proposals做了随机筛选,保证正样本和负样本比例一定(默认1:3),并且总数量一定(默认512)
2、proposal经过筛选后,需要进行ROIAlign操作,因为输入到roi head模块中的特征是完整尺寸的feature map,需要根据proposals的尺寸在对应的feature map中剪裁出相应的特征,这也就是ROIPooling和ROIAlign要完成的事情,通过roi_align对feature map做剪裁,得到固定尺寸的feature
3、roi_align得到的feature经过全连接层得到分类和回归结果
4、对分类和回归结果进行后处理,包括:box_decode,过滤分类置信度过小或者box size过小的结果,并进行nms
算法FasterRCNN简介:
https://zhuanlan.zhihu.com/p/422456194
https://zhuanlan.zhihu.com/p/31426458
https://www.bilibili.com/read/cv9043728/
https://blog.csdn.net/watermelon1123/article/details/99942646

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值