CV-目标检测

个人数据集标签制作

labelimg:图像标注工具
在这里插入图片描述

目标检测

目标检测:通过输入的图像来完成物体的检测,它需要解决的两个问题:物体在哪里(位置)和物体是什么(类别)。
分类的损失和评价指标
损失函数:交叉熵损失函数
评估指标:Accuracy
检测的损失和评价指标
评估指标:IOU(交并比)
在这里插入图片描述

基于深层神经网络的目标检测

  • 双阶段:第一级网络用于候选区域提取;第二级网络对提取的候选区域进行分类和精确坐标回归。例如RCNN系列。
  • 单阶段:摒弃了候选区域提取这一步骤,只用一级网络就完成了分类和回归这俩个任务。例如YOLO和SSD等。
  • anchor free:取消anchor生成机制,加快了速度,例如centernet,cornernet fcos。
    bounding box
    边框回归:对于窗口一般采用四维向量 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)来表示,分别表示窗口的中心点坐标和宽高。如下图,红色的框P表示原始的proposal,绿色的框G代表目标的Ground Truth,那么目标是寻找一种关系使得输入原始的窗口P经过映射得到一个跟真实窗口G更接近的回归窗口 G ^ \widehat{G} G .
    在这里插入图片描述
    边框回归的目的是:给定 ( P x , P y , P w , P h ) (P_x,P_y,P_w,P_h) (Px,Py,Pw,Ph),寻找一种映射 f f f,使得 f ( P x , P y , P w , P h ) = ( G ^ x , G ^ y , G ^ w , G ^ h ) f(P_x,P_y,P_w,P_h)=(\widehat{G}_x,\widehat{G}_y,\widehat{G}_w,\widehat{G}_h) f(Px,Py,Pw,Ph)=G x,G y,G w,G h,并且 ( G ^ x , G ^ y , G ^ w , G ^ h ) ≈ ( G x , G y , G w , G h ) (\widehat{G}_x,\widehat{G}_y,\widehat{G}_w,\widehat{G}_h)\approx(G_x,G_y,G_w,G_h) G x,G y,G w,G hGx,Gy,Gw,Gh
    边框回归做法:平移+尺度缩放
  1. 先做平移 ( △ x , △ y ) (\triangle x,\triangle y) (x,y) △ x = P w d x ( P ) , △ y = P h d y ( P ) \triangle x=P_wd_x(P),\triangle y=P_hd_y(P) x=Pwdx(P),y=Phdy(P)
  2. 然后再做尺度缩放 ( S w , S h ) (S_w, S_h) (Sw,Sh), S w = e x p ( d w ( P ) ) , S h = e x p ( d h ( P ) ) S_w=exp(d_w(P)), S_h=exp(d_h(P)) Sw=exp(dw(P)),Sh=exp(dh(P))

Yolov1

网络结构
在这里插入图片描述网络最后输出为7735的tensor。每一个1135负责原始图像64*64的区域。输出的35为信息主要包含以下的信息:
在这里插入图片描述
其中Bbox置信度:
B b o x 置 信 度 = P ( O b j e c t ) ∗ I O U p r e d t r u t h Bbox置信度=P(Object)*IOU_{pred}^{truth} Bbox=P(Object)IOUpredtruth
P ( O b j e c t ) P(Object) P(Object)表示是否存在待验对象。在训练阶段,当像素点负责的区域没有GD时,则 P ( O b j e c t ) = 0 P(Object)=0 P(Object)=0,否则为1,然后计算GD和PD的IOU值。
当Bbox置信度有多个时,只看ground truth IOU大的那个,另一个自动设定为0.
Bbox置信度大小期望在[0,1]之间。
另外Bbox坐标:2个Bbox需要8个值进行存储,即
( b x , b y , b w , b h ) × 2 (b_x, b_y, b_w, b_h)×2 (bx,by,bw,bh)×2
gb的Bbox坐标表示会做一些变换(编码): ( g w , g h ) (g_w, g_h) (gw,gh)会除以图像对应的 ( i m g w , i m g h ) (img_w, img_h) (imgw,imgh),从而使得 ( g w , g h ) (g_w, g_h) (gw,gh)归一化到[0, 1]之间。
同时将 ( g x , g y ) (g_x, g_y) (gx,gy)相对于负责区域的左上角坐标进行归一化,从而使得 ( g x , g y ) (g_x, g_y) (gx,gy)也归一化到[0, 1]之间。

  • 为什么要两个Bbox进行预测:训练阶段,利用两个框同时工作,但真正计算损失时,只去对IOU最大的框进行梯度下降和修正。两个框有不同的倾向:一个框倾向于检测细长型的物体,另一个框倾向于检测扁宽型的物体。

损失函数
损失函数的输入为标签值(gd)和预测值(pd)
损失函数具体形式:
在这里插入图片描述
公式中:
1 i o b j 1_i^{obj} 1iobj表示网络i中存在对象
1 i , j o b j 1_{i,j}^{obj} 1i,jobj表示网络i的第j个Bbox中存在对象
1 i , j n o o b j 1_{i,j}^{noobj} 1i,jnoobj表示网络i的第j个Bbox中不存在对象
yolov1将预测真实标签看作为回归问题,采用均方误差作为损失函数。
注:

  • 对象分类误差: 1 i o b j 1_i^{obj} 1iobj意味着存在对象的网络才计入误差,不存在则不计入

  • Bbox置信度误差: 1 i , j o b j 1_{i,j}^{obj} 1i,jobj意味着两个Bbox只有被选择的那个(IOU大的)才会计入损失
    1 i , j n o o b j 1_{i,j}^{noobj} 1i,jnoobj意味着不存在对象的Bbox置信度应该要尽量地低

  • Bbox位置误差: 1 i , j o b j 1_{i,j}^{obj} 1i,jobj意味着两个Bbox只有被选择的那个(IOU大的)才会计入损失,而且 ( x , y ) (x,y) (x,y) ( w , h ) (w,h) (w,h)略有不同, ( w , h ) (w,h) (w,h)有更好,目的是为了减少 ( w , h ) (w,h) (w,h)的敏感度(检测框大小对损失的影响)

  • $(\lambda_{coord}) $和 ( λ n o o b j ) (\lambda_{noobj}) (λnoobj)是超参数,用于控制不同项的比重。$(\lambda_{coord}) $设置是为了更重视坐标预测。 ( λ n o o b j ) (\lambda_{noobj}) (λnoobj)设置是为了对没有object的box的confidence loss赋予小的损失权重。

  • 将box的width和height取平方根代替原本的height和width来缓和对不同大小box预测中,损失同等偏移的问题。

  • 一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。
    在这里插入图片描述
    损失函数的设计目标是让坐标 ( x , y , w , h ) (x,y,w,h) (x,y,w,h),confidence,classification这三个方面达到很好的平衡。

