【模型架构】目标检测中的单阶段、两阶段、Anchor-Free和Anchor-based,以Faster-RCNN、YOLO、CornerNet、CenterNet为例

一、前言

目标检测算法中,可以按照单阶段(One-Stage)和两阶段(Two-Stage)进行划分,也可以按照Anchor-Free和Anchor-based进行划分类型。不过,目前更流行的提法是后者。

本文出现的论文的相关信息:

(1)Faster-RCNN

论文链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

代码链接:GitHub - yingxingde/FasterRCNN-pytorch: FasterRCNN is implemented in VGG, ResNet and FPN base.

(2)YOLOv1

论文链接:You Only Look Once: Unified, Real-Time Object Detection

代码链接:GitHub - yjh0410/new-YOLOv1_PyTorch

(3)CornerNet

论文链接:CornerNet: Detecting Objects as Paired Keypoints

代码链接:GitHub - princeton-vl/CornerNet

(4)CenterNet

论文链接:Objects as Points

代码链接:GitHub - xingyizhou/CenterNet: Object detection, 3D detection, and pose estimation using center point detection:

二、单、双阶段的目标检测算法

2.1 双阶段检测

双阶段目标检测算法是一种较早的目标检测框架,它分为两个主要阶段:候选区域提议生成(Proposal Generation)和候选区域分类及边界框回归(Proposal Classification)。

(1)提议生成阶段: 在这一阶段,算法首先在输入图像中生成一系列候选区域(region proposals),这些候选区域可能包含某些对象。这一步骤通常利用区域建议网络(Region Proposal Network, RPN)来完成,如在Faster R-CNN中的应用。

(2)提议分类阶段: 在第二阶段,算法对第一阶段生成的每个候选区域进行更精确的边界框回归和对象类别预测。

代表算法:RCNN、Faster RCNN

为什么要Anchor?

这是因为之前的目标检测都是模型直接回归边框的位置,而通过引入Anchor相当于加入了强先验信息,然后通过锚框再去筛选与修正,最后再得到预测框。这样做的好处在与是在Anchor的基础上做物体检测,这样要比从无到有的直接拟合物体的边框容易一些。让模型去预测Anchor与真实边框的偏移值,而不是直接预测边框的坐标。

以Faster RCNN为例说明检测过程:

Faster RCNN网络结构图

(1)特征提取:输入图像通过预训练的深度卷积神经网络(如VGG、ResNet等)作为基础网络,进行前向传播,得到特征图。这些特征图包含了图像的语义信息和空间信息。这部分对应上图conv layers。

(2)锚框生成:在特征图上,RPN使用滑动窗口(就是一个3x3的卷积,padding是1,stride=1)的方式生成一组候选框,称为锚框(anchors)。这些锚框通常覆盖了图像的各个位置和尺度,每个锚框对应着多个尺度和宽高比的候选区域。

图源自B站霹雳吧啦Wz,1.1Faster RCNN理论合集

  • 特征图的每个位置,都可以找到对应原图上的一个像素点,以该像素点为中心,画出9个不同大小和长宽比(人为经验得到,这里的9就是上图中的k,三种尺度:128x128、256x256、512x512,也就是产生在原图上的框的面积,三种比例1:1、1:2、2:1)的框,称为anchor 。这些anchor里面可能存在目标,也可能没有目标。

  • 对于每个锚框,RPN预测两个值:1)锚框中包含目标的概率(前景概率,是与不是);2)调整锚框位置以更好地匹配目标的边界框(4个,中心点xy和框的高宽)。

  • 这里作者提出了一个观点,VGG的感受野是228,但是从特征图到框的尺度却有256和512,这是来源于生活的经验,人类只需要看到一个物体的部分,也是可以检测出这个物体的(窥一斑而知全豹)。

这里的60x40就是特征图的大小(大概16倍下采样,stride=2的卷积提取4次即可),所以滑动窗口是一步步输出的

