Feature Selective Anchor-Free Module for Single-Shot Object Detection

2023-11-06

参考 Feature Selective Anchor-Free Module for Single-Shot Object Detection - 云+社区 - 腾讯云

摘要

提出了一种简单有效的单阶段目标检测模块——特征选择无锚定(FSAF)模块。它可以插入到具有特征金字塔结构的单阶段检测器中。FSAF模块解决了传统基于锚点检测的两个局限性:1)、启发式引导的特征选择;2)、基于覆盖锚取样;FSAF模块的总体思想是将在线特征选择应用于多层无锚分支的训练。具体来说,一个无锚的分支被附加到特征金字塔的每一层,允许在任意一层以无锚的方式进行框编码和解码。在训练过程中,我们动态地将每个目标实例分配到最合适的特性级别。在测试时,FSAF模块可以和基于锚的分支联合工作并行输出预测。我们用无锚分支的简单实现和在线特性选择策略来实例化这个概念。在COCO检测上的实验结果表明,我们的FSAF模块性能优于基于锚的同类检测器,而且速度更快。当与基于锚点的分支联合工作时,FSAF模块在各种设置下显著地改进了baseline Retinanet,同时引入了几乎自由的推理开销。由此产生的最佳模型可以实现最先进的44.6%的映射,超过现有的COCO单阶段检测器。

1、简介

目标检测是计算机视觉领域的一项重要工作。它是各种下游视觉应用的先决条件,如实例分割、面部分析、自动驾驶汽车和视频分析。由于先进的卷积神经网络和良好的数据集标注,目标检测器的性能得到了极大的提高。

目标检测的一个难题是尺度变化。为了实现尺度不变性,最先进的检测器构建了特征金字塔或多级特征塔。特征图的多尺度层并行地生成预测。此外,锚框可以进一步处理尺度变化。锚框用于将所有可能的实例框的连续空间离散成具有预定义位置、比例和高宽比的有限数量的框。基于IoU重叠实例框和锚框进行重叠。当与特征金字塔集成时,大型锚框通常与上部特征图相关联,而小型锚框则与下部特征图相关联,参见图2。这是基于这样的假设:上面的特征图具有更适合检测大目标的语义信息,而下面的特征图具有更适合检测小目标的细粒度细节。结合锚框的特征金字塔设计在目标检测基准上取得了良好的效果。

                               

然而,这种设计有两个局限性:1)、启发式引导的特征选择;2)、基于覆盖锚取样。在训练过程中,每个实例总是根据IoU重叠匹配最近的锚框。锚框通过人类定义的规则(如框的大小)与特定级别的特征图相关联。因此,为每个实例选择特征级别完全基于特定的启发法。例如,一个汽车实例大小50×50像素和另一个类似的汽车实例规模60×60像素可能分配到两个不同的功能水平,而另一个40×40车实例可能被分配到相同的水平50×50例,如图2所示。换句话说,锚框匹配机制本质上是启发式引导的。这导致了一个主要的缺陷,即用于训练每个实例的所选特性级别可能不是最优的。

我们提出了一种简单而有效的方法,称为特征选择无锚(FSAF)模块来同时解决这两个限制。我们的动机是让每个实例自由地选择最佳级别的特性来优化网络,因此在我们的模块中不应该存在约束特性选择的锚框。相反,我们以无锚的方式对实例进行编码,以了解用于分类和回归的参数。图3给出了一般概念。每个层次的特征金字塔都构建了一个无锚分支,独立于基于锚的分支。与基于锚的分支类似,它由一个分类子网和一个回归子网组成(图中没有显示)。可以将实例分配给无锚分支的任意级别。在训练过程中,我们根据实例内容,而不是仅仅根据实例框的大小,动态地为每个实例选择最合适的特性级别。选择到的特征层然后学习检测目标。根据推断,FSAF模块可以独立运行,也可以与基于锚的分支联合运行。我们的FSAF模块不依赖于主干网络,可以应用于具有特征金字塔结构的单阶段检测器。此外,无锚分支的实例化和在线特性选择可以是多种多样的。在这项工作中,我们保持我们的FSAF模块的实现简单,使其计算成本相比整个网络是可以忽略的。