训练过程
首先在Imgnet上预训练一个分类网络,网络为Imgnet的前20个卷积网络+average-pooling layer+fully connected layer
其次转换模型执行检测任务
测试过程
在测试阶段,Bbox置信度和对象概率相乘,得到存在对应类别目标的概率:
p ( c i ∣ O b j e c t ) ∗ p ( O b j e c t ) ∗ I O U p r e d t r u t h = p ( c i ) ∗ I O U p r e d t r u t h p(c_i|Object)*p(Object)*IOU_{pred}^{truth}=p(c_i)*IOU_{pred}^{truth} p(ciObject)p(Object)IOUpredtruth=p(ci)IOUpredtruth
在每一个网络中对每一个Bbox执行同样操作,得到772=98个Bbox的信息后,利用NMS算法去掉重复率较大的bounding box。
在这里插入图片描述

YoloV2 算法

YoloV2的四个创新:

  • 引入anchor,首先指定一个先验框,然后在先验框的基础上去做修正。
  • 改变gd的编码方式
  • 引入PA(passthrough)层
  • 联合训练

网络结构
在这里插入图片描述
网络输出为 N × N × B × ( C + 5 ) N×N×B×(C+5) N×N×B×(C+5)
N为输出特征图空间维度,B表示anchor的个数,C表示识别的类别个数,5表示Bbox的坐标(4个)和Bbox的置信度(1个)
Bbox的坐标:假设为 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th),由于最后的tensor是线性层,所以理论上每一个值的值域为 [ − ∞ , ∞ ] [-\infty,\infty] [,]。假设gd的映射到最后feature map的Bbox坐标为 ( g x , g y , g w , g h ) (g_x,g_y,g_w,g_h) (gx,gy,gw,gh)。那么相对于anchor,将 ( g x , g y , g w , g h ) (g_x,g_y,g_w,g_h) (gx,gy,gw,gh)进行编码。
若anchor所在负责区域在最后feature map上对应的左上角坐标为 ( c x , c y ) (c_x,c_y) (cx,cy),对应的长宽为 ( p w , p h ) (p_w,p_h) (pw,ph),那么从anchor的Bbox变换到gd的Bbox的最简单方式是对点做平移,对长宽做缩放。
在这里插入图片描述
但这种直接用 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th)去拟合是不合理的,这是因为 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th)的取值范围为 [ − ∞ , ∞ ] [-\infty,\infty] [,]。但坐标平移范围为 [ 0 , 1 ] [0,1] [0,1](feature map的相邻点距离是一个单位)。长宽缩放范围在 [ 0 , ∞ ] [0, \infty] [0,].所以需要进一步编码:
在这里插入图片描述
那么经过反向解码后:
在这里插入图片描述
( b x , b y , b w , b h ) (b_x,b_y,b_w,b_h) (bx,by,bw,bh)是在最后一层feature map上的坐标,同时为了收敛方便,也为了与最后输出数据的类别概率、置信度保持一致,需要将其进行归一化:即计算 ( b x , b y , b w , b h ) (b_x,b_y,b_w,b_h) (bx,by,bw,bh)相对于最后一层feature map的相对大小。 ( b x f w , b y f h , b w f w , b h f h ) , ( f w , f h ) (\frac{b_x}{f_w},\frac{b_y}{f_h},\frac{b_w}{f_w},\frac{b_h}{f_h}) , (f_w,f_h) (fwbx,fhby,fwbw,fhbh)(fw,fh)表示最后一层feature map的宽和高。
损失函数
yolov2的损失函数和yolov1的思想基本保持一致。
在这里插入图片描述
训练过程

  • 高分辨与预训练:由于图像分类的训练样本很多,而标注边框的检测样本较少,因此预训练阶段常采用图像分类任务进行预训练,训练卷积层提取图像特征。但图像分类样本的分辨率不是很高,因此yolov2在采用224224图像进行分类模型预训练后,再采用448448的高分辨率样本对分类模型进行微调,从而使网络特征适应高分辨率,之后再使用448*448的检测样本进行训练。
  • 多尺度训练:由于是全卷积网络,降采样的倍数是32.支持任何32倍数尺寸的图片。
  • 联合训练:由于yolov2中物体矩形框的生成并不依赖类别预测,二者是独立的。当输入监测数据时,标注信息有类别和位置,反向传播是对整个loss进行计算;当输出分类数据时,loss只计算分类loss。一般训练策略为:先在检测数据集上训练一定的epoch,待预测框的loss稳定后,再联合分类数据集、检测数据集交替训练。

yolov3

首先,yolov3采用和yolov2相同的gd编码方式,也采用了anchor的思想。同时借鉴了特征图金字塔的思想,用不同尺度的特征图来检测目标。
网络结构图
普通版:
在这里插入图片描述
YoloV3-SPP版:
在这里插入图片描述
yolov3总共输出三个不同尺度的特征图,分别是1919、3938、76*76.

  • yolov3中,只有卷积层,通过调节卷积步长控制输出特征图的尺寸。因此对输入尺寸没有特别限制。

  • yolov3借鉴了金字塔特征图思想,小尺寸特征图用于检测大尺寸物体,大尺寸特征图用于检测小尺寸物体。特征图的输出维度为NN[3*(4+1+80)],N*N为输出特征图格点数,一共3个anchor框,每个框有4维预测框数值 t x , t y , t w , t h t_x,t_y,t_w,t_h tx,ty,tw,th,1维预测框置信度,80维物体类别数。

  • yolov3总共输出3个特征图,第一个特征图下采样32倍,第二个特征图下采样16倍,第三个特征图下采样8倍。

  • concat操作和加和操作(残差链接)

  • 上采样层:将小尺寸特征图通过插值等方法,生成大尺寸图像
    输出特征图解码(前向过程)
    依据不同的输入尺寸,得到不同大小的输出特征图。在yolov3的设计中,每个特征图的每个格子中,都配置3个不同的先验框。特征图尺寸会转换为NN3H。
    三个特征图就是整个yolo输出的检测结果,检测位置(4维)、检测置信度(1维)、类别(C维)(H=4+1+C)。
    而特征图其他维度:N
    N代表检测框的参考位置信息;3表示3个不同尺度的先验框。

  • 先验框:yolov3沿用了yolov2中关于先验框的技巧,使用k-means对数据集中的标签框进行聚类,得到类别中心点的9个框,作为先验框。先验框只与检测框的w、h有关,与x,y无关。

  • 检测框解码:已知先验框和输出特征图,就可以解码检测框x,y,w,h。
    在这里插入图片描述
    σ ( t x ) \sigma(t_x) σ(tx) σ ( t y ) \sigma(t_y) σ(ty)是基于矩形框中心点左上角格点坐标的偏移量, σ \sigma σ是激活函数。 p w p_w pw p h p_h ph是先验框的宽、高,利用上述公式,计算出实际预测框的宽高 ( b w , b h ) (b_w, b_h) (bw,bh)
    在这里插入图片描述
    在这里插入图片描述

  • 检测置信度解码:物体的检测置信度,关系到算法的检测正确率和召回率。置信度在输出H维中占固定一位,由sigmoid函数解码即可,解码之后数值区间在[0,1]中。

  • 类别解码:假定数据集中有C个类别,类别数在H维输出中占了C维,每一维独立代表着一个类别的置信度。利用sigmoid函数替代yolov2中的softmax,取消了类别之间的互斥,可以使网络更加灵活。

