classic目标检测网络笔记

本文记录各经典目标检测网络的主要特性,便于随时查找。

目录

SSD: Single Shot MultiBox Detector(2016)

Focal Loss for Dense Object Detection(RetinaNet,2017)

YOLOv3: An Incremental Improvement(2018)

CornerNet: Detecting Objects as Paired Keypoints(2018)

Objects as Points(2019)

FCOS: Fully Convolutional One-Stage Object Detection(2019)

ultralytics / yolov5(2020)

Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection(ATSS,2020)

Probabilistic Anchor Assignment with IoU Prediction for Object Detection(2020)

YOLOX: Exceeding YOLO Series in 2021(2021)

You Only Look One-level Feature(2021)


SSD: Single Shot MultiBox Detector(2016)

网络结构:单阶网络,使用多层特征进行多尺度预测。检测头部分使用卷积操作在每个特征点处生成k个边框,输出通道数为k*(c+4),其中c为类别数,意味着各类别的置信度,4为边框相较于默认框(default box)的偏置(cx,cy,w,h)。每一个特征层default box的尺度由公式

 决定,其中s_{min}为0.2,s_{max}为0.9,m为特征层数量。设置默认的长宽比a_{r}\epsilon\begin{Bmatrix} 1,2,3,\frac{1}{2},\frac{1}{3} \end{Bmatrix},则default box的宽为w_{k}^{a} = s_{k}\sqrt{a_{r}},高为h_{k}^{a} = s_{k}/\sqrt{a_{r}},并额外添加一个长宽比为1,尺度为s'_{k} = \sqrt{s_{k}s_{k+1}}。因此每个特征点产生6个default box。

匹配策略:对gt与default box进行匹配。每个gt首先匹配其对应最高jaccard overlap的default box,然后匹配所有与任意gt的IoU大于阈值0.5的default box。简化了学习过程,使网络同时从多个box中学习。同时为了避免正负样本不均衡,对所有负样本的conf进行排序取其最高者,控制正负例比例为1:3.

训练过程:网络输出(l)与标签(g)的关联是基于default box(d)的,损失函数包括置信度损失L_{conf}和定位损失L_{loc}两部分。具体的定位损失计算为:

 置信度损失为softmax损失:


Focal Loss for Dense Object Detection(RetinaNet,2017)

网络结构:采用了ResNet + Feature Pyramid Network (FPN)结构和anchor预设。检测头对每层特征层后面加两个全卷积网络FCN,其共享结构但不共享参数,分别进行cls和reg。每层特征的strides从32到512,预设anchor三种长宽比\begin{Bmatrix} 1:2,1:1,2:1 \end{Bmatrix},三个尺度\begin{Bmatrix} 2^{0},2^{1/3},2^{2/3} \end{Bmatrix},因此每层有A=9个anchor,尺度范围从32到813.每个特征点最终输出通道数为A*(c+4)。

匹配策略:将IoU大于0.5的anchor与gt匹配,将IoU小于0.4的记为背景。对于IoU在[0.4, 0.5)之间的anchor训练过程中忽略不计。

训练过程:边框回归通过计算anchor与匹配gt的偏置。对置信度使用Focal Loss,实验中使用\gamma=2, \alpha=0.25

推理阶段:为了提高速度,对每层输出以阈值0.05过滤后解码前1k得分的anchor,然后集合所有层的结果以阈值0.5进行NMS。


YOLOv3: An Incremental Improvement(2018)

网络结构:提出Darknet-53作为主干网络,并使用FPN在三个尺度上检测目标。使用K-Means聚类产生9个预设框。对COCO数据集结果为(10×13), (16×30), (33×23), (30×61), (62×45), (59× 119), (116 × 90), (156 × 198), (373 × 326),将其分到三个尺度,因此各尺度的输出通道数为3*(c+1+4)。

