知行编程网知行编程网  2022-06-15 11:00 知行编程网 隐藏边栏 |   抢沙发  7 
文章评分 0 次,平均分 0.0

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测

来自 | 知乎  作者 | 小马哥
链接 | https://zhuanlan.zhihu.com/p/156891289
编辑 | 深度学习这件小事
本文仅作学术交流,如有侵权,请联系后台删除

表现SOTA,更强的recall,对任意尺度,任意形状的物体都不惧;更高的precision,MS COCO 获得最高可达49.2 AP;更好的precision/speed trade-off,41.6 AP/26.2 FPS or 39.7 AP/ 43.3 FPS。

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
作者团队:中科院,华为诺亚方舟实验室,华中科技大

论文链接:arxiv.org/abs/2007.13816

github:https://github.com/Duankaiwen/CPNDet

2018年CornerNet [1]的提出使人们对anchor-free重新重视起来,并启发了后面一系列的工作,包括但不限于ExtremeNet [2], FCOS [3], CenterNet (Objects as Points) [4], Foveabox [5], RepPoints [6], SAPD [7],等等,当然也包括我们的CenterNet (Keypoint Triplets) [8]。但大家好像都对其中的center-based比较感兴趣,而对corner-based关注度不太高。它俩的区别主要在于生成目标框的方式不一样,如图1, center-based预测一个点(这个点一般位于物体内部)以及这个点到物体边缘的距离从而生成目标框,而corner-based则是预测两个角点(也可以是ExtremeNet的极值点那样)然后通过特定的方式组合角点从而生成目标框。另外center-based还有一个比较大的优势,就是它能很容易的嫁接到ResNet/ResNext + FPN那套已经很成熟的,几乎成为目标检测方法标配的框架中。虽然大家对center-based比较感兴趣,但其实corner-based这种通过组合角点生成目标框的方法也有个很大的优点,那就是具有很高的recall,比anchor-based,anchor-free中的center-based这些方法都要高,这也是本工作的起点。

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
图1. 左边 FCOS,典型的 center-based;右边 CornerNet,典型的 corner-based

   1. Anchor-based or Anchor-free? One-stage or Two-stage?

大部分论文都会提到anchor-free的一个优点:anchor引入了很多参数且需要手动设置,但如何设置一组合适的参数需要一定的经验,而且因数据集而异。而anchor-free彻底解除了anchor的设定,不存在参数设置的问题,因此anchor-free比anchor-based更加灵活和简洁。但anchor-free还有其他优点没有?当然有,拥有比anchor-based更高的 recall便是其中一个。其实这个优势很好理解,在anchor-based方法中,anchor的位置,长宽比,尺度这些参数设定好了之后就不变了,后面对anchor的回归只是微调,也就是说回归之后其位置,长宽比,尺度与回归之前相比变化不大。但问题是图片中的物体形状,尺度,位置是任意的,如果图片中有个物体与那些初始的anchor差别都很大,那么anchor再怎么回归也很难比较好的包住这个物体。但anchor-free就会好很多,理想情况下,不论物体在哪,它都能在那个位置检测到关键点,并通过预测点到边的距离或者通过关键点组合,尤其后者,能够更准确的包住物体。图2是anchor-based方法Faster R-CNN与anchor-free方法CornerNet的对比。绿色框是true positives,蓝色框是false positives,红色框是false negatives。可以看到anchor-based对大尺度或长宽比夸张的物体包不太住 (当然并不是说只要出现这类物体, anchor-based就包不住,当然也有包的很好的,只是包不住的情况比正常物体多一点),而anchor-free就能包的比较好。

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
图2

我们还进一步地做了更加详尽的实验。表1是我们选了4种比较有代表性的方法,在MS COCO validation上计算了他们的AR,其中Faster R-CNN代表的是anchor-based方法,FCOS代表的是anchor-free方法中的center-based方法,CornerNet和CenterNet (Keypoint Triplets) 代表的是anchor-free方法中的corner-based方法,同时这两个方法也是我们的baseline。我们只想关注这些方法能包住物体的上限在哪,因此在计算AR时,我们根据每个预测框的score选择了最多top 1000的目标框,并且选出来之后,排除了目标框的预测类别和score对AR的影响,得到了下面的结果(我们也做了考虑类别和score,选top 100的实验,其AR的变化趋势是相同的)。 , 和  分别表示检测器对尺度为 ,  ,  和 的目标的average recall,,  和  分别表示检测器长宽比为 5:1, 6:1, 7:1和 8:1的目标的average recall。

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
表1

