美文网首页萌新的机器学习
计算机视觉-目标检测

计算机视觉-目标检测

作者: 初七123 | 来源:发表于2018-05-03 18:54 被阅读1次

CNN

  • 局部感受野
  • 共享权重
    共享,意味着这一个隐层的所有神经元检测完全相同的特征,在输入图像的不同位置。这说明卷积网络可以很好地适应图片的平移不变性
    其次大大减少了参数量
  • 池化
    我们选择图像中的连续范围作为池化区域,这就意味着即使图像经历了一个小的平移之后,依然会产生相同的 (池化的) 特征,做到了图片的平移不变性

CNN的反向传播

https://blog.csdn.net/login_sonata/article/details/77488383

R-CNN

算法步骤

  • 一张图像生成1K~2K个候选区域 (Selective Search)
    Selective Search方法从一种图片生成约2000个候选区域,采用一种过分割的手段,将图像分割成小区域,然后bottom-up,合并可能性最高的两个区域,重复合并,直到整张图像上合并成一个区域为止。输出所有曾经存在过的区域,就是候选区域。

  • 对每个候选区域,使用深度网络提取特征

  • 特征送入每一类的SVM 分类器,判别是否属于该类
    对每一类目标,使用一个线性SVM二类分类器进行判别。考察每一个候选框,如果和本类所有标定框的重叠面积都小于0.3,认定其为负样本。

  • 使用回归器精细修正候选框位置
    做位置精修,因为候选框不够准确,重叠面积很小。输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。

训练集
经典的目标检测算法在区域中提取人工设定的特征(Haar,HOG)。本文则需要训练深度网络进行特征提取。可供使用的有两个数据库:
一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。
一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置。一万图像,20类。
使用识别库进行预训练,而后用检测库调优参数。最后在检测库上评测。

SPP-net

在R-CNN中,要求输入固定大小的图片,因此需要对图片进行crop、wrap变换。此外,对每一个图像中每一个proposal进行一遍CNN前向特征提取,如果是2000个propsal,需要2000次前向CNN特征提取,这无疑将浪费很多时间。

该论文对R-CNN中存在的缺点进行了改进,基本思想是,输入整张图像,提取出整张图像的特征图,然后利用空间关系从整张图像的特征图中,在spatial pyramid pooling layer提取各个region proposal的特征。

金字塔池化层


使用不同尺寸的池化得到的值拼成一个固定长度的向量

为了能够输入任意大小的图像,在训练网络时,采用了多尺度输入,如:224*224, 180*180,其中,180*180图像是从224*224图像变换的到的。构建两种CNN模型,一种模型的输入大小为224*224,另一种模型的输入大小为180*180,而且这两个模型共享参数。

改进特征提取
这一步就是和R-CNN最大的区别了,这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升。

其他步骤和R-CNN一致

Fast R-CNN

Fast R-CNN主要在下面几个方面做了改进

  • 整张图像归一化后直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框(如同 spp-net)
  • RCNN中独立的分类器和回归器需要大量特征作为训练样本。
    本文把类别判断和位置精调统一用深度网络实现,不再需要额外存储

roi_pool5
roi_pool层将每个候选区域均匀分成M×N块,对每块进行max pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。

Loss
分类和回归采用单独的损失函数

Fast R-CNN是end-to-end的算法

Faster R-CNN

Faster R-CNN 把所有步骤都统一到了神经网络中

它主要包括两个模块

  • PRN候选框提取模块;
    全卷积神经网络,用于提取候选框
  • Fast R-CNN检测模块。
    基于RPN提取的proposal检测并识别proposal中的目标

RPN

RPN网络的作用是输入一张图像,输出一批矩形候选区域,类似于以往目标检测中的Selective Search一步。网络结构是基于卷积神经网络,但输出包含二类softmax和bbox回归的多任务模型。

RPN的处理流程如下图所示:
(1)使用一个3×3的滑动窗口在Feature map上滑动,在每一个位置的中心点处遍历指定的scale和aspect ratio,提取K类anchor box;
具体方式可以参考 https://blog.csdn.net/sloanqin/article/details/51545125
(2)类似FCN,使用卷积层对anchor box进行分类(前景和背景)和回归;
(3)根据anchor box和标定的真值的重叠情况(IOU, Intersection OverUnion)进行分类,找出正面样本、负面样本和不参与训练的样本(这些样本决定了网络应该怎么学习);
(4)分类任务使用SoftmaxWithLoss层,回归任务使用SmoothL1Loss层,根据Loss调整RPN网络;
(5)RPN网络输出Proposal。

anchor
特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128^2, 256^2, 512^2}×三种比例{1:1,1:2,2:1}。这些候选窗口称为anchors。下图示出51*39个anchor中心,以及9种anchor示例。

代价函数
RPN网络训练,那么就涉及ground truth和loss function的问题。对于左支路,ground truth为anchor是否为目标,用0/1表示。那么怎么判定一个anchor内是否有目标呢?论文中采用了这样的规则:1)假如某anchor与任一目标区域的IoU最大,则该anchor判定为有目标;2)假如某anchor与任一目标区域的IoU>0.7,则判定为有目标;3)假如某anchor与任一目标区域的IoU<0.3,则判定为背景。所谓IoU,就是预测box和真实box的覆盖率,其值等于两个box的交集除以两个box的并集。其它的anchor不参与训练。

