目标检测算法(R-CNN,SPPNet,Fast-R-CNN,Faster-R-CNN,YOLO,SSD)

本文围绕目标检测展开,先介绍项目演示与安排,包含数据采集、深度模型、部署及用户层架构。接着阐述多种目标检测算法原理,如R - CNN、SPPNet、Fast R - CNN、Faster - R - CNN、YOLO、SSD等,分析其训练、测试过程及优缺点。最后对目标检测算法进行总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.目标检测概述

1.1 项目演示介绍

  • 项目架构
    • 数据采集层:数据标注,数据存储格式.
    • 深度模型层:数据预处理,模型多GPU训练,得到模型.
      • Tensorflow serving进行部署+web后台.
    • 用户层:网页,小程序获取识别结果.
      在这里插入图片描述

1.2 项目安排

在这里插入图片描述

2. 目标检测算法原理

2.1 基础知识

  • 目标识别:分类,输出目标类别,图(a)
  • 目标检测:定位目标,输出目标类别与位置,图(b)
  • 目标分割:像素级对前景与背景进行分类,把物体形状描述出来,将背景剔除,图©和图(d)
    在这里插入图片描述
  • 两步走:区域推荐 + 分类
  • 端到端: 一个网络,输出类别

当图片只有一个物体的时候:分类 + 定位

  • 分类:准确率
  • 定位:IOU
  • 目标的位置框:Bounding box
    • Ground-truth bounding box:图片当中真实标记的框
    • Predicted bounding box:预测的时候标记的框
  • IOU:交并比
    -两个区域的重叠程度ovrtlap:候选区域和标定区域的IOU值 = 重合的面积/两个框所有的面积
    在这里插入图片描述
    • 解决思路:
      • 让网络中多出一个全连接层
      • 1层输出概率值
      • 2层输出四个位置坐标(回归算法输出)
      • 预测:300,200,100,200 真实值:310, 200, 130, 200

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多种物体:目标检测

  • 图片中假设存在多个物体的时候,网络输出不确定,全连接层输出的坐标?个

解决思路之一:

  • 滑动窗口:K个滑动窗口,M个子图,K*M个图
  • 对没一个子图进行分类回归

2.2 Overfeat模型

这种方法类似以一种暴力穷举的方式,会消耗大量计算力量,并且由于窗口大小问题可能会造成效果不准确,但提供了一种解决目标检测的思路.(M和K不定)

2.3 目标检测-R-CNN模型

2.3.1 R-CNN训练过程

步骤(以AlexNet网络为基准):

  • 1.找出图片中可能存在的目标候选区域region proposal.

    • 通过选择性搜索(SelectiveSearch,SS)算法,进行筛选
    • 打消统一:通过Crop+ Warp

    在这里插入图片描述

  • 2.进行图片大小调整, 为了适应AlexNet的网络输入图像大小227227,通过CNN对后选区域提取特征向量,2000个建议框的CNN特征组合成20004096维矩阵.

    • AlexNet结构,输入要求277*277
    • 提取出的特征会保存到磁盘中
    • [2000, 4096]
  • 3.将20004096维特征与20个SVM组成的权值矩阵409620相乘(20种分类,SVM是二分类器,则有20个SVM),获得2000*20维矩阵.

    • 20代表目标检测数据集,一共需要检测20种类别
    • 得出2000*20的得分矩阵,打分

在这里插入图片描述

  • 4.分别对2000*20维矩阵中每一列即每一类进行非极大值抑制(NMS:non-maximum suppression)剔除重叠建议框,得到该列即该类中得分最高的建议框
    以5个候选框为例:
    在这里插入图片描述
    在这里插入图片描述
  • 5.修正bbox,对bbox做回归预测
    • 通过线性回归,特征值是候选区域,目标值是对应的GT
    • 建立回归方程学习参数
      在这里插入图片描述
      R-CNN的训练过程
  • 过程包括:正负样本准备+预训练+微调网络+训练SVM+训练边框回归器
    • 正负样本准备在这里插入图片描述
    • 预训练:
      • 别人已经在大数据集上训练好的CNN网络参数
    • 微调:
      • 利用标记好的样本,输入到model1当中,继续训练得出model2(CNN网络),有教迁移学习.
      • SVM分类器: 每个类别训练一个分类器
        • 特征M4096,一个SVM,409620个权重
          • 正负样本标记结果(100个猫,900非猫)
          • 总共得到4096*20的SVM权重
    • 回归训练:
      • 筛选候选框,只对那些跟ground truth的IoU超过某个阈值且IoU最大的region proposal回归
      • 训练得到回归的参数

2.3.2 R-CNN测试过程

在这里插入图片描述

2.3.3 R-CNN的缺点

  • 1.训练网络阶段多:步骤繁琐:微调网络+训练SVM+训练边框回归器
  • 2.训练耗时:占用磁盘空间空间大:5000张图像产生几百G的特征文件.
  • 3.处理速度慢:使用GPU,VGG16模型处理一张图像需要47s.
  • 4.图像形状变化:候选区域要经过crop/warp进行固定大小,无法保证图片不变形