可以观察到,整体上anchor-free要比anchor-based方法的recall要高。更重要的是随着物体尺度增大,Faster R-CNN并没有获得更高的AR,这没有达到我们的预期,因为毕竟越大的物体越容易被检测到才是,反观令外3种anchor-free方法,随着物体尺度的增大,其AR也越来越接近100%。物体长宽比方面,随着长宽比的增加,Faster R-CNN的AR表现得也很低。这是因为事先设置好的anchor并不能很好得适配到这些特殊形状的物体。同样值得注意的是anchor-free中的center-based方法FCOS虽然AR表现得比anchor-based方法好,但不如corner-based,例如它得各项指标都落后于CornerNet和CenterNet, 之后下滑得也很严重。这是因为FCOS需要预测关键点到物体的距离,当物体尺度很大或者长宽比很悬殊的时候,点到物体的距离就变大,使得预测变得困难,导致最后生成的目标框不准确,而corner-based就好很多,因为corner-based既没有anchor的限制也不需要预测距离,而是通过组合角点生成目标框,只要角点能预测正确,角点能组合正确,就能生成正确的目标框,巧妙的是角点的检测和角点的组合 (参考CornerNet) 都对物体的尺度,长宽比,位置不敏感,因此它的AR格外高。最后一行是本工作CPN的结果,它的各项指标比它的baselines更高。

通过以上两个实验,现在我们可以回答第一个问题了:Anchor-based or Anchor-free?我们的答案是anchor-free,而且是anchor-free中的corner-based。

当然corner-based缺点也很明显,还是如图2以所示,虽然它能够准确的包住物体,但也出现了很多误检,这是由于角点组合的过程没法有效利用物体内部信息,因此组合出了很多错误的角点对。表2中我们进一步探究了CornerNet和CenterNet的AP指标,其中 和  分别表示正常检测结果,去除错误角点对 (去除那些与GT的IoU < 0.5的角点对) 以及校正剩余角点对类别之后的average precision。其中  和  都需要GT的辅助才能完成。可以观察到,当把错误角点对去除后,AP有了一个非常大的提升,当进一步把角点的类别也修正之后,AP进一步提高,但提高幅度没有 大。这表明误检中,因角点组合导致错误的情况远大于因角点类别导致错误的情况,因此我们需要找到一种方法提高角点组合的正确率,其次是提升角点的分类精度,关键还是在于有效利用物体的内部信息,因为CenterNet中已经提到,角点的检测和组合都缺乏物体内部信息的辅助,导致误检问题严重。

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
表2

CenterNet已经在这一方面做了尝试,它的做法是再预测一个中心点,利用中心点以一种后验的方式消除误检,但从表2可以看出,这样做显然没有把误检去除干净。另外,CenterNet还有一个很大的问题,那就是它太依赖于中心点了,假如那个中心点预测的不准确,反而会误删正确的目标框而保留错误的目标框,如图3所示。对于如何有效利用物体内部信息,有一类方法做的很成功,那就是two-stage方法。比如像Faster R-CNN,利用RoIAlign/RoIPooling提取物体内部信息,并用这个信息对目标框做进一步的调整,这是我们可以借鉴的。因此对于第二个问题:One-stage or Two-stage? 我们的选择是two-stage。

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
图3. 因为中心点预测不准确,正确的目标框被误删而错误目标框却被保留

   2. CPN 方法介绍

