目标检测算法

算法分类:     

        两步走: 推荐区域region proposal + 分类

        端到端:一个网络输入到输出。类别+位置

        分类: 得出每个类别的概率,比较得到最大概率

                训练:softmax 进行概率计算,交叉熵损失衡量

        当图片中有一个类别时:分类+定位

                分类:准确率  mAP

                定位 :IoU (交并比):两个框相交的面积除以两个框占的所有面积

                目标的位置框 : bounding box

解决思路:让网络多输出一个全连接层

FC1:分类输出概率值

FC2:回归输出 四个位置坐标

        一个图片多个目标对象时,网络输出不确定,全连接层回归输出的坐标为多个

R-CNN 基础算法

        overfeat模型: k个滑动窗口,每个窗口M个子图,从左到右 从上到下滑动 找到子图,k*m个子图,对于每一个子图进行分类回归。

        该方法为暴力穷举的方式,消耗大量的计算力

R-CNN 用候选区域方法

(1)找出可能存在的region proposal,进行图片大小调整

        选择性搜索Selective search    将每个像素作为一组,然后计算每一组的纹理,并将两个最接近的组结合起来。

最初使用AlexNet结构227*227,crop+warp ,截取原图片的一个固定大小的patch,将原图片的roi缩放到一个固定大小的patch.

(2)通过CNN对候选区域提取特征向量

提取的特征保存在磁盘中,【2000,4096】

(3)20个svm分类器进行分类,得到2000*20的得分矩阵

20个不同类别的分类器,每个分类器都是二分类,每个分类器都会对2000个候选区域的特征向量分别判断一次,得出【2000,20】的得分矩阵,

(4)进行NMS,提出候选框

对所有2000个候选区域得分进行筛选,然后对剩余的候选框每个类别进行IoU筛选。  如果IoU大与阈值(0.5)则删除那个非极大值的框

(5)修正bbox,对bbox回归微调

建立bbox regressor 回归用于修正筛选后的候选区域,使之回归于groundtruth,默认这两个框之间是线性关系,因为在最后筛选出来的候选区域和groundtruth很接近了。

通过线性回归,特征知识候选区域,目标值是groundtruth,建立回归方程

R-CNN训练过程    

    (1)正负样本准备  对于训练集中的所有图像采用ss方式来获取,得到2000个region proposal, 但不是每个候选区域都去训练,保证政府样本1:3 

(2)预训练 采用imageNet等训练,保存模型参数。

(3)微调 fine-tuning  利用标记好的样本,作为网络的输入,继续训练网络进行参数微调。

(4)训练SVM分类器,每个类别训练一个分类器,正负样本标记结果

(5)bbox回归器训练,只对那些跟groundtruth的IoU超过某个阈值(比较大)且IoU最大的region proposal回归,其余的不参与。

缺点:

(1)训练阶段太多,步骤繁琐

(2)训练耗时

(3) 处理速度慢

(4)图片形状变化:候选区域需要经过crop/warp 进行固定大小,无法保证图片不变形。

SPPNet

改进:减少卷积计算,防止图片内容变形

一张图片直接全部卷积计算,取出crop+warp操作

SPPNet把全图塞给CNN得到全图的feature map, 让候选区域与featuremap直接映射,得到候选区域的映射特征向量。映射过来的特征向量大小不固定,这些特征向量给SPP层(空间金字塔变换层),SPP层接受任何大小的输入,输出固定大小的特征向量,再给FC层。

将候选区域映射到特征图当中,得出每个候选区域的特征向量。

SPP层 空间金字塔变换层  

    对于M个候选区域,每个都要经过SPP层进行变换,得到 4*4 2*2 1*1 的max pooling结果 

    输出每个候选区域的特征向量都是(16+4+1)*256 (不同网络卷积输出通道数不一定一样)

sppNET减少了计算时间

缺点训练依然慢,特征需要写入磁盘(因为SVM存在) 需要分阶段训练