三个特征图一共可以解码出 N 1 ∗ N 1 ∗ 3 + N 2 ∗ N 2 ∗ 3 + N 3 ∗ N 3 ∗ 3 N_1*N_1*3+N_2*N_2*3+N_3*N_3*3 N1N13+N2N23+N3N33个Bbox以及相应的类别、置信度。
在训练阶段:将所有Bbox全部送入打标签函数,进行最后一步的标签以及损失函数计算
在推理阶段:选取一个置信度阈值,过滤掉低阈值Bbox,在经过NMS算法,就可以输出整个网络的预测结果。
训练策略与损失函数(反向过程)

  • 预测框一共分为三种情况:正例、负例、忽略样例
  • 正例:任取一个ground truth 与全部Bbox计算IOU,IOU最大的预测框即为正例,且一个预测框,只能分配给一个ground truth。正例产生置信度loss、检测框loss、类别loss。
  • 忽略样例:正例除外且与任意ground truth 的IOU值大于阈值的。忽略样例不产生任何loss
  • 负例:正例除外且与全部ground truth的IOU值小于阈值的。负例只产生置信度loss,置信度标签为0
    损失函数
    在这里插入图片描述
    YOLOv3的Loss为三个特征图loss之和:
    L o s s = l o s s N 1 + l o s s N 2 + l o s s N 3 Loss = loss_{N1}+loss_{N2}+loss_{N3} Loss=lossN1+lossN2+lossN3
  • λ \lambda λ为权重常数,控制检测框loss、obj置信度loss、noobj置信度loss之间的比例,通常负例的个数是正例的几十倍以上,可以通过权重超参控制检测效果。
  • 1 i j o b j 1_{ij}^{obj} 1ijobj若正例则输出1,否则为0; 1 i j n o o b j 1_{ij}^{noobj} 1ijnoobj若是负例则输出1,否则为0;忽略样例都输出0
  • x , y , w , h x,y,w,h x,y,w,h使用MSE作为损失函数,也可以使用smooth L1 Loss 作为损失函数。smooth L1可以使训练更加平滑。置信度、类别标签是0,1二分类,所以使用交叉熵作为损失函数。
    训练策略解释
  • ground truth不按照中心点分配对应的预测Bbox,这是因为yolov3一共产生3个特征图,3个特征图上的cell中心是由重合的。训练阶段可能特征图1的Bbox最契合,但推理阶段可能特征图2的Bbox置信度最高。所以yolov3的训练是依据预测值寻找IOU最大的预测框作为正例。
  • Yolov1中的置信度标签,就是预测框与真实框的IOU,而Yolov3是1,置信度意味着该预测框是或者不是一个真实物体,是一个二分类,所以标签是[0,1]更加合适。
  • 忽略样例的设置,是由于yolov3使用了多尺度特征图,不同尺度的特征图之间会有重合检测部分。即当有两个Bbox与某一ground truth的IOU都很高时,如果给其中一个Bbox强行打0的标签,网络学习效果不理想。

SSD