经过前面分析,我们已经得到了心中那个方法的雏形,那就是这个方法得是个anchor-free,并且是corner-based,其次它得是个two-stage方法。Corner-based提示我们所提出的这个方法得有个检测角点,并组合角点的过程,two-stage则提示我们在角点组合或者角点分类时得像two-stage那样能有效利用到物体内部信息。图4是我们CPN的具体结构,它继承了CornerNet的框架,没有用到FPN,所有操作都只在最后一层特征层上进行,且最后一层特征层的分辨率是输入图像分辨率的1/4。整个结构分为2个stage,第一个stage是检测左上和右下角点,并枚举所有的角点组合,形成角点对。由于这个过程是在最后一层特征层上进行的,因此我们这里把角点对所形成的区域称为proposal。只要角点位置预测得准确,那么这些proposal中总是有很准确的,但大部分是错误的。第二个stage是利用RoIAlign提取每个proposal的内部特征,然后设计分类器对这些proposal进行判断,并预测每个proposal的类别。

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
图4. CPN 的结构

2.1. Stage 1:检测角点并枚举角点组合

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
图5

对于检测左上和右下角点,我们使用了CornerNet中所介绍的方法。然后我们在两个heatmap 中分别取top 70个左上和top 70个右下角点,进行两两组合,一共有4900种组合方式,这期间我们会去除不满足几何关系的角点对 (例如某个角点对中,左上角点的位置位于右下角点的右下方),因此实际形成的proposal数量少于4900个,每张图片大约有3000个。但3000个对我们来说也很多,因为在训练的时候我们的方法是train from scratch,因此需要很大的batch size,具体为batch size = 48,每张卡需要放6个batch,因此每张图片3000个proposal还是太多了,而且大部分还都是负样本,这将影响训练和测试速度,以及后续的分类精度。因此我们对角点分类时不是二分类 (只分前景和背景) 而是80类 (COCO数据集一共有80个类),这样检测出来的每个角点是带类别的,于是我们在组合角点时,不仅会去除不满足几何关系的角点对,还会考虑两个要组合角点的类别因素,即如果两个要组合角点的类别不是同一类,那么这个角点对也将被舍弃。这样每张图片~3000个proposal能减少到~800个。有人可能会担心这会不会把本来比较准确的proposal给误删了?实际上我们也有这个担心,为此我们做了一个统计,结果发现这个问题的影响程度没有想象的那么大。我们分别统计了只考虑角点几何关系时得到的所有proposal能覆盖多少物体 (与某个物体的IoU > 0.5就算覆盖到了此物体),以及既考虑几何关系又考虑角点类别时得到的所有proposal又能覆盖多少物体,结果是前者平均能覆盖93.48%的物体,后者平均能覆盖92.29% 的物体。从结果上看,因考虑角点类别而遭到误删的准确proposal数量比较少,但却能够去除大量的不必要的角点对,因此被误删的损失是可以承受的。

虽然现在得到的~800个proposal是带类别的,且这些类别是80类中的其中某一类,不可能是背景,但显然这些proposal中还是有很多形状错误的proposal,我们需要对这些形状错误的proposal做进一步剔除。但是还有一个问题应当被注意,假设我们已经完美的剔除了那些形状错误的proposal,那么剩下的proposal是不是就是比较准确的?其实未必,因为剩下的proposal虽然形状是很准确的,但他们类别是继承的对应角点的类别,CenterNet中已经提到,角点的检测同样缺乏物体内部信息的辅助,因此它所得到的类别并一定不可靠。那既然这样我们为什么会依据角点的类别来去除不必要的proposal?因为既然你依据角点的类别来去除不必要的proposal,那说明你认为角点的类别是可靠的,但你又说角点的检测缺乏物体内部信息的辅助,因此它的类别并不可靠,这岂不是相互矛盾?其实这并不矛盾,我们知道,在角点检测过程中,我们会使用corner pooling [1]或cascade corner pooling [8]来帮助网络更好的检测角点。由于他们的存在,左上角点和右下角点得到的特征是相似的,都来自同一物体,只是具体部位不同,因此他们之间会很容易达成共识,但是这个共识是不是对的就不一定了。例如一只“猫”的左上角被错误的预测为“狗”,那么它的右下角大概率也会被错误的预测成“狗”,虽然左上角点和右下角点达成了共识,但其实这个共识的是错的,然而它们组成的形状却是很准确的。因此我们依据角点的类别来去除不必要的proposal,这并不意味着我们认为角点的类别是可靠的,而是我们利用了角点之间的共识,保留了大量形状正确的proposal。所以在剔除形状不正确的proposal后,我们还需要对剩余proposal的类别做进一步的判断。

