CNN在图像分类和目标检测的应用

目录

  • 基于CNN图像分类算法
    • LeNet(1998)
    • AlexNet(2012)
    • VGGNet
    • GoogLeNet
  • 基于CNN的图像或视频检测算法
    • 基于分类的算法
      • 1-1R-CNN
      • 1-2Fast-RCNN
      • 1-3Faster-RCNN
      • 1-4Mask RCNN
    • 基于回归的算法
      • 2-1YOLO
      • 2-2SSD

从目前所学习到的东西来看,CNN在图像等领域主要有两大方面的应用,第一是图像的分类,第二是图像目标的检测。本文主要是做一个概述性的学习总结,每个网络的详细细节没具体阐述。

基于CNN图像分类算法

LeNet(1998)

由Yann LeCun发表的论文《Gradient based learning applied to document-recognition》,该网络主要由卷积层、池化层和全连接层构成,下图表示了其原理。CNN在图像分类和目标检测的应用_第1张图片

AlexNet(2012)

AlexNet是2012年ILSVRC(ImageNet Large Scale Visual Recognition Challenge)冠军, 由Hinton和他的学生Alex Krizhevsky设计,此后CNN开始走进人们的视野,下图所示为其网络结构。
其主要特点如下:
(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。
(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。
(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
(5)使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。因为GPU之间通信方便,可以互相访问显存,而不需要通过主机内存,所以同时使用多块GPU也是非常高效的。同时,AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。 
(6)数据增强,随机地从256256的原始图像中截取224224大小的区域(以及水平翻转的镜像),相当于增加了2*(256-224)^2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。
CNN在图像分类和目标检测的应用_第2张图片

VGGNet

ILSVRC 2014的亚军,VGG网络作者尝试了多种结构,较常用的有VGG16和VGG19(VGG16网络更简单,性能也可以,应用最广泛)。
VGG16的基本架构为conv12 (64) -> pool1 -> conv22(128) -> pool2 -> conv33(256) -> pool3 -> conv43 (512) -> pool4 -> conv5*3 (512) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。 *3代表重复3次。
CNN在图像分类和目标检测的应用_第3张图片
VGGNet特点:

  • 结构简单,只有3x3,stride 1,pad 1的卷积和2x2,stride 2的max pooling,每过一次pooling,feature map大小降低一半。
  • 参数量大
  • 合适的网络初始化
  • 使用batch normalization
  • FC7提取的特征对其他任务有帮助。FC7始于AlexNet,表示某一全连接层,该层提取特征用于分类任务。

GoogLeNet

GoogLeNet是ILSVRC2014冠军,使用average pooling代替了最耗参数(相应的也最耗时间)的全连接层,同时使用inception模块来代替简单的卷积层(inception的名字来源于盗梦空间中的we need to go deeper的梗);另外,使用1x1的卷积进行了降维。
ResNet
ResNet是ILSVRC 2015的冠军。ResNet最大的贡献在于解决了深层网络难以训练的问题(反向传播梯度弥散),它的网络深度达到了152层!
CNN在图像分类和目标检测的应用_第4张图片
ResNet的特点:

  • 使用BN(Batch Normalization)layer在每个conv layer后
  • 每个residual block包含两个3x3 conv layer
  • 周期性的使用stride 2 pooling降低维度,相当于除2
  • 最耗时的FC层使用pool代替
  • SGD + Momentum 0.9
  • learning rate 0.1, divided by 10 when validation error plateaus
  • Mini-batch size 256
  • Weight decay 1e-5
  • 不使用dropout

基于CNN的图像或视频检测算法

这部分主要分为两类,即two-stage算法和one-stage算法,他们分别还可以视为基于分类的算法和基于回归的算法

基于分类的算法

基于分类的CNN也可以成为two-stage检测算法,传统目标检测方法包含预处理、窗口滑动、特 征提取、特征选择、特征分类、后处理等步骤,而卷积神经网络本身具有特征提取、特征选择和特征分类的功能。那么,可以 直接利用卷积神经网络对每个滑动窗口产生的候选区进行二分类,判断其是否为待检测目标。本文将这类方法称为基于分 类的卷积神经网络目标检测。相比于传统目标检测的六个步骤,基于分类的卷积神经网络目标检测只有: 窗口滑动,产生候选区域(region proposals),对候选区域图像分 类,后处理三个步骤,而且窗口滑动和后处理都是固定的方法。因此,该类方法的研究重点在于如何提升卷积神经网络的特征 提取能力、特征选择能力以及特征分类能力,以提高图像识别的准确度。这类算法的典型代表是基于region proposal的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等。

1-1R-CNN

R-CNN是基于region proposal方法的目标检测算法系列奠基之作,其先进行区域搜索,然后再对候选区域进行分类。在R-CNN中,选用Selective search方法来生成候选区域,这是一种启发式搜索算法。它先通过简单的区域划分算法将图片划分成很多小区域,然后通过层级分组方法按照一定相似度合并它们,最后的剩下的就是候选区域(region proposals),它们可能包含一个物体。示意图如下:
CNN在图像分类和目标检测的应用_第5张图片
对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域,然后每个候选区域被resize成固定大小(227×227)并送入一个CNN模型中,使用AlexNet来提取图像特征,最后得到一个4096维的特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。为了提升定位准确性,R-CNN最后又训练了一个边界框回归模型。训练样本为(P,G),其中P=(Px,Py,Pw,Ph)为候选区域,而G=(Gx,Gy,Gw,Gh)为真实框的位置和大小。G的选择是与P的IoU最大的真实框,回归器的目标值定义为:
在这里插入图片描述
在做预测时,利用上述公式可以反求出预测框的修正位置。R-CNN对每个类别都训练了单独的回归器,采用最小均方差损失函数进行训练。
R-CNN是非常直观的,就是把检测问题转化为了分类问题,但是,由于R-CNN使用计算复杂度极高的selective search提取候区域,并使用SVM来进行分类,并不是一个端到端的训练模型。R-CNN模型在统一候选区的大小后才能进行特征提取和特征分类。并且提取的候选框会在特征提取的时候会进行重复计算。
CNN在图像分类和目标检测的应用_第6张图片

1-2Fast-RCNN

    Fast-RCNN为了解决特征提取重复计算问题而诞生,并且Fast-RCNN巧妙的将目标识别与定位放在同一个CNN中构成Multi-task模型。
    Fast-RCNN先用Selective Search找出候选框,’而后整张图过一次CNN,然后用RoI Pooling,将对应候选框的部分做采样,得到相同长度的特征,又经过两层全连接层之后得到最终的特征。接着产生两个分支,一个分支给此特征分类,另一个分支回归此特征的候选框偏移。Fast-RCNN将分类和回归任务融合在一个模型中。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072714232748.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTc0MTc3OQ==,size_16,color_FFFFFF,t_70)

     首先介绍Fast-RCNN核心算法模块,即RoI Pooling。基于图像分类任务的卷积神经网络首先将图片重新缩放并才裁剪到固定大小,如AlexNet和ResNet将图片缩放到256尺度并裁剪至224×224大小,然后将裁剪后的图像输入至网络训练。但对于检测任务,图像大小对检测性能有重要的影响。假设输入224×224大小的图像,则很有可能目标对象会因为分辨率过低而无法检测。Fast-RCNN的图像输入并不对图像大小限制,而实现这一点的关键所在,就是RoI Pooling网络层。RoIPooling层在任意尺度的卷及网络特征层,针对每一个候选框在特征层的映射区域提取固定尺度的特征,通过设置不同尺度的RoI Pooling可以提取多尺度特征。RoIPooling实现原理简单而言就是通过设定固定尺度计算出每一次采样的网格大小,然后最大值采样即可。RoI Pooling使用最大池化将任何有效的感兴趣区域内的特征转换为具有H×W(例如,7×7)的固定空间范围的小特征图,其中H和W是RoI Pooling层超参数,独立于任何特定的ROI。Fast-RCNN定义RoI是一个矩形窗口。每个ROI由定义其左上角(r,c)及其高度和宽度(h,w)的四元组(r,c,h,w)定义。RoI Max Pooling通过将h×w的ROI窗口转换成大小为h/H×w/W的子窗口的HxW网格,然后将每个子窗口中的值最大存储到相应的输出网格单元中。RoI Pooling是SPP-Net中使用的空间金字塔层的特殊情况,其中只有一个金字塔层。然后RoI pooling层得到的特征图送入几个全连接层中,并产生新的特征向量,这些特征向量分别用于一个softmax分类器(预测类别)和一个线性回归器上(用于调整边界框位置)来进行检测。在实现上是使用两个不同的全连接层,第一个全连接层有N+1个输出(N是类别总数,1是背景),表示各个类别的概率值;第二个全连接层有4N个输出,表示坐标回归值(tx,ty,tw,th),这个与R-CNN是一样的,每个类别都预测4个位置坐标值。
     Fast R-CNN与R-CNN的另外的一个主要区别点是采用了softmax分类器而不是SVM分类器,而且训练过程是单管道的,因为Fast R-CNN将分类误差和定位误差合并在一起训练,定位误差采用smooth L1 而不是R-CNN中的L2。因此,整个网络可以端到端的训练。
    Fast-RCNN提出之后,基于深度学习的目标检测框架问题已经非常清晰,就是能不能把潜在候选区域的提取纳入CNN框架内。Faster-RCNN就是基于此点并提出Region Proposal Net将潜在候选区域提取纳入CNN框架内。

CNN在图像分类和目标检测的应用_第7张图片

1-3Faster-RCNN

	Faster-RCNN模型引入了RPN(Region Proposal Network)直接产生候选区域。Faster-RCNN可以看成是RPN和Fast RCNN模型的组合体,即Faster-RCNN = RPN + Fast-RCNN。
    对于RPN网络,先采用一个CNN模型(一般称为特征提取器)接收整张图片并提取特征图。然后在这个特征图上采用一个N×N(文中是3×3)的滑动窗口,对于每个滑窗位置都映射一个低维度的特征(如256-d)。然后这个特征分别送入两个全连接层,一个用于分类预测,另外一个用于回归。对于每个窗口位置一般设置k个不同大小或比例的先验框(anchors,default bounding boxes),这意味着每个位置预测k个候选区域(region proposals)。对于分类层,其输出大小是2k,表示各个候选区域包含物体或者是背景的概率值,而回归层输出4k个坐标值,表示各个候选区域的位置(相对各个先验框)。对于每个滑窗位置,这两个全连接层是共享的。因此,RPN可以采用卷积层来实现:首先是一个n×n卷积得到低维特征,然后是两个1×1的卷积,分别用于分类与回归。

CNN在图像分类和目标检测的应用_第8张图片
RPN采用的是二分类,仅区分背景与物体,但是不预测物体的类别,即class-agnostic。由于要同时预测坐标值,在训练时,要先将先验框与ground-truth box进行匹配,原则为:(1)与某个ground-truth box的IoU最高的先验框;(2)与某个ground-truth box的IoU值大于0.7的先验框,只要满足一个,先验框就可以匹配一个ground-truth,这样该先验框就是正样本(属于物体),并以这个ground-truth为回归目标。对于那些与任何一个ground-truth box的IoU值都低于0.3的先验框,其认为是负样本。RPN网络是可以单独训练的,并且单独训练出来的RPN模型给出很多region proposals。由于先验框数量庞大,RPN预测的候选区域很多是重叠的,要先进行NMS(non-maximum suppression,IoU阈值设为0.7)操作来减少候选区域的数量,然后按照置信度降序排列,选择top-N个region proposals来用于训练Fast R-CNN模型。RPN的作用就是代替了Selective search的作用,但是速度更快,因此Faster R-CNN无论是训练还是预测都可以加速。
CNN在图像分类和目标检测的应用_第9张图片
Faster-RCNN遵循如下训练过程:
第一步:使用ImageNe上预训练的模型初始化特征提取网络并训练RPN网络;
第二步:使用在ImageNet上预训练的模型初始化Fast-RCNN特征特征提取网络,使用步骤一中训练好的RPN网络产生的候选框作为输入,训练一个Fast-RCNN网络,至此,两个网络每一层的参数完全不共享;
第三步:使用步骤二的Fast-RCNN网络参数初始化一个新的RPN网络,但是把RPN,Fast-RCNN共享的特征提取网络参数的学习率设为0,即使学习RPN网络所特有的参数,固定特征提取网络。到此步,两个网络已经共享了所有的公共的卷积层;
第四步:仍然固定共享的那些网络层,把Fast-RCNN特有的网络层也加入进来,继续训练,微调Fast-RCNN特有的网络层,到此为止,RPN与Fast-RCNN网络完全共享参数,使用Fast-RCNN即可同时完成候选框提取和目标检测功能。
其问题主要在于对小尺度目标检测性能较差,不能有效的将候选区域的特征在深度CNN提取之后,有效保留小尺度的特征。分辨率有一定限制,同样检测速度还是较慢。

1-4Mask RCNN

	把原有的Faster-RCNN进行扩展,添加一个分支使用现有的检测对目标进行并行预测。同时,这个网络结构比较容易实现和训练,速度为5fps,可以很方便的应用到其他的领域,像目标检测,分割,和人物关键点检测等,并且比现有的算法效果都要好。
    实例分割的难度在于要先对一张图片所有的目标进行正确的检测同时还要对每个示例进行分割。检测的目的是把每一个单个目标分类然后用bounding box标定出来,而实例分割的目的是区分每一个像素为不同的分类而不用区别不同的目标。Mask R-CNN使用了全连接卷积网络(FCN)来完成这个预测。这需要训练数据必须有像素级别的标注,而不是简单的边框。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200727142604290.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTc0MTc3OQ==,size_16,color_FFFFFF,t_70)
	 Faster R-CNN:包含两个部分,提出RPN区域,找到目标框,对ROI进行分类。核心思想就是把图片区域内容送给深度网络,然后提取出深度网络某层的特征,并用这个特征来判断是什么物体,把背景也当成一种类别,故如果是判断是不是20个物体时,实际上在实现是判断21个类。最后再对是物体的区域进行微微调整。
    Mask Representation:mask 对输入目标的空间布局进行编码。使用m*m的矩阵对每一个ROI进行预测而不是使用向量去进行预测,这样可以保证ROI当中的空间信息不会损失。
    ROI Align:RoI Pooling就是实现从原图区域映射到卷积区域最后pooling到固定大小的功能,把该区域的尺寸归一化成卷积网络输入的尺寸。在归一化的过程当中,会存在ROI和提取的特征不重合现象出现,作者提出了ROI Align,使用ROI Align层对提取的特征和输入之间进行校准。 避免对每一个ROI边界或者块进行数字化。使用双线性内插法计算在ROI 块当中固定的四个采样位置得到的输入特征值并对结果进行融合。
    因为FCN会精确预测每个像素的类别,就是输入图片中的每个像素都会在标注中对应一个类别。对于输入图片中的一个锚框,我们可以精确的匹配到像素标注中对应的区域。但是RoI池化是作用在卷积之后的特征上,其默认是将锚框做了定点化。例如假设选择的锚框是(x,y,w,h),且特征抽取将图片变小了16倍,就是如果原始图片是256×256,那么特征大小就是16×16。这时候在特征上对应的锚框就是变成了(x/16,y/16,h/16,w/16)。如果x,y,w,h中有任何一个不被16整除,那么就可能发生错位。同样,如果锚框的长宽不被池化大小整除,那么同样会定点化,从而带来错位。
    通常这样的错位只是在几个像素之间,对于分类和边框预测影响不大。但对于像素级别的预测,这样的错位可能会带来大问题。RoI Align层类似于RoI池化层,但是去除掉了定点化步骤,就是移除了所有 。如果计算得到的锚框不是刚好在像素之间,那么我们就用四周的像素来线性插值得到这个点上的值。
    对于一维情况,假设我们要计算x点的值f(x),那么我们可以用x左右的整点的值来插值:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200727142727344.png)