在COCO目标检测基准上的大量实验验证了该方法的有效性。FSAF模块本身性能优于基于锚的模块,运行速度也更快。当与基于锚点的分支联合工作时,FSAF模块可以在各种主干网络中不断地大幅度提高强基线,同时引入最小的计算成本。特别是,我们使用ResNeXt-101提高了1.8%的RetinaNet,仅增加了6ms的推理延迟。此外,我们的最终检测器实现了最先进的44.6%的mAP时,多尺度测试的使用,超过了所有现有的基于COCO的单阶段检测器。

2、相关工作

近年来,物体检测器常用特征金字塔或多层特征塔作为一种通用结构。SSD首先提出从多个特征尺度预测类分数和边界框。FPN和DSSD提出了用各种尺度的高级语义特征图来增强低级特征。RetinaNet解决了具有Focal Loss的多级稠密检测器的类不平衡问题。DetNet设计了一种新颖的骨干网,以保持在金字塔上层的高空间分辨率。但是,它们都使用预定义的锚框来对目标实例进行编码和解码。其他工作则以不同的方式处理尺度变化。他等人将边界框建模为高斯分布以改进定位。Zhu等加强了针对小物体的锚设计。 He等人将包围框建模为高斯分布,以改进定位。  

无锚检测的思想并不新鲜。DenseBox首先提出了一个统一的端到端全卷积框架,直接预测了边界盒。UnitBox为了更好的进行Box回归,提出了一个相交于联合(IoU)损失函数。Zhong等人提出了无锚区域建议网络,用于寻找不同尺度、长宽比和方向的文本。最近CornerNet提出检测一个物体边界框作为一对角,构建了最好的单阶段检测器。SFace提出将基于锚的方法与无锚方法相结合。然而,它们仍然采用启发式的特征选择策略。

3、无锚特征选择模块

在本节中,我们通过演示如何将我们的无锚特征选择(FSAF)模块应用到具有特征金字塔的单阶段检测器(如SSD、DSSD和RetinaNet)来实例化它。在不失一般性的前提下,我们将FSAF模块应用到目前最先进的RetinaNet中,并从以下几个方面展示了我们的设计:

1)、如何在网络中创建无锚分支(3.1);

2)、如何生成无锚支路的监控信号(3.2);

3)、如何为每个实例动态选择feature level (3.3);

4)、如何联合训练和测试无锚和锚固分支(3.4);

3.1、网络结构

从网络的角度来看,我们的FSAF模块非常简单。图4说明了带有FSAF模块的RetinaNet的体系结构。简而言之,RetinaNet由一个主干网络和两个特定于任务的子网组成。特征金字塔是由P_3P_7级的骨干网络构成,其中l为金字塔级,P_l为输入图像的1/2^l分辨率。为了简单起见,只显示了三个级别。金字塔的每一层都用于尺度不同尺度的物体。为此,P_l附加了一个分类子网和一个回归子网,它们都是小型的全卷积网络。分类子网络在每个空间位置预测预测目标的概率,对A个锚和K类个目标类。回归子网预测4维目标类别位置的偏移,从每个锚框到附近的实例(如果存在的话)。

在RetinaNet的顶部,我们的FSAF模块为每个金字塔层只引入了两个额外的conv层,如图4中的虚线特征图所示。这两层分别负责无锚分支的分类和回归预测。具体来说,在分类子网的特征图上附加一个3×3的带有K个滤波器的卷积层,然后是sigmoid函数,与基于anchor的分支的特征图并行。在每个空间位置对K类目标进行预测。同样的,在回归子网中,在特征图上附加一个3×3的conv层和4个滤波器,然后是ReLU函数。它负责以无锚方式预测编码的盒偏移量。为此,无锚和基于锚的分支以多任务的方式联合工作,共享每个金字塔级别的特征。

3.2、Ground truth和标签

给定一个目标实例,我们知道它的类别标签K和包围框坐标b=[x,y,w,h],其中(x, y)是包围框的中心,w和h分别是宽度和高度。训练期间实例能分配到任意的特征层级P_l,我们定义投影框b^l_p=[x^l_p,y^l_p,w^l_p,h^l_p],作为b到P_l上的投影,例如b^l_p=b/2^l。我们同时定义有效框b^l_e=[x^l_e,y^l_e,w^l_e,h^l_e]和忽略盒b^l_i=[x^l_e,y^l_e,w^l_e,h^l_e],作为常量尺度因子\epsilon _e\epsilon _i分别控制b^l_p的部分区域,例如

                                                           x^l_e=x^l_p,y^l_e=y^l_p,w^l_e=\epsilon _ew^l_p,h^l_e=\epsilon _e h^l_p

                                                           x^l_i=x^l_p,y^l_i=y^l_p,w^l_i=\epsilon _iw^l_p,h^l_i=\epsilon _ih^l_p