2.2. Stage 2:双级分类器

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
图6

根据上面的分析,虽然这~800个proposal是有类别的,但是并不可靠,首先形状不对的proposal,它们的类别肯定是错误的,它们的类别应为背景,其次即使是形状准确的proposal,它们的类别也不一定可靠,因此我们需要将这~800个proposal重新看成是无类别标签的proposal,然后设计分类器对他们重新分类,把那些形状错误的分成背景,对那些形状正确的proposal重新分配新的类别。简单粗暴的做法就是用RoIAlign提取每个proposal的内部信息,然后设计一个多分类器对其分类。但这样做时间消耗依然很巨大,因为RoIAlign是一个比较耗时的过程,它的耗时主要与两个因素有关,一个是proposal的数量,另一个是所在特征层channel的数量。考虑到 batch size = 48时,每张卡放6个batch,即使每张图片~800个proposal,其总数依然是很多的。另一方面,考虑到要分80类,最后一层特整层的channel数不能太少,否则会丢失太多信息,在这里我们设置最后一层的channel = 256。如果用RoIAlign在此特征层上对每个proposal提取内部信息,耗时将变得不可承受。

为此我们设计了一种双级分类器,它由两个分类器组成,第一个是二分类器,第二个是多分类器。我们首先对~800个proposal进行二分类,去除那些形状不正确的proposal,由于在这里我们只需对proposal做二分类,因此最后一层特征层可以做的很轻,我们发现当把最后一层特征层的channel数设置为32时,在每张卡放6个batch的情况下,RoIAlign可以轻处理每张图片~800个proposal。因此我们用卷积对最后一层特整层再做一次卷积操作,输出一个 Nx32xHxW轻量级特征层,称为“Box Feature Map”,如图4所示。在Box Feature Map上利用RoIAlign提取每个proposal的内部特征,每个特征的形状为32x7x7 (Channel,H,W),接着把特征送入一个核为32x7x7的卷积中,得到一个标量,此数值表示对应proposal属于物体 (前景) 的score,在此基础上设计一个二分类器,它的loss如下:

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测

这是一个focal loss的形式,因为其中的负样本太多了,focal loss可以比较好的平衡正负样本。其中N表示正样本 (准确proposal) 的个数,M表示proposal的总数,  表示第m个proposal的score, 是一个超参数,用来平滑损失函数, 表示第m个 proposal与所有GT都做IoU,从中得到的最大值,  表示一个设定的IoU阈值。

即使有focal loss的加持, 也总是趋向于0,因此我们设置了一个很低的阈值,选择 >0.2的proposal进入下一阶段,经过这一步,可以去除上面大约80%的proposal,保证每张图片剩余的proposal大约在200个以内。接下来,我们再设计一个多分类器对这~200个proposal进行多分类,重新分配新的类别。注意现在剩余的proposal数量已经很少了,即使在channel = 256的特征层上进行RoIAlign,速度依然很快。我们首先用另外一个卷积对最后一层特征层做卷积操作,输出一个Nx256xHxW重量级特征层,称为“Category Feature Map”,如图4所示。在Category Feature Map 上利用RoIAlign提取剩余每个proposal的内部特征,每个特征的形状为256x7x7 (Channel,H,W),接着把特征送入C个核为256x7x7 的卷积中,得到一个C维向量,其中C表示数据集中的类别数。C中第 i 个数值表示对应proposal属于第 i 类的score,在此基础上设计一个多分类器,它的loss如下:

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测

此loss类似于公式(1),但考虑了类别因素。其中  和  分别表示剩余正样本 (准确proposal) 的个数和剩余proposal的总个数,  表示第m个proposal中第c个数值属于类别 c的score, 表示第m个proposal与所有属于类别c的GT做IoU,从中得到的最大值, 同样是一个超参数,用来平滑损失函数。

2.3. 测试过程

测试和训练过程大致一样。首先检测角点并枚举角点对,然后利用二分类器滤除更多的错误proposal,假设最后剩余了K个proposal,这些proposal被送入多分类器,被重新分配了新的类别。其实我们最初设想的方案1是想将这些被重新分配的类别作为proposal的最终类别,因为这毕竟是利用了物体内部信息后分类得到的类别,应该会更可靠一些。