我们实际要使用的是二维差值来估计f(x,y),我们首先x轴上差值得到f(x,y)和f(x,y+1),然后根据这两个值来差值得到f(x,y)。
CNN在图像分类和目标检测的应用_第10张图片
Network Architecture :
分成三个部分,第一个是主干网络用来进行特征提取,第二个是头结构用来做边界框识别(分类和回归),第三个就是mask预测用来对每一个ROI进行区分。主干网络使用的是50层的深度残差网络ResNet50。
CNN在图像分类和目标检测的应用_第11张图片
以上方法由于使用了特定的方法提取候选区,替代以滑动窗口方法遍历搜索的方式,需要候选区的数量较少,使基于卷积神经网络的目标检测在准确度和速度上都得到了较大提升。然而这些方法非常依赖候选区提取方法的准确度,如果检测场景复杂且目标不明显,候选区提取方法很难捕获到目标附近的区域,导致检测不到目标。

基于回归的算法

2-1YOLO

Yolo算法,其全称是You Only Look Once: Unified, Real-TimeObject Detection。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,整个系统如图所示:首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN算法,其是一个统一的框架,其速度更快,而且Yolo的训练过程也是end-to-end的。
CNN在图像分类和目标检测的应用_第12张图片
YOLO的CNN网络将输入的图片分割成S×S网格,然后每个单元格负责去检测那些中心点落在该格子内的目标。每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度。前者记为Pr(object),当该边界框是背景时(即不包含目标),此时Pr(object)=0。而当该边界框包含目标时,Pr(object)=1。边界框的准确度可以用预测框与实际框(ground truth)的IOU(intersection over union,交并比)来表征,记为IOU(truth/pred) 。因此置信度可以定义为Pr(object)*IOU(truth/pred) 。YOLO的置信度是两个因子的乘积,预测框的准确度也反映在里面。边界框的大小与位置可以用4个值来表征:(x,y,w,h),其中(x,y)是边界框的中心坐标,而w和h是边界框的宽与高。中心坐标的预测值(x,y)是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的。而边界框的w和h预测值是相对于整个图片的宽与高的比例,这样理论上4个元素的大小应该在[0,1]范围。这样,每个边界框的预测值实际上包含5个元素:(x,y,w,h,c),其中前4个表征边界框的大小与位置,而最后一个值是置信度。
对于分类问题,对每一个单元格其还要给出预测出C个类别概率值,其表征的是由该单元格负责预测的边界框其目标属于各个类别的概率。但是这些概率值其实是在各个边界框置信度下的条件概率,即 Pr(class|object)。不管一个单元格预测多少个边界框,其只预测一组类别概率值,这是YOLO算法的一个缺点,在后来的改进版本中,YOLO9000是把类别概率预测值与边界框是绑定在一起的。同时,我们可以计算出各个边界框类别置信度(class-specific confidence scores):
在这里插入图片描述
边界框类别置信度表征的是该边界框中目标属于各个类别的可能性大小以及边界框匹配目标的好坏,一般会根据类别置信度来过滤网络的预测框。
CNN在图像分类和目标检测的应用_第13张图片
YOLO的优点,Yolo采用一个CNN网络来实现检测,是单管道策略,其训练与预测都是end-to-end,所以Yolo算法比较简洁且速度快。第二点由于Yolo是对整张图片做卷积,所以其在检测目标有更大的视野,它不容易对背景误判。另外,Yolo的泛化能力强,在做迁移时,模型鲁棒性高。
YOLO的缺点,首先Yolo各个单元格仅仅预测两个边界框,而且属于一个类别。对于小物体,Yolo的表现会不如人意。Yolo对于在物体的宽高比方面泛化率低,就是无法定位不寻常比例的物体。Yolo的定位不准确也是很大的问题。