2.4 SPPNet

SPPNet存在两点改进的地方:

  • 通过影射,减少卷积计算
  • 防止变形,提出spp层

在这里插入图片描述

2.4.1 映射

原始图片经过CNN变成了feature map,原始图片通过选择性搜索(SS)得到了候选区域,现在需要将基于原始图片的候选区域映射到feature map中的特征向量,映射过程参考如下:

  • 将候选区域影射到特征图当中,得出每个候选区域的特征向量.
    在这里插入图片描述
  • 公式:
    • 左上角的点: x’ = [x/S] + 1
    • 右下角的点: x’ = [x/S] - 1
    • 其中S是CNN中所有strides的乘积,包含了池化,卷积的strides.

2.4.2 spatial pyramid pooling

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 对于M个候选区域,每个都要经过SPP层变换
  • 把每个候选区域进行分块
    • 44, 22, 1*1
  • 输出:每个候选区域的特征向量都为21*256(不同网络卷积输出通道数不一定一样)
  • 长度固定,特征向量有了

2.4.3 SPPNet优缺点

  • 优点
    SPPNet在R-CNN基础上提出了改进,通过候选区域和feature map的映射,配合SPP层的使用,从而达到了CNN层的共享计算,减少了运算时间,后面的Fast-R-CNN也是受到了SPPNet的启发.
  • 缺点
    训练依然过慢,效率低,需要写入磁盘(因为SVM)的存在
    分阶段训练网路:选取候选区域,训练CNN,训练SVM,训练bbox回归器,SPP-Net在fine-tuning截断无法使用反向传播微调SPP-Net前面的Conv层.

2.5 Fast R-CNN

学习目标:

  • 了解Fast R-CNN的结构特点
  • 说明Rol pooling的特点
  • 了解多任务损失

在这里插入图片描述

  • 提出一个RoI pooling,然后整合整个模型,把CNN,SSP变换层,分类器,bbox回归及格模块一起训练.

2.5.1 RoI pooling

  • 目的
    减少计算时间,得出固定长度的向量
  • 原来SPP是:金子塔形44, 22,11 改成了单个块KM
  • 问题:K和M过小,全连接层要求输入比较大
    • 66,但是FC要求77,进行动态分割,长6/7,宽6/7
  • 相比SPPNet采取的方式
    • 设计到single scale与nulti scale两者的优缺点
    • 速度与精度的权衡,选择了single scale

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.5.1 多任务损失 -Mlulti-task loss

在这里插入图片描述

2.5.2 R-CNN,SPPNet,Fast-R-CNN对比

在这里插入图片描述
在这里插入图片描述

2.6 Faster-R-CNN

Faster-R-CNN论文
在这里插入图片描述

Faster R-CNN=Fast R-CNN+RPN,其中Fast R-CNN结构不变;RPN负责生成proposals,配合最后一层的feature map,使用ROI Pooling,生成fixed length的feature vector。在这里插入图片描述

2.6.1 RPN原理

我们详细讨论一下RPN的操作过程 :
在这里插入图片描述
        图片说明,红框只是一个滑窗的操作过程,注意这里的anchor是原图像像素空间,而不是feature map上的。这样anchor是RPN的核心:
        假设我们现在得到的feature map为W * H * C(13 * 13 * 256就是feature map的width=13,height=13,channel=256),我们如何产生网络需要的proposals呢?我们在feature map使用滑动窗口的操作方式(stride=1,padding=1),当前滑窗的中心在原像素空间的映射点称为anchor,以此anchor为中心,生成k(paper中default k=9, 3 scales and 3 aspect ratios)个proposals。
        在此feature map滑动一个mini-network,这个network输入是3 * 3 * 256,经过3 * 3 * 256 * 256的卷积,得到1 * 1 * 256的低维向量;接下来进行分类:①Classification:经过1 * 1 * 256 * 18的卷积核,得到1 * 1 * 18的feature vector,分别代表9个proposals的是/不是Object的概率(这里有一个疑惑,为什么要生成一对?生成一个是Object的概率不就好了?也许是为了设计方便?);②Regression:经过1 * 1 * 256 * 36的卷积核,得到1 * 1 * 36的feature vector,分别代表9个proposals的(center_x,center_y,w,d)。
上述操作只是一个3 * 3的滑动窗口的操作过程,实际操作过程中,必须将13 * 13的feature map均执行一边;于是在RPN中,产生了两个损失函数:①Classification loss②Regression loss。
        这样的话,通过滑动窗口和anchor机制,我们就可以找到固定比例、一定大小的proposals:①物体大小不同导致的proposal被覆盖②物体aspects ratios不同导致proposals也被覆盖
        由上可知,NRP可以代替Selective Search产生proposals,而且最关键的一点是RPN 更快