对于滑动窗口生成大约6k个的anchor,由RPN去预测2类值,概率和边界框回归参数,这样就从anchor变成了proposal(对anchor的第一个回归得到的候选框结果)。

为了便于理解,附上RPN的代码:

class RPN(nn.Module):
    def __init__(self, in_channels=512):
        super(RPN, self).__init__()
        self.conv1 = nn.Conv2d(in_channels, 512, kernel_size=3, padding=1) # 这个就是滑动窗口
        self.relu = nn.ReLU(inplace=True)
        self.cls_score = nn.Conv2d(512, 2 * 9, kernel_size=1)  # k=9
        self.bbox_pred = nn.Conv2d(512, 4 * 9, kernel_size=1)
 
    def forward(self, x):
        x = self.relu(self.conv1(x))
        rpn_cls_score = self.cls_score(x)  # 生成预测正负样本(有无物体的概率)[pos_label, neg_label]
        rpn_cls_score_softmax = F.softmax(rpn_cls_score)
        rpn_bbox_pred = self.bbox_pred(x)  # 生成bounding box的[x, y, w, h]
        return rpn_cls_score_softmax, rpn_bbox_pred

(3)特征映射和预测:RPN生成的候选框投影到特征图上获得ROI区域的特征矩阵。将每个ROI区域的特征矩阵通过 ROI pooling 层缩放到7×7大小的特征图,接着将特征图展平为vector,之后通过一系列全连接层得到预测结果。过程可以用下面这张图描述。

借用Fast RCNN,毕竟Faster RCNN=Fast RCNN+RPN

上图的左边可以理解就是RPN生成后得到的某个候选框,然后要ROI Projection到特征图上,经过池化缩放到7×7大小的特征图,再x.view展平送入两个并联的线性层,一个分类,一个回归框参数(每个类别对应4个参数,[N+1]x4,+1是因为背景)。

边界框回归器说明

NMS算法的逻辑,这里得分可以理解是一种置信度,比如RPN预测的概率值或者最后全连接预测的概率值

def nms(boxes, conf_threshold=0.7, iou_threshold=0.4):
    """
    参数:
    boxes (list): 包含边界框和置信度的列表,每个元素形状为 (x1, y1, x2, y2, class, score)。
    conf_threshold (float): 置信度阈值,低于该值的边界框将被忽略。
    iou_threshold (float): IoU 阈值,重叠超过该阈值的框将被抑制。
    返回:
    bbox_list_new (list): 保留的边界框列表。
    """

    bbox_list_thresholded = []
    bbox_list_new = []
    # 根据置信度分数从高到低排序
    boxes_sorted = sorted(boxes, reverse=True, key=lambda x: x[5])
    # 过滤掉置信度低于阈值的边界框
    for box in boxes_sorted:
        if box[5] > conf_threshold:
            bbox_list_thresholded.append(box)
    while bbox_list_thresholded:
        # 选择当前置信度最高的边界框
        current_box = bbox_list_thresholded.pop(0)
        bbox_list_new.append(current_box)
        # 比较剩余的边界框与当前框的 IoU,并过滤掉重叠超过阈值的框
        bbox_list_thresholded = [
            box for box in bbox_list_thresholded
            if box[4] != current_box[4] or iou(current_box[:4], box[:4]) <= iou_threshold
        ]
    return bbox_list_new

2.2 单阶段检测

单阶段目标检测算法通过一个阶段完成目标的类别预测和边界框回归,简化了检测流程,通常能提供更快的推理速度。

(1)直接预测: 在单一前向传播中完成目标检测任务,无需生成候选区域。它们通过密集的网格或锚框直接预测目标的类别和位置。(无需生成候选区域,再进行回归预测)。

代表算法:YOLO、SSD

以YOLO为例说明检测过程:

单阶段网络:YOLO没有显式求解region proposal的过程。Faster R-CNN中尽管RPN与fast rcnn共享卷积层,但是在模型训练过程中,需要反复训练RPN网络和fast rcnn网络。相对于R-CNN系列的"看两眼"(候选框提取与分类),YOLO只需要Look Once(经典)。

YOLO只是一个回归问题,而Faster R-CNN将检测结果分为两部分求解:物体类别(分类问题)、物体位置即bounding box(回归问题)。

YOLOv1的核心思想就是利用整张图作为网络的输入,直接在输出线性层回归bounding box的位置和bounding box所属的类别。虽然,Faster RCNN中也直接用整张图作为输入,但是Faster-RCNN整体还是采用了RCNN那种 proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了(也是端到端网络),而YOLOv1则采用直接回归的思路(值得一提的是,YOLOv1其实是一个anchor-free的网络)。

首先,将一幅图像分成SxS个网格(grid cell,这个是固定死的,比如下面狗狗的图,就是固定好的7x7),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。那么,怎么知道某个object的中心落在这个网格了呢?是根据标注框GT知道的。

随后,每个网格要预测B个bounding box(实验中B=2),每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值(置信度,和Faster RCNN的概率不一样,是YOLO中独有的预测参数,代表预测出来的boundig box里越有可能包含物体)。

YOLOv1的流程图

因此,每个网格预测2个bounding box,每个bounding box有5个参数,再加上VOC数据集有20个类别,一共是预测30个参数。

YOLO网络的输出介绍

整个网络的结构图如下面所示:

YOLOv1的网络结构,其实就是卷积特征提取,最后用2个全连接做回归和分类,那么中间那部分卷积特征提取是可以用ResNet或者VGG替代的

当然,网络输出后还需要经过NMS进行后处理,去掉一些冗余框。

损失函数=bouding box损失+confidence损失+classes损失

\begin{gathered} \lambda_{\mathbf{coord}}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{ij}^{\mathrm{obj}}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i}-\hat{y}_{i}\right)^{2}\right] \\ + \lambda_{\textbf{coord}}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{ij}^{\text{obj}}\left[\left(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}}\right)^{2}+\left(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}}\right)^{2}\right] \\ +\sum_{i=0}^{S^2}\sum_{j=0}^B\mathbb{1}_{ij}^{\mathrm{obj}}\left(C_i-\hat{C}_i\right)^2 \\ + \lambda_{\mathrm{noobj}}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{I}_{ij}^{\mathrm{noobj}} \left(C_{i}-\hat{C}_{i}\right)^{2} \\ +\sum_{i=0}^{S^2}\mathbb{1}_i^{\mathrm{obj}}\sum_{c\in\mathrm{classes}}\left(p_i(c)-\hat{p}_i(c)\right)^2 \end{gathered}

前两项对应BoundingBox的损失函数(针对x, y, H, W进行学习),接下来两项对应Confidence的损失函数(针对置信度进行学习),最后一项对应分类的损失(针对类别label进行学习)。

对于w和H取根号是因为如果不取根号,损失函数往往更倾向于调整尺寸比较大的预测框。例如,20 个像素点的偏差,对于 800x600 的预测框几乎没有影响,此时的IOU数值还是很大,但是对于 30x40 的预测框影响就很大。取根号是为了尽可能的消除大尺寸框与小尺寸框之间的差异。

对于系数的问题,为什么有coord和noobj(论文中设置为5和0.5)是为了解决类别不平衡的问题,实际上网格中存在物体是小概率的,但是如果过分重视这种置信度的计算,大部分的置信度都会变成0,影响了少部分有物体的那部分置信度,因此增加边界框坐标预测的损失来缓解。

YOLOv1的缺点:

  • 由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率,所以后面有SPP的优化。

  • YOLOv1是anchor free的,去预测bounding box的坐标,其实收敛起来并不容易,所以后面改为基于anchor。

  • 虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。

  • YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。

2.3 总结

单阶段网络为何不如双阶段的原因