我们设置\epsilon _e = 0.2,\epsilon _i = 0.5,图5展示了一个为car实例生成ground-truth的示例。

                           

分类输出:分类输出的ground-truth是K个图,每个映射对应一个类。该实例以三种方式影响第k个ground truth映射。首先,有效框b^l_e区域是“car”类映射图中以白框形式显示的正区域,表示实例的存在。其次,忽略框(不包括有效框b^l_i-b^l_e)是显示为灰色区域的忽略区域,这意味着该区域的梯度不会传播回网络。第三,如果存在,相邻特征层(b^{l-1}_i,b^{l+1}_i)中的忽略框也忽略。请注意,如果两个实例的有效框在一个级别上重叠,则较小的实例具有更高的优先级。Ground truth映射的其余区域是由零填充的负(黑色)区域,表示没有目标。Focal Loss用\alpha=0.25\gamma=2.0进行监督训练。图像无锚分支的分类总损失是所有非忽略区域上的Focal Loss之和,按所有有效盒区域内的像素总数归一化。

框回归输出:回归输出的ground truth是4个与类无关的偏移量映射。实例只影响偏步长映射上的b^l_e区域。对b^l_e内的每个像素位置,将有效盒子b^l_p表示成四维矢量d^l_{i,j}=[d^l_{t_{i,j}},d^l_{l_{i,j}},d^l_{b_{i,j}},d^l_{r_{i,j}}],其中d^l_t,d^l_l,d^l_b,d^l_r分别是当前像素与p^l_p的上、左、底、右边界的边界。然后将4个偏移图上(i, j)处的4维向量设置为d^l_{i,j}/S,每个映射对应一个维度。S是归一化常数,我们根据经验选择S = 4.0。有效框之外的位置是忽略梯度的灰色区域。采用IoU损失进行优化。图像无锚分支的总回归损失是所有有效框区域IoU损失的平均值。

在推理期间,很容易从分类和回归输出中解码预测的框。在每个像素位置(i, j),假设预测偏移量为[\hat{o}_{t_{i,j}},\hat{o}_{l_{i,j}},\hat{o}_{b_{i,j}},\hat{o}_{r_{i,j}}]。然后预测的距离是[S\hat{o}_{t_{i,j}},S\hat{o}_{l_{i,j}},S\hat{o}_{b_{i,j}},S\hat{o}_{r_{i,j}}]。预测投影框的左上角和右下角分别为[i-S\hat{o}_{t_{i,j}},j-S\hat{o}_{l_{i,j}}][i+S\hat{o}_{b_{i,j}},j+S\hat{o}_{r_{i,j}}]。我们进一步将投影框放大2^l倍,以得到图像平面中的最终框。框的置信度得分和类别可以由分类输出图上位置(i, j)处的k维向量的最大得分和对应的类别决定。

3.3、在线特征选择

无锚分支的设计允许我们使用任意金字塔级P_l的特性来学习每个实例。为了找到最优的特性级别,我们的FSAF模块根据实例内容选择最佳P_l,而不是像基于锚的方法那样选择实例框的大小。给定一个实例I,我们定义它在P_l上的分类损失和回顾损失,分别为L^I_{FL}(l)L^I_{IOU}(l),通过计算有效框区域b^l_e上的focal loss和IOU loss,例如:

                                                 

其中N(b^l_e)b^l_e区域内的像素数,并且FL(l,i,j)IoU(l,i,j)分别是P_l(i,j)处的focal loss和IoU loss。

图6显示了我们的在线特性选择过程。首先将实例l通过所有层次的特征金字塔进行转发。然后利用式(1)计算所有无锚分支的L^I_{FL}(l)L^I_{IoU}(l)之和。最终最佳金字塔层P_{l^*}产生最小的损失和,选择这个层来学习实例,例如

                                           

对于训练批处理,将更新相应分配实例的特性。直觉上,所选的特性是当前对实例建模的最佳方式。它的损失在特征空间中形成一个下界。通过训练,我们进一步拉下这个下界。在推理的时候,我们不需要选择特征,因为最合适的特征金字塔水平自然会输出高的置信度分数。