后来发现还有更好的方案2,现在这K个proposal其实拥有了2套类别,其中一套是继承的角点的类别,另一套是多分类器重新分配的类别。如果这两套类别结合起来用,将达到更好的效果。对于某个proposal m,设  表示m继承的corner的类别号,表示它的score (左上角点score与右下角点score的平均值),同理,设  表示多分类器重新分配的类别号 (  到 的最大值的索引), 表示m属于的score ( 到 的最大值)。如果 ,那么就把proposal m分裂成2个proposal,其中一个proposal的类别和score由继承角点而来,而另一个proposal的类别和score则是由多分类器重新分配得到。如果 ,那么就把它们的score结合成如下形式:

 (3)

表示如果任何一方所占比重大于 0.5,将会对最终的  产生正面影响。

但又后来我们又发现还有简洁的方案3。。。其实大多数proposal的  ,此时我们就对这些proposal用公式(3)对它的score进行加强。当出现  时,我们以其中一个为主类,比如以 为主类,然后获取  的值,将带入公式(3), 得到最终的score。最后根据score选择top 100个目标框进行测试。我们发现方案2和方案3差别不大,方案(3)表现稍好一些,并且相对更加简洁。

其实无论是方案2还是方案3都是不是我们所真正期望的,我们所期望的是方案1,因为方案1最简洁,而且也最有说服力。个人感觉多分类器可能并没有训练好,后面需要再优化一下。

2.4. 与 DeNet 的不同

其实就idea level而言,CPN与DeNet很像。DeNet也是先检测检点,然后枚举角点对,再送入一个多分类器对proposal进行分类。其实idea level层面上相似的工作有很多,例如YOLO vs. CenterNet (objects as points), FCOS vs. SAPD vs. FoveaBox vs. Densebox等,这些工作在idea level层面上都很相似,但掩盖不了每种方法的光茫,原因就在于idea level之下,每种方法都有很大的不同,DeNet与CPN也是如此:

  • DeNet检测四个角点,而且在一张heatmap上进行,heatmap上的每个位置将预测5个类别,分别为背景,左上,右下,左下和右上角点。而CPN则只预测2个角点,并且这个角点是解耦的。
  • 由于DeNet在一张heatmap上预测四个角点,这意味着所预测出的角点是不带类别的,而CPN分别在2张独立的heatmap上预测角点,这意味着所预测的角点可以带类别,小结2.1已经提到,我们可以利用角点的类别来去除大量不必要的角点对,节省了大量的计算资源,而通过DeNet检测的角点所形成的proposal,由于角点不带类别,将会产生大量错误的proposal。
  • DeNet只有一个分类器来处理proposal,而我们设计了两个分类器,一个较轻的二分类器先去除一些误检,然后用一个多分类器对proposal重新分配类别。通过2个分类器的配合使用,可以大大加快网络的运行速度,也提高了预测精度。
  • 我们为两个分类器设计了focal形式的loss,而DeNet则采用的是极大似然函数。Focal形式的loss可以很好的缓解训练过程中正负样本的严重不平衡的问题。

   3. 实验分析

3.1. 实验设置

关于代码,主体还是继承的CornerNet,另外还参考了mmdetection [9] 和 CenterNet (Objects as Points) 的部分代码,在这里我们感谢它们的杰出工作。我们使用了3种backbone,分别是HG104,HG52和DLA-34。其中HG104和HG52我们继承了CornerNet中的设置,DLA-34我们继承了CenterNet (Objects as Points) 中的设置,但是把里面的 deformable layers换成了normal conv layers。我们使用了CenterNet (Keypoints Triplets) 中提出的cascade corner pooling来帮助网络更好的检测角点。

训练阶段,HG104和HG52都是train from scratch,DLA-34使用了在ImageNet预训练的模型,输入图片分辨率均为512x512,data augmentation策略同样继承了CornerNet中的设置。总的loss function 如下:

 (5)

