目标检测论文阅读:CBNet算法笔记
标题:CBNet: A Composite Backbone Network Architecture for Object Detection
期刊:TIP2022
论文地址:https://ieeexplore.ieee.org/document/9932281/
官方代码:https://github.com/VDIGPKU/CBNetV2
作者单位:北京大学、阿里巴巴蚂蚁集团、石溪大学
文章目录
- Abstract
- I. Introduction
- II. Related Work
- A. Object Detection
- B. Backbones for Object Detection
- C. Recurrent Convolution Neural Network
- D. Model Ensemble
- E. Our Approach
- III. Proposed Method
- A. Architecture of CBNet
- B. Possible Composite Strategies
- C. Auxiliary Supervision
- D. Pruning Strategy for CBNet
- E. Architecture of Detection Network With CBNet
- IV. Experiments
- A. Implementation Details
- B. Comparison With State-of-the-Art
- C. Generalization Capability of CBNet
- D. Comparison With Relevant Works
- E. Compatibility of CBNet
- F. Ablation Studies
- V. Conclusion
Abstract
现代顶级的目标检测器严重依赖于主干网络,通过探索更有效的网络结构,主干网络的进步带来了一致的性能增益。本文我们提出了一种新颖且灵活的主干框架,即CBNet,在预训练微调(pre-training fine-tuning)范式下利用现有的开源预训练主干来构建高性能检测器。特别地,CBNet结构组合了多个相同的主干,通过复合连接(composite connection)进行连接。具体来说,它融合了多个相同主干网络的高层和低层特征,并逐步扩大感受野,以更有效地进行目标检测。我们还针对CBNet-based检测器提出了一种更好的具有辅助监督(auxiliary supervision)的训练策略。CBNet对于不同主干和头部设计的检测器结构有着强大的泛化能力。CBNet无需对复合主干进行额外的预训练,可以适应各种主干(即CNN-based vs. Transformer-based)和大多数主流检测器的头部设计(即单阶段 vs. 两阶段,anchor-based vs. anchor-free-based)。实验提供了有力的证据表明,与简单地增加网络的深度和宽度相比,CBNet引入了更高效、有效和资源友好的方式来构建高性能的主干网络。尤其我们的CB-Swin-L在单模型、单尺度测试协议下的COCO test-dev上达到了59.4% box AP和51.6% mask AP,显著优于Swin-L取得的SOTA结果(即57.7% box AP和50.2% mask AP),同时减少了6×的训练时间。通过多尺度测试,在不使用额外训练数据的情况下,我们将当前最好的单模型结果推动至60.1% box AP和52.3% mask AP的新记录。
I. Introduction
目标检测旨在从任意图像预定义的类别集合中定位每个目标实例。它在自动驾驶、智能视频监控、遥感等领域有着广泛的应用。近年来,随着深度卷积网络的蓬勃发展,目标检测取得了很大的进展,很多优秀的检测器被提出,如SSD、YOLO、Faster R-CNN、RetinaNet、ATSS、Mask R-CNN、Cascade R-CNN等。
通常,在基于神经网络(Neural Network,NN)的检测器中,主干网络用于提取检测目标的基本特征,并且在大多数情况下是为图像分类而设计的,在ImageNet上预训练。直观上,主干提取的特征越具有代表性,其宿主检测器的性能越好。为了获得更高的精度,主流检测器采用了更深更宽的主干(即从mobile-size模型 和ResNet到ResNeXt和Res2Net)。最近,基于Transformer的主干表现出了非常有前景的性能。总的来说,在目标检测中,大型主干预训练的进展显示了更有效的多尺度表示的趋势。
受预训练的基于大型主干的检测器取得成果的激励,我们寻求进一步的改进,利用现有设计良好的主干结构及其预训练权重来构建高性能检测器。尽管可以设计一个新的改进的主干,但是专家知识和计算资源开销可能是昂贵的。一方面,设计新的主干结构需要专家经验和大量试错。另一方面,在ImageNet上预训练一个新的主干(特别是对于大型模型)需要大量的计算资源,这使得遵循预训练和微调范式来获得更好的检测性能需要付出高昂的代价。或者,从头开始训练检测器可以节省预训练的成本,但需要更多的计算资源和训练技巧。
在本文中,我们提出了一种在预训练微调范式下使用现有预训练主干的简单且新颖的组合方法。不同于以往大多数方法侧重于模块化精心制作,需要在ImageNet上进行预训练来增强表示,我们改进了现有的主干表示能力,无需额外的预训练。如图1所示,我们的解决方案称为复合主干网络(Composite Backbone Network,CBNet),将多个相同的主干网络组合在一起。具体来说,并行的主干(命名为协助主干(assisting backbone)和领导主干(lead backbone))通过复合连接进行连接。在图1中,从左到右,协助主干每个阶段的输出流向其后继兄弟节点的并行且更低层的阶段。最后,将领导主干的特征馈送给颈部和检测头进行边界框回归和分类。与简单网络的加深或加宽相反,CBNet融合了多个主干网络的高层和低层特征,并逐步扩大感受野,以实现更有效的目标检测。值得注意的是,CBNet每个组成的主干都是由现有开源预训练的单个主干的权重初始化的(例如,CB-ResNet50网络由ResNet50网络的权重初始化,在开源社区中可以获得)。此外,为了进一步挖掘CBNet的潜力,我们为协助主干提出了一种有效的监督训练策略,在不牺牲推理速度的情况下实现了更高的检测精度。尤其我们提出了一种剪枝策略,在不牺牲准确率的同时降低了模型复杂度。
我们提出了两个版本的CBNet。第一个称为CBNetV1,它只连接并行主干的相邻阶段,提供了复合主干一种易于遵循的简单实现。另一个是CBNetV2,结合了稠密高层组合策略、辅助监督和一个特殊的剪枝策略,充分挖掘了CBNet在目标检测方面的潜力。我们通过实验证明了CBNetV2相对于CBNetV1的优越性。
我们通过在具有挑战性的MS COCO基准测试集上进行实验来证明我们框架的有效性。实验表明,CBNet对不同主干和头部设计的检测器结构具有很强的泛化能力,这使得我们能够训练出明显优于基于较大主干的检测器的检测器。具体来说,CBNet可以应用于各种主干网络,从基于卷积的到基于Transformer的。与原始主干相比,CBNet将其性能提升了3.4%-3.5% AP,证明了所提CBNet的有效性。在模型复杂度相当的情况下,我们的CBNet仍然提高了1.1%-2.1% AP,表明复合的主干比预训练更宽和更深的网络更有效。并且,CBNet可以灵活地插入到主流检测器(例如RetinaNet、ATSS、Faster R-CNN、Mask R-CNN、Cascade R-CNN和Cascade Mask R-CNN 等)中,以3%-3.8% AP一致地提升这些检测器的性能,表明其对不同头部设计的检测器具有很强的适应性。此外,CBNet与特征增强网络和模型集成方法兼容。值得注意的是,它提出了一个通用的资源友好性框架来驱动高性能检测器的精度上限。在不加修饰情况下,我们的CB-Swin-L在COCO test-dev上实现了59.4% box AP和51.6% mask AP的单模型单尺度结果,超过了SOTA的结果(即Swin-L取得的57.7% box AP和50.2% mask AP),同时减少了6×的训练计划。通过多尺度测试,我们将当前最好的单模型结果推动至60.1% box AP和52.3% mask AP的新纪录。
本文的主要贡献如下:
- 我们提出了一个通用、高效、有效的框架CBNet(Composite Backbone Network),来构建高性能的目标检测主干网络,无需额外的预训练。
- 在预训练微调范式下,我们提出了稠密高层组合(Dense High-Level Composition,DHLC)策略、辅助监督和一个剪枝策略来高效利用现有的预训练权重进行目标检测。
- 我们的CB-Swin-L在COCO上以比Swin-L更短(6×)的训练时间取得了单模型单尺度结果的新记录。通过多尺度测试,我们的方法在没有额外训练数据的情况下获得了最好的结果。
II. Related Work
A. Object Detection
回顾了主流的目标检测器。首先介绍了主流范式的构成:主干、颈部和头部。然后提及了一些单阶段、两阶段、center-based anchor-free、keypoint-based anchor-free以及Transformer-based检测器。最后回顾了几个在检测器中应用NAS的方法。
B. Backbones for Object Detection
回顾了目标检测中一些经典的主干。众所周知,设计和预训练一个新的鲁棒的主干需要相当数量的计算成本。或者,我们提出了一种更经济、更高效的解决方案,通过组合多个相同的现有主干(如ResNet、ResNeXt、Res2Net、HRNet、Swin Transformer等)来构建更强大的目标检测主干。
C. Recurrent Convolution Neural Network
不同于CNN的前馈(feed-forward)结构,循环卷积神经网络(Recurrent CNN,RCNN)在每个卷积层中融入循环连接,以增强模型的上下文信息整合能力。如图3所示,我们提出的复合主干网络与展开的RCNN有一些相似之处,但它们有很大的不同。首先,CBNet中并行阶段之间的连接是单向的,而RCNN中并行阶段之间的连接是双向的。其次,在RCNN中,并行阶段在不同的时间步长(time steps)共享参数权重,而在所提出的CBNet中,主干的并行阶段是相互独立的。此外,如果将RCNN作为检测器的主干,需要在ImageNet上对其预训练。相比之下,CBNet不需要额外的预训练,因为它直接使用已有的预训练权重。
D. Model Ensemble
众所周知,许多不同预测器的组合可以导致更准确的预测,例如,集成方法被认为是许多机器学习挑战的SOTA解决方案。模型集成通过训练多个不同的模型,并通过后处理将它们的预测结果进行组合,从而提高单个模型的预测性能。
模型集成有两个关键的特点:模型多样性(model diversity)和投票(voting)。模型多样性是指具有不同结构或训练技术的模型被单独训练,其对于模型集成的重要性得到了很好的建立。大多数集成方法需要投票策略来比较不同模型的输出,并对最终的预测进行优化。就以上两个特点而言,我们的CBNet与模型集成有很大的不同。事实上,CBNet得益于相同主干的组合,通过联合训练以循环式的特征增强。此外,领导主干的输出直接用于最终的预测,而不需要与其它主干进行集成。
在实际中,MS COCO或OpenImage等挑战性目标检测基准的主要方法都是基于模型集成的使用。例如,Liu等人分别训练了28个不同结构、头部、数据划分、类别采样策略、增强策略和监督的模型,并通过集成的方法对这些检测器的输出进行聚合。Mao等人提出了概率排序感知集成(Probabilistic Ranking Aware Ensemble,PRAE),细化了来自不同检测器的边界框的置信度。我们的CBNet与其它传统的主干一样,与这些模型集合方法兼容。
E. Our Approach
我们的网络并行地组合多个相同的主干。它融合了多个相同主干的高层和低层特征,并逐步扩大感受野以更有效地进行目标检测。本文是我们之前的会议论文CBNetV1一个非常重要的扩展,CBNetV2的结果是在最近开发的SOTA目标检测框架下得到的。与CBNetV1相比,主要的技术创新在于三个方面。①我们对CBNetV1进行了扩展,并进行了3个修改:一个专门的训练方法、一个更好的复合策略和一个剪枝策略,分别优化了训练过程、更有效地增强了特征表示和降低了CBNetV2的模型复杂度。②我们展示了CBNetV2对于各种主干和头部设计的检测器结构的强大泛化能力。③我们展示了CBNetV2相对于CBNetV1的优越性,并展现了CBNetV2在目标检测中的SOTA结果。
III. Proposed Method
A. Architecture of CBNet
提出的CBNet由KKK个相同的主干(K≥2K≥2K≥2)组成。特别地,我们将K=nK=nK=n的情况称为CB-Backbone-Knnn,其中当K=2K=2K=2时,“-Knnn”被省略。
如图1所示,CBNet结构包括两种类型的主干:领导主干BKB_KBK和协助主干B1,B2,...,BK−1B_1,B_2,...,B_{K-1}B1,B2,...,BK−1。每个主干包含LLL个阶段(L=5L=5L=5),每个阶段由若干个具有相同尺寸特征图的卷积层组成。主干的第lll个阶段执行非线性变换FL(⋅)(L=1,2,...,L)F^L(·)(L=1,2,...,L)FL(⋅)(L=1,2,...,L)。
大多数传统的卷积网络遵循将输入图像编码成具有单调递减分辨率的中间特征的设计。特别地,第lll个阶段将先前第l−1l-1l−1个阶段的输出(记为xl−1x^{l-1}xl−1)作为输入,可以表示为:
xl=Fl(xl−1),l≥2(1)x^l=F^l(x^{l-1}),~~l≥2\tag{1} xl=Fl(xl−1), l≥2(1)不同的是,我们采用协助主干B1,B2,...,BK−1B_1,B_2,...,B_{K-1}B1,B2,...,BK−1来提高领导主干BKB_KBK的表示能力。我们以逐阶段(stage-by-stage)的方式将一个主干的特征迭代到其继承者。因此,公式1可以改写为:
xl=Fkl(xkl−1+gl−1(xk−1)),l≥2,k=2,3,...,K(2)x^l=F_k^l(x_k^{l-1}+g^{l-1}(\boldsymbol{x_{k-1}})),~~l≥2,k=2,3,...,K\tag{2} xl=Fkl(xkl−1+gl−1(xk−1)), l≥2,k=2,3,...,K(2)其中,gl−1(⋅)g^{l-1}(·)gl−1(⋅)表示复合连接,它将来自协助主干Bk−1B_{k-1}Bk−1的特征(记为xk−1={xk−1i∣i=1,2,...,L}\boldsymbol{x_{k-1}}=\{x_{k-1}^i|i=1,2,...,L\}xk−1={xk−1i∣i=1,2,...,L})作为输入,将与xkl−1x_k^{l-1}xkl−1相同尺寸的特征作为输出。因此,Bk−1B_{k-1}Bk−1的输出特征被变换,并贡献到BkB_kBk中每一阶段的输入。注意,x11,x21,...,xK1x_1^1,x_2^1,...,x_K^1x11,x21,...,xK1是共享权重的。
对于目标检测任务,只有领导主干的输出特征{xKi,i=2,3,...,L}\{x_K^i,i=2,3,...,L\}{xKi,i=2,3,...,L}被输入到颈部,然后是RPN/检测头,而协助主干的输出则是输入到其后继兄弟。值得注意的是,B1,B2,...,BK−1B_1,B_2,...,B_{K-1}B1,B2,...,BK−1可用作各种主干结构(例如ResNet、ResNeXt、Res2Net、Swin Transformer等),并直接根据单个主干的预训练权重进行初始化。
B. Possible Composite Strategies
对于复合连接gl(x)g^l(x)gl(x),它将来自一个协助主干的x={xi∣i=1,2,...,L}\boldsymbol{x}=\{x^i|i=1,2,...,L\}x={xi∣i=1,2,...,L}作为输入,并输出一个与xlx^lxl相同尺寸的特征(出于简单省略了kkk),我们提出以下五种不同的复合策略。
①同一层复合(Same Level Composition,SLC):一种直观简单的复合方式是将来自主干同一阶段的输出特征进行融合。如图2a所示,SLC操作可以表示为:
gl(x)=w(xl),l≥2(3)g^l(x)=\bold{w}(x^l),~~l≥2\tag{3} gl(x)=w(xl), l≥2(3)其中,w\bold{w}w表示一个1×1卷积层和一个批标准化层。
②相邻更高层复合(Adjacent Higher-Level Composition,AHLC):受特征金字塔网络的启发,自顶向下的路径引入了空间上更粗糙但语义上更强的高层特征来增强自底向上路径中的低层特征,我们引入AHLC来将前一个主干的相邻更高层阶段的输出提供给随后的一个主干(图2b中从左到右):
gl(x)=U(w(xl+1)),l≥1(4)g^l(x)=\bold{U}(\bold{w}(x^{l+1})),~~l≥1\tag{4} gl(x)=U(w(xl+1)), l≥1(4)其中,U(⋅)\bold{U}(·)U(⋅)表示上采样操作。
③相邻更低层复合(Adjacent Lower-Level Composition,ALLC):与AHLC相反,我们引入一个自底向上的路径,将前一个主干的相邻更低层阶段的输出提供给随后的一个主干。我们在图2c中展示了ALLC,其用公式表示为:
gl(x)=D(w(xl−1)),l≥2(5)g^l(x)=\bold{D}(\bold{w}(x^{l-1})),~~l≥2\tag{5} gl(x)=D(w(xl−1)), l≥2(5)其中,D(⋅)\bold{D}(·)D(⋅)表示下采样操作。
④稠密更高层复合(Dense Higher-Level Composition,DHLC):在DenseNet中,每一层都与随后的所有层相连以构建综合特征。受此启发,我们在CBNet结构中使用稠密复合连接。DHLC操作的表示如下:
gl(x)=∑i=l+1LU(wi(xi)),l≥1(6)g^l(x)=\sum_{i=l+1}^L\bold{U}(\bold{w}_i(x^i)),~~l≥1\tag{6} gl(x)=i=l+1∑LU(wi(xi)), l≥1(6)如图2d所示,当K=2K=2K=2时,我们将前一个主干中所有更高层阶段的特征进行组合,然后将它们加到后一个主干中的更低层阶段。
⑤全连接复合(Full-Connected Composition,FCC):如图2e所示,我们将前一个主干中所有阶段的特征进行组合,并将它们提供给后一个主干中的每个阶段。与DHLC相比,我们在低到高层(low-high-level)的情况下增加了连接。FCC操作可以表示为:
gl(x)=∑i=2LI(wi(xi)),l≥1(7)g^l(x)=\sum_{i=2}^L\bold{I}(\bold{w}_i(x^i)),~~l≥1\tag{7} gl(x)=i=2∑LI(wi(xi)), l≥1(7)其中,I(⋅)\bold{I}(·)I(⋅)表示尺度缩放,当i>li>li>l时,I(⋅)=D(⋅)\bold{I}(·)=\bold{D}(·)I(⋅)=D(⋅),当i<li<li<l时,I(⋅)=U(⋅)\bold{I}(·)=\bold{U}(·)I(⋅)=U(⋅)。
C. Auxiliary Supervision
虽然增加深度通常会带来性能的提升,但可能会引入额外的优化困难,例如在图像分类的情况下。Inception和InceptionV3为中间层引入辅助分类器来提高非常深的网络的收敛性。在原始的CBNet中,虽然复合主干是并行的,但是后一个主干(如图4a中的领导主干)通过与前一个主干(如图4a中的辅助主干)之间的相邻连接加深了网络。为了更好地训练CBNet-based检测器,我们提出通过辅助颈部和检测头的监督来生成协助主干的初步结果,以提供额外的正则化。
图4b给出了K=2K=2K=2时有监督的CBNet的一个例子。除了使用领导主干的特征来训练检测头1的原始损失外,另一个检测头2以协助主干的特征作为输入,产生辅助监督。注意,检测头1和检测头2是共享权重的,两个颈部也是如此。辅助监督有助于优化学习过程,而原始损失对于领导主干来说承担着最大的责任。我们加入权重来平衡辅助监督,总损失定义为:
L=LLead+∑i=1K−1(λi⋅LAssisti)(8)\mathcal{L}=\mathcal{L}_{\mathrm{Lead}}+\sum_{i=1}^{K-1}(\lambda_i·\mathcal{L}_{\mathrm{Assist}}^i)\tag{8} L=LLead+i=1∑K−1(λi⋅LAssisti)(8)其中,LLead\mathcal{L}_{\mathrm{Lead}}LLead是领导主干的损失,LAssist\mathcal{L}_{\mathrm{Assist}}LAssist是协助主干的损失,λi\lambda_iλi是第iii个协助损失的损失权重。
在推理阶段,我们舍弃辅助监督分支,只利用CBNet中领导主干的输出特征(图4b)。因此,辅助监督并不会影响推断速度。
D. Pruning Strategy for CBNet
为了降低CBNet的模型复杂度,我们探索了在第2,3,...,K2,3,...,K2,3,...,K个主干中剪枝不同数量阶段的可能性,来代替以整体的方式组合主干。为了简单起见,我们在图5中展示了K=2K=2K=2时的5种剪枝方法。sis_isi表示在第2,3,...,K2,3,...,K2,3,...,K个主干中有iii个阶段{xj∣j≥6−iandj≤5,i=0,1,2,3,4}\{x_j|j≥6-i~\mathrm{and}~j≤5,i=0,1,2,3,4\}{xj∣j≥6−i and j≤5,i=0,1,2,3,4},剪枝后的阶段由第1个主干中相同阶段的特征来填补。
E. Architecture of Detection Network With CBNet
CBNet可以应用于各种现成的检测器,无需对网络结构进行额外的修改。在实际中,我们给领导主干附上功能性网络,例如FPN和检测头。CBNet的推理阶段如图1所示。注意,我们提出了两个版本的CBNet。第一个称为CBNetV1,仅使用AHLC复合策略,提供了复合主干一种易于遵循的简单实现。另一个是CBNetV2,它结合了DHLC复合策略、辅助监督和一个特殊的剪枝策略,充分挖掘了CBNet在目标检测方面的潜力。下面我们通过实验证明CBNetV2比CBNetV1的优越性。在本文中如果没有特别说明,接下来的实验里CBNet表示CBNetV2。
IV. Experiments
A. Implementation Details
介绍实验用的数据集以及训练和推理阶段的实现细节。
B. Comparison With State-of-the-Art
在目标检测和实例分割上与SOTA的对比,具体的实验结论可以参照原文。
C. Generalization Capability of CBNet
CBNet的有效性,具体的实验结论可以参照原文。
CBNet的高效性,具体的实验结论可以参照原文。
在Swin Transformer上的泛化能力,具体的实验结论可以参照原文。
在一些特殊主干上的泛化能力,具体的实验结论可以参照原文。
在不同检测器(头部设计)上的泛化能力,具体的实验结论可以参照原文。
D. Comparison With Relevant Works
和几个相关/类似的工作的对比,具体的实验结论可以参照原文。
E. Compatibility of CBNet
与可变形卷积的兼容性,具体的实验结论可以参照原文。
与模型集成的兼容性,具体的实验结论可以参照原文。
F. Ablation Studies
不同复合策略的对比,DHLC和FCC效果最好,具体的实验结论可以参照原文。
DHLC在不同主干上的泛化能力,具体的实验结论可以参照原文。
我们通过代理任务进行网格搜索(grid search)来寻求更好的复合策略。为了降低搜索代价,我们只搜索复合主干中x3x_3x3、x4x_4x4、x5x_5x5阶段包含的连接来简化搜索空间,并设计了一个代理任务,其输入尺寸设为800×500,训练集为COCO的1/5。这样,我们只需要用205个GPU天训练(23)3=512(2^3)^3=512(23)3=512个检测器。搜索到的最佳策略是简化的DHLC(s3s_3s3),不需要前一个主干的x4x_4x4与后一个主干的x3x_3x3的输入相连。该搜索策略具有69.1M和126GFLOPs达到了37.3% AP,与我们设计的DHLC(37.3% AP,具有69.7M和127GFLOPs)不相上下,进一步验证了在我们的在手工设计中进行高到低(high-to-low)连接的必要性。
加权辅助监督的有效性,具体的实验结论可以参照原文。
剪枝策略的有效性,具体的实验结论可以参照原文。
CBNetV2比CBNetV1的优越性,具体的实验结论可以参照原文。
相同主干对CBNet的重要性。使用不同的主干需要不同的优化策略,这些主干通常会输出非常不同的学习到的特征,并且难以进行联合训练。具体的实验结论可以参照原文。
V. Conclusion
在本文中,我们提出了一种新颖且灵活的主干框架,称为复合主干网络(Composite Backbone Network,CBNet),以提高前沿目标检测器的性能。CBNet由并行的一系列具有相同网络结构的主干、稠密更高层复合策略和辅助监督组成。它们组成构建了一个在预训练微调范式下,使用现有预训练主干的鲁棒的有代表性的主干网络。CBNet对于不同主干和头部设计的检测器结构具有强大的泛化能力。大量的实验结果表明,本文提出的CBNet能够兼容各种主干,包括基于CNN的(ResNet、ResNeXt、Res2Net)和基于Transformer的(Swin-Transformer)。同时,CBNet比简单地增加网络的深度和宽度更加有效和高效。此外,CBNet可以灵活地插入到大多数主流检测器中,包括单阶段的(例如RetinaNet)和两阶段的(Faster R-CNN、Mask R-CNN、Cascade R-CNN、Cascade Mask R-CNN)检测器,以及anchor-based(例如Faster R-CNN)和anchor-free-based(ATSS)检测器。CBNet与特征增强网络(DCN和HRNet)和模型集成方法兼容。具体来说,上述检测器的性能提高了3%以上。尤其是我们的CB-Swin-L在COCO test-dev上取得了59.4% box AP和51.6% mask AP的新纪录,优于之前的单模型单尺度结果。通过多尺度测试,在没有额外训练数据的情况下,我们获得了60.1% box AP和52.3% mask AP的SOTA结果。
相关文章:
目标检测论文阅读:CBNet算法笔记
标题:CBNet: A Composite Backbone Network Architecture for Object Detection 期刊:TIP2022 论文地址:https://ieeexplore.ieee.org/document/9932281/ 官方代码:https://github.com/VDIGPKU/CBNetV2 作者单位:北京大…...
vue前端与Java后端进行跨域交互
1.后端的几种解决方法 1.在Controller上面加上CrossOrigin 2.写一个配置文件并且在Controller层加上注解CORSConfig package com.wolwo.langyage.base.util;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configurat…...
【设计模式】2.抽象工厂模式
抽象工厂模式 前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、传智播客只培养计算机软件专业的学生等。 这些工厂只生产同种类产品,同种类产品称为同等级产品,也就是说:工厂方法模式…...
Telnet 基础实验1: Telnet 实验
Telnet 基础实验1: Telnet 实验 拓扑图 配置命令 R1 的配置 undo ter mo sys sys R1 interface g0/0/0 ip address 192.168.1.1 255.255.255.0 qR2 的配置 undo ter mo system-view sysname R2 interface g0/0/0 ip address 192.168.1.2 255.255.255.0 q两台设…...
机器学习经典算法——决策树(Decision Tree)
决策树的基本原理 决策树是⼀种分⽽治之的决策过程。⼀个困难的预测问题,通过树的分⽀节点,被划分成两个或多个较为简单的⼦集,从结构上划分为不同的⼦问题。将依规则分割数据集的过程不断递归下去。随着树的深度不断增加,分⽀节…...
MySQl总结
文章目录MySQL数据库的常见考点1、ACID事务原理事务持久性事务原子性MVCC基本概念MVCC基本原理undo logundo log版本链readviewMVCC实现原理RC读已提交RR可重复读MVCC实现原理总结2、并发事务引发的问题3、事务隔离级别4、索引索引结构BTreeHash面试题索引分类思考题语法性能分…...
【学习笔记】NOIP爆零赛7
结论专场,结果被踩暴了 青鱼和序列 赛时的做法是,维护∑aii\sum a_i\times i∑aii的取值,发现只和最后一次操作222的位置有关,于是递推O(n)O(n)O(n)解决。 赛后发现还有更神奇的结论 第二个结论是,第一次进行操作…...
一文读懂账号体系产品设计
一、账号体系的概念及价值账号体系是用户在各平台上的通行证。平台给与用户可持续的服务,用户在平台上获取价值,中间的媒介,便是账号体系。阿境将其理解为维系用户与平台之间的枢纽。注:本文中,账号账户,二…...
从“入门”到“专家”,一份3000字完整的性能测试体系的知识分享
随着科技的飞速发展,软件产品广泛应用于各个行业领域,人们对计算机和网络的依赖性越来越大,对新奇事物也越来越感兴趣,成千上万的用户活跃在庞大的网络系统中,这给提供服务的系统带来严重的负荷,"高并…...
构建对话机器人:Rasa3安装和基础入门
在开源对话机器人中,Rasa社区很活跃,在国内很多企业也在使用Rasa做对话机器人,有rasa开发经验的往往是加分项。 当年实习的时候接触到了Rasa,现在工作中也使用Rasa,因此,写写一些经验文档,有助后…...
Spark计算框架入门笔记
Spark是一个用于大规模数据处理的统一计算引擎 注意:Spark不仅仅可以做类似于MapReduce的离线数据计算,还可以做实时数据计算,并且它还可以实现类似于Hive的SQL计算,等等,所以说它是一个统一的计算引擎 既然说到了Spar…...
入职数据分析公认的好书|建议收藏
众所周知,数据分析经常出现在我们的日常生活中,各行各业都需要数据分析。可你知道什么是数据分析?它在企业里到底扮演什么角色?以及如果我们自己也想拥有数据分析的能力,以便更好的满足数据分析的需求,我们…...
Linux查找文件和目录,重定向输出 ,系统默认运行级别的查看和设置理论和练习
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
Redis源码---键值对中字符串的实现,用char*还是结构体
目录 前言 为什么 Redis 不用 char*? char* 的结构设计 操作函数复杂度 SDS 的设计思想 SDS 结构设计 SDS 操作效率 紧凑型字符串结构的编程技巧 小结 前言 对于 Redis 来说,键值对中的键是字符串,值有时也是字符串在 Redis 中写入一…...
算法 - 剑指Offer 表示数值的字符串
题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 …...
初识机器学习
监督学习与无监督学习supervised learning:监督学习,给出的训练集中有输入也有输出(标签)(也可以说既有特征又有目标),在此基础上让计算机进行学习。学习后通过测试集测试给相应的事物打上标签。…...
VsCode安装PlatformIO 开发ESP arduino,买的板子或者随便ESP,PlatformIO添加Board(不是自定义Board)
这次主要记录怎么给新建选板子的时候没有的板子下程序 我这里是一块 WiFi Kit 32 (V3) PlatformIO里面只有到V2 先从头开始,安装PlatformIO 安装PlatformIO 直接搜索安装 安装有时候会比较慢,左侧出现蚂蚁图标之后点击会显示 右下角会提示正在安…...
golang 复杂数据结构解析
[{"key":"15275771","pack":{"1":[{"name":"消息配置","id":15275771,"version":1,"createUser":"molaifeng","data":"test"}]},"callback&qu…...
不怕被AirTag跟踪?苹果Find My技术越来越普及
苹果的 AirTag 自推出以来,如何有效遏制用户用其进行非法跟踪,是摆在苹果面前的一大难题。一家为执法部门制造无线扫描设备的公司近日通过 KickStarter 平台,众筹了一款消费级产品,可帮助用户检测周围是否存在追踪的 AirTag 等设备…...
Linux驱动中的open函数是如何从软件打通硬件呢?
一、前言 打开文件是Linux系统中最基本的操作之一,open函数可以实现打开文件的功能。下面我将为您介绍open函数打通上层到底层硬件的详细过程。 二、open函数打通软硬件介绍 open函数是系统调用中的一种,其原型定义在头文件unistd.h中: #…...
Java 基础语法
Java 是一门广泛使用的编程语言,由于其简单易学和可移植性,已成为开发 Web 应用程序、移动应用程序、桌面应用程序以及企业级应用程序的首选语言之一。在本文中,我们将探讨 Java 的基础语法,包括变量、数据类型、运算符、控制流等…...
python下如何安装并使用matplotlib(画图模块)
在搜索命令中输入cmd,以管理员身份运行。 输入以下命令,先对pip安装工具进行升级 pip install --upgrade pip 升级完成 之后使用pip安装matplotlib pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple 也可以使用pycharm来安装matp…...
系统分析师---计算机网络思维导图
TCP、IP协议簇(4星) 传输协议:TCP有连接、可靠、有回应机制、三次握手基于TCP的应用层协议:POP3:邮件收取,默认端口110SMTP:邮件发送,默认端口25FTP:文件传输协议&#…...
算法练习(七)数据分类处理
一、数据分类处理 1、题目描述: 信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出…...
nohup ./startWebLogic.sh >out.log 2>1 解析
在启动weblogic的时候我们经常看到如下的命令: nohup ./startWebLogic.sh >out.log 2>&1 & 从09年开始用weblogic到现在已经过去3年多了 ,今天终于将该命令理解清楚了。 其中 0、1、2分别代表如下含义: 0 – stdin (standa…...
OpenCV 坡度计算(基于DEM,C++版本)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设一个点位于曲面 z = f ( x , y ) z=f(x,y) z=...
IDEA上使用git,知道这几步操作就够了!
前言由于一年多没用git(种种原因不堪回首),所以在上班当天,整个人都不好了,从拉取代码到提交代码,整整花费了不少时间,而且有些操作都不知道啥作用,点也不是,不点也不是&…...
Shell的退出状态(if语句判断的是某个命令的退出状态)
以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除。 一、退出状态 (1)不管是 Bash 内置命令,还是外部的 Linux 命令,还是自定义的 Shell 函数,当它运行结束或者退出时,都…...
Scala面向对象
与java的区别和联系 类的定义: class Person{ var name "scala" def sayHello(){ println("Hello,"name) } def getName name } 注意:如果在定义方法的时候指定了(),那么在调用的时候()可写可不写,如果在定…...
LLaMA-META发布单卡就能跑的大模型
2023年2月25日,Meta使用2048张A100 GPU,花费21天训练的Transformer大模型LLaMA开源了。 1.4T tokenstakes approximately 21 days 以下是觉得论文中重要的一些要点 1)相对较小的模型也可以获得不错的性能 研究者发现在给定计算能力限制的情…...
网站建设 财务归类/怎么注册电商平台
随着支付宝小程序的普及和市场占有率的持续提升,越来越多的商家企业都想做支付宝小程序,下面就和大家分享一下支付宝小程序怎么做?什么是支付宝小程序?支付宝小程序是一种全新的开放模式,它运行在支付宝客户端…...
我的专业网站建设策划书/安卓aso优化工具
广度优先搜索,深搜超时 需要判断界限,做标记,已到过的地点就不必去了 #include<cstdio> #include<iostream> using namespace std; int head0,tail1; int n,k; int f[199999]; int d[9999999]; int t[9999999]; int bfs(int w) …...
个人网站备案材料填写/广州竞价托管代运营
一、变量初始化以及默认值设置1.$var与${var}:这两种写法本质上是一样的,但$var有时候会产生混淆,而${var}一般不会,可以把变量和字符串组合起来使用,比如name${first}-on-${last}2.${var-default}与${var:-default}&a…...
岐山县住房和城市建设局网站/婚恋网站排名前十名
第4章 并发编程 4.5 channel channel的传递 在Go语言中channel本身也是一个原生类型,与map之类的类型地位一样,因此channel本身在定义后也可以通过channel来传递。 利用channel的这个可传递特性,我们可以实现非常强大、灵活的系统架构。相比…...
网站开发合同履约/天津seo网站管理
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
网站备案有期限吗/百度知道合伙人答题兼职
2019独角兽企业重金招聘Python工程师标准>>> 参考链接: http://blog.coinidea.com/web%E5%BC%80%E5%8F%91/nodejs-1131.html 由于nodejs是非阻塞单进程单线程的,一旦nodejs抛出异常,整个服务就会停掉。服务将会非常不稳定。 解决方…...