计算机视觉算法——基于Anchor Free的目标检测网络总结

2023-05-16

计算机视觉算法——基于Anchor Free的目标检测网络总结

  • 计算机视觉算法——基于Anchor Free的目标检测网络总结
    • 1. CornerNet
      • 1.1 关键知识点——网络结构及特点
      • 1.2 关键知识点——正负样本匹配
      • 1.3 关键知识点——损失计算
    • 2. CenterNet
      • 2.1 关键知识点——网络结构及特点
      • 2.2 关键知识点——损失计算
    • 3. FCOS
      • 3.1 关键知识点——网络结构及特点
      • 3.2 关键知识点——正负样本匹配
      • 3.3 关键知识点——损失计算
    • 4. YOLOX
      • 4.1 关键知识点——网络结构及特点
      • 4.2 关键知识点——正负样本匹配
      • 4.3 关键知识点——损失计算

计算机视觉算法——基于Anchor Free的目标检测网络总结

在之前我有总结过一些目标检测网络:
计算机视觉算法——目标检测网络总结
这些方法大都是Anchor Based方法,Anchor Based方法的主要问题是:

  1. 检测器的性能和Anchor的Size和Aspect Ratio相关,在RetinaNet中改变Anchor能造成4%的AP的变化;
  2. 一般Anchor的Size和Aspect Ratio是固定的,很难处理形状变化大的目标,当发生任务迁移时,往往需要重新设计Anchor;
  3. 为了达到召回率,一般需要在图片中生成非常密集的Anchor Boxes。在训练时绝大部分的Anchor Boxes都会时负样本,容易造成正负样本不均的情况。
  4. Anchor的引入会使得网络的训练过程变得更加繁琐,想了解这一点大家可以去看看SSD的源码。

1. CornerNet

CornerNet发表于2018年ECCV,原论文名为《CornerNet: Detecting Objects as Paired Keypoints》,该论文将目标检测问题当作关键点检测问题来解决,通过检测目标框的左上角和右下角两个关键点得到预测框。从同期SOTA方法在MS COCO数据集的对比i结果看,相对于One-Stage方法精度有明显提升,但是相对于Two-Stage方法精度接近,但是该方法在推断时间上无优势:
在这里插入图片描述

1.1 关键知识点——网络结构及特点

网络结构如下图所示:
在这里插入图片描述
如上图所示,ConerNet模型包括三部分,首先是通过堆叠两个Hourglass Network提取图像Feature,然后就是将图像Feature分别通过Top-left Corner和Bottom-right Corner两个Prediction Modules。

Prediction Module的具体结构如下图所示:
在这里插入图片描述
可以看出来Prediction Module整体是一个残差结构,其中Top-Left Corner Pooling Module我们稍后介绍,这里先看下Prediction Module的输出包括三部分:Heatmaps,Embeddings,Offsets。

  1. Heatmaps用于预测角点的位置,输出的是 C C C个Channel的Feature, C C C指的是分类的类别个数(不包括背景类别)
  2. Embeddings用于对Corner进行分组,Heatmap上检测个角点如何判断是否属于同一个物体呢?就是通过Embeddings输出之间的距离来找到角点之间的对应关系,我看源码这里Embedings输出的是Channel数为1的Feature。
  3. Offsets用于对预测角点位置进行精修。输出的是Channel数为2的Feature,如下公式所示: o k = ( x k n − ⌊ x k n ⌋ , y k n − ⌊ y k n ⌋ ) \boldsymbol{o}_k=\left(\frac{x_k}{n}-\left\lfloor\frac{x_k}{n}\right\rfloor, \frac{y_k}{n}-\left\lfloor\frac{y_k}{n}\right\rfloor\right) ok=(nxknxk,nyknyk)我们通过Heatmaps输出的位置还原到原始分辨率后肯定是一个取整后的位置 ( ⌊ x n ⌋ , ⌊ y n ⌋ ) \left(\left\lfloor\frac{x}{n}\right\rfloor,\left\lfloor\frac{y}{n}\right\rfloor\right) (nx,ny),为了恢复原始分辨率的精度,网络就会输出这样一个修正量 o k \boldsymbol{o}_k ok