SSD设计理念:

  • 采用多尺度特征图用于检测:多尺度是指采用大小不同的特征图,较大的特征图用于检测小的目标,较小的目标用于检测大目标
  • 采用卷积进行检测:SSD直接采用卷积对不同的特征图进行提取检测结果。对于形状 m × n × p m×n×p m×n×p的特征图,只需要采用 3 × 3 × p 3×3×p 3×3×p的小卷积核从而得到检测值。
  • 设置先验框:SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或长宽比不同的先验框,预测的边界框是以先验框为基准的,可以在一定程度上减少训练难度。通常情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异。如下图所示,可以看到每个单元使用了4个不同的先验框。
    在这里插入图片描述
    SSD中对于每个单元的每个先验框,其输出一套独立的检测值,对应一个边界框,主要是两部分:第一部分是各个类别的置信度,SSD中图片背景作为一个特殊类别,即当检测目标类别总共有c个类别,那么SSD需要预测 c + 1 c+1 c+1个置信度(第一个置信度作为不含目标或属于背景的评分),在预测过程中,置信度最高的那个类别就是边界框所属的类别;特别的,当第一个置信度最高时,表示边界框并不包含目标。第二部分是边界框的location,包含4个值 ( c x , c y , w , h ) (c_x,c_y,w,h) (cx,cy,w,h),分别表示边界框的中心坐标以及宽高。真实预测值是边界框相对于先验框的转换值,假如先验框用 d = ( d c x , d c y , d w , d h ) d = (d^{cx},d^{cy},d^w,d^h) d=(dcx,dcy,dw,dh)表示,其对应边界框用 b = ( b c x , b c y , b w , b h ) b=(b^{cx},b^{cy},b^w,b^h) b=(bcx,bcy,bw,bh),那么边界框的预测值 l l l b b b相对于 d d d的转换值:
    l c x = ( b c x − d c x ) / d w l c y = ( b c y − d c y ) / d h l w = l o g ( b w / d w ) l h = l o g ( b h / d h ) l^{cx}=(b^{cx}-d^{cx})/d^w\\ l^{cy}=(b^{cy}-d^{cy})/d^h\\ l^w=log(b^w/d^w)\\ l^h=log(b^h/d^h) lcx=(bcxdcx)/dwlcy=(bcydcy)/dhlw=log(bw/dw)lh=log(bh/dh)
    上述过程称为边界框的编码,预测时,需要反向解码,即从预测值 l l l中得到边界框的真实位置 b b b:
    b c x = d w l c x + d c x b c y = d h l c y + d c y b w = d w e x p ( l w ) b h = d h e x p ( l h ) b^{cx}=d^wl^{cx}+d^{cx}\\ b^{cy}=d^{h}l^{cy}+d^{cy}\\ b^w=d^wexp(l^w)\\ b^h=d^hexp(l^h) bcx=dwlcx+dcxbcy=dhlcy+dcybw=dwexp(lw)bh=dhexp(lh)
    trick:设置variance超参数来调整检测值,通过控制参数variance_encode_in_target来控制两种模式,当其为True时,表示variance被包含在预测值中,即上述解码过程;当其为False时,需要手动设置超参数variance,用于对 l l l的4个值进行缩放,即:
    b c x = d w ( v a r i a n c e [ 0 ] ∗ l c x ) + d c x b c y = d h ( v a r i a n c e [ 1 ] ∗ l c y ) + d c y b w = d w e x p ( v a r i a n c e [ 2 ] ∗ l w ) b h = d h e x p ( v a r i a n c e [ 3 ] ∗ l h ) b^{cx}=d^w(variance[0]*l^{cx})+d^{cx}\\ b^{cy}=d^{h}(variance[1]*l^{cy})+d^{cy}\\ b^w=d^wexp(variance[2]*l^w)\\ b^h=d^hexp(variance[3]*l^h) bcx=dwvariance[0]lcx)+dcxbcy=dhvariance[1]lcy)+dcybw=dwexp(variance[2]lw)bh=dhexp(variance[3]lh)
    对于一个大小为 m × n m×n m×n的特征图,共有mn个单元,每个单元设置的先验框数目记为K,那么每个单元共需要 ( c + 4 ) K (c+4)K (c+4)K个预测值,所有的单元共需要 ( c + 4 ) K m n (c+4)Kmn (c+4)Kmn个预测值。由于SSD采用卷积做检测,所以需要 ( c + 4 ) k (c+4)k (c+4)k个卷积核完成特征图的检测过程。
    网络结构
    在这里插入图片描述
    在这里插入图片描述
    SSD采用VGG16作为基础模型,在VGG16的基础上新增了卷积层来获取更多的特征图用于检测。
    训练策略
  • 先验框匹配(划分正负样本),SSD的先验框和ground truth(真实目标)的匹配原则有两点:首先,对图片中每个ground truth,找到与其IOU最大的先验框,从而保证每个ground truth一定与某个先验框匹配。通常称与ground truth匹配的先验框为正样本;当一个先验框没有与任何ground truth进行匹配,那么该先验框只能与背景匹配,就是负样本。然后,对于剩余的先验框,若某个ground truth的IOU大于某个阈值,那么该先验框也可以与这个ground truth进行匹配,也就是说某个ground truth可能与多个先验框匹配(但一个先验框只能与一个ground truth)。
    尽管一个ground truth可以与多个先验框匹配,但ground truth相对先验框还是太少了,即负样本相对于正样本过多。因此为了保证正负样本尽量平衡,SSD采用hard negative mining,即对负样本进行抽样,抽样时按照置信度误差进行降序排列,选取误差较大的top-k作为训练的负样本。
  • 损失函数:位置误差与置信度误差的加权和:
    L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(x, l,g)) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
    其中N为先验框的正样本数量。 x i j p ∈ { 1 , 0 } x_{ij}^p\in \{1,0\} xijp{1,0}为一个指示参数,即当其为1时表示第 i i i个先验框与第 j j j个ground truth匹配,并且ground truth的类别为 p p p c c c为类别置信度预测值。 l l l为先验框的所对应边界框的位置预测值,而 g g g是ground truth的位置参数。
    位置误差采用 smooth L1 loss,定义为:
    在这里插入图片描述
    在这里插入图片描述
    位置误差只对正样本进行计算( x i j p x_{ij}^p xijp的存在)。同时ground truth的g进行编码得到 g ^ \widehat{g} g ,当variance_encoded_in_target=True时,编码需要加上variance:
    在这里插入图片描述
    置信度误差采用softmax loss:
    在这里插入图片描述
    权重系数为 α \alpha α,通过交叉验证设置为1.
  • 数据扩增(Data Augmentation):水平翻转,随机裁剪颜色扭曲、随机采集块域
    预测过程
    对于每个预测框,首先根据类别置信度确定其类别及置信度值,并过滤属于背景的预测框。然后根据置信度阈值过滤掉阈值较低的预测框。之后,根据先验框得到其真实的位置参数(解码后需要进行clip/裁剪,防止预测值位置超出图片)。解码后,需要根据置信度进行降序排列,然后保留top-k个预测框。最后进行NMS算法,过滤掉那些重叠度较大的预测框,最后剩余的预测框就是检测结果。

R-CNN

网络结构
在这里插入图片描述

  • Extract Region Proposal,使用Selective Search的方法提取2000个候选区域。
  • Compute CNN features,使用CNN网络计算每个Region Proposal的feature map
  • Classify regions,将提取到的feature输入至SVM中进行分类
  • Non-maximum suppression,去掉重复的box
  • Bounding box regression,位置精修,使用回归器精细修正候选框的位置。
    ** Extract Region Proposal**
    使用selective search方法选择候选区域,即输入一张图片,
    按步骤生成region proposals:
  1. 使用一种分割方法,将图片分割称比较小的区域
  2. 计算所有邻近区域之间的相似性(颜色、纹理、尺度等)
  3. 将相似度比较高的区域合并在一起
  4. 计算合并区域和临近区域的相似度
  5. 重复3、4过程,直到整个图片变成一个区域
    在每次迭代中,形成更大的区域并将其添加到区域提议列表中。这种自下而上的方式可以创建从小到大的不同scale的region proposal。
    Compute CNN features
  • Warped region:由于region proposal都是不同size的,同时输入神经网络的图片需要有相同的size,因此,需要对每个region proposal进行缩放至固定大小。缩放方法有:
    各向异性缩放:即不管图片的尺寸,直接resize至固定大小,但会导致图片发生形变
    各向同性缩放:两种办法。先扩充后裁剪:即在原始图片中把bounding box的边界进行扩展延伸成正方形,然后再进行裁剪;先裁剪后扩充:先把bounding box图片裁剪出来,然后用固定的背景颜色填充成正方形图片

  • Training:预训练(pre-training)RCNN首先采用大的数据集训练AlexNet,得到一个预训练的分类网络模型。微调(fine-tuning)使用warped region proposals来微调AlexNet的参数,即微调AlexNet来对region proposal进行分类。

  • Testing:输入region proposal,然后AlexNet的FC7层输出4096维的feature map,将这些特征保存起来,供后续分类使用。
    Classify regions
    R-CNN采用SVM进行分类,对每个类别都会训练一个SVM分类器,共有N(21)个分类器。

  • training:训练过程中,SVM的输入包括两部分
    在这里插入图片描述
    (1)CNN feature:即CNN网络(AlexNet)为每个region proposal提取的feature
    (2)Ground truth labels:在训练时为每个region proposal附上一个label。在SVM分类过程中,当IOU<0.3时,为负样本;正样本是ground truth box。然后SVM分类器会输出一个预测的label,用SVM输出label与ground truth label计算loss,训练SVM。在这里插入图片描述

  • testing:输入由AlexNet的FC7层输出的feature map,然后输出类别预测值。
    Non-maximum suppression
    经SVM分类后,我们会有2000个region proposal的class probability,之后,我们根据“有无物体”这一类别过滤掉一大批region proposal。同时当某个候选框的最大class probability<阈值时,过滤掉这些region proposal。剩余box的情况可能如下图所示,当有多个box相互重叠,由于目标检测的目标是一个物体配一个box,因此,我们需要用非极大值抑制(NMS),即:
    在这里插入图片描述
    Bounding box regression
    在这里插入图片描述
    比如上述情况下,我们需要对预测得到的region proposal进行精修。