因为训练中的正负例不均衡。

  • 负例过多,正例过少,负例产生的损失完全淹没了正例;

  • 大多数负例十分容易区分,网络无法学习到有用信息。如果训练数据中存在大量这样的样本,将导致网络难以收敛。

双阶段网络如何解决训练中的不均衡

  • 在RPN网络中,根据前景置信度选择最有可能的候选区域,从而避免大量容易区分的负例。

  • 训练过程中根据交并比(如果某个anchor和GT有最大的IoU,或者IoU大于0.7,那这个anchor就是正样本,如果IoU小于0.3,那就是负样本,其他情况就忽略掉,不用于计算损失函数,也不参与模型参数的更新),进行随机采样,最后将正负样本比例设为1:1,防止过多负例出现。

为什么网络中经常是使用Pooling池化层让特征图减少(尺寸减半),而不是使用卷积stride=2?

写文章的时候突然想到的一个问题,之前一直没有思考过。

这是因为卷积stride=2和Pooling池化层(stride=2)都下采样了同样的倍数,但是前者是在卷积过程中跳过了一半的特征,速度虽然快,但是某些位置的特征就永远丢失了,而后者虽然耗时,但是可以保留局部最重要的特征,直观上更加精确,同时后者无学习参数,有平移等变性的优点(注意,卷积+最大池化才真正有平移等变性,卷积是对于相同的特征图有相同的输出,而最大池化后就算平移一部分,也会有最大的输出响应)。

三、Anchor-based和Anchor-Free的目标检测算法

3.1 Anchor-based

有锚框,是一种基于锚框的检测。

锚框(人类经验预设、网络学习得到、K-Means聚类)

Anchor-based方法依赖于预定义的锚点来预测目标的位置和大小。这些锚点通常是一些预设的框架,覆盖图像中的各个位置和各种比例。常见的Anchor-based目标检测器包括Faster R-CNN、YOLOv2-v5、YOLOv7和SSD。

本质上,锚框表示了候选目标的初始状态,是一种获取目标潜在分布区域的有效方式。通过结合FPN(Feature Pyramid Network),基于锚框的检测器(FPN/RetinaNet/ RefineDet)在过去被视为必不可少的结构。这里引用源潮:目标检测算法框架解析:Anchor-free & Anchor-based的内容。

Anchor & FPN-based检测框架可以分解为以下四个部分:Assignment(锚框对应特征层分配标准)、Ground-truth(锚框训练标签分配标准)、Output&Loss(网络输出与损失函数设计)、Prediction(预测阶段):

(1)Assignment 锚框对应特征层分配标准:将预先设定好数量、尺寸、宽高比的锚框分配给特征金字塔的不同层,分配标准为特征图分辨率越低,被分配的锚框尺寸越大(因为特征图越小,卷积越多,意味着是大物体,反之浅层用于识别小物体,特征图越大)。

(2)Ground-truth锚框训练标签分配标准:对于输入图像上每一个真值框,寻找与其IOU值最大的锚框作为正样本;对于剩余锚框,计算其与所有真值框之间的IOU值,若MAX_IOU大于预先设定的阈值(FPN中设置阈值为0.7),则将该锚框归类为正样本;若MAX_IOU小于预先设定的阈值(FPN中设置阈值为0.3),则将该锚框归类为负样本。

(3)Output&Loss(网络输出与损失函数设计):网络输出通常包括锚框的坐标回归和类别预测,而损失函数则用于衡量预测结果与真实结果之间的差异,并指导模型的优化。

(4)Prediction(预测阶段):预测阶段包括生成候选框(Proposals)、回归后的候选框经过非极大值抑制(NMS)以过滤重复的预测结果,得到最终的检测结果。