为了验证我们的在线特征选择的重要性,我们还在消融研究中进行了启发式特征选择过程的比较(4.1)。启发式特征选择完全依赖于框的大小。我们借用了FPN检测器的思想。一个实例I被赋值给特征金字塔的P_{l^{\prime}}层:

                                    

这里224是标准的ImageNet训练前大小,l_0是将一个w \times h=224^{2}的实例映射到的目标层。在本工作中,我们选择l_0 = 5是因为ResNet使用了来自第五个卷积组的特征图进行最终的分类。

3.4、联合推断和训练

当插入到RetinaNet时,我们的FSAF模块与基于anchor的分支协同工作,参见图4。我们保持了基于锚的分支的原始状态,所有超参数在训练和推理中都保持不变。

推断:FSAF模块只是在全卷积的RetinaNet上增加了几个卷积层,因此推理仍然和通过网络转发图像一样简单。对于无锚的分支,我们只对每个金字塔级别中最多1k个得分最高的位置的框预测进行解码,然后将置信值阈值化0.05。这些来自各个级别的顶级预测与基于锚点的分支的box预测合并,然后是阈值为0.5的非最大抑制,从而得到最终的检测结果。

初始化:主干网络在ImageNet1k上进行预训练。初始化的方法和Retinanet一样。对FSAF的卷积层初始化分类层,用-log((1-\pi)/\pi),并且用\sigma =0.01的高斯权重来填充,其中\pi指定训练每个像素位置输出目标的分数在\pi。我们将\pi设置为0.01。所有框回归层初始化与偏置b,和填充为\sigma=0.01高斯权重。我们在所有实验中使用b=0.1。初始化有助于在早期迭代中稳定网络学习,防止大量损失。

优化:整个网络的损失是无锚和基于锚的分支的综合损失。设L^{ab}为原锚定型RetinaNet的全部损失。用L^{af}_{cls}L^{af}_{reg}分别代表无锚分支的分类和回归损失。总体的优化损失为,其中\lambda控制无锚分支的权重。在所有实验中,我们设置\lambda=0.5。虽然结果是稳健的确切值。整个网络在8个GPU上使用随机梯度下降(SGD)进行训练,每个GPU有2张图像。除非另有说明,所有模型都经过90k迭代的训练,初始学习率为0.01,在60k时除以10,在80k迭代时再除以10。除非另有说明,否则水平图像翻转是唯一应用的数据增强。重量衰减是0.0001,动量是0.9。

4、实验

我们对COCO数据集的检测进行了实验。训练数据是COCO trainval35k split,包括来自train的所有80k图像和来自40k val split的随机的35k图像子集。我们分析了我们的方法,通过消融研究包含来自val的剩余5k图像的minival分割。当与最先进的方法相比较时,我们报告了COCO AP在test-dev分割上,它没有公共标签,需要使用评估服务器。

4.1、消融实验

对于所有的消融研究,我们使用800像素的图像尺度进行训练和测试。我们评估了几个重要元素对检测器的贡献,包括无锚分支、在线特征选择和主干网络。结果见表1和表2。

         

                                    

无锚分支是必要的:我们首先训练两个个具有无锚分支的检测器,分别使用两种特征选择方法(表1、2、3项)。事实证明,没有锚的分支只能取得不错的效果。当与基于锚点的分支联合优化时,无锚点分支有助于学习基于锚点的分支难以建模的实例,从而提高AP分数(表1第5项)。特别是通过在线特征选择,AP_{50}AP_SAP_L评分分别提高了2.5%、1.5%和2.2%。为了找出FSAF模块可以检测哪些类型的目标,我们在图7中展示了与我们的RetinaNet进行头对头比较的一些定性结果。显然,我们的FSAF模块更擅长于寻找具有挑战性的实例,例如锚框不能很好地覆盖的微小和非常薄的目标。

在线特征选择是必要的:如3.3节所述,我们可以像选择基于锚的分支一样,根据启发法选择无锚分支中的特性,或者根据实例内容选择特性。事实证明,选择正确的特征来学习在检测中起着至关重要的作用。实验表明,基于启发式特征选择的无锚分支是有效的。(3)由于可学习参数较少,无法与基于锚的对应项竞争。但与我们的在线功能选择, AP提高了1.2%(表1第3项对第2项),克服了参数的不足。此外,表1第4和第5项进一步证实了我们的在线特性选择对于无锚和基于锚的分支的良好协作是必不可少的。