Faster R-CNN

检测流程:
在这里插入图片描述
在这里插入图片描述
由网络结构图可知,模型分为四部分:

  • conv layers:利用一组基础的conv+relu+pooling层提取图片的feature map。
  • region proposal networks:RPN用于生成region proposals。分为两条支线。一条支线利用softmax判断anchors是否存在物体,另一条支线利用bounding box regression修正anchors获得精确的proposals
  • roi pooling:收集输入的features map和proposals,综合这些信息,然后提取proposal的feature maps,送入后续全连接层来判断目标类别。
  • classification:利用proposal feature maps计算proposal的类别,同时再次利用bounding box regression获得检测框最终的精确位置。
    Conv layers
    对于任意大小的PQ的图像,首先缩放固定至MN,再送入网络中。Conv layers包括一组基础的conv+relu+pooling层,来提取图片特征。同时,所有的conv层都是:kernel size=3;pad=1;stride=1.所有的pooling层都是:kernel size=2;pad=0;stride=2.
    conv layers做扩边处理并利用33卷积核进行卷积操作,可以保证conv层输入和输出大小不变。
    在这里插入图片描述
    pooling层将输入缩放至1/2,即M
    N矩阵经过(kernel size=2,stride=2)的pooling变为(M/2)*(N/2)

Region proposal Networks(RPN)
在这里插入图片描述
RPN为两条支线。上面支线利用softmax分类anchors,从而活得positive和negative类(判断anchors是否存在物体)。下面支线用于计算anchors的bounding box regression偏移量,从而获得更精确的proposal。最终的proposal层总和positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。
在这里插入图片描述

  • anchors:是生成的一组矩阵,例如
    在这里插入图片描述
    其中每行的4个值分别表示 { x 1 , y 1 , x 2 , y 2 } \{x_1,y_1,x_2,y_2\} {x1,y1,x2,y2},即矩形左上角和右下角的点坐标。9个矩形共有三种形状,长宽比分别为: { 1 : 1 , 1 : 2 , 2 : 1 } \{1:1,1:2,2:1\} {1:1,1:2,2:1}.(多尺度)
    在这里插入图片描述

  • softmax前后都接一个reshape layer,为了便于softmax分类,输入维度 [ b a t c h s i z e , c h a n n e l , h e i g h t , w i d t h ] [batch_size,channel,height,width] [batchsize,channel,height,width],即 [ 1 , 2 ∗ 9 , H , W ] [1,2*9,H,W] [1,29,H,W],为了再softmax分类进行二分类,第一个reshape layer将其变为 [ 1 , 2 , 9 ∗ H , W ] [1,2,9*H,W] [1,2,9H,W],即单独用一个维度进行softmax分类,第二个reshape layer将其回复为原状。

  • bounding box regression原理(精度修正)
    当预测框与真实框接近但定位并不准确时,需要对其进行修正。
    对于窗口,一般采用四维向量 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)表示,即窗口的中心点坐标和宽高。如下图,红框A表示原始positive anchors,绿色框G代表目标GT,那么我们目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口 G ′ G^{'} G

    在这里插入图片描述
    简单流程:
    先做平移:
    G x ′ = A w ⋅ d x ( A ) + A x G y ′ = A h ⋅ d y ( A ) + A y G_x^{'}=A_w·d_x(A)+A_x\\ G_y^{'}=A_h·d_y(A)+A_y Gx=Awdx(A)+AxGy=Ahdy(A)+Ay
    再做缩放:
    G w ′ = A w ⋅ e x p ( d w ( A ) ) G h ′ = A h ⋅ e x p ( d h ( A ) ) G_w^{'}=A_w·exp(d_w(A))\\ G_h^{'}=A_h·exp(d_h(A)) Gw=Awexp(dw(A))Gh=Ahexp(dh(A))
    当anchors A和GT比较接近时,可以使用线性回归模型。即 Y = W X Y=WX Y=WX.那么对于bounding box regression,输入X是cnn feature map,定义为 ϕ \phi ϕ,训练传入A与GT之间的变换量( t x , t y , t w , t h t_x,t_y,t_w,t_h tx,ty,tw,th)。输出是 d x ( A ) , d y ( A ) , d w ( A ) , d h ( A ) d_x(A),d_y(A),d_w(A),d_h(A) dx(A),dy(A),dw(A),dh(A)
    目标函数为: d ∗ ( A ) = W ∗ T ⋅ ϕ ( A ) d_*(A)=W_*^{T}·\phi(A) d(A)=WTϕ(A)
    其中 ϕ ( A ) \phi(A) ϕ(A)是对应anchor的feature map组成的特征向量, W ∗ T W_*^{T} WT是需要学习的参数, d ∗ ( A ) d_*(A) d(A)是得到的预测值(*表示 x , y , w , h x,y,w,h x,y,w,h)。损失函数采用L1损失函数:
    在这里插入图片描述
    那么函数优化目标为:
    在这里插入图片描述
    那么对于Faster R-CNN,positive anchor与ground truth之间的平移量 ( t x , t y ) (t_x,t_y) (tx,ty)与尺度因子 t w , t h t_w,t_h tw,th如下:
    t x = ( x − x a ) / w a t y = ( y − y a ) / h a t w = l o g ( w / w a ) t h = l o g ( h / h a ) t_x=(x-x_a)/w_a\\ t_y=(y-y_a)/h_a\\ t_w=log(w/w_a)\\ t_h=log(h/h_a) tx=(xxa)/waty=(yya)/hatw=log(w/wa)th=log(h/ha)
    那么对于训练bounding box regression网络回归分支,输入为CNN feature ϕ \phi ϕ,监督信号是anchor与GT的差距 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th),即训练目标是在输入 ϕ \phi ϕ的情况下使网络输出与监督信号尽可能接近。

  • 对proposals进行bounding box regression