Anchor-based存在的问题:

  • 需设置较多超参数来限定锚框的尺寸、宽高比与数量,检测精度对超参数的设置较为敏感(对于anchor设计的先验prior比较依赖);

  • 固定尺寸、宽高比、数量的锚框会在一定程度上影响检测器的泛化能力;

  • 为了获取较高的召回率,检测器在输入图像上密集地分布锚框。其中大部分锚框分布在背景区域上,在训练时用作负样本,这将导致训练过程中正负样本严重不均衡问题(一般会随机采样保证比例);

  • 锚框会导致计算成本的增加,例如需计算每一个锚框与真值框之间的IOU值来分配其训练标签;

  • 锚框在分配训练标签时,需设定IOU阈值,即人为干预地选定一部分锚框作为正样本;检测精度对阈值的设置较为敏感(Cascade R-CNN论文中对此进行了详细分析)。

  • 锚框应用到FPN结构中,某一实例是由哪一层特征负责训练,完全取决于实例的尺寸,而不是实例的内容,显然网络训练时无法选取到最优的特征。

3.2 Anchor-Free

无锚框,是一种基于点的检测:基于关键点(比如物体的左上角点和右下角点)或者基于中心点

Anchor-Free方法不依赖于预定义的锚点,而是直接在特征图上预测目标的位置和大小。这些方法通常通过关键点检测、中心点预测等方式来实现目标检测。常见的Anchor-Free目标检测器包括YOLOv1、CornerNet和CenterNet、FCOS。

2018年提出的CornerNet算法将目标区域表示为一对关键点:左上角点与右下角点(参考了人体姿态估计那边的方法),通过单一卷积模型生成关键点位置热点图与连接矢量,即分别预测边界框的左上角点、右下角点位置,并建立彼此对应关系。

CornerNet网络框架

图像输入后经过一个ConvNet,然后再进入Top-Left Corners和Bottom-Right Corners,同时输出Heatmaps和Embeddings。Heatmaps的作用是预测所有左上角点和右下角点的位置,Embeddings的作用是将属于同一目标的两个角点配对。

图像进入backbone网络(Stacked Hourglass Networks),内含两个沙漏模块,然后分成两路,一路进入Top-left Corners,这一整个模块要先经过Corner Pooling后有三个输出,Heatmaps、Embeddings和Offsets。另一路进入Bottom-right Corners,也和Top-left Corners类似。

backbone的细节图

Backbone的主要作用是提取关键点的特征,使得每个pixel(location)都具有相对完整的信息,随后要经过Corner Pooling这个比较特别的池化。

Corner Pooling说明

在图中,假设当前点的坐标为(x, y),特征图宽为W,高为H,则Corner Pooling的计算过程如下:

(1)计算该点到其下方所有点的最大值,即(x, y)到(x, H)所有点的最大值。

(2)计算该点到其最右侧所有点的最大值,即(x, y)到(W, y)所有点的最大值。

(3)将两个最大值相加,作为Corner Pooling的输出。

工程实现时,可以分别从下到上、从右到左计算最大值,这样效率会更高。右下点的CornerPooling过程与左上点类似。

具体计算过程,对比上图看更好

21302为什么变成33322:第一个2的右侧最大是3,0的右侧只有2,所以最大是2,因此得到33322;

31320为什么变成33320:第一个3的右侧遍历看一遍,最大是3,2的右侧最大是自己2,0的右侧没有,所以是自己,得到33320。

左上角与右下角两个Corner Pooling层(这种池化后,使得特征图的边缘激活值比较大)之后,分别接了3个预测量,这3个预测量的意义分别如下:

Heatmaps:角点热图,预测角点位置,用C x W x H的特征图表示,C为目标的类别(无背景类),这个特征图的每个通道都是一个mask,mask的每个值表示该点是角点(比如左上角角点)的分数。

Embeddings:将角点配对,Heatmaps中的预测角点都是独立的,而一个物体需要一对角点,如果一个左上角点和一个右下角点属于一个目标,那么它们的embedding vector之间的距离应该很小。因此Embeddings分支负责将左上角点的分支与右下角点的分支进行匹配,找到属于同一个物体的角点,完成检测任务,其大小为1×W×H。就是根据vector的距离去匹配。