如何选择最优特征:为了理解为实例选择的最佳金字塔级别,我们可视化了一些定性检测结果,这些结果只来自图8中的无锚分支。类名前面的数字表示检测目标的功能级别。事实证明,在线特性选择实际上遵循这样的规则:上层选择较大的实例,而下层负责较小的实例,这与基于锚的分支中的原则相同。但也有少数例外,即网络特征选择选择金字塔层次不同于基于锚点的分支。我们将这些异常标记为图8中的红色框。绿色方框表示FSAF模块和基于锚的分支之间的协议。通过捕获这些异常,我们的FSAF模块可以使用更好的特性来检测具有挑战性的目标。

FSAF模块健壮、高效:我们也评估了主干网对我们的FSAF模块在准确性和速度方面的影响。三个主干网络包括ResNet-50、ResNet-101和ResNeXt-101。检测器运行在一个单一的TitanX GPU与cuda9和CUDNN 7使用批量大小为1。结果见表2。我们发现我们的FSAF模块对各种主干网都是鲁棒的。FSAF模块本身已经比基于锚的RetinaNet更好更快。在ResNeXt-101中,FSAF模块的性能比基于锚的模块高出1.2%,同时快了68ms。当与基于锚的分支联合应用时,我们的FSAF模块始终能够提供相当大的改进。这也表明基于锚的分支没有充分利用主干网络的能力。同时,我们的FSAF模块在整个网络中引入了边际计算成本,导致推理速度的损失可以忽略不计。特别是,我们在仅增加6ms推断延迟的情况下,在ResNeXt-101上提高了1.8% AP的RetinaNet。

4.2、和最先进的目标检测算法相比

我们COCOtest-dev split上评估我们最终的检测器,以便与最近的最先进的方法进行比较。我们最后的模型是带有FSAF模块的RetinaNet,即基于锚的分支加上FSAF模块。模型使用scale jitter在\{640, 672, 704, 736, 768, 800\}的尺度上进行训练,比4.1节中的模型长1.5倍。评估包括单标度和多标度版本,其中单尺度测试使用800像素的图像标度,单尺度测试使用测试时间扩展。测试时间增加是测试超过{400, 500, 600, 700, 900, 1000, 1100, 1200}和水平翻转在每个规模。我们所有的结果都来自于没有集成的单个模型。

表3给出了比较结果。通过ResNet-101,我们的检测器能够在单标度和多标度场景中获得具有竞争力的性能。插入ResNeXt-101-64x4d后,AP进一步提高到44.6%,大大超过了之前最先进的单阶段检测器。

5、结论

该工作将启发式特征选择确定为基于锚点的单点特征金字塔检测器的主要限制。为了解决这个问题,我们提出了FSAF模块,该模块应用在线特征选择来训练特征金字塔中的无锚分支。它显著提高了强大的baseline和微小的推理开销,并优于目前最先进的单阶段检测器。

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

Feature Selective Anchor-Free Module for Single-Shot Object Detection 的相关文章

