Gather-Excite:Exploiting Feature Context in Convolutional Neural Networks
Gather-Excite:在卷积神经网络中利用特征上下文

Abstract

尽管在卷积神经网络(CNN)中使用自底向上的局部运算符可以很好地匹配自然图像的某些统计信息,但它也可能阻止此类模型捕获上下文的远程特征交互。在这项工作中,我们提出了一种简单,轻量级的方法,以在CNN中更好地利用上下文。我们通过引入一对运算符来做到这一点:Gather,可以有效地在很大的空间范围内聚合特征响应,而Excite,可以将合并的信息重新分布到局部特征。就增加的参数数量和计算复杂度而言,这些运算符都很便宜,并且可以直接集成到现有架构中以提高其性能。在多个数据集上进行的实验表明,Gather-Excite可以带来与增加CNN的深度相当的收益,而成本却只是其一小部分。例如,我们发现具有聚集激励运算符的ResNet-50可以在ImageNet上胜过其101层副本,而没有其他可学习的参数。我们还提出了一个参数化的Gather-Excite运算符对,该运算符对可进一步提高性能,使其与最近引入的“挤压和激发网络”相关,并分析这些变化对CNN特征激活统计的影响。

Introduction

卷积神经网络(CNN)[21]是解决图像分类[20,35,9]、目标检测[32]和图像分割[3]等问题的金标准方法。因此,人们对改进的CNN架构非常感兴趣。在计算机视觉中,经常改进视觉表示的一个想法是用在较大上下文中操作的函数来扩充执行局部决策的函数,从而为解决局部歧义提供线索[39]。虽然术语“上下文”是过载的[6],在这项工作中,我们特别关注特征上下文,即特征提取器响应(即CNN特征地图)作为一个整体捕获的信息,分布在输入图像的整个空间范围内。
在许多标准的CNN结构中,许多特征提取器的感受野理论上已经足够大,足以完全覆盖输入图像。然而,这些领域的有效大小实际上要小得多[27]。这可能是解释为什么在深层网络中改进上下文的使用可以带来更好的性能的一个因素,正如在对象检测和其他应用中反复证明的那样[1,26,48]。
先前的工作已经表明,使用低级别特征的简单集合可以有效地编码视觉任务的上下文信息,并且可能被证明是基于较高级别语义特征的迭代方法的有用替代[44]。最近提出的挤压激励(SE)网络[15]证明了这种方法的有效性,它表明根据输入全范围的特征对特征通道进行重新加权可以提高分类性能。在这些模型中,squeeze操作符充当轻量级上下文聚合器,然后将得到的结果嵌入传递给重新加权函数,以确保它可以利用每个过滤器的局部接受字段之外的信息。
在本文中,我们将以这种方法为基础,进一步探索在整个深层网络体系结构中融入上下文的机制。我们的目标是探索更有效的算法,以及使它们能够很好地工作的基本属性。我们将这些“上下文”模块描述为两个操作符的组合:Gather操作符,它聚合每个特征地图的大邻域上的上下文信息;以及Excite操作符,它通过对聚集进行条件调整来调整特征地图。
利用这种分解,我们绘制了可以在深层网络中利用特征上下文的设计空间,并独立地探索了不同预算符的影响。我们的研究使得我们提出了一种新的、轻量级的Gather-Excite预算符对,该预算符在不同的体系结构、数据集和任务中产生显著的改进,并且对超参数进行了最小程度的调整。我们还研究了操作符对现有深层体系结构学习的分布式表示的影响:我们发现,该机制产生的中间表示表现出较低的类选择性,这表明提供对额外上下文的访问可能会实现更大的功能重用。这项工作中使用的所有模型的代码都可以在https://github.com/hujie-frank/GENet上公开获得。

The Gather-Excite Framework

在本节中,我们将介绍Gather-Excite(GE)框架并描述其操作。
设计的动机是检查CNN的典型信息流。这些模型计算从空间编码逐渐过渡到通道编码的表示层次。更深的层通过在降低分辨率、增加单元的感受野大小以及增加要素通道数量的同时组合前几层的要素来实现更大的抽象性。
视觉词袋模型[5,47,34]证明了将局部描述符中包含的信息汇集在一起以形成局部描述符外的全局图像表示的有效性。受此观察的启发,我们的目标是帮助卷积网络利用包含在由网络本身计算的特征响应领域中的上下文信息。
为此,我们构造了一个轻量级函数来收集大范围邻域上的特征响应,并使用所得到的上下文信息来调制邻域元素的原始响应。具体地说,我们定义了Gather算子ξG和Excite算子ξE,前者聚集给定空间范围上的神经元响应,后者接受聚集和原始输入,以产生与原始输入维度相同的新张量。GE算符对如图1所示。