在这里插入图片描述
RPN第二条分支存储的信息为 [ 1 , 4 ∗ 9 , H , W ] [1,4*9,H,W] [1,49,H,W],即每个feature maps每个点都有9个anchors,每个anchors又都有4个用于回归的变换量:
[ d x ( A ) , d y ( A ) , d w ( A ) , d h ( A ) ] [d_x(A),d_y(A),d_w(A),d_h(A)] [dx(A),dy(A),dw(A),dh(A)]
那么对于整个RPN输出为:

  1. 大小为HW2k的positive/negative softmax分类特征矩阵
  2. 大小为HW4k的regression坐标回归特征矩阵。
  • Proposal Layer:综合所有 [ d x ( A ) , d y ( A ) , d w ( A ) , d h ( A ) ] [d_x(A),d_y(A),d_w(A),d_h(A)] [dx(A),dy(A),dw(A),dh(A)]变换量和positive anchors计算出精准的proposal,送入后续ROI pooling layer。
    Proposal Layer的三个输入:positive vs negative anchors分类器结果rpn_cls_prob_reshape;对应的bbox reg的 [ d x ( A ) , d y ( A ) , d w ( A ) , d h ( A ) ] [d_x(A),d_y(A),d_w(A),d_h(A)] [dx(A),dy(A),dw(A),dh(A)]变换量rpn_bbox_pred;im_info。另外还有参数feat_stride=16.
    im_info:原始图片大小为PQ,送入Faster R-CNN前需要进行reshape至固定MN,而 i m i n f o = [ M , N , s c a l e f a c t o r ] im_info=[M,N,scale_factor] iminfo=[M,N,scalefactor]保存了缩放操作的所有信息,同时经过Conv Layers,尺寸缩小16倍,,而feat_stride=16保存该信息。im_info用于计算anchor偏移量。
    在这里插入图片描述
    RoI pooling
    RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络中。
    RoI Pooling层的2个输入:
  1. 原始的feature maps
  2. RPN输出的proposal boxes
    RoI Pooling layer forward过程:
  • 由于proposal是对应MxN尺度的,所以首先使用spatial_scale参数将其映射回(M/16)x(N/16)大小的feature map尺度
  • 再将每个proposal对应的feature map区域水平分为 p o o l e d − w × p o o l e d h pooled-w×pooled_h pooledw×pooledh的网络
  • 对网格的每一份都进行max pooling处理。
    经过上述操作,即使对于不同大小的proposal,其输出结果都是 p o o l e d − w × p o o l e d h pooled-w×pooled_h pooledw×pooledh固定大小,实现固定长度输出。
    Classification
    利用已经获得proposal feature maps,通过全连接层和softmax计算每个proposal具体属于那个类别,输出cls_prob概率向量;同时利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。
    在这里插入图片描述

FPN(基于特征金字塔的目标检测算法)

图像金字塔
在这里插入图片描述

  • 图片缩放到不同的大小,分别预测
  • 训练和预测都极为耗时
  • 本质上只是为了某种分辨率训练的
    FPN
    在这里插入图片描述
    FPN结合了浅层的高分辨率和深层的丰富语意。
    FPN包含两部分:第一部分是自底向上的过程;第二部分是自顶向下和侧边链接的融合过程。
    在这里插入图片描述

RetinaNet