于是,代价函数定义为:

代价函数分为两部分,对应着RPN两条支路,即目标与否的分类误差和bbox的回归误差,其中Leg(ti,ti) = R(ti-ti)采用在Fast-RCNN中提出的平滑L1函数,作者认为其比L2形式的误差更容易调节学习率。注意到回归误差中Leg与pi相乘,因此bbox回归只对包含目标的anchor计算误差。也就是说,如果anchor不包含目标,box输出位置无所谓。所以对于bbox的groundtruth,只考虑判定为有目标的anchor,并将其标注的坐标作为ground truth。此外,计算bbox误差时,不是比较四个角的坐标,而是tx,ty,tw,th,具体计算如下:

训练
特征提取网络是RPN和 Fasr RCNN共享的


所以作者通过下面四步来训练

1) 单独训练RPN网络,网络参数由预训练模型载入;
2) 单独训练Fast-RCNN网络,将第一步RPN的输出候选区域作为检测网络的输入。具体而言,RPN输出一个候选框,通过候选框截取原图像,并将截取后的图像通过几次conv-pool,然后再通过roi-pooling和fc再输出两条支路,一条是目标分类softmax,另一条是bbox回归。截止到现在,两个网络并没有共享参数,只是分开训练了;
3) 再次训练RPN,此时固定网络公共部分的参数,只更新RPN独有部分的参数;
4) 拿RPN的结果再次微调Fast-RCNN网络,固定网络公共部分的参数,只更新Fast-RCNN独有部分的参数。

测试

YOLO v1

1-stage算法,一次性解决问题
优点 速度快(45fps,小模型快速版本为155fps)


缺点 很明显对位置预测不够精确,对小物体效果不够理想

思想

  1. 将物体检测这个问题定义为bounding box和分类置信度的回归问题。
  2. 将整张图像作为输入,划分成SxS grid,每个cell预测B个bounding box(x, y, w, h)及对应的分类置信度(class-specific confidence score)。分类置信度是 每个类别的概率 和 是物体的概率 以及 IOU 相乘的结果。


Loss

训练
输入N个图像,每个图像包含M个objec,每个object包含4个坐标(x,y,w,h)和1个label。然后通过网络得到7*7*30大小的三维矩阵。每个1*30的向量前5个元素表示第一个bounding box的4个坐标和1个confidence,第6到10元素表示第二个bounding box的4个坐标和1个confidence。最后20个表示这个grid cell所属类别。注意这30个都是预测的结果。然后就可以计算损失函数的第一、二 、五行。至于第二三行,confidence可以根据ground truth和预测的bounding box计算出的IOU和是否有object的0,1值相乘得到。真实的confidence是0或1值,即有object则为1,没有object则为0。 这样就能计算出loss function的值了。

测试
输入一张图像,跑到网络的末端得到7*7*30的三维矩阵,这里虽然没有计算IOU,但是由训练好的权重已经直接计算出了bounding box的confidence。然后再跟预测的类别概率相乘就得到每个bounding box属于哪一类的概率。如下图:是先直接得到后面两个的相乘结果,再和前面一个相乘,前面那一个也是预测出来的。

YOLO9000

https://zhuanlan.zhihu.com/p/35325884

相关文章

  • 2020 细说YOLO

    计算机视觉 单目标 我们要做目标检测,先看一下计算机视觉可以做那些图像那些识别问题。目标检测从 2012 年目标检...

  • 目标检测之YOLO-You Only Look Once(一)

    提到计算机视觉,自然会提到目标检测(object detection),而谈到目标检测,YOLO系列算法算是目标检...

  • Convolutional Neural Networks

    计算机视觉 计算机视觉(Computer Vision)包含很多不同类别的问题,如图片分类、目标检测、图片风格迁移...

  • 计算机视觉相关论文整理、翻译、记录、分享

    cv-papers 计算机视觉相关论文整理、翻译、记录、分享; 包括图像分类、目标检测、视觉跟踪/目标跟踪、人脸识...

  • 【机器学习】目标检测(1)

    最近在看目标检测相关的内容,做个简单的整理。 1、什么是目标检测 目标检测是一种计算机视觉任务,包含“物体分类”和...

  • 计算机视觉-目标检测

    CNN 局部感受野 共享权重共享,意味着这一个隐层的所有神经元检测完全相同的特征,在输入图像的不同位置。这说明卷积...

  • 无人机之眼 | 目标检测-基本概念扫盲

      目标检测任务是计算机视觉的主要分支之一,但对于目标检测具体做什么,目标检测算法的有哪些类别以及相关定义却很少会...

  • 目标检测YOLO v1-v5演进

    目标检测介绍 目标检测是与计算机视觉和图像处理相关的计算机技术,用于在一张图片中识别出些物体的种类,同时要求标出物...

  • 吴恩达Convolutional Neural Networks

    常见的计算机视觉问题有: 图像分类(Image Classification)2.目标检测(Object Dete...

  • 目标检测导语

    什么是目标检测? 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是计算机视觉领域的核心...

网友评论

    本文标题:计算机视觉-目标检测

    本文链接:https://www.haomeiwen.com/subject/iwsqrftx.html