随机推荐

  • SDIO接口(3)——SDIO总线接口

    SDIO总线接口 SDIO是在SD标准上定义了一种外设接口 故名思义 就是SD的I O接口的意思 SD本来是记忆卡的标准 但是现在把SD连接一些外围I O使用 这样边形成了SDIO接口 SDIO本身只是一种接口技术 类似于SPI接口 通过I
  • Java itext为pdf 文件添加水印核心功能代码片段

    param content param pageRect param waterMarkContent 水印文字 private static void addWaterMark PdfContentByte content Rectang
  • 如何利用Nginx实现动态负载均衡

    为什么用Nginx Nginx是经过实践证明的 安全稳定的反向代理服务器 淘宝 新浪等大型互联网公司都有Nginx的身影 Nginx经过线上各种网络环境验证 能够帮你隔离各种复杂的网络环境 轻松支持10000 的同时在线连接数 同时拥有多种
  • vs2019创建c语言_VS2019初步使用

    前言 前段时间把电脑重置了下 导致很多软件都被删除了 所以重新安装了 顺便把一些 陈年落后 的软件更新到了最新版 新版的软件和之前相比的确区别很大 更人性化了 功能也增加了不少 体会最深的就是Adobe Photoshop 2020 对新手
  • WordPress初学者入门教程-页面与文章

    本文源自 https wpeyes com wordpress 当你想要添加书面内容到你的网站 你有两个选择 你可以创建一个页面或一篇文章 在添加 编辑方面 这两者非常相似 但在功能上其实是相当不同的 对于刚接触WordPress的人 或者
  • vue3中使用ant-design-vue的layout组件实现动态导航栏功能(1~2级)

    目录 0 前言 1 准备工作 1 1 安装ant design vue 1 2 安装图标组件包 2 选择组件 3 路由文件 4 Vue导航页面 5 最终效果 0 前言 最近在自己搞一个前后端小项目 前端想使用ant design vue的l
  • 顶部导航栏的写法

    goodsType white space nowrap overflow x scroll webkit overflow scrolling touch padding 0 5rem 3 goodsTypeitem margin rig
  • 优化阶乘算法的探索

    优化阶乘算法的探索 中国地质大学 武汉 陈海丰 阶乘 factorial 是基斯顿 卡曼 Christian Kramp 1760 1826 于1808年发明的运算符号 阶乘 也是数学里的一种术语 是指从1乘以2乘以3乘以4一直乘到所要求的
  • 不看后悔的Linux内核Makefile文件详解

    好文章推荐 CSDNhttps mp csdn net mp blog creation editor 127774142 第一部分 概述 内容有点多 建议大家先收藏慢慢看哦 什么是makefile 或许很多Winodws的程序员都不知道这
  • linux中 mysql数据查询出来中文变问号的处理方法

    我们在linux里面 命令行查询数据库的时候 可能会遇到查询出来的中文是问号 如下图 这种情况一般是字符集编码的问题 show variables like character set 这个时候发现results的编码不是utf 8 cli
  • LaTex常用技巧5:公式太长换行并加大括号

    使用LaTex做笔记的时候发现公式太长 一行会超出页面 于是想到换行 原来的代码 这里使用了包bm 测试的时候前面请使用 usepackage bm begin equation i G bm a begin cases i i 1 ddo
  • SDIO的SPI模式驱动分析

    SPI模式由一个由基于闪存SD存储卡提供的次要通信协议组成 此模式是SD存储卡协议的子集 此接口在上电 CMD0 后的每一个复位命令期间被 选择 SPI标准只定义物理链接 而不提供数据传输协议 SD存储卡SPI执行利用SD存储卡协议和命令集
  • 2023第十四届蓝桥杯JavaA组真题

  • 关于java数组的扩容问题

    这是一个java数组实例 对一个顺序数组插入一个数 很明显直接插入是不行的 因为java中数组是固定的 不变是不能动态扩容的 想要插入一个数必然要重新创建一个数组 其长度比原数组大 然后对其进行拷贝 接下来要做的工作就是在新数组里面实现插入
  • 一次学校实训总结

    总结 前言 1 Linux基本命令 2 编程开发经验 3 一点MQTT协议的小知识点 4 学习中遇到的一些问题 5 遗忘的知识点与待解决的疑惑 写在后面的话 前言 好久不见 本来说好要更哈工大那一版的操作系统的 现在看来要食言了 正在准备考
  • 监听竖线一直在底部vue2

    要做一个竖线固定在固定区域上 占满固定区域的顶部到底部 固定区域会有滚动条 滚动条滚动的时候竖线要跟随吧变化 首先看看效果 解决办法 body代码 div class liebiao div style height 100 width 1
  • HPC超算初识思维导图

    HPC是高性能计算 High Performance Computing 机群的简称 指能够执行一般个人电脑无法处理的大资料量与高速运算的电脑 其基本组成组件与个人电脑的概念无太大差异 但规格与性能则强大许多 现有的超级计算机运算速度大都可
  • 如何用Redis实现搜索接口

    大家如果是做后端开发的 想必都实现过列表查询的接口 当然有的查询条件很简单 一条 SQL 就搞定了 但有的查询条件极其复杂 再加上库表中设计的各种不合理 导致查询接口特别难写 然后加班什么的就不用说了 不知各位有没有这种感受呢 下面以一个例
  • 华为公司经典设计规范合集

    下载链接 华为公司经典设计规范合集资源 CSDN文库 目录
  • Feature Selective Anchor-Free Module for Single-Shot Object Detection

    参考 Feature Selective Anchor Free Module for Single Shot Object Detection 云 社区 腾讯云 摘要 提出了一种简单有效的单阶段目标检测模块 特征选择无锚定 FSAF 模块