Offsets: 输出从输入映射到特征图的误差信息,其大小为2×W×H。Offset是在向下取整计算时丢失的精度信息。这尤其影响小尺寸目标的回归。

损失函数:

3个部分组成

Embeddings的2个部分

Heatmaps的部分,Heatmap中响应最大的位置就是角点的位置

若预测角点位置位于真值附近,那由这些“误检点”组成的预测框与真值框有较大的交并比,因此在损失函数设计中需减轻对这些真值临近点的惩罚程度。真值临近点的选取标准是:以真值点为中心、以𝛾𝑎为半径的圆内,任意点对组成的预测框与真值框的交并比均不小于预先设定的阈值。因此,真值热点图𝑦𝑐𝑖𝑗将角点所在位置的标签设定为1,将真值临近点的标签设置为满足二维高斯分布(其中方差参数与半径𝛾𝑎成比例),其余位置设定为0。

其中,𝑝𝑐𝑖𝑗表示预测热点图上对应位置的分类得分,𝑁表示图像上的目标数量。该损失函数在focal loss的基础上使用(1−𝑦𝑐𝑖𝑗)𝛽项来减轻真值临近点的损失值。

offset的损失

ok的说明

Backbone网络中使用了下采样操作,因此原图与输出特征图之间存在量化误差;量化误差会对小目标检测的精度造成比较明显的影响。其中,(𝑥𝑘,𝑦𝑘)表示第𝑘个角点在原图上的坐标位置,𝑛表示output_stride。

2019年提出的CenterNet是只预测中心点。相比于CornerNet算法,其网络输出是:

(1) HeatMap,大小为(W/4,H/4,80),输出不同类别(80个类别)物体中心点的位置;

(2) Offset,大小为(W/4,H/4,2),对HeatMap的输出进行精炼,提高定位准确度;

(3) Height&Width,大小为(W/4,H/4,2),预测以关键点为中心的检测框的宽高。

特别说明:HeatMap用于表示每个类别物体中心点的可能性。网络会生成一个与输入图像分辨率缩小后相对应的HeatMap,其中每个点的值表示在该位置上出现某类别物体中心点的概率。

HeatMap的大小为 (W/4, H/4, 80),这里的W和H是输入图像的宽度和高度。由于特征图经过下采样,HeatMap的尺寸是输入图像尺寸的1/4。80表示分类类别数,即输出的HeatMap在第三个维度上有80个通道,每个通道对应一个类别。在训练过程中,真实的物体中心点位置会在HeatMap上用高斯分布来表示。高斯分布的中心是物体的中心点,值越接近中心点,概率越高。这样可以更好地指导网络学习中心点的定位。

CenterNet与基于Anchor的One-Stage方法相似,其中心点可看成是没有尺寸的锚点,其重要差别在于:

  • CenterNet分配的锚点仅仅是放在位置上,没有尺寸,不需手动设置阈值区分前景与背景;

  • 每个目标只有一个正的锚点,因此后续不需使用NMS,该关键点通过特征图上的局部峰值获得

  • CenterNet相比传统的目标检测使用了更大的分辨率特征图输出(1/4原始图像),因此不需要FPN这类多尺度的特征图

3.3 总结

  • anchor based的优点是可以产生密集的anchor box,使得网络可以直接进行目标分类和边界框回归,提高了目标召回能力,尤其对小目标检测有明显的提升。

  • anchor based的缺点是需要设定很多超参数,如尺度、长宽比等,这些参数很难设计,并且会影响检测性能。另外,anchor based的方法也会产生很多冗余的框,增加了计算量和内存消耗。

  • anchor free的优点是不需要预设anchor,只需要对不同尺度的特征图的目标中心点和宽高进行回归,减少了耗时和算力。同时,anchor free的方法也可以避免一些由于anchor设置不合理导致的漏检或重复检测问题。

  • anchor free的缺点是收敛比较慢,同时由于每个位置只预测一个框,可能会导致一些重叠或遮挡区域无法被检测到。另外,anchor free的方法也需要一些特殊的损失函数或结构来提高精度和稳定性。

