• Faster R-CNN pytorch版


    Faster R-CNN

    Faster R-CNN是在R-CNN,Fast R-CNN的基础上改进得来的。在训练速度和预测精度等方面有显著提高,实现端到端的目标检测。R-CNN,Fast R-CNN是Faster-RCNN发展进化的基石,回顾R-CNN,Fast R-CNN有助于更好地理解Faster R-CNN。

    1 R-CNN,Fast R-CNN,Faster R-CNN检测流程

    (1)R-CNN检测流程

    检测流程:
    '''
    1. input: img
    2. 生成region proposals : 用select research法,在输入图像上生成2K个候选区域。
    3. 提取候选区域:找出图像上的候选区域,并缩放到227x227。
    4. 生成特征:上一步的结果输入CNN模型中提取特征。
    5. 分类:特征输入SVM分类器,得到物体类别。
    6. 回归:通过回归精修候选框。
    '''
    
    缺点:
    '''
    1. select research法提取候选框费时。
    2. 一张图片2K个候选框,用CNN提取特征时,大量重复计算。
    3. 特征提取、分类、边框回归分别进行,分别训练、测试,效率低下。
    '''
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    (2)Fast R-CNN检测流程
    针对R C-NN的问题,Fast R-CNN有所改进,主要体现在把建议框映射到特征图上,再把特征图统一尺寸,这样就大大减少了重复计算,但是还是两步骤检测。

    检测流程:
    '''
    1. input: img
    2. 生成region proposals : 用select research法,在输入图像上生成2K个候选区域。
    3.生成特征:图片输入CNN模型中提取特征。
    4. 筛选特征:把候选区域映射到特征层,通过RoIPooling统一候选区域的尺寸。
    5.分类和回归:对上一步提取的特征进行分类和回归。
    
    '''
    缺点:
    '''
    1. select research法耗时
    '''
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    (3)Faster-RCNN检测流程

    检测流程:
    '''
    1. 提取特征:backbone提取特征。
    2. RPN生成建议框:backbone提取的特征输入RPN网络,RPN网络再提取特征后,进行分类和回归,判断特征图上是否有框,对存在框的数据根据先验框修正后得到新的建议框。把建议框对应图片的区域选出来,通过池化统一尺寸,作为下面网络的先验框。
    3. cls+reg: 根据上一步得到的先验框提取特征后,进行分类和回归。
    '''
    优点:
    '''
    1. RPN代替select research法生成建议框。
    2. 实现端到端的检测。
    3. Faster R-CNN 确定了锚框检测流程。
    4. 相比于R C-NN和Fast R-CNN,计算量大大减少。
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2 Faster R-CNN网络结构

    Faster R-CNN网络结构的网络结构主要分为:backbone、 RPN、cls+reg。下面依次分析各个部分的工作流程。

    (1)backbone
    Faster R-CNN可以选用多种流行的backbone提取特征,以ResNet50为例。ResNet50有Conv Block和Identity Block,具体细节可以参考之前的博文。ResNet50对输入图片进行5次下采样,Faster R-CNN使用第四次下采样的特征feature[38,38,1024],第五次下采样的特征应用在分类和回归中。

    ResNet50网络结构
    '''
    ResNet50:
        input [600,600,3]
        Zeropad
        Conv2d(s=2)  + BatchNorm + ReLU + MaxPool(s=2)  [300,300,64] --> [150,150,64]
        Conv Block + Identity Block*2(s=1)  [150,150,256]
        Conv Block + Identity Block*3(s=2)  [75,75,512]
        Conv Block + Identity Block*5(s=2)  [38,38,1024]
        Conv Block + Identity Block*2(s=2) 
        AveragePooling2D
        Flatten
        output
    
    '''
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    (2)RPN

    '''
    1. backbone 中第四次下采样的特征[b,38,38,1024]先经过卷积conv(3*3),输出结果分别进行conv(1*1)得到[b,38,38,18]、[b,38,38,36]。
    2. 根据分类置信度选出可信的框,对框解码得到新的框,作为下一个网络的先验框,根据框在特征上截取后resize到14x14x1024。
    
    features --> conv(3*3) -->output
    output--> conv(1*1) --> o1 [b,38,38,18]
    output--> conv(1*1) --> o2 [b,38,38,36]
    
    '''
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (3)cls+reg

    
    '''
    1. 上一步截取的特征进行一次下采样,然后平均池化、Falatten、最后进行分类和回归。
    
     features --> COnvBlock --> AveragePooling --> cls(CrossEntropy)+reg(SmoothL1)
    '''
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3 训练流程

    '''
    1. 导入model_rpn, model_classifier,model_all及参数。
    2. 生成标签。找到与真实框匹配的先验框,对真实框编码,生成预测框偏移及标记类别。
    3. 计算回归损失和类别损失。
    4. 数据前向传播,得到PRN 网络的预测结果,对预测结果解码,根据预测框和真实框的IoU筛选新的框。
    5. RPN 筛选的框输入classifier网络,得到预测框和物体类别,梯度反向传播,更新参数。
    
    '''
    
    (1)生成标签
    
    (2)损失函数
    
    (3)预测结果筛选
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4 预测流程

    '''
    1.图片处理。把图片放缩到最短边为600,图片原始宽高比例不变;图片归一化。
    2.RPN得到预测得到置信度和预测偏移值。将预测结果进行解码--> nms筛选得到建议框。
    3. 分批次把建议框传入classifier。筛选出其中得分高于confidence的框,得到预测结果。
    4. 画框
    
    '''
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    「iOS」暑假第一周 —— ZARA的仿写
    教你轻松解决win系统ucrtbased.dll丢失的问题,亲测有效!
    调整运行框程序颜色
    Linux下运行Java Jar程序
    C#(二) C#高级进阶
    论文阅读--Energy efficiency in heterogeneous wireless access networks
    CDR插件开发之Application(应用程序)
    C++初阶:stack和queue使用及模拟实现
    SpringMVC面试中常问到的23道题以及答案
    构建企业级DNS系统(十)搭建Docker容器bind
  • 原文地址:https://blog.csdn.net/qq_35732321/article/details/126622653