此外,在上图中还有一个Top-left Corner Pooling Module操作,该操作公式如下:
t i j = { max ⁡ ( f t i j , t ( i + 1 ) j )  if  i < H f t H j  otherwise  t_{i j}=\left\{\begin{array}{cc} \max \left(f_{t_{i j}}, t_{(i+1) j}\right) & \text { if } i<H \\ f_{t_{H j}} & \text { otherwise } \end{array}\right. tij={max(ftij,t(i+1)j)ftHj if i<H otherwise  l i j = { max ⁡ ( f l i j , l i ( j + 1 ) )  if  j < W f l i W  otherwise  l_{i j}=\left\{\begin{array}{cc} \max \left(f_{l_{i j}}, l_{i(j+1)}\right) & \text { if } j<W \\ f_{l_{i W}} & \text { otherwise } \end{array}\right. lij={max(flij,li(j+1))fliW if j<W otherwise 其实就是取水平和竖直最大值,最后求和,具体的案例下图所示:
在这里插入图片描述
论文认为Corner Pooling之所以有效,是因为(1)目标定位框的中心难以确定,和边界框的四条边相关,但是每个顶点只与边界框的两条边相关,所以Corner跟他容易获取;(2)顶点更有效提供离散边界空间,作者做了Corner Pooling的实验如下:
在这里插入图片描述

1.2 关键知识点——正负样本匹配

对于每个角点,只有一个正样本,其余的都是负样本。但是为了保证样本均衡,作者在角点半径范围内区域会加大对负样本的惩罚力度。实际怎么做呢?

在构建Heatmaps Groundtruth时,如果不加任何惩罚,那么正样本处应该就为1,而负样本处为0;而加上惩罚后就是在角点半径范围内构建一个 e − x 2 + y 2 2 σ 2 e^{-\frac{x^2+y^2}{2 \sigma^2}} e2σ2x2+y2的高斯分布,该 σ \sigma σ可以是个固定值,可以与物体大小相关,总而言之是越靠近角点的地方越接近于1,越远离角点的地方越接近于0。如下图所示:
在这里插入图片描述

作者做了负样本惩罚的消融实验如下:在这里插入图片描述
注意,这里还是只有角点一个正样本,在计算 L pull  L_{\text {pull }} Lpull  L push  L_{\text {push }} Lpush  L o f f L_{o f f} Loff时还是只在角点处计算。

1.3 关键知识点——损失计算

Corner损失函数定义如下: L = L det  + α L pull  + β L push  + γ L o f f L=L_{\text {det }}+\alpha L_{\text {pull }}+\beta L_{\text {push }}+\gamma L_{o f f} L=Ldet +αLpull +βLpush +γLoff其中
L det  L_{\text {det }} Ldet 是Heatmaps的Loss,采用的是Focal Loss,准确地说,是针对Heatmaps改进的Focal Loss,公式如下所示: L det  = − 1 N ∑ c = 1 C ∑ i = 1 H ∑ j = 1 W { ( 1 − p c i j ) α log ⁡ ( p c i j )  if  y c i j = 1 ( 1 − y c i j ) β ( p c i j ) α log ⁡ ( 1 − p c i j )  otherwise  L_{\text {det }}=\frac{-1}{N} \sum_{c=1}^C \sum_{i=1}^H \sum_{j=1}^W\left\{\begin{array}{cc} \left(1-p_{c i j}\right)^\alpha \log \left(p_{c i j}\right) & \text { if } y_{c i j}=1 \\ \left(1-y_{c i j}\right)^\beta\left(p_{c i j}\right)^\alpha \log \left(1-p_{c i j}\right) & \text { otherwise } \end{array}\right. Ldet =N1c=1Ci=1Hj=1W{(1pcij)αlog(pcij)(1ycij)β(pcij)αlog(1pcij) if ycij=1 otherwise 其中 y c i j y_{c i j} ycij为真值, p c i j p_{c i j} pcij是预测值,我们分两部分来解释该公式:

  1. y c i j = 1 y_{c i j}=1 ycij=1时,此时如果 p c i j p_{c i j} pcij接近于1时,说明该真值是容易预测的,那么我们减少其在样本中的权重,所以在log损失的基础上乘以 ( 1 − p c i j ) α \left(1-p_{c i j}\right)^\alpha (1pcij)α;反之,如果 p c i j p_{c i j} pcij接近于0,说明该角点还没有学习到,所以会加大其权重。
  2. y c i j y_{c i j} ycij不为 1 1 1时, p c i j p_{c i j} pcij应该输出 0 0 0。在角点附近 p c i j p_{c i j} pcij输出接近于1的概率时容易造成误检,为了对角点附接近于1的 ( p c i j ) α \left(p_{c i j}\right)^\alpha (pcij)α进行抑制,因此在log损失上乘以 ( p c i j ) α \left(p_{c i j}\right)^\alpha (pcij)α,这样网络就会更加关注这些误检的点,但是又正由于这个已经接近于角点了,因此输出稍微大一些也是情有可原的,因此用 ( 1 − y c i j ) β \left(1-y_{c i j}\right)^\beta (1ycij)β来抑制一下惩罚。当然,如果在距离角点较远的地方输出接近于 1 1 1肯定也是不对的,那么此时 ( 1 − y c i j ) β \left(1-y_{c i j}\right)^\beta (1ycij)β ( p c i j ) α \left(p_{c i j}\right)^\alpha (pcij)α都会用来加强惩罚。反之,如果 p c i j p_{c i j} pcij接近于0,那么 ( p c i j ) α \left(p_{c i j}\right)^\alpha (pcij)α就会告诉网络,这个负样本已经学好了,不需要太多关注。

L pull  L_{\text {pull }} Lpull  L push  L_{\text {push }} Lpush 是Embeddings的Loss, L pull  L_{\text {pull }} Lpull 使同一函目标的顶点进行分组, L push  L_{\text {push }} Lpush 用与分离不同目标的顶点: L pull  = 1 N ∑ k = 1 N [ ( e t k − e k ) 2 + ( e b k − e k ) 2 ] L_{\text {pull }}=\frac{1}{N} \sum_{k=1}^N\left[\left(e_{t_k}-e_k\right)^2+\left(e_{b_k}-e_k\right)^2\right] Lpull =N1k=1N[(etkek)2+(ebkek)2] L p u s h = 1 N ( N − 1 ) ∑ k = 1 N ∑ j = 1 j ≠ k N max ⁡ ( 0 , Δ − ∣ e k − e j ∣ ) L_{p u s h}=\frac{1}{N(N-1)} \sum_{k=1}^N \sum_{\substack{j=1 \\ j \neq k}}^N \max \left(0, \Delta-\left|e_k-e_j\right|\right) Lpush=N(N1)1k=1Nj=1j=kNmax(0,Δekej)其中 e k e_k ek为真值,其他为网络输出结果, Δ \Delta Δ为在作者实验中设置为1,我们简单分析下就可以看出,同一物体的 L pull  L_{\text {pull }} Lpull 应该为 0 0 0,而不同物体的Embeddings结果如果比较越接近 L p u s h L_{p u s h} Lpush就会越大。
L o f f L_{o f f} Loff是Offsets的Loss,采用的是Smooth L1 Loss,公式如下: L o f f = 1 N ∑ k = 1 N SmoothL1Loss ⁡ ( o k , o ^ k ) L_{o f f}=\frac{1}{N} \sum_{k=1}^N \operatorname{SmoothL1Loss}\left(\boldsymbol{o}_k, \hat{\boldsymbol{o}}_k\right) Loff=N1k=1NSmoothL1Loss(ok,o^k) L det  L_{\text {det }} Ldet 在正负样本处都会计算,而 L pull  L_{\text {pull }} Lpull  L push  L_{\text {push }} Lpush  L o f f L_{o f f} Loff只在正样本处计算

2. CenterNet

CenterNet发表于2019年,原论文名为《Objects as Points》,CenterNet感觉是基于CornerNet进行的该井,使得检测速度和精度相比于One-Stage和Two-Stage的方法都了不小的提高,在和YOLO v3的比较中,相同速度下,CenterNet提高了4个左右的点。同时网络经过少量的扩展,就可以迁移到3D目标检测和人体关键点检测上。
在这里插入图片描述

2.1 关键知识点——网络结构及特点

CenterNet的网络结构是非常简单的,其实就是一个Backbone加上3个Head,3个Head分别输出80维的类别、2维的中心点坐标和2维的长宽偏置。Backbone的示意图如下图所示:
在这里插入图片描述
从左到右分别是(a)Hourglass-104,(b)ResNet,(c)DLA-34,(4)Modified DLA-34,CornerNet的Head是从1/4下采样率的Feature上接出来的,作者在论文中对比了不同的BackBone的结果,如下图所示,其中Hourglass效果是最好的:
在这里插入图片描述

2.2 关键知识点——损失计算

CornreNet的损失由三部分构成,分别是类别损失、目标中心偏置损失和目标大小损失: L det  = L k + λ size  L size  + λ off  L o f f L_{\text {det }}=L_k+\lambda_{\text {size }} L_{\text {size }}+\lambda_{\text {off }} L_{o f f} Ldet =Lk+λsize Lsize +λoff Loff首先,类被采用的是类别损失采用的Focal Loss:
L k = − 1 N ∑ x y c { ( 1 − Y ^ x y c ) α log ⁡ ( Y ^ x y c )  if  Y x y c = 1 ( 1 − Y x y c ) β ( Y ^ x y c ) α log ⁡ ( 1 − Y ^ x y c )  otherwise  L_k=\frac{-1}{N} \sum_{x y c}\left\{\begin{array}{cc} \left(1-\hat{Y}_{x y c}\right)^\alpha \log \left(\hat{Y}_{x y c}\right) & \text { if } Y_{x y c}=1 \\ \left(1-Y_{x y c}\right)^\beta\left(\hat{Y}_{x y c}\right)^\alpha \log \left(1-\hat{Y}_{x y c}\right) & \text { otherwise } \end{array}\right. Lk=N1xyc (1Y^xyc)αlog(Y^xyc)(1Yxyc)β(Y^xyc)αlog(1Y^xyc) if Yxyc=1 otherwise 该公式的和CornerNet中的公式没有区别,在此就不再赘述。
目标中心偏置损失采用的是L1 Loss,如下所示: L o f f = 1 N ∑ p ∣ O ^ p ~ − ( p R − p ~ ) ∣ L_{o f f}=\frac{1}{N} \sum_p\left|\hat{O}_{\tilde{p}}-\left(\frac{p}{R}-\tilde{p}\right)\right| Loff=N1p O^p~(Rpp~) 其中, O ^ ∈ R W R × H R × 2 \hat{O} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times 2} O^RRW×RH×2为网络输出, R R R是特征图下采样倍率, p p p为原始图像中心点坐标, p ~ \tilde{p} p~为特征图上中心点坐标。
目标大小损失使用的同样是L1损失: L s i z e = 1 N ∑ k = 1 N ∣ S ^ p k − s k ∣ L_{s i z e}=\frac{1}{N} \sum_{k=1}^N\left|\hat{S} p_k-s_k\right| Lsize=N1k=1N S^pksk 其中 S ^ ∈ R W ′ R × H R × 2 \hat{S} \in \mathcal{R}^{\frac{W^{\prime}}{R} \times \frac{H}{R} \times 2} S^RRW×RH×2为预测值, s k = ( x 2 ( k ) − x 1 ( k ) , y 2 ( k ) − y 1 ( k ) ) s_k=\left(x_2^{(k)}-x_1^{(k)}, y_2^{(k)}-y_1^{(k)}\right) sk=(x2(k)x1(k),y2(k)y1(k))为真值, ( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) \left(x_1^{(k)}, y_1^{(k)}, x_2^{(k)}, y_2^{(k)}\right) (x1(k),y1(k),x2(k),y2(k))分别为左上角和右下角坐标。

3. FCOS

FCOS发表于2019年CVPR,原论文名为《Fully Convolutional One-Stage Object Detection》,它与当时的SOTA方法结果对比如下:
在这里插入图片描述

3.1 关键知识点——网络结构及特点

网络结构如下图所示:
在这里插入图片描述
通过上图网络结构还是一目了然的,需要注意的几点是:

  1. 不同分辨率上的检测头是共享权重的,每个头都是先经过四个Conv+Group Nomalization+ReLU的模块,最后通过Kernel Size为3的卷积输出。
  2. Classification头一共有80个Channel,对应COCO数据集的80个类别,也就是说每一个Grid对应的就只有一个类别输出。
  3. Regression头输出的是四个值,分别是距离边框左侧、上侧、右侧、底侧的距离: x min ⁡ = c x − l ⋅ s x_{\min }=c_x-l \cdot s xmin=cxls x min ⁡ = c x − t ⋅ s x_{\min }=c_x-t \cdot s xmin=cxts x min ⁡ = c x − r ⋅ s x_{\min }=c_x-r \cdot s xmin=cxrs x min ⁡ = c x − b ⋅ s x_{\min }=c_x-b \cdot s xmin=cxbs其中 l , t , r , b l, t, r, b l,t,r,b为网络的输出值,由于输出值是在特征图的尺度上,因此需要乘以一个尺度参数 s s s c x , c y c_x, c_y cx,cy是参考点映射到原图的坐标。
  4. Centerness头输出的是一个值,反应的是预测点相对与目标中心点的远近程度:  centerness  = min ⁡ ( l ∗ , r ∗ ) max ⁡ ( l ∗ , r ∗ ) × min ⁡ ( t ∗ , b ∗ ) max ⁡ ( t ∗ , b ∗ ) \text { centerness }=\sqrt{\frac{\min \left(l^*, r^*\right)}{\max \left(l^*, r^*\right)} \times \frac{\min \left(t^*, b^*\right)}{\max \left(t^*, b^*\right)}}  centerness =max(l,r)min(l,r)×max(t,b)min(t,b) 其中 l ∗ , t ∗ , r ∗ , b ∗ l^*, t^*, r^*, b^* l,t,r,b是当前预测点相对于Ground Truth各个方向边界的距离,该值输出的范围是0-1,当预测点位于Ground Truth的Bounding Box的中心点时,该值为1,当位于Bounding Box的边界时,该值为0。在论文中,作者有做关于Centerness头的消融实验
    在这里插入图片描述
    我们可以看到,当加入Centerness监督时,AP都有非常大的提升。

3.2 关键知识点——正负样本匹配

关于FCOS的正负样本匹配一共有两个版本,最开始的版本作者将落入Ground Truth的Bounding Box内的Grid都作为正样本,但是后来通过是实验发现,落入Ground Truth的Bounding Box的中心部分区域的Grid的作为正样本。

由于我们每个Grid只会输出一种类别,如果同一个Grid同时落入两个Ground Truth Bounding Box中,就会面临一个Ambiguity问题,在论文中,作者指出这种情况就会默认将该Grid分配面积Area最小的Ground Truth Box。如下图就会分配给球拍:
在这里插入图片描述
但是结合FPN结构,将不同大小的GroundTruth分配到不同分辨率输出上,该问题可以得到大大缓解。

3.3 关键知识点——损失计算

FCOS的损失计算函数如下: L ( { p x , y } , { t x , y } ) = 1 N pos  ∑ 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 ∗ ) + λ N p o s ∑ x , y 1 { c x , y ∗ > 0 } L c e n t e r n e s s ( s x , y , s x , y ∗ ) \begin{aligned} L\left(\left\{\boldsymbol{p}_{x, y}\right\},\left\{\boldsymbol{t}_{x, y}\right\}\right) &=\frac{1}{N_{\text {pos }}} \sum_{x, y} L_{\mathrm{cls}}\left(\boldsymbol{p}_{x, y}, c_{x, y}^*\right) \\ &+\frac{\lambda}{N_{\mathrm{pos}}} \sum_{x, y} \mathbb{1}_{\left\{c_{x, y}^*>0\right\}} L_{\mathrm{reg}}\left(\boldsymbol{t}_{x, y}, \boldsymbol{t}_{x, y}^*\right) \\ &+\frac{\lambda}{N_{\mathrm{pos}}} \sum_{x, y} \mathbb{1}_{\left\{c_{x, y}^*>0\right\}} L_{\mathrm{centerness}}\left(\boldsymbol{s}_{x, y}, \boldsymbol{s}_{x, y}^*\right) \end{aligned} L({px,y},{tx,y})=Npos 1x,yLcls(px,y,cx,y)+Nposλx,y1{cx,y>0}Lreg(tx,y,tx,y)+Nposλx,y1{cx,y>0}Lcenterness(sx,y,sx,y)其中分类损失 L c l s L_{\mathrm{cls}} Lcls采用的BECLoss+FocalLoss,回归损失 L r e g L_{\mathrm{reg}} Lreg和中心度损失 L c e n t e r n e s s L_{\mathrm{centerness}} Lcenterness损失只计算正样本下的损失。回归损失 L r e g L_{\mathrm{reg}} Lreg为GIoULoss,而 L c e n t e r n e s s L_{\mathrm{centerness}} Lcenterness损失为BCELoss。

4. YOLOX

YOLOX发表于2021年,原论文名为《YOLOX: Exceeding YOLO Series in 2021》,YOLOX相对于之前的YOLO版本的一些的亮点在于:Anchor-Free,Decoupeld Detection Head和Advanced Label Assigning Strategy。与SOTA方法对比如下,相对于YOLO v5是有一定的提升:
在这里插入图片描述

4.1 关键知识点——网络结构及特点

YOLOX的Backbone的和YOLO v5的Backbone是一摸一样的,对YOLO v5 BackBone不熟悉的同学可以参考计算机视觉算法——目标检测网络总结,该Backbone主要的特点是使用CSP-Darknet53、SPPF和CSP-PAN的模块或者结构。

YOLOX采用的Decoupled Head,这与YOLO v5的Coupled Head的区别如下图所示:
在这里插入图片描述
其中Coupled Head和Decoupled Head具体区别是:

  1. Coupled Head通过一个 1 × 1 1\times1 1×1的卷积最后输出维度为 N × ( C + 4 + 1 ) N\times(C+4+1) N×(C+4+1)的预测结果,并且不同分辨率的检测头参数共享。而Decouple Head是分别通过三个ConvBNSiLU模块和 1 × 1 1\times1 1×1的卷积后分别输出 C , 4 , 1 C, 4, 1 C,4,1的预测结果,分别对应类别、位置参数和IoU,其中IoU具体指的在训练过程中是如果该某样本被划分为正样本时,那么IoU的GroundTruth为1,而如果该Head预测为负样本时,那么IoU的GroundTruth为0。
  2. 在Coupled Head中不同分辨率下的参数共享,而Decouple Head在不同分辨率下参数不共享。
  3. Coupled Head中预测的四个位置信息是和对应的Anchor强相关的,而Decoupled Head中使用的Anchor Free的思想,其预测的位置信息计算公式如下所示: x center  = c x + t x x_{\text {center }}=c_x+t_x xcenter =cx+tx y center  = c y + t y y_{\text {center }}=c_y+t_y ycenter =cy+ty w = e t w w=e^{t_w} w=etw h = e t h h=e^{t_h} h=eth其中 t x , t y , t w , t h t_x,t_y,t_w,t_h tx,ty,tw,th为网络输出参数, c x , c y c_x,c_y cx,cy对应栅格的左上角坐标

论文中指出使用Decoupled head不但使得收敛速度变快,同时使得AP也有所提升:
在这里插入图片描述

4.2 关键知识点——正负样本匹配

YOLOX中使用的正负样本匹配的是SimOTA,SimOTA是OTA(Optimal Transport Assignment)简化得到的,OTA对应的论文名为《Optimal transport assignment for object detection》,目的是将匹配正负样本的过程看成一个最优传输问题,和DETR中的匹配方法区别是,在DETR中预测结果和真值是一对一匹配,而在SimOTA中预测结果和真值是多对一匹配。下面我们来具体看下:

首先为什么要左SimOTA呢,主要是为不同的目标设定不同数量的正样本数,假如我们在一张图中同时检测一个人和一个网球,如果在人和网球设置相同多的正样本,因为人和网球的大小有着明显的区别,因此要么人就只有一两个正样本,要么网球就会很多低质量的正样本,这样肯定是不合理的。在FCOS中,将正样本数量和真值Bounding Box的大小关联在一定程度上解决了该问题,而SimOTA则是将这一解决方案做得更加细致了。

SimOTA步骤如下:

  1. 确定正样本候选区域;
  2. 计算每个正样本对Ground Truth的Regression Loss和Class Loss作为匹配的Cost;
  3. 获取每个Ground Truth分配到的正样本数,具体操作是计算IOU大小前10的的样本,将前10样本的IOU相加取整则得到Dynamic_K,即Ground Truth应该分配到的正样本数。
  4. 为每个Ground Truth取Cost最小的前Dynamic_K个样本作为正样本。
  5. 人工去掉同一个样本被分配到多个Ground Truth的正样本的情况。

这里我们来理解下第3步中的Dynamic_K的原理,其实很好理解,还是以人和网球的例子为例,同样分辨率的特征图上,与人的Ground Truth IOU较大的预测值肯定较多,因此按照第3步计算出来的Dynamic_K肯定就大,人获得的正样本就多。

如下表所示,SimOTA给网络带来了2.3个点的AP提升:
在这里插入图片描述

4.3 关键知识点——损失计算

由于在网络检测头中有类别、位置参数和IoU三个分支,因此损失由 L c l s 、 L r e g 、 L i o u L_{cls}、L_{reg}、L_{iou} LclsLregLiou这三部分组成: L o s s = L c l s + λ L r e g + L i o u N p o s L o s s=\frac{L_{c l s}+\lambda L_{r e g}+L_{iou}}{N_{p o s}} Loss=NposLcls+λLreg+Liou其中 L c l s 、 L i o u L_{cls}、L_{iou} LclsLiou由BCELoss,而 L r e g L_{reg} Lreg采用的是IoULoss,还需要注意的是, L c l s 、 L r e g L_{cls}、L_{reg} LclsLreg只计算正样本损失,而 L i o u L_{iou} Liou既计算正样本损失有计算负样本损失,其实可以理解为我们先判断这里是否存在物体,然后再看物体的类别和位置。 N p o s N_{pos} Npos指的是被划分为正样本的Anchor Point数。

以上就是我对几篇Anchor Free的方法的总结,有问题欢迎交流~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机视觉算法——基于Anchor Free的目标检测网络总结 的相关文章

  • QT5.14.1程序打包超级详细教程(windeployqt工具+Enigma Virtual Box)

    QT5 14 1程序打包超级详细教程 windeployqt工具 43 Enigma Virtual Box 注 xff1a 1 本教程使用QT5 14 1版本 xff0c 使用官网自带的windeployqt打包工具 xff0c 可以将文
  • c# RabbitMQ 和 ActiveMQ windows环境的配置和使用

    c RabbitMQ 和 ActiveMQ windows环境的配置和使用 RabbitMQ 1 下载配置 erlang 确保 39 ERLANG HOME 39 在环境变量中配置 2 下载安装 rabbit mq 3 激活 managem
  • SolidWorks2020绘制XT30PW模型

    SolidWorks2020绘制XT30PW模型 注 xff1a 模型根据数据手册绘制下载链接 1 2 3
  • Vmware安装Ubuntu16.0.4出现Assuming drive cache: write through和1920X1080分辨率调节问题

    Vmware安装Ubuntu16 0 4出现Assuming drive cache write through和1920X1080分辨率调节问题 注 xff1a 用Vmare安装Ubuntu16几乎都会遇到下面两个问题 xff0c 跟着我
  • ubuntu QT出现qt creater能编译但qmake编译后不能完全运行

    注释 xff1a 最开始用QT 编译程序 xff0c 但是最后需要将用命令行来编译 xff0c 在使用qmake过程中出现编译能通过但是运行程序也能跑起来 xff0c 但是就感觉卡在哪里了 xff0c 每次需要在QT编译器中重新编译才能运行
  • VScode 代码行数统计

    VScode 代码行数统计 1 安装vs code counter 2 按住按Ctrl 43 Shift 43 P 在命令输入 xff1a Count lines in workspace并回车 3 自动生成 VSCodeCounter x
  • 个人主页(包含项目经历、实习经历、竞赛经历)

    个人主页 注 xff1a 个人主页中主要包含项目经历 实习经历 竞赛经历等方面的照片及文字说明 项目经历 一 基于声源目标识别与定位的微型平台设计 图1 图2 图3 图1 3声源目标识别与定位平台 二 基于STM32的六足仿生机器人设计 图
  • UBUNTU编译运行RTKLIB

    RTKLIB在ubuntu下没有图形用户界面 xff08 GUI xff09 xff01 RTKLIB作为一个功能强大的工具 xff0c 我一直以为它在ubuntu下和win10下是一个样子 xff0c 所以想着用ubuntu下的编译器去编
  • 关于makefile与CMakeList的理解

    为了编译某一工程中的众多 c文件搞出来一个makefile可以批量编译 xff1b Linux下用Cmake也即CMakeLists txt文件 作者写的很清晰易懂
  • c++版本详表

    1 语言标准 版本代目版本号年份第一版c 43 43 981998第二版c 43 43 032003第三版c 43 43 112011第四版c 43 43 142014第五版c 43 43 172017第六版待定待定 2 visual st
  • ffmpeg常用命令

    1 rtsp into mp4 ffmpeg exe i 34 rtsp username password 64 192 168 1 183 554 34 f mp4 r 25 an 640x480 ss 600 t 600 s 34 t
  • http包详解

    位于应用层的http协议 什么也不多说了 xff0c 马上放个图看看 请求方法 xff0c 主要是 xff1a get xff1a 获取 post xff1a 提交 请求头 xff1a User Agent xff1a 产生请求的浏览器类型
  • linux下编译C++项目

    include CheckCXXCompilerFlag CHECK CXX COMPILER FLAG std 61 c 43 43 11 COMPILER SUPPORTS CXX11 CHECK CXX COMPILER FLAG s
  • www总结

    一 www服务器 1 什么是www xff1a www是world wide web的缩写 xff0c 也就是全球信息广播的意思 通常说的上网就是使用www来查询用户所需要的信息 www可以结合文字 图形 影像以及声音等多媒体 xff0c
  • matlab基础练习作业(1)

    要期末考试了 xff0c 整理一下平时的题 作业 xff11 1 写出完成下列操作的命令 1 将矩阵A第2 5行中第1 3 5列元素赋给矩阵B B 61 A 2 5 1 3 5 或者B 61 A 2 3 4 5 1 3 5 2 删除矩阵A的
  • PHP中使用cURL实现进行Post请求 ssl 双向认证

    span class token comment 64 param string url 接收数据的api 64 param string vars 提交的数据 64 param int second 要求程序必须在 second 秒内完成
  • 大端字节序与小端字节序 (网络字节序与主机字节序)

    大端字节序与小端字节序 1 简介2 判断机器字节序 xff08 C C 43 43 xff09 3 主机字节序与网络字节序的转换4 IP地址与网络字节序的转换 1 简介 字节序分为大端字节序 xff08 big endian xff09 和
  • Noetic安装ros_canopen

    建立workspace mkdir span class token operator span p canopen span class token operator span scr cd canopen catkin make 下载n
  • ROS学习初始化ws下catkin_make必须有src生成devel和build

    安装虚拟机开启intel vt 创建工作空间 first ws src catkin make在ws下生成devel和build 创建package 在src下添加package catkin create pkg hello ros ro
  • Pyhon : 爬虫Requests高级用法--证书

    客户端证书 你也可以指定一个本地证书用作客户端证书 xff0c 可以是单个文件 xff08 包含密钥和证书 xff09 或一个包含两个文件路径的元组 xff1a requests get https kennethreitz org cer

随机推荐

  • 【px4】运行mavsdk中的offboard example

    运行MAVSDK中的offboard例子时无人机不执行 想控制无人机前后左右移动 xff0c 在按照官方教程实现offboard 插件的时候 发现用action插件能正常起飞和降落 但是一旦执行到offboard的插件代码的时候就会自动降落
  • MDF does not reside in a read-only database or filegroup

    错误信息 The file 34 MDF 34 is compressed but does not reside in a read only database or filegroup The file must be decompre
  • Python复习笔记4——文件和目录操作

    一 文件读写 1 1 读文件 xff08 1 xff09 打开文件 使用Python内置的open 函数 xff0c 传入文件名和标示符 xff0c 打开一个文件对象 xff1a span class token operator gt g
  • Python复习笔记5——常用模块

    一 内建模块 1 1 datetime日期时间 xff08 1 xff09 导入模块 span class token keyword from span datetime span class token keyword import s
  • COLMAP+OpenMVS实现物体三维重建mesh模型

    一 环境准备 1 COLMAP 进入COLMAP官网 xff0c 打开下载页面 xff0c 下载COLMAP程序 2 OpenMVS OpenMVS可以自己从源码下载进行编译 如果觉得编译openmvs可能要费点时间 xff0c 那也可以直
  • 解决ubuntu火狐无法上网问题

    之前安装Ubuntu时是可以上网的 xff0c 呆了一个月没怎么用突然不能搜索了 xff0c 记录一下 xff0c 已解决 只需一条命令 打开终端 xff0c 输入 sudo apt get install firefox 问题解决啦 xf
  • C语言基本数据类型int, short int, long int, long long int, unsigned int, signed int等解析

    一 普通int类型 int类型是有符号整型 xff0c 即int类型的值必须是整数 xff0c 可以是正整数 xff0c 负整数 xff0c 零 int类型取值范围因计算机系统而异 早起的16位IBM PC兼容机使用16位来存储一个int值
  • Docker容器内更新apt-get 国内加速

    Docker容器内更新源apt get的方法 由于不使用国内镜像网速缓慢 xff0c 所以使用国内镜像加速就很必要了 xff0c 但是经过博主测试大部分apt get加速都是针对Ubuntu 的 xff0c 根本解决不了Docker 容器内
  • STM32F4 422串口通信

    STM32F429 422串口通信 422串口的硬件原理图如下 xff1a 422串口和232串口不同的是引脚的电平控制 xff0c 还有DE是发送使能 xff0c 置高即可 xff1a RE是接收使能 xff0c 置低即可 422接出来的
  • Java基础学习记录

    一 基础DOS操作 dir xff1a directory 列出当前目录内容 md xff1a make directory 创建目录 rd xff1a remove directory 删除目录 cd xff1a change direc
  • 6、杂项:rtk原理简要说明

    目录 x1f345 点击这里查看所有博文 随着自己工作的进行 xff0c 接触到的技术栈也越来越多 给我一个很直观的感受就是 xff0c 某一项技术 经验在刚开始接触的时候都记得很清楚 往往过了几个月都会忘记的差不多了 xff0c 只有经常
  • 树莓派控制直流电机

    古月金真 1 直流电机 直流电机是一种将直流电能转换为机械能的装置 xff0c 被广泛的用于驱动各种设备 xff0c 如电风扇 遥控小车 电动车窗等 xff0c 在控制设备运转领域中 xff0c 它是不可或缺的一种设备 小型直流电机的的电压
  • SVN创建指定版本号的分支

    SVN创建分支下面三个选择的具体含义 xff1a 最新版本 xff08 HEAD revision in therepository xff09 直接从版本库中最新创建 xff0c 由于不需要从你的工作拷贝中传输数据 xff0c 创建过程会
  • 图像降噪算法——图像降噪算法总结

    图像降噪算法 图像降噪算法总结 图像降噪算法 图像降噪算法总结 图像降噪算法 图像降噪算法总结 前面这段时间我看了几篇和图像降噪相关的Review xff0c 给我的感觉就是SLAM这一研究领域像是一片汪洋 xff0c 而图像降噪领域则是另
  • 图像降噪算法——图像噪声模型

    图像降噪算法 图像噪声模型 图像降噪算法 图像噪声模型1 图像噪声建模2 C 43 43 代码实现3 结论 图像降噪算法 图像噪声模型 1 图像噪声建模 首先 xff0c 我们要区分图像传感器噪声和图像噪声 xff0c 图像传感器噪声我在博
  • 图像降噪算法——维纳滤波

    图像降噪算法 维纳滤波 图像降噪算法 维纳滤波1 基本原理2 C 43 43 代码实现3 结论 图像降噪算法 维纳滤波 维纳滤波是在频域中处理图像的一种算法 xff0c 是一种非常经典的图像增强算法 xff0c 不仅可以进行图像降噪 xff
  • 图像降噪算法——Variance Stabilizing Transform / Generalization Anscombe Transform算法

    图像降噪算法 Variance Stabilizing Transform Generalization Anscombe Transform算法 图像降噪算法 Variance Stabilizing Transform Generali
  • 图像降噪算法——DnCNN / FFDNet / CBDNet / RIDNet / PMRID / SID

    图像降噪算法 DnCNN FFDNet CBDNet RIDNet PMRID SID 图像降噪算法 DnCNN FFDNet CBDNet RIDNet PMRID SID1 基本原理1 1 DnCNN1 2 FFDNet1 3 CBDN
  • SLAM算法总结——经典SLAM算法框架总结

    SLAM算法总结 经典SLAM算法框架总结 SLAM算法总结 经典SLAM算法框架总结 SLAM算法总结 经典SLAM算法框架总结 从研究生接触SLAM算法到现在也有两三年了 xff0c 期间学习了很多经典的SLAM算法框架并写了一些相关的
  • 计算机视觉算法——基于Anchor Free的目标检测网络总结

    计算机视觉算法 基于Anchor Free的目标检测网络总结 计算机视觉算法 基于Anchor Free的目标检测网络总结1 CornerNet1 1 关键知识点 网络结构及特点1 2 关键知识点 正负样本匹配1 3 关键知识点 损失计算