引用一个博主的回答(anchor-free存在什么缺点? - CK1998的回答 - 知乎),anchor-free和anchor-based区别在于是否使用预定义的anchor框来匹配真实的目标框,本质上是解空间上的区别。

anchor-free,无论是keypoint-based的方法(e.g. CornerNet和CenterNet)还是pixel-wise prediction的方法(e.g. FCOS),本质上都是dense prediction的方法,庞大的解空间使得简单的anchor-free的方法容易得到过多的false positive,而获得高recall但是低precision的检测结果;

anchor-based由于加入了人为先验分布,同时在训练的时候prediction(尤其是regression)的值域变化范围实际上是比较小的,这就使得anchor-based的网络更加容易训练也更加稳定;

  • 22
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Anchor-basedAnchor-free目标检测种不同的方法。 Anchor-based方法是指在图像使用一组预定义的锚点(anchors),通过对这些锚点进行分类和回归来检测目标。这种方法通常使用卷积神经网络(CNN)来提取特征,并在每个锚点处预测目标的类别和位置。 Anchor-free方法则不需要使用预定义的锚点,而是直接在图像预测目标的位置和大小。这种方法通常使用一些特殊的网络结构,如CornerNetCenterNet,来实现目标检测种方法各有优缺点,选择哪种方法取决于具体的应用场景和需求。 ### 回答2: anchor-basedanchor-free目标检测算法的方法。 传统的目标检测算法anchor-based是一种常见的方法。它通过事先定义一组候选框(即anchors),并在图像对这些候选框进行分类和回归。这些anchors通常根据目标的大小和长宽比进行选取。在训练过程,候选框与真实目标框进行匹配,并计算分类和回归损失。通过这种方式,anchor-based可以有效地检测目标,并确定它们的位置。 相比之下,anchor-free是一种较新的目标检测算法方法。它不需要使用事先定义的候选框,而是直接在图像无缝地检测目标。anchor-free方法通常通过将目标检测任务转化为像素级分类问题来实现。在训练过程模型会学习到每个像素点是否属于目标,并对目标的位置进行回归。由于不依赖于候选框,anchor-free方法可以更灵活地检测各种大小和形状的目标。 总的来说,anchor-based方法在目标检测具有广泛的应用,并且在经典的目标检测算法取得了很好的效果。而anchor-free方法则是一种相对较新的方法,具有更大的灵活性和对各种目标形状和大小的适应性。这些方法各有优势和劣势,选择哪种方法要根据具体的应用场景和需求来决定。 ### 回答3: anchor-basedanchor-free是一种用于目标检测种不同的方法。 首先,anchor-based方法是一种使用预定义的尺寸和比例的框架来检测目标的方法。这些框架通常称为锚点或锚框,它们在图像按照一定的规律分布。然后,在每个锚点上,使用CNN(卷积神经网络)模型进行分类和回归,确定目标是否存在以及目标的准确位置。这些锚点作为参考点帮助模型更好地理解目标的不同尺度和形状,并提高目标检测的准确性。常见的anchor-based方法包括Faster R-CNN、SSD和YOLO。 另一方面,anchor-free方法则不使用预定义的锚点来检测目标。相反,它们通过在整个图像直接回归目标的位置和大小来进行目标检测。这些方法通常需要更加复杂和精细的网络设计,以提供对目标位置的准确预测。由于不需要预定义的锚点,anchor-free方法能够更好地适应任意大小和形状的目标。例如,CornerNetCenterNet就是常见的anchor-free方法。 总的来说,anchor-based方法将目标检测问题划分为锚点分类和回归问题,而anchor-free方法则通过直接回归目标位置和大小来解决目标检测问题。种方法各有优劣,并根据不同的应用场景和需求选择合适的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值