为解决样本不平衡的痛点,提出focal loss。
为什么one-stage精度低:

  • 正负样本不平衡(简单难分类别不平衡)
  • 在一张普通图片中,目标所占比例远远小于背景所占比例,所以两类候选框的例子中以negative example为主。
  • 针对所有的negative example,数量过多造成它的loss太大,以至于主导了损失函数,不利于收敛
  • 针对单个negative example来说,单个example的loss很小,反向计算时梯度小。梯度小造成easy negative example对参数的收敛作用很有限,我们更需要loss大的对参数收敛影响更大的example,即hard positive/negative
    focal loss
    F L ( p t ) = { − α t ( 1 − p t ) γ l o g ( p t ) − ( 1 − α t ) p t γ l o g ( 1 − p t ) FL(p_t)=\begin{cases} -\alpha_t(1-p_t)^\gamma log(p_t)\\ -(1-\alpha_t)p_t^\gamma log(1-p_t) \end{cases} FL(pt)={αt(1pt)γlog(pt)(1αt)ptγlog(1pt)
    其中 p t p_t pt为:
    p t = { p 1 − p p_t=\begin{cases} p\\ 1-p \end{cases} pt={p1p
    p为正样本的预测概率

Mask R-CNN

线性插值
假如已知 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) x 1 , y 1 x_1,y_1 x1,y1,要计算 [ x 0 , x 1 ] [x_0,x_1] [x0,x1]区间内某一位置 x x x在直线上的y值,即
在这里插入图片描述
可以通过斜率相等来构建 y y y x x x之间的关系:
y − y 0 x − x 0 = y − y 1 x − x 1 = = = > y = x − x 0 x 1 − x 0 y 1 + x 1 − x x 1 − x 0 y 0 \frac{y-y_0}{x-x_0}=\frac{y-y_1}{x-x_1}===>\\ y=\frac{x-x_0}{x_1-x_0}y_1+\frac{x_1-x}{x_1-x_0}y_0 xx0yy0=xx1yy1===>y=x1x0xx0y1+x1x0x1xy0
即用 x x x x 0 x_0 x0 x 1 x_1 x1的距离作为权重( x − x 0 x-x_0 xx0作归一化作用),用于 y 0 y_0 y0 y 1 y_1 y1的加权。
双线性插值
在这里插入图片描述
本质上是在两个方向上做线性插值,即:
我们要得到P点的插值,那么可以先在 x x x方向上对 Q 11 Q_{11} Q11 Q 21 Q_{21} Q21之间做线性插值得到 R 1 R_1 R1,同理 R 2 R_2 R2可得。然后在 y y y方向上对 R 1 R_1 R1 R 2 R_2 R2进行线性插值可以得到最终的P。计算流程:

  • 首先在 x x x方向进行线性插值,得到:
    f ( R 1 ) ≈ x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) w h e r e R 1 = ( x , y 1 ) f ( R 2 ) ≈ x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) w h e r e R 2 = ( x , y 2 ) f(R_1)\approx \frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21}) \qquad where R_1=(x,y_1)\\ f(R_2)\approx \frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22}) \qquad where R_2=(x,y_2) f(R1)x2x1x2xf(Q11)+x2x1xx1f(Q21)whereR1=(x,y1)f(R2)x2x1x2xf(Q12)+x2x1xx1f(Q22)whereR2=(x,y2)
    然后在 y y y方向进行线性插值,得到:
    f ( P ) ≈ y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) f(P)\approx \frac{y_2-y}{y_2-y_1}f(R_{1})+\frac{y-y_1}{y_2-y_1}f(R_{2}) f(P)y2y1y2yf(R1)+y2y1yy1f(R2)
    由此我们得到想要的结果 f ( x , y ) f(x,y) f(x,y)
    f ( x , y ) ≈ f ( Q 11 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x 2 − x ) ( y 2 − y ) + f ( Q 21 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x 2 − x ) ( y 2 − y ) + f ( Q 12 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x 2 − x ) ( y − y 1 ) + f ( Q 22 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x − x 1 ) ( y − y 1 ) f(x,y)\approx \frac{f(Q_{11})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y_2-y)+\frac{f(Q_{21})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y_2-y)+\frac{f(Q_{12})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y-y_1)+\frac{f(Q_{22})}{(x_2-x_1)(y_2-y_1)}(x-x_1)(y-y_1) f(x,y)(x2x1)(y2y1)f(Q11)(x2x)(y2y)+(x2x1)(y2y1)f(Q21)(x2x)(y2y)+(x2x1)(y2y1)f(Q12)(x2x)(yy1)+(x2x1)(y2y1)f(Q22)(xx1)(yy1)
    ROI Align
    在Faster R-CNN中,有两次整数化过程:
  1. region proposal的 x , y , w , h x,y,w,h x,y,w,h通常是小数,但为了方便操作会把它进行整数化。
  2. 将整数化后的边界区域平均分割成K*K个单元,对每一单元的边界进行整数化。
    但经过上述整化操作,候选框与最开始回归的位置有一定的偏差,并会影响检测或分割的准确度。
    而ROI Align方法取消整数化操作,保留小数,利用双线性插值获取坐标为浮点数的像素点上的图像数值。
    ROI Align操作流程:
    在这里插入图片描述
    如上图,虚线部分表示feature map,实线表示ROI,
  • 以22为例,将ROI切分成22的单元格。
  • 采样点数是4,将每个单元格均分成四个小方格(红线所示),每个小方格的中心就是采样点。
  • 采样点的坐标通常为浮点数,所以需要对采样点进行双线性插值,即可得到该像素点的值。
  • 对每个单元格内的四个采样点进行maxpooling,即可得到最终的ROIAlign的结果。
    损失函数
    Mask RCNN的损失为多任务损失:
    L = L c l s + L b o x + L m a s k L=L_{cls}+L_{box}+L_{mask} L=Lcls+Lbox+Lmask
    在这里插入图片描述
    L m a s k L_{mask} Lmask:假设一共有K个类别,那么mask分割分支的输出维度为KMM,对于M*M中的每个点,都会输出K个二值Mask(每个类别使用sigmoid输出)。
    计算loss时,判断该像素属于哪个类,哪个类的sigmoid输出才会计算损失。
    在这里插入图片描述
    在测试时,通过分类分支预测的类别来选择相应的mask预测。
  • 比较FCN,FCN是对每个像素进行多类别softmax分类,然后计算交叉熵损失,但这种方式会造成类间竞争,而每个类别使用sigmoid输出并计算二值损失,可以避免类间竞争。

Fcos

回顾

  • CNN:卷积池化操作在提取图像特征的同时,降低其尺度,提高维度;接全连接层,将多维立体feature map转化为固定长度的特征向量;利用特征向量进行分类。
    缺点:全连接操作破坏了图像目标之间空间关系;只有图像大小相同,最后层的feature map拉平后才能保证长度一致。
  • FCN网络结构图:
    在这里插入图片描述
    将CNN最后三层全连接换成114096、114096、111000的三个卷积层;保存1/8、1/16、1/32的feature map,分别执行对应倍数的上采样。
  • anchor box(锚框)缺点:检测表现效果对于锚框的尺寸、长宽比、数目非常敏感,因此锚框相关的超参数需要仔细调节;锚框的尺寸和长宽比是固定的,那么检测器在处理形变较大的候选对象时比较困难,尤其是对于小目标。同时预先定义的锚框还限制了检测器的泛化能力(需要对不同对象大小或长宽比进行特定设计);为提高召回率,需要在图像上放置密集的锚框,但这些锚框大多数属于负样本,造成了正负样本之间的不均衡;大量锚框增加了计算交并比时计算量和内存使用。
    FCOS
    网络结构图:

在这里插入图片描述

  • 全卷积一节检测器:FCOS首先使用Backbone CNN(用于提取特征的主干架构CNN),s为feature map之前的总步伐。
  • anchor-based检测器将输入图像上的位置作为锚框的中心点,并对这些锚框进行回归 但FCOS与anchor-based检测器不同,FCOS直接对feature map中每个位置对应原图的边框都进行回归,即FCOS直接把每个位置都作为训练样本。
  • anchor-based检测器在训练时,当anchor对应的边框与真实边框交并比大于一定阈值,将其设为正样本,并且把交并比最大的类别作为这个位置的类别。但在FCOS中,位置(x,y)落入任何真实边框,认为其是一个正样本,它的类别标记为这个真实边框的类别。(存在问题:标注的真实边框重叠时,位置(x,y)映射到原图中可能会落到多个真实边框,那么这种情况下这个位置被认为模糊样本。解决方式:多级预测。)
  • FCOS会训练C个二元分类器(C是类别数目)
    FCOS损失函数
    L ( { p x , y } , { t x , y } ) = 1 N p o s ∑ x , y L c l s ( p x , y , c x , y ∗ ) + λ N p o s ∑ x , y 1 { c x , y > 0 } L r e g ( t x , y , t x , y ∗ ) L(\{p_{x,y}\},\{t_{x,y}\})=\frac{1}{N_{pos}}\sum_{x,y} L_{cls}(p_{x,y},c_{x,y}^*)+\frac{\lambda}{N_{pos}}\sum_{x,y} 1_{\{c_{x,y}>0\}}L_{reg}(t_{x,y},t_{x,y}^*) L({px,y},{tx,y})=Npos1x,yLcls(px,y,cx,y)+Nposλx,y1{cx,y>0}Lreg(tx,y,tx,y)
    L c l s L_{cls} Lcls是类别损失, L r e g L_{reg} Lreg是交并比损失
    FPN对FCOS纪念性多级预测
    两个问题:
  • 基于锚框的检测器由于大的步伐导致低召回率,需要通过降低正的锚框所需的交并比分数来进行补偿。
  • 真实边框的重叠可能会在训练过程中造成难以处理的歧义,这种模糊性导致基于FCN的检测器性能下降。
    因此FCOS采用类似FPN中的多级检测,在不同级别的特征层检测不同尺寸的目标。
    基于锚框的检测器将不同尺寸的锚框分配到不同级别大的特征层,但FCOS通过直接限定不同特征级别的边界框的回归范围进行分配。
    FCOS在不同的特征层之间共享信息,不仅使检测器的参数效率高,而且提高了检测性能。
    Center-ness
    距离目标中心较远的位置产生很多低质量的预测边框。
    为抑制这些低质量的预测边界框,而不引入任何超参数,FCOS添加了单层分支,与分类分支并行,来预测Center-ness位置。
    c e n t e r − n e s s = min ⁡ ( l ∗ , r ∗ ) max ⁡ ( l ∗ , r ∗ ) × min ⁡ ( t ∗ , b ∗ ) max ⁡ ( t ∗ , b ∗ ) center-ness=\sqrt{\frac{\min(l^*,r^*)}{\max(l^*,r^*)}\times \frac{\min(t^*,b^*)}{\max(t^*,b^*)}} centerness=max(l,r)min(l,r)×max(t,b)min(t,b)
    Center-ness是一种中心度,中心都取值为 [ 0 , 1 ] [0,1] [0,1],使用交叉熵损失进行训练。测试时,将预测的中心度与相应的分类分数相乘,计算最终得分(用于对检测到的边界框进行排序)。因此,中心度可以降低远离对象中心的边界框的权重。