匹配策略:对于置信度,对每个gt匹配其IoU最高的先验框。然后对于其他先验框,若其与gt的IoU大于阈值0.5,则在训练过程中忽略,否则为负例。

训练过程:网络输出转换到输出边框的过程为:

 其中t为网络输出,p为先验anchor,b为最终输出结果。计算L_{loc}时将gt通过上式反转得到\hat{t},然后计算\hat{t}_{*}-t_{*}。分类损失L_{cls}使用logistic+BCELoss。


CornerNet: Detecting Objects as Paired Keypoints(2018)

网络结构:主干网络采用Hourglass network,其后添加两个预测模块,其包括corner pooling模块,分别预测左上角点和右下角点的热力图、两个点的embedding关系、以及边框offsets。其中corner热力图通道数为c,offsets为1,即所有类别共享边框偏置。embedding为向量,文中设定维度为1,目的是使同一gt的embedding距离更小,不同gt的距离更大。

匹配策略:对每个gt,只有两个corner为正例,其余为负例。同时通过一个2d高斯函数e^{-\frac{x^2+y^2}{2\sigma^2}}来减少gt角点附近区域点的loss值,其中xy为gt角点位置,\sigma为1/3半径,半径内的角点产生的边框至少与gt有0.3的IoU。

训练过程: 热力图即为置信度,使用Focal Loss的一种变体:

 offsets使用smooth L1 Loss。Embedding使用pull和push来进行训练:

 附:Corner pooling和作者对Hourglass网络的改进暂未记录。


Objects as Points(2019)

网络结构:核心思想是基于中心点进行目标检测。主干网络可以选择ResNet、DLA、Hourglass等,下采样倍数为4.输出为关键点热力图、偏置和边框宽高。

匹配策略:产生关键点热力图\hat{Y}\epsilon \left[0,1 \right ]^{\frac{W}{R}\times \frac{H}{R}\times C},1表示检测到关键点,0表示背景。每个gt的关键点使用高斯核函数Y_{xyc}=exp\left(-\frac{\left(x-\tilde{p}_x \right )^2+\left(y-\tilde{p}_y \right )^2}{2\sigma_{p}^{2}} \right)分布到热力图上。

训练过程:关键点热力图的目标为gt的高斯核,损失由下式计算:

 中心点偏置和尺度均使用L1loss,其中\tilde{p}为该点坐标,\hat{O}_{\tilde{p}}为输出值。

推理阶段:选择热力图中比周围8个点都高的极大值并保留前100个作为结果,因此不需要NMS操作。


FCOS: Fully Convolutional One-Stage Object Detection(2019)

网络结构:主干网络ResNet-50+FPN。其中由主干网路的经过1*1卷积和top-down连接,通过在上使用stride=2的卷积层产生,因此最终P3-7的stride分别为8,16,32,64,128。 每个特征层后面加四个卷积层来进行分类和回归。网络基于点而不是anchor框来进行预测,每个特征点产生四个坐标,其分别对应该点到gt框四条边的距离,因此不同层最后得到距离时尺度不同,因此引入一个可学习的E指数变换

匹配策略:把包含在gt框内的特征带即为正例。这样做带来两个问题:1)考虑到在大尺度特征图上stride较大可能漏掉很多目标,因此作者提出使用FPN进行多尺度预测,限制每一层预测的尺度范围。对于层i,其回归的边框满足,其中用来将gt按照尺度分给不同层。如果一个点匹配到多个gt,则取最小的gt作为目标;2)一个框内所有特征点均与之匹配,则边界处会引入很多低质量的预测框,因此作者引入了分支Center-ness,计算方式为

 中心度衡量一个点距离gt中心的距离大小,用BCELoss训练。测试时使用中心度乘以分类分数。


ultralytics / yolov5(2020)

网络结构:使用Focus+CSPDarknet-53+SPP+PANet+yolov3Head组成网络。anchor仍然由K-means聚类产生9个先验框,分至三个特征层。