ROI pooling V.S. SSP Pooling
ROI是只有一层的SSP Pooling:ROI Pooling将proposal在feature map上的对应区域分为W * H 份,每一份取Max/Avg 将其放到固定位置
SSP Pooling是将proposal分为(4 * 4 / 2 * 2 / 1 * 1份,然后进行拼接,得到fixed length=21的feature vector)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6.2 候选区训练

在这里插入图片描述
RPN中的分类是二分类,区别于物体和背景

2.6.3 Faster_R-CNN训练

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6.4 Faster R-CNN总结

  • 优点
    • 提出RPN网络
    • 端到端网络模型
  • 缺点
    • 训练参数过大
    • 对于真实训练来说还是依然过于耗时

2.7 YOLO(you only lok once)算法

最大特点是快.
在这里插入图片描述
改进速度:YOLO

  • 一个网路解决
  • 输入448*448
  • 输出7730
    • 77=49个像素值,理解成49个单元格,492=98个bbox框
    • 30=两个bbox(4+1+4+1) + 20(单元格的代表概率)
  • 帅选一个bbox做为训练
    • 通过confidence进行筛选
    • confidence由网络输出,(进行标记) 所以如何判断一个grid cell中是否由object呢?如果一个object的ground true的中心坐标在一个grid cell中,那么这个grid cell就是包含这个object,也就是说这个object的预测就有该grid cell负责.
  • 每一个单元格:输出一个confidence的bbox位置,一个概率大的类别.
    在这里插入图片描述

2.7.1 grid cell

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.7.2 训练

三部分损失:bbox+confidence+classfication
在这里插入图片描述

2.7.3 YOLO总结

  • 优点
    • 速度快
  • 缺点
    • 准确率会打折扣
    • YOLO对相互靠近很近的物体(挨在一起且中点都落在同一个格子上的情况),还有很小的群体体验检测效果不好,这是因为一个网格中只预测了两个框.

2.8 SSD(Single Shot MultiBox Detector)

学习目标:

  • 知道SSD结构
  • 说明Detector & classifler的作用
  • 说明SSD的优点

2.8.1简介

SSD算法源于2016年发表的算法论文,论文网址
SSD的特点在于:

  • SSD结合了YOLO中的回归思想和热Faster-RCNN中的Anchor机制,使用全图各个位置的多尺度区域进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Faster-RCNN一样精准.
  • SSD的核心是在不同尺度的特征图上采用卷积核来预测一系列Default Bounding Boxes的类别,坐标偏移.

2.8.2 结构

以VGG-16为基础,使用VGG的前五个卷积,后面增加吃哦猫嗯CONV6开始的5个卷积结构,输出图片要求300*300.
在这里插入图片描述

2.8.3 流程

在这里插入图片描述
SSD中引入了Default Box,实际上与Faster R-CNN中的anchor box机制类似,就是预设一些目标的预选框,不同的是在不同尺度feature map所有特征点上是使用不同的prior boxes.

2.8.4 Detector $ classifier

在这里插入图片描述

  • 1.default boxes:默认候选框
    • 由公式生成
  • 2.localization:4个位置偏移
  • 3.confidence:21个类别置信度(要区分出背景)
    在这里插入图片描述

2.8.5 default boxes

default boxes类似于RPN当中的滑动窗口生成的候选框,SSD也是对特征图中的每一个象素生成若干个候选框.
在这里插入图片描述
只不过SSD生成候选框有特定的公式:
在这里插入图片描述

2.8.6 localization与confidence

这两者意义如下,主要用来过滤,训练:
在这里插入图片描述
在这里插入图片描述
问题: SSD中多个Detevtor & classifier有什么作用?
SSD核心是在不同尺度的特征图上来进行Detector & classifier容易使得SSD观察到更小的物体.

2.8.7训练与测试流程

  • 输入–>输出–>结果与ground truth标记样本回归损失计算–>反向传播,更新权值.
    利用anchor与对应的ground truth进行样本标记,正负样本,每次并不训练8732张计算好的defalt boxes,先进行置信度筛选,并且训练指定的正样本和负样本,如下规则:
  • 正样本
    • 1.与GT重合最高的boxes,其输出对应label设为对应物体
    • 2.物体GT与anchor IoU满足大于0.5
  • 负样本
    • 其他的样本标记为负样本
      在训练时,default boxes按照正负样本控制positive:negative = 1:3
  • 损失:
    • 网络输出的predict box与ground truth回归变换之间的损失计算,置信度采用Softmax Loss(Faster RCNN是log loss),位置回归则是采用Smooth L1loss(与Faster R-CNN一样)
  • test流程
    • 输入–>输出–>nms–>输出

2.8.8 接口介绍

2.8.8.1 模型搭建处理

在这里插入图片描述

2.8.8.2 定义网络损失
  • ssd_net_losses:
    • 网络的输出预测结果与Ground Truth之间的损失计算

3.目标检测算法总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值