图1:聚集-激发算符对的相互作用(ξG,ξE)。聚集操作符ξGFirst聚合跨空间邻域的要素响应。然后,将得到的聚集与原始输入张量一起传递给激励运算符ξE,该运算符产生与输入的维度相匹配的输出。
更正式地说,设x={xc:c∈{1,……,C}}表示由网络产生的特征地图的集合。为了评估改变其上发生聚集的空间区域的大小的效果,我们定义了选择运算符ι(u,e)={eu+δ:δ∈[−下取整((2e−1)/2c),上取整((2e−1)/2c)]^2 }, 其中e表示选择的范围比率。然后我们定义一个扩展比为e的聚集算子为函数ξG:R^(H×W×C) →R^(H’×W’×C) (H’=上取整(H/e),W’=上取整(W/e),它对任意输入x满足约束
c∈{1,……,C},1{·}表示指示张量,
此符号简单地说明,在通道c的每个输出位置u处,Gather操作符具有位于单个通道内的输入感受野,并且具有由(2E−1)^2限定的区域。如果该感受野包围完整的输入特征地图,我们称Gather操作符具有全局范围。Excite运算符的目标是利用Gather的输出作为上下文特征,并采用
的形式,其中f:R^(H’×W’×C) →[0,1]^(H×W×C)是负责重新缩放和分发聚合中的信号的映射。

Models and Experiments

在本节中,我们将探索和评估Gathere-Excite框架的一些可能的实例。为了比较每种设计的实用性,我们使用ImageNet 1K数据集[33]对图像分类任务进行了一系列实验。该数据集包含120万个训练图像和50k个验证图像。在随后的实验中,所有模型都在训练集上进行训练,并在验证集上进行评估。我们的研究基于流行的ResNet50架构,该架构在此数据集上取得了良好的性能,并已被证明有效地推广到其他领域[9]。新的模型是通过在与ResNet-50的每个构建块的单位分支求和之前将Gather-Excite算子插入到残差分支中来形成的。使用动量0.9的SGD从随机初始化[10]训练这些模型,其中minibatches为256个图像,每个图像被裁剪到224×224像素。初始学习率被设置为0.1,并且每次损失平台期(三次)减少10倍。模型通常总共训练大约300个epoch(请注意,这会产生比[15]中使用的固定的100个时期的优化时间表更强的模型)。在所有实验中,我们在ImageNet验证集上报告单中心裁剪结果。

Parameter-free pairings(无参数对)

我们首先考虑一组GE对,它们不需要额外的可学习参数。我们将Gather算子ξG取为不同程度比的average pooling(average pooling怎么取不同的程度比e)(文中分析了改变汇集算子的效果)。然后,Excite操作符调整聚合大小,应用Sigmoid并将结果与输入相乘。因此,每个输出特征映射被计算为
,其中interp(·)表示通过最近邻内插调整到原始输入大小。我们将此模型称为GE-θ−,其中符号θ−用于表示运算符是无参数的2。在补充资料的图4中可以找到说明这些运算符如何集成到残差单元中的图。
Spatial extent(空间范围)
这个基本模型允许我们检验本文的中心假设,即为网络提供对附加特征上下文的简单总结,可以提高网络的表示能力。为此,我们的第一个实验改变了GE-θ−设计的空间延伸率:我们考虑e ={2,4,8}的值,以及使用全局平均池化的全局延伸率。实验结果如图2(左)所示。与ResNet-50基线(23.30%的最大误差)相比,范围比率的每一次增加都会带来持续的性能改善,而全局范围比率的性能最强(22.14%的最大误差)。这个实验表明,即使使用简单的无参数方法,基于上下文的调制也能增强网络的辨别能力。值得注意的是,该模型可以与复杂得多的ResNet-101模型(top-1误差为22.20%)竞争。在下面的所有实验中,除非另有说明,否则都使用全局扩展率

Parameterised pairings

们已经看到,在没有学习参数的情况下,简单的Gather-Excite操作符可以提供一种有效的利用上下文的机制。为了进一步探索这些配对的设计空间,我们接下来考虑在聚集函数ξG(θ)中引入参数。在这项工作中,我们建议使用跨步深度卷积作为Gather算子,对输入的独立通道应用空间滤波器。我们将ξG(θ)与3.1部分中描述的Excite算子相结合。3.1.并将此配对称为GE-θ。
Spatial extent
我们首先重复实验,以评估增加参数化模型的范围比率的效果。为了提高参数效率,通过链接大小为3×3的stride=2深度方向的卷积(总共执行e/2次这样的卷积)来实现不同的幅度比e。对于全局范围比率,使用单个全局深度卷积。图2(右)显示了该实验的结果。我们观察到与GE-θ−研究类似的总体趋势,并注意到额外参数的引入带来了对无参数设计的预期改进。(不是很懂啊!!!
Effect on different stages:
接下来,我们通过训练运算符分别插入每个阶段的模型变体,研究GE-θ对网络的不同阶段(这里我们使用文献[9]中定义的术语“阶段”)的影响。所得模型的精度、计算成本和模型复杂性显示在Tab1中。虽然每个阶段的插入都有一些改善,但最大的改善来自中后期(通道也更多)。在不同阶段插入的效果并不是相互多余的,因为它们可以有效地结合在一起以进一步提高性能。为简单起见,我们将整个网络中的GE运营商包括在所有剩余的实验中,但我们注意到,如果参数存储是一个重要问题,则可以以性能上的边际成本将GE从阶段2中移除。


Relationship to Squeeze-and-Excitation Networks
最近提出的挤压和激发网络[15]可以被视为特定的GE配对,其中Gather运算符是无参数操作(全局平均池化),而Excite运算符是完全连通的子网络。考虑到这些网络的强劲性能(详见[15]),一个自然的问题出现了:对Gather运算符进行参数化的好处是否与增加Excite运算符的容量相辅相成?为了回答这个问题,我们用另一个变体GE-θ+进行了实验,它结合了GE-θ设计和1×1卷积通道子网Excite算子(支持使用可变空间范围比)。因此,参数化Excite运算符的形式为
,其中f(ˆx|θ)与[15]中给出的定义相匹配,减小率为16。所得到的模型的性能在表2中给出,我们观察到,GE-θ+模型不仅性能优于SE和GE-θ模型,而且以大约三分之一的计算复杂度接近相当大的152Layer Resnet的性能(21.88%vs21.87%的TOP-1误差)。

Generalisation(一般化)

Deeper networks
接下来,我们要问的是,合并GE运算符带来的改善是否与增加网络深度带来的好处相辅相成。为了解决这个问题,我们训练了GE-θ−、GE-θ和GE-θ+设计的更深层次的Resnet-101变种。结果在表3中报告。这里需要注意的是,GE预算符自己向架构添加了层(因此,本实验不能精确控制网络深度)。然而,与构成网络的标准计算块相比,它们以一种极其轻量级的方式实现了这一点,我们观察到GE实现的改进转移到了更深的ResNet-101基准,这表明在合理的程度上,这些收益可以补充增加底层主干网络的深度。

Resource constrained architectures(资源受限的体系结构):
我们已经看到,GE运算符可以加强深度的Resnet体系结构。但是,这些模型主要由密集的卷积计算单元组成。在移动应用需求的驱动下,最近提出了许多稀疏连接的体系结构,以期在严格的资源约束下获得良好的性能[14,50]。因此,我们想评估GE在这种情况下的推广程度。为了回答这个问题,我们在ShuffleNet架构上进行了一系列实验[50],ShuffleNet架构是一种有效的模型,可以在准确性和延迟之间取得良好的折衷。结果在表4中报告。在实践中,我们发现这些模型难以优化,需要更长的训练时间表(≈400个纪元)才能重现[50]中报告的基线模型的性能(固定材料下的训练曲线在补充材料中提供)。 我们还发现,不使用其他参数很难实现改进。 GE-θ变体以相当适度的理论计算复杂性提高了性能。在参数存储代表主要系统约束的情况下,GE的简单应用可能不太合适,需要更多的注意才能在精度和存储之间取得良好的折衷(例如,可以通过在子集上使用GE来实现层)。

Beyond ImageNet
接下来,我们评估GE运算符推广到ImageNet以外的其他数据集的能力。为此,我们在CIFAR-10和CIFAR-100图像分类基准上进行了额外的实验[19]。这些数据集由分别从10类和100类绘制的32×32彩色图像组成。每个图像包含5万张火车图像和1万张测试图像。我们采用标准的数据扩充方案(在[9,16,24]中使用),以促进模型之间的有用比较分析。在训练过程中,首先对图像的每一侧用四个像素进行零填充,然后在应用均值/标准差归一化之前,从填充的图像或其水平翻转生成随机的32×32色块。我们将GE运算符与一些流行的CIFAR骨干网相结合:ResNet-110 [10],ResNet-164 [10]和Wide Residual Network-16-8 [49]。结果报告在表5中。我们观察到,即使在特征相差很大(例如32×32像素)的数据集上,GE仍能获得良好的性能提升。
Beyond image classification
我们想评估GE运算符是否可以推广到图像分类以外的其他任务。为此,我们在MS COCO [25]上训练了一个对象检测器,该数据集大约有80k训练图像和40k验证图像(我们使用2014版中提供的train-val划分)。我们的实验使用Faster R-CNN框架[32](用[8]中提出的RoIAlign代替RoIPool操作),否则遵循[9]中的训练设置。我们训练了两种变体:一种具有ResNet-50主干,另一种具有GE-θ(E8)主干,保持所有其他设置不变。 ResNet-50基准性能为27.3%mAP。合并GE-θ主干可将基准性能提高到28.6%mAP。

Analysis and Discussion

Effect on learned representations(对学习表示的影响)
我们已经看到,GE运算符可以提高用于视觉任务的深层网络的性能,并希望对所学功能与基线ResNet-50模型中的功能有何不同有所了解。为此,我们使用[28]引入的类选择性指数度量标准来分析这些模型的特征。对于每个特征图,此度量计算给定数据分布中最高类别条件平均活动与所有剩余类别条件活动的平均值之间的差。归一化测量结果,使其在零和一之间变化,其中一个指示仅针对单个类别触发过滤器,而零指示该过滤器针对每个类别产生相同的值。该度量标准对我们的工作很感兴趣,因为它提供了某种程度来衡量各个类之间共享特征的程度,这是可以有效描述概念的分布式表示形式的核心属性[12]。
我们计算在第四阶段生成的中间表示形式的类选择性指数(此处使用[9]中定义的术语“阶段”)。已经表明,该阶段的功能可以很好地推广到其他语义任务[31]。我们在两个模型的此阶段中计算每个块中最后一层的类选择性直方图,并在图3中显示GE-θ和ResNet-50的结果。一个有趣的趋势出现了:在该阶段的早期,两种模型的类别选择性分布似乎紧密匹配。但是,随着深度的增加,分布开始分离,并且通过conv4-6-relu,分布表现出更加明显,其中GE-θ表现出比ResNet-50更低的类别选择性。假设其他上下文可以使网络更好地识别本地模棱两可的模式,我们假设无法访问此类上下文的网络需要分配更多数量的高度专业化的单元来解决这些歧义,从而减少特征再利用。在补充文件中可以找到SE和GE-θ-模型的其他分析。
Effect on convergence(对收敛的影响)
我们探索GE运算符的使用如何在深度网络优化中发挥作用。在本实验中,我们使用固定的100个epoch从头开始在ImageNet上训练基线ResNet-50和GE-θ模型(具有全局范围比)。学习率被初始化为0.1,并且每30个epoch减少10倍。该实验的结果如图4所示。我们观察到,在优化计划的整个过程中,GE-θ模型实现了较低的训练和验证误差。在使用SE块进行训练时,报告了类似的趋势[15],如第2节所述,可以解释为无参数Gather运算符和参数化Excite运算符。相比之下,我们从经验上发现GE-θ-模型没有表现出相同的优化容易性,并且需要更长的时间来学习有效的表示形式。


Feature importance and performance(功能的重要性和性能)
Excite运算符的门控机制允许网络使用分配给Gather运算符输出的特征重要性得分,在整个学习过程中执行特征选择。重要性较高的要素将被保留,重要性较低的要素将被压缩为零。虽然从直觉上我们可能期望功能的重要性可以很好地预测功能对整体网络性能的贡献,但我们还是想验证这种关系。我们基于ResNet-50架构在GE-θ网络上进行实验。我们首先研究修剪最不重要的特征的效果:给定模型的基本组成部分,对于每个测试图像,我们都将门控机制引起的通道重要性按升序排序(在图5中标记为“ asc。”),并以从前到后的方式将值的一部分(修剪比例)设置为零,随着修剪比例的增加,信息流将流过越来越小的特征子集,因此,当修剪比等于零时,没有特征图,并且当修剪比等于1时,整个残留分支会丢失(即,身份分支的信息直接通过),我们以相反的顺序重复此实验,首先删除了最重要的功能(此过程在图5中标记为“ des。”)。针对GE-θ中的三个构造块重复了此实验(补充材料中包含SE实验)。作为这些残存分支中所包含功能的相对重要性的参考,我们另外报告了修剪度分别设置为0和1的基线ResNet-50模型的性能。我们观察到,保留由Excite运算符评估为最重要的功能,可以在修剪过程的早期阶段保留大部分的整体准确性,然后再进行性能的逐渐减弱。当反转修剪顺序时,此性能曲线的形状将反转,这表明估计的特征重要性与总体性能之间存在一致的正相关关系。对于更深层的conv5-1区块,这种趋势最为明显,表明主要特征和概念之间存在更强的依赖性,这与先前的研究结果一致[22,28]。尽管这些功能重要性估计是特定于实例的,但它们也可以用于探查类与不同功能之间的关系[15],并且可能潜在地用作解释网络激活的工具。

Related Work

基于上下文的功能在计算机视觉中具有丰富的使用历史,这是由感知研究推动的,这些研究表明上下文信息会影响人类对象识别和检测的准确性和效率[2,13]。几个具有开创性的自动化视觉系统将上下文作为基于规则的复杂图像理解方法的组成部分[36,7];对于诸如对象识别和检测之类的任务,低维全局描述符通常被证明是有效的上下文线索[39,30,40]。基于图形模型的替代方法代表了利用上下文的另一种可行机制[11、29],并且已经提出了许多其他形式的上下文特征[6]。许多工作已经结合了用于改善语义分割的上下文(例如[48,23]),特别是ParseNet [26]表明,通过全局特征平均编码上下文对于此任务可能非常有效。
Inception系列体系结构[38,37]普及了多尺度卷积模块的使用,这有助于确保在学习的表示的整个层次结构中有效地聚合上下文[17]。这些模块的各种形式已出现在有关自动体系结构搜索的最新工作中[51],这表明它们是(至少)网络模块当前设计空间中局部最优的组成部分。最近的工作已经开发了功能强大的参数化注意模块和通用的参数化注意模块,以允许系统动态提取信息信号[46、4、45]。自上而下的注意力模块[42]和自我注意力[41]可用于开发要素之间的全局关系。通过将权重作为所有成对交互的通用函数,非本地网络[43]表明,可以将自注意力推广到对视觉任务有用的广泛的全局算子块家族中。
最近,人们还对开发可以廉价集成到现有设计中的更专业,轻便的模块感兴趣。我们的工作建立在挤压和激励网络[15]中提出的思想基础上,该网络使用全局嵌入作为SE块设计的一部分,以提供重新校准功能的上下文。我们从[44]中进行的研究中获得了特别的启发,这些研究表明,可以通过前馈方式从基本图像描述符的简单总结中推断出用于定位对象的有用上下文信息(我们的目标是合并低,中等功能和整个模型的高级功能)。特别是,我们将SE对轻量级上下文机制的重视达到了逻辑上的极限,这表明GE-θ变量可以在没有其他可学习参数的情况下实现强劲的性能提升。我们注意到,类似的参数化计算机制也已经在图像恢复社区中进行了探索[18],为该模块设计家族提供了有趣的替代解释,作为可学习的激活函数。

Conclusion and Future Work

在这项工作中,我们考虑了如何有效利用CNN中的特征上下文的问题。我们提出了聚集激发(GE)框架来解决此问题,并提供实验证据证明该方法在多个数据集和模型体系结构中的有效性。在未来的工作中,我们计划调查聚集激励运算符是否可能在其他计算机视觉任务(例如语义分割)中被证明有用,我们期望这些也可以从特征上下文的有效使用中受益

Gather-Excite:Exploiting Feature Context in Convolutional Neural Networks相关推荐

  1. 论文阅读003:《Learning local feature descriptors with triplets and shallow convolutional neural networks》

    论文链接:http://www.bmva.org/bmvc/2016/papers/paper119/paper119.pdf github链接:https://github.com/vbalnt/t ...

  2. [论文翻译]V-Net:Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation

    论文下载: 地址 V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation V-Net: ...

  3. CV:翻译并解读2019《A Survey of the Recent Architectures of Deep Convolutional Neural Networks》第一章~第三章

    CV:翻译并解读2019<A Survey of the Recent Architectures of Deep Convolutional Neural Networks>第一章~第三 ...

  4. (翻译)Understanding Convolutional Neural Networks for NLP

    原文:Understanding Convolutional Neural Networks for NLP 当我们听说卷积神经网络(CNN)时,我们通常会想到计算机视觉. CNN负责图像分类方面的重 ...

  5. Graph Convolutional Neural Networks for Web-Scale Recommender Systems(用于Web级推荐系统的图形卷积神经网络)

    Graph Convolutional Neural Networks for Web-Scale Recommender Systems 用于Web级推荐系统的图形卷积神经网络 ABSTRACT R ...

  6. 论文阅读:Multi-view Convolutional Neural Networks for 3D Shape Recognition

    Preface 今天阅读一篇ICCV2015的论文:<Multi-view Convolutional Neural Networks for 3D Shape Recognition>, ...

  7. 卷积神经网络图像纹理合成 Texture Synthesis Using Convolutional Neural Networks

    卷积神经网络的图像纹理合成 TextureSynthesis Using Convolutional Neural Networks Taylor Guo, 2017年4月29日 星期六 摘要 本文介 ...

  8. Graph Convolutional Neural Networks for Predicting Drug-Target Interactions

    1. 摘要 2. 数据集 DUDE数据集改进 DUDE-chemBl负样本数据集 最大无偏数据集(MUV) 3. 图构建 pocket graph molecuar graph 4. 口袋pretra ...

  9. 【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization

    ·阅读摘要:   本文提出了DPCNN(深度金字塔CNN)模型.在transformer.bert还没兴起的年代,模型越深效果越好,但是模型的复杂度会随着深度提升.粗略地说,DPCNN就是为了解决CN ...

  10. 快速人群密度估计--Multi-scale Convolutional Neural Networks for Crowd Counting

    Multi-scale Convolutional Neural Networks for Crowd Counting https://arxiv.org/abs/1702.02359 对于人群密度 ...

最新文章

  1. linux shell 实现循环输出
  2. python xml解析dom_如何解析python中表示xml.dom.minidom节点的字符串?
  3. python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式
  4. mysql慢查询开启语句分析_mysql慢查询语句分析总结
  5. c++ 低位在前 高位在后_A股市场:如果股票涨停后第二天“高开低走”,你知道怎么操作才能利益最大化吗?...
  6. 关闭mysql权限管理_MySQL系列:用户及权限管理
  7. 扩展log4j系列[二]为DailyRollingFileAppender加上maxBackupIndex属性
  8. 開源搜索引擎爬蟲_六大開源搜索引擎工具 | 學步園
  9. zynq阅读文档之通过中断读GPIO输入的编程指导
  10. 搞笑又雷人的个人签名
  11. Python爬虫实战|爬取视频
  12. ARM开发经典学习网站推荐 (转)
  13. 参加了feedsky的博客大赛
  14. python二级真题--共十二套--前六套--选择题
  15. 深入源码,CompletableFuture 简单与链式的区别?
  16. 调试MCP2515驱动时遇到的问题 CAN控制器和CAN收发器之间的TX和RX引脚接反,导致无法正常收发数据
  17. 关于捕捞所有宝物的最小消耗体力量的问题
  18. flowable中强制结束流程
  19. 仓库管理软件开发完成单机测试版
  20. C. 小票输入输出(结构体)

热门文章

  1. 基于Java+SpringBoot+Thymeleaf+Mysql在线电影院选座订票系统设计与实现
  2. CSS动画翻转的效果
  3. 嫡权法赋权法_Python实现客观赋权法
  4. [半监督学习] ReMixMatch: Semi-Supervised Learning with Distribution Alignment and Augmentation Anchoring
  5. 云上PDF怎么删除页眉页脚_本科论文页眉与页脚怎么设置?
  6. [Noi online-j]T1 切蛋糕
  7. 86版五笔单字效率分析
  8. PLSQL Developer 13.0.0.1883 注册码
  9. 一Flex(Flex+j2EE)
  10. vue 中的 attribute 和 property