匹配策略:基于三个特征层各自设置的三个默认anchor进行尺度区分。正例anchor要满足两个条件:1)该anchor与gt的宽高比值差距小于4倍;2)anchor中心点位于gt中心的三近邻处。

 训练过程:由于匹配策略的特殊性,输出中心坐标回归的范围应位于(-0.5, 1.5)之间,宽高在0~4anchor之间。网络输出与最终结果中间的关系为:

\begin{equation} \begin{aligned} p_{x,y}&=\sigma\left(t_{x,y} \right )*2-0.5\\ p_{w,h}&=\left(\sigma\left(t_{w,h} \right )*2 \right)^{2}*p_{w,h} \end{aligned} \end{equation}

然后计算所有匹配anchor与相应gt之间的CIoU作为t_{conf},conf和cls均使用Sigmoid+BCELoss。相应的1-CIoU作为


Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection(ATSS,2020)

网络结构:匹配算法是该文章核心,其可以使用到任意的网络结构中,只对训练过程作用。

匹配策略:如下图。基本思路为:首先根据中心距离选择k个距离gt最近的anchor组成预选集,然后计算预选anchor与gt的IoU,求出均值和标准差加起来作为阈值。然后以该IoU与阈值比较和中心点是否位于gt框内为标准筛选预选集,留下来的即为正例。


Probabilistic Anchor Assignment with IoU Prediction for Object Detection(2020)

匹配策略:如下图。基本思路为:第一部筛选:对于某个gt,选出与其IoU最大的anchor;第二步:对每层输出,考虑cls和iou,选择其中K个于gt最接近的anchor;第三步:对剩余anchor的得分使用GMM建模得到两个高斯分布,确定阈值并划分正负。

注意点:1)anchor的得分同时考虑其类别和box,而不是置信度,计算公式如下图:

2)得到两个高斯分布后阈值选取有四种方式,下下图,实验表明图c效果最好;

3)文中选用EM算法求解GMM模型。


YOLOX: Exceeding YOLO Series in 2021(2021)

 网络结构:基于YOLOv3-SPP,使用解耦检测头。并将yolo转换为anchor-free,使每个特征点直接输出两个偏置和预测框的宽高。

匹配策略:提出SimOTA:首先以是否在gt框内和是否在gt中心3*3区域内来筛选anchor点。然后计算这些anchor与gt的cost,然后对每个gt选择k个最小cost的pred作为正例,其余为负例。如果有一个pred匹配到多个gt则只保留cost最小的那个gt。其中的cost计算公式为:

c_{i,j}=L_{i,j}^{cls}+3.0*L_{i,j}^{reg}

 其中L_{i,j}^{cls}为分类BCELoss,L_{i,j}^{reg}为对数的iou。

训练过程:边框回归reg训练使用IoU损失,obj和cls使用BCEWithLogitsLoss。使用了MixUp和Mosaic增强,并在最后15个epoch关闭。


You Only Look One-level Feature(2021)

网络结构: 包括三个部分:backbone、encoder和decoder。主干网络使用ResNet和ResNeXt,并只用C5层(通道数2048,下采样率为32)作为输出;Encoder通过1*1卷积和3*3卷积把通道数降至512,然后加上residual blocks,其包括不同dilation rates的卷积以实现检测不同尺度的目标,如下图;Decoder分为cls和reg两个检测头,分别有2和4个卷积层。

 匹配策略:由于使用了SiSo encoder,anchor数量大量减少。在这种稀疏情况下,大gt目标容易获得更多正例匹配而小目标易被忽略。因此作者提出了Uniform Matching,即对每个gt匹配于其最近的k个anchor。同时忽略IoU>0.7的负例和IoU<0.15的正例。

训练过程:加入random shift操作,即随机将图像沿四个方向平移32像素,以增加gt匹配到好anchor的概率。此外限制anchor中心的偏移在32像素之内。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值