Fast R-CNN

    改进: 提出RoI pooling  把CNN SPP层 分类器 bbox回归几个模块一起训练

    softmax分类替代SVM, 生成n个类别+1个背景

    RoI pooling 简单版本的SPP 是一个简单版本的SPP层,目的是为了减少计算时间并且得出固定长度的向量

    将SPP层改为单个块 ,转换成具有H * W固定空间范围的小feature map, h w是超参数,独立于任何特定的roi 

    Single scale 更快 multi scale 即金字塔 

End-to-end model 

    从输入端到输出端直接用一个神经网路相连,整体优化目标函数。

使用softmax 分类 roi pooling能进行反向传播,spp层不适合

多任务损失: 分类loss是一个N+1路的softmax输出,其中N是类别个数,1是背景,使用交叉熵损失;

回归Loss是一个4*n路输出的regresor,也就是对于每个类别都会训练一个单独的regressor,使用平均绝对误差MAE损失,即L1损失

Fine-tuning 在微调时可以一起调整参数

Fast r-cnn缺点 使用ss提取region proposals 没有实现真正意义上的端对端

Faster R-CNN

去掉SS方法 加快速度

区域生成网络+ fast R-CNN模型

Region Proposal Network

步骤:

(1)CNN(VGG16)中输入任意大小的图片提取featuremap

(2)Feature map 被共享用于RPN层和全连接层

(3)经过RPN层生成候选区域

(4)候选区域与特征图共同输入到RoI pooling,得到每个候选区域的特征图然后进行softmax,bbox预测

RPN网络原理:

    主要作用是得出比较准确的候选区域

    用n*n(3*3)的大小窗口去扫描特征图,每个滑窗位置映射到一个低维的向量(256),并为每个滑窗位置考虑k中可能的参考窗口(anchors);

    低维特征向量输入两个并行链接的1*1卷积层然后得出两个部分,reg窗口回归层(用于修正位置)和cls窗口分类层(是否为前景或背景概率)

    3*3滑动窗口每个中心点得到9个anchor boxes,长宽通过尺度和长宽比进行计算,得到最原始的anchor boxes(候选区域)

    需要一个候选区域的校正过程:(即RPN网络的训练)

        训练样本anchor标记:

            每个groundtruth box有着最高IoU的anchor标记为正样本            

            剩下的anchors与任何groundtruth box的IoU大于0.7记为正样本,IoU大于0.3小于0.7的为负样本;其他的anchors全部丢掉

            RPN网络的分类是二分类(是否有物体),回归(anchor->proposal)

            候选区域的训练是为了让的出来的正确的候选区域并且经过微调,

        Faster R-CNN的训练 两个网络的训练,两个网路ode损失合并到一起训练。

YOLO

You only look once 

输入448*448

googleNet + 4个卷积+两个全连接层 输出得到7*7*30特征图,然后经过检测程序得到最终结果

最后30可以通过全连接层来控制

不做筛选,直接每个小框3*3中用两个框来预测

检测程序引入单元格的概念 grid cell 

每个单元格负责预测一个物体类别,并且直接预测物体的概率值。 

每个单元格预测两个bbox位置,49个框一共98个bbox,

输出 7*7*30  (4+1+4+1+20)4个坐标信息,1个置信度,20个类别的概率预测结果

筛选一个bbox作为训练,

通过confidence 进行筛选,

每个bounding box 都对应一个confidence score,如果grid cell 里面没有object, confidence为0, 则confidnece score 等于预测的box和 groundtruth 的IoU值  

如果一个object 的groundtruth的中心点坐标在一个grid cell中,那么这个cell就包含这个object

每一个单元格:输出一个confidence高的bbox位置,一个概率大的类别。

YOLO速度快 效果会打折扣,对小目标和靠得很近的物体预测效果不好。

SSD 兼顾速度与精度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值