2-2SSD

SSD全称 :Single Shot MultiBox Detector。在R-CNN系列模型里。Region Proposal和分类是分作两块来进行的。SSD则将其统一成一个步骤来使得模型更加简单并且速度更快。YOLO与SSD可以一步到位完成检测。相比YOLO,SSD采用CNN来直接进行检测,而不是像Yolo那样在全连接层之后做检测。它跟Faster R-CNN主要有两点不一样,1,对于锚框,不再首先判断它是不是含有感兴趣物体,再将正类锚框放入真正物体分类。SSD里我们直接使用一个C+1类分类器来判断它对应的是哪类物体,还是只是背景。我们不再有额外的回归器对边框再进一步预测,而是直接使用单个回归器来预测真实边框。2,SSD不只是对卷积神经网络输出的特征做预测,它会进一步将特征通过卷积和池化层变小来做预测。这样达到多尺度预测的效果。
(1)采用多尺度特征图用于检测
多尺度采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,一个比较大的特征图和一个比较小的特征图,它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标,如图下图所示,8x8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小。
CNN在图像分类和目标检测的应用_第14张图片
(2)采用卷积进行检测
与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为m×n×p的特征图,只需要采用3×3×p这样比较小的卷积核得到检测值。
(3)设置先验框
在Yolo中,每个单元预测多个边界框,但是其都是相对这个单元本身(正方块),但是真实目标的形状是多变的,Yolo需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框(bounding boxes)是以这些先验框为基准的,在一定程度上减少训练难度。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异,如下图所示,可以看到每个单元使用了5个不同的先验框,图片中不同物体采用最适合它们形状的先验框来进行训练。
CNN在图像分类和目标检测的应用_第15张图片
(4)预测物体类别
对每一个锚框我们需要预测它是不是包含了我们感兴趣的物体,还是只是背景。使用一个3×3的卷积层来做预测,加上pad=1使用它的输出和输入一样。同时输出的通道数是num_anchors*(num_classes+1),每个通道对应一个锚框对某个类的置信度。假设输出是Y,那么对应输入中第n个样本的第(i,j)像素的置信值是在Y[n,:,i,j]里。具体来说,对于以(i,j)为中心的第a个锚框。通道 a*(num_class+1) 是其只包含背景的分数,通道 a*(num_class+1)+1+b 是其包含第b个物体的分数。
(5)预测边界框
因为真实的边界框可以是任意形状,我们需要预测如何从一个锚框变换成真正的边界框。这个变换可以由一个长为4的向量来描述。同上一样,我们用一个有num_anchors * 4通道的卷积。假设输出是Y,那么对应输入中第 n 个样本的第 (i,j) 像素为中心的锚框的转换在Y[n,:,i,j]里。具体来说,对于第a个锚框,它的变换在a4到a4+3通道里。
CNN在图像分类和目标检测的应用_第16张图片
目标函数和常见的 Object Detection 的方法目标函数相同,分为两部分:计算相应的 default box 与目标类别的置信度以及相应的bounding box回归结果。

https://blog.csdn.net/dan_teng/article/details/87192430
https://blog.csdn.net/luoluonuoyasuolong/article/details/81750190
https://baike.baidu.com/item/AlexNet/22689612?fr=aladdin
https://my.oschina.net/u/876354/blog/1637819
https://blog.csdn.net/qq_32998593/article/details/80558449?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

你可能感兴趣的:(CNN基础,计算机视觉,人工智能,算法,机器学习,python)