EfficientDet

在这里插入图片描述
EfficientNet:

  • 改进baseline网络的方法:调整输入图像的大小;网络的深度(卷积层数);宽度(卷积通道数,即channel数)。
  • EfficientNet设想:设计一个标准化的卷积网络扩展方法,既可以实现较高的准确率,又可以充分地节省算力资源。(如何平衡分辨率、深度和宽度这三个维度,来实现网络在效率在准确率上的优化)
  • 复合缩放模型:在这里插入图片描述
    a ) a) a):基本模型; b ) b) b):增加宽度; c ) c) c):增加深度; e ) e) e):增大图片分辨率; d ) d) d):从三个维度进行探索增加。
    复合模型扩张方法
    问题定义:将整个卷积网络称为N,其第i个卷积层可以表示为: Y i = F i ( X i ) Y_i=F_i(X_i) Yi=Fi(Xi)
    X i X_i Xi代表输入张量, Y i Y_i Yi代表输出张量
    整个卷积网络由K个卷积层组成,可以表示为:
    在这里插入图片描述
    模型缩放尝试扩展网络深度(系数d)、宽度(系数w)和分辨率(系数r),即:
    在这里插入图片描述
    更大的网络具有更大的宽度、深度或分辨率,往往可以获得更高的精度。但只对单一维度进行扩张具有局限性(精度增益达到80%后迅速饱和)。
    因此,模型扩张的各个维度之间并不是完全独立的;对于更大的分辨率图像,应该使用更深、更宽的网络,这就意味着需要平衡各个扩张维度,而不是在单一维度进行扩张。
    结论:为了追求更好的精度和效率,在网络缩放过程中需要平衡网络宽度、深度和分辨率等综合维度。
    复合模型扩张方法
    EfficientNet的规范化符合调参方法使用了一个复合系数 ϕ \phi ϕ,来对三个参数进行综合调整:
    在这里插入图片描述
    其中 α , β , γ \alpha, \beta, \gamma α,β,γ都是常数,通过网络搜索获得。复合系数 ϕ \phi ϕ通过人工调节。具体过程:
  1. 先设计baseline网络,基于MobileNetV2+SE用神经网络搜索而来。
  2. 由上述公式,搜索获得 α , β , γ \alpha, \beta, \gamma α,β,γ
  3. 修改复合系数 ϕ \phi ϕ得到 B 1 B1 B1 B 7 B7 B7
    EfficientNet B0网络结构
    在这里插入图片描述
    在这里插入图片描述
    BIFPN
    双向跨尺度链接的加权特征融合。
    在这里插入图片描述
  • a ) a) a)为原始FPN,只有从上到下的特征融合,只有一个方向的信息流传递。
  • b ) b) b)为PANet,从上到下和从下到上的消息传递。
  • c c c为NAS-FPN,利用神经网络搜索方式得到的一个跨尺度的链接
  • d d d为BiFPN,思路:去掉没有特征融合的只有一个输入的节点(如P3和P7)(假定只有一个输入的节点相对不太重要);在相同level的原始输入和输出节点之间连接一条边(假设能融合更多特征);将该层重复多次,更多层次地融合特征。
  • 加权特征融合:不同的输入,其分辨率不同,对输出的贡献度也不同,因此,对特征融合的每一个输入上设置了可学习权重。权重范围是没有界限的,会导致训练不稳定,需要对权重做归一化。
    在这里插入图片描述
    EfficientDet架构
    在这里插入图片描述

cascade RCNN(级联RCNN)

在这里插入图片描述
(a)是Faster RCNN,作为一个baseline。(b)是迭代式的bbox回归,即前一个检测模型回归得到的bbox坐标初始化下一个检测模型的bbox,然后继续回归,这样迭代三次后得到结果。(c)是Integral Loss,表示对输出bbox的标签界定采取不同的IOU阈值,因为当IOU较高时,虽然预测得到bbox很准确,但是也会丢失一些bbox。(d)就是本文提出的cascade-R-CNN。cascade-R-CNN看起来和(b)这种迭代式的bbox回归以及(c)这种Integral Loss很像,和(b)最大的不同点在于cascade-R-CNN中的检测模型是基于前面一个阶段的输出进行训练,而不是像(b)一样3个检测模型都是基于最初始的数据进行训练,而且(b)是在验证阶段采用的方式,而cascade-R-CNN是在训练和验证阶段采用的方式。和(c)的差别也比较明显,cascade R-CNN中每个stage的输入bbox是前一个stage的bbox输出,而(c)其实没有这种refine的思想,仅仅是检测模型基于不同的IOU阈值训练得到而已。

CenterNet

在这里插入图片描述

  • HeatMap:大小为(W/4,H/4,80)输出不同类别物体中心位置。
  • Offset:大小为(W/4,H/4,2)
  • Height&Width:大小(W/4,H/4,2),预测以关键点为中心的检测框的宽高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值