其中  和  分别用来训练角点以及补偿角点从heatmap映射回原图时所损失的信息,具体内容可以参考CornerNet [1]。硬件方面,我们用了8块Tesla-V100 GPU来训练, batch size = 48,每卡放入6个batch,首先用  的学习率迭代200K 步,然后用  的学习率继续迭代50K 步。训练时间方面,HG104 ,HG52, DLA-34分别大约需要训练9天,5天和3天。

3.2. CPN与SOAT方法的对比

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
表3

3.3. 双级分类器对检测结果的提升

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
表4

其中B-Classifier和M-Classifier分别表示二分类器和多分类器,第一排表示角点组合方法用的 CornerNet中基于角点的嵌入距离判断的方法。

3.4. B-Classifier对CornerNet和CenterNet的提升

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
表5

在CornerNet和CenterNet中,使用基于角点的嵌入距离判断的方法对角点进行组合,现在换成B-Classifier之后,对检测结果有一个很大的提生。

3.5. 速度对比

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
表6

为了公平对比,所有算法都在华为云上用1块Tesla-V100 GPU做测试,可以看到,在相同设置下,CPN与它的baseline相比在速度要更快,当我们换了更轻的backbone DLA-34 之后,取得了一个较不错的AP/FPS trade-off。速度之所以较快,一方面是我们对网络结构进行设计的结果 (例如使用角点类别去除不必要的角点对,设计双级分类器等),另一方面我们对代码做了大量的优化。

3.6. 可视化结果对比

ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
图7

   4. Take-aways:

  • 我们证明了anchor-free方法比anchor-based方法拥有更高的recall,anchor-free方法中,corner-based又比center-based拥有更更高的recall。当你下次写文章说anchor-free有哪些优点时,除了不用像anchor那样手动设置参数外,你还可以说anchor-free比anchor-based拥有更高的recall。

  • 如果你的应用场景对recall要求很高,可以试一下corner-based这类方法。

  • 以前大家普遍认为corner-based由于需要组合关键点,过程比较耗时,最终导致运行速度很慢,CPN说明了只要结构设计的合理,代码优化的好一点,其实corner-based并不慢,同时也说明了two-stage也不慢。


参考文献:

[1]. Law, Hei, and Jia Deng. “CornerNet: Detecting Objects as Paired Keypoints.” International Journal of Computer Vision, vol. 128, no. 3, 2020, pp. 642–656.

[2]. Zhou, Xingyi, et al. “Bottom-Up Object Detection by Grouping Extreme and Center Points.” 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 2019, pp. 850–859.

[3]. Tian, Zhi, et al. “FCOS: Fully Convolutional One-Stage Object Detection.” 2019 IEEE/CVF International Conference on Computer Vision (ICCV), 2019, pp. 9626–9635.

[4]. Zhou, Xingyi, et al. “Objects as Points.” ArXiv Preprint ArXiv:1904.07850, 2019.

[5]. Kong, Tao, et al. "FoveaBox: Beyound Anchor-based Object Detection."IEEE Transactions on Image Processing(2020).

[6]. Yang, Ze, et al. "Reppoints: Point set representation for object detection."Proceedings of the IEEE International Conference on Computer Vision. 2019.

[7]. Zhu, Chenchen, et al. "Soft anchor-point object detection."arXiv preprint arXiv:1911.12448(2019).

[8]. Duan, Kaiwen, et al. "Centernet: Keypoint triplets for object detection."Proceedings of the IEEE International Conference on Computer Vision. 2019.

[9]. https://github.com/open-mmlab/mmdetection


<section style="white-space: normal;line-height: 1.75em;text-align: center;"><strong style="color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;widows: 1;background-color: rgb(255, 255, 255);font-size: 16px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong>完<strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong></span></strong></span></strong></section><pre><pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section><section style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">长尾分布下图像分类问题最新综述(2019-2020)</section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">GitHub重大更新:在线开发上线,是时候卸载IDE了</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">特朗普拿H1B签证开刀,LeCun吴恩达等实名谴责!</section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">数据分析入门常用的23个牛逼Pandas代码</section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="color: rgb(87, 107, 149);font-size: 14px;">如何在科研论文中画出漂亮的插图?</span><br  /></section></section></section></section></section></section></section></section></section>
ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享