Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object detection. In: CVPR. (2016)

YOLO的全拼是You Only Look Once,顾名思义就是只看一次,把目标区域预测和目标类别预测合二为一,作者将目标检测任务看作目标区域预测和类别预测的回归问题。该方法采用单个神经网络直接预测物品边界和类别概率,实现端到端的物品检测。因此识别性能有了很大提升,达到每秒45帧,而在快速YOLO(Fast YOLO,卷积层更少)中,可以达到每秒155帧。

当前最好系统相比,YOLO目标区域定位误差更大,但是背景预测的假阳性优于当前最好的方法。

一、引言

人类瞥了一眼图像,立即知道图像中的物体,它们在哪里以及它们如何相互作用。 人类视觉系统快速而准确,使我们能够执行复杂的任务,比如汽车驾驶。

传统的目标检测系统利用分类器来执行检测。 为了检测对象,这些系统在测试图片的不同位置不同尺寸大小采用分类器对其进行评估。 如目标检测系统采用deformable parts models (DPM)方法,通过滑动框方法提出目标区域,然后采用分类器来实现识别。近期的R-CNN类方法采用region proposal methods,首先生成潜在的bounding boxes,然后采用分类器识别这些bounding boxes区域。最后通过post-processing来去除重复bounding boxes来进行优化。这类方法流程复杂,存在速度慢和训练困难的问题。

我们将目标检测问题转换为直接从图像中提取bounding boxes和类别概率的单个回归问题,只需一眼(you only look once,YOLO)即可检测目标类别和位置。

YOLO简洁明了:见下图。 YOLO算法采用单个卷积神经网络来预测多个bounding boxes和类别概率。 与传统的物体检测方法相比,这种统一模型具有以下优点:

YOLO检测系统。用YOLO处理图像简单直接。我们的系统(1)将输入图像调整为448×448,(2)在图像上运行单个卷积网络,以及(3)由模型的置信度对所得到的检测进行阈值处理。

  • 非常快。YOLO预测流程简单,速度很快。我们的基础版在Titan X GPU上可以达到45帧/s; 快速版可以达到150帧/s。因此,YOLO可以实现实时检测。
  • YOLO采用全图信息来进行预测。与滑动窗口方法和region proposal-based方法不同,YOLO在训练和预测过程中可以利用全图信息。Fast R-CNN检测方法会错误的将背景中的斑块检测为目标,原因在于Fast R-CNN在检测中无法看到全局图像。相对于Fast R-CNN,YOLO背景预测错误率低一半。
  • YOLO可以学习到目标的概括信息(generalizable representation),具有一定普适性。我们采用自然图片训练YOLO,然后采用艺术图像来预测。YOLO比其它目标检测方法(DPM和R-CNN)准确率高很多。

在准确性上,YOLO算法仍然落后于最先进的检测系统。 虽然它可以快速识别图像中的对象,但它很难精确定位某些对象,特别是小对象。

二 统一检测(Unified Detection)

我们将目标检测统一到一个神经网络。我们的网络使用整个图像中的特征来预测每个边界框。 它也是同时预测图像的所有类的所有边界框。 这意味着我们的网络学习到的完整图像和图中所有的对象.YOLO设计可实现端到端训练和实时的速度,同时保持较高的平均精度。

  • YOLO首先将图像分为S×S的格子。如果一个目标的中心落入格子,该格子就负责检测该目标。每一个网格中预测B个Bounding box 和置信值(confidence score)。这些置信度分数反映了该模型对盒子是否包含目标的信心,以及它预测盒子的准确程度。然后,我们定义置信值为:

如果没有目标,置信值为零。另外,我们希望置信度分数等于预测框与真实值之间联合部分的交集(IOU)。

  • 每一个bounding box包含5个值:x,y,w,h和confidence。(x,y)坐标表示边界框相对于网格单元边界框的中心。宽度和高度是相对于整张图像预测的。confidence表示预测的box与实际边界框之间的IOU。每个网格单元还预测C个条件类别概率:

这些概率是以网格包含目标为条件的,每个网格单元我们只预测的一组类别概率,而不管边界框的的数量B时多少。

  • 在测试时,我们乘以条件类概率和单个盒子的置信度预测:

这些分数编码了该类出现在框中的概率以及预测框拟合目标的程度。。在PASCAL VOC数据集上评价时,我们采用S=7,B=2,C=20(该数据集包含20个类别),最终预测结果为7×7×30(B*5+C)的tensor。

模型。 我们的系统将检测建模为回归问题。它将图像分成SxS的网络,并且每个网格单元预测B个边界框,这些边界框的置信度以及C个类别概率,这些预测被编码为SxSx(B*5+C)的张量。

1、网络模型

我们使用卷积神经网络来实现YOLO算法,并在Pascal VOC检测数据集上进行评估。网络的初始卷积层从图像中提取特征,而全连接层用来预测输出概率和坐标。

我们的网络架构受到GoogLeNet图像分类模型的启发。我们的网络有24个卷积层,后面是2个全连接层。我们使用1x1降维层,后面是3x3卷积层,这与Lin等人类似,而不是GoogLeNet使用的Inception模块。我们在ImageNet分类任务上以一半的分辨率(224x224的输入图像)预训练卷积层,然后将分辨率加倍来进行检测。完整的网络如图所示。

架构。我们的检测网络有24个卷积层,其次是2个全连接层。交替1x1卷积层减少了前面层的特征空间。我们在ImageNet分类任务上以一半的分辨率(224x224的输入图像)预训练卷积层,然后将分辨率加倍来进行检测。

我们还训练了快速版本的YOLO,旨在推动快速目标检测的界限。快速YOLO使用具有较少卷积层(9层而不是24层)的神经网络,在这些层中使用较少的滤波器。除了网络规模之外,YOLO和Fast YOLO的所有训练和测试参数都是相同的。

我们网络的最终输出是7x7x30的预测张量。

2、训练

我们在ImageNet 1000类竞赛数据集上预训练我们的卷积层。对于预训练,我们使用上图中的前20个卷积层,外加平均池化层和全连接层。我们对这个网络进行了大约一周的训练,并且在ImageNet 2012验证集上获得了单一裁剪图像88%的top-5准确率,与Caffe模型池中的GoogLeNet模型相当。我们使用Darknet框架进行所有的训练和推断。

然后我们转换模型来执行检测。Ren等人表明,预训练网络中增加卷积层和连接层可以提高性能。按照他们的例子,我们添加了四个卷积层和两个全连接层,并且具有随机初始化的权重。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224x224变为448x448。

我们的最后一层预测类概率和边界框坐标。我们通过图像宽度和高度来规范边界框的宽度和高度,使它们落在0和1之间。我们将边界框x和y坐标参数化为特定网格单元位置的偏移量,所以它们边界也在0和1之间。

我们对最后一层使用线性激活函数,所有其它层使用下面的漏泄修正线性激活:

我们优化了模型输出中的平方和误差。我们使用平方和误差,因为它很容易进行优化,但是它并不完全符合我们最大化平均精度的目标。分类误差与定位误差的权重是一样的,这可能并不理想。另外,在每张图像中,许多网格单元不包含任何对象。这将这些单元格的“置信度”分数推向零,通常压倒了包含目标的单元格的梯度。这可能导致模型不稳定,从而导致训练早期发散。

为了改善这一点,我们增加了边界框坐标预测损失,并减少了不包含目标边界框的置信度预测损失。我们使用两个参数λcoord和λnoobj来完成这个工作。我们设置λcoord=5和λnoobj=5。

平方和误差也可以在大盒子和小盒子中同样加权误差。我们的错误指标应该反映出,大盒子小偏差的重要性不如小盒子小偏差的重要性。为了部分解决这个问题,我们直接预测边界框宽度和高度的平方根,而不是宽度和高度。

YOLO每个网格单元预测多个边界框。在训练时,每个目标我们只需要一个边界框预测器来负责。我们指定一个预测器“负责”,根据哪个预测与真实值之间具有当前最高的IOU来预测目标。这导致边界框预测器之间的专业化。每个预测器可以更好地预测特定大小,方向角,或目标的类别,从而改善整体召回率。

在训练期间,我们优化以下多部分损失函数:

其中1iobj表示目标是否出现在网格单元i中(是为1,否为0,根据该单元实际上是否有目标确定),1ijobj表示网格单元i的第j个边界框预测器“负责”该预测(如果该单元真有目标,并且该边界框IOU最大,则值为1,否为0)。

注意,如果目标存在于该网格单元中(前面讨论的条件类别概率),则损失函数仅惩罚分类错误。如果预测器“负责”实际边界框(即该网格单元中具有最高IOU的预测器),则它也仅惩罚边界框坐标错误。

我们对Pascal VOC 2007和2012的训练和验证数据集进行了大约135个迭代周期的网络训练。在Pascal VOC 2012上进行测试时,我们的训练包含了Pascal VOC 2007的测试数据。在整个训练过程中,我们使用了64个批大小,0.9的动量和0.0005的衰减。

我们的学习率方案如下:对于第一个迭代周期,我们慢慢地将学习率从0.001提高到0.01,如果我们从高学习率开始,我们的模型往往会由于不稳定的梯度而发散。我们继续以0.01的学习率训练75个迭代周期,然后用0.001学习率训练30个迭代周期,最后用0.0001的学习率训练30个迭代周期。

为了避免过度拟合,我们使用弃权和大量的数据增强。在第一个连接层之后,弃权层使用0.5的比例,防止层之间的互相适应。对于数据增强,我们引入高达原始图像20%的大小的随机缩放和转换。我们还在HSV色彩空间中使用高达1.5的因子来随机调整图像的曝光和饱和度。

3、预测

就像在训练中一样,预测测试图像的检测只需要一次网络评估。在Pascal VOC上,每张图像上网络预测98个边界框和每个框的类别概率。YOLO在测试时非常快,因为它只需要一次网络评估,不像基于分类器的方法。

网格设计强化了边界框预测中的空间多样性。通常很明显一个目标落在哪一个网格单元中,而网络只能为每个目标预测一个边界框。然而,一些大的目标或靠近多个网格单元边界的目标可以被多个网格单元很好地定位。非极大值抑制可以用来修正这些多重检测。对于R-CNN或DPM而言,性能不是关键的,非最大抑制会增加2%-3%的mAP。

4、YOLO的限制

  • YOLO的每一个网格只预测两个边界框,一种类别。这导致模型对相邻目标预测准确率下降。因此,YOLO对成队列的目标(如 一群鸟)识别准确率较低。
  • 由于我们的模型学习从数据中预测边界框,因此它很难泛化到新的、不常见角度的目标。我们的模型使用相对较粗糙的特征来预测边界框,因为我们的架构具有来自输入图像的多个下采样层。
  • YOLO的损失函数会同样的对待小边界框与大边界框的误差。大边界框的小误差通常是良性的,但小边界框的小误差对IOU的影响要大得多。我们的主要错误来源是不正确的定位。

三 与其他目标检测算法对比

目标检测是计算机视觉中的核心问题。检测流程通常从输入图像上(Haar,SIFT ,HOG ,卷积特征)提取一组鲁棒特征开始。然后,分类器或定位器被用来识别特征空间中的目标。这些分类器或定位器在整个图像上或在图像中的一些子区域上以滑动窗口的方式运行。我们将YOLO检测系统与几种顶级检测框架进行比较,突出了关键的相似性和差异性。

  • 可变形部件模型。可变形零件模型(DPM)使用滑动窗口方法进行目标检测。DPM使用不相交的流程来提取静态特征,对区域进行分类,预测高评分区域的边界框等。我们的系统用单个卷积神经网络替换所有这些不同的部分。网络同时进行特征提取,边界框预测,非极大值抑制和上下文推理。代替静态特征,网络内嵌地训练特征并为检测任务优化它们。我们的统一架构导致了比DPM更快,更准确的模型。
  • R-CNN。R-CNN及其变种使用区域提名而不是滑动窗口来查找图像中的目标。选择性搜索产生潜在的边界框,卷积网络提取特征,SVM对边界框进行评分,线性模型调整边界框,非极大值抑制消除重复检测。这个复杂流程的每个阶段都必须独立地进行精确调整,所得到的系统非常慢,测试时每张图像需要超过40秒。

YOLO与R-CNN有一些相似之处。每个网格单元提出潜在的边界框并使用卷积特征对这些框进行评分。但是,我们的系统对网格单元提出进行了空间限制,这有助于缓解对同一目标的多次检测。我们的系统还提出了更少的边界框,每张图像只有98个,而选择性搜索则只有2000个左右。最后,我们的系统将这些单独的组件组合成一个单一的,共同优化的模型。

  • 其它快速检测器。Fast和Faster的R-CNN通过共享计算和使用神经网络替代选择性搜索来提出区域加速R-CNN框架。虽然它们提供了比R-CNN更快的速度和更高的准确度,但两者仍然不能达到实时性能。

许多研究工作集中在加快DPM流程上。它们加速HOG计算,使用级联,并将计算推动到GPU上。但是,实际上只有30Hz的DPM可以实时运行。

YOLO不是试图优化大型检测流程的单个组件,而是完全抛弃流程,被设计为快速检测。

像人脸或行人等单类别的检测器可以高度优化,因为他们必须处理更少的变化。YOLO是一种通用的检测器,可以学习同时检测多个目标。

  • Deep MultiBox。与R-CNN不同,Szegedy等人训练了一个卷积神经网络来预测感兴趣区域,而不是使用选择性搜索。MultiBox还可以通过用单类预测替换置信度预测来执行单目标检测。然而,MultiBox无法执行通用的目标检测,并且仍然只是一个较大的检测流程中的一部分,需要进一步的图像块分类。YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但是YOLO是一个完整的检测系统。
  • OverFeat。Sermanet等人训练了一个卷积神经网络来执行定位,并使该定位器进行检测。OverFeat高效地执行滑动窗口检测,但它仍然是一个不相交的系统。OverFeat优化了定位,而不是检测性能。像DPM一样,定位器在进行预测时只能看到局部信息。OverFeat不能推断全局上下文,因此需要大量的后处理来产生连贯的检测。
  • MultiGrasp。我们的工作在设计上类似于Redmon等的抓取检测。我们对边界框预测的网格方法是基于MultiGrasp系统抓取的回归分析。然而,抓取检测比目标检测任务要简单得多。MultiGrasp只需要为包含一个目标的图像预测一个可以抓取的区域。不必估计目标的大小,位置或目标边界或预测目标的类别,只找到适合抓取的区域。YOLO预测图像中多个类别的多个目标的边界框和类别概率。

四 实验

首先,我们在PASCAL VOC 2007上比较YOLO和其它的实时检测系统。为了理解YOLO和R-CNN变种之间的差异,我们探索了YOLO和R-CNN性能最高的版本之一Fast R-CNN在VOC 2007上错误率。根据不同的误差曲线,我们显示YOLO可以用来重新评估Fast R-CNN检测,并减少背景假阳性带来的错误,从而显著提升性能。我们还展示了在VOC 2012上的结果,并与目前最先进的方法比较了mAP。最后,在两个艺术品数据集上我们显示了YOLO可以比其它检测器更好地泛化到新领域。

1、与其他实时系统的比较

  • 目标检测方面的许多研究工作都集中在快速制定标准检测流程上。然而,只有Sadeghi等实际上产生了一个实时运行的检测系统(每秒30帧或更好)。我们将YOLO与DPM的GPU实现进行了比较,其在30Hz或100Hz下运行。虽然其它的努力没有达到实时性的里程碑,我们也比较了它们的相对mAP和速度来检查目标检测系统中精度——性能权衡。
  • Fast YOLO是PASCAL上最快的目标检测方法;据我们所知,它是现有的最快的目标检测器。具有52.7%mAP,实时检测的精度是以前工作的两倍以上。YOLO将mAP推到63.4%同时保持了实时性能。
  • 我们还使用VGG-16训练YOLO。这个模型比YOLO更准确,但也比它慢得多。对于依赖于VGG-16的其它检测系统来说,它是比较有用的,但由于它比实时的YOLO更慢,本文的其它部分将重点放在我们更快的模型上。
  • Fastest DPM可以在不牺牲太多mAP的情况下有效地加速DPM,但仍然会将实时性能降低2倍。与神经网络方法相比,DPM相对低的检测精度也受到限制。
  • R-CNN Minus R用静态边界框提出取代选择性搜索。虽然速度比R-CNN更快,但仍然不能实时,并且由于没有好的边界框提出,准确性受到了严重影响。
  • Fast R-CNN加快了R-CNN的分类阶段,但是仍然依赖选择性搜索,每张图像需要花费大约2秒来生成边界框提出。因此,它具有很高的mAP,但是0.5的fps仍离实时性很远。
  • Faster R-CNN用神经网络替代了选择性搜索来提出边界框,类似于Szegedy等。在我们的测试中,他们最精确的模型达到了7fps,而较小的,不太精确的模型以18fps运行。VGG-16版本的Faster R-CNN要高出10mAP,但比YOLO慢6倍。Zeiler-Fergus的Faster R-CNN只比YOLO慢了2.5倍,但也不太准确。

Pascal VOC 2007上的实时系统。比较快速检测器的性能和速度。快速YOLO是Pascal VOC检测记录中速度最快的检测器,其精度仍然是其它实时检测器的两倍。YOLO比快速版本更精确10mAP,同时在速度上仍保持实时性。

2、VOC 2007错误率分析

为了进一步检查YOLO和最先进的检测器之间的差异,我们详细分析了VOC 2007的结果。我们将YOLO与Fast R-CNN进行比较,因为Fast R-CNN是PASCAL上性能最高的检测器之一并且它的检测代码是可公开得到的。

我们使用Hoiem等人的方法和工具。对于测试时的每个类别,我们看这个类别的前N个预测。每个预测或者是正确的,或者根据错误类型进行分类:

  • Correct:正确的类别而且IOU>0.5
  • Localization:正确的类别,0.1<IOU<0.5
  • Similar:类别相似,IOU>0.1
  • Other:类别错误,IOU>0.1
  • Background:任何IOU<0.1的目标

下图显示了在所有的20个类别上每种错误类型平均值的分解图。

误差分析:Fast R-CNN vs. YOLO。这张图显示了各种类别的前N个预测中定位错误和背景错误的百分比(N = #表示目标在那个类别中)。

YOLO努力地正确定位目标。定位错误占YOLO错误的大多数,比其它错误源加起来都多。Fast R-CNN使定位错误少得多,但背景错误更多。它的检测的13.6%是不包含任何目标的误报。Fast R-CNN比YOLO预测背景检测的可能性高出近3倍。

3、结合Fast R-CNN和YOLO

YOLO比Fast R-CNN的背景误检要少得多。通过使用YOLO消除Fast R-CNN的背景检测,我们获得了显著的性能提升。对于R-CNN预测的每个边界框,我们检查YOLO是否预测一个类似的框。如果是这样,我们根据YOLO预测的概率和两个盒子之间的重叠来对这个预测进行提升。

最好的Fast R-CNN模型在VOC 2007测试集上达到了71.8%的mAP。当与YOLO结合时,其mAP增加了3.2%达到了75%,我们也尝试将最好的Fast R-CNN模型与其它几个版本的Fast R-CNN结合起来。这些模型组合产生了0.3%到0.6%之间的小增幅。

VOC 2007模型组合实验。我们检验了各种模型与Fast R-CNN最佳版本结合的效果。Fast R-CNN的其它版本只提供很小的好处,而YOLO则提供了显著的性能提升。

来自YOLO的提升不仅仅是模型组合的副产品,因为组合不同版本的Fast R-CNN几乎没有什么好处。相反,正是因为YOLO在测试时出现了各种各样的错误,所以在提高Fast R-CNN的性能方面非常有效。

遗憾的是,这个组合并没有从YOLO的速度中受益,因为我们分别运行每个模型,然后结合结果。但是,由于YOLO速度如此之快,与Fast R-CNN相比,不会增加任何显著的计算时间。

4、VOC 2012结果

在VOC 2012测试集上,YOLO得分为57.9%mAP,这低于现有的最新技术,接近于使用VGG-16的原始R-CNN,见表3。我们的系统与其最接近的竞争对手相比,在小目标上努力。在bottlesheeptv/monitor等类别上,YOLO的得分比R-CNN或Feature Edit低8%-10%,然而,在cattrain等其它类别上YOLO实现了更高的性能。

PASCAL VOC 2012排行榜。截至2015年11月6日,YOLO与完整comp4(允许外部数据)公开排行榜进行了比较。显示了各种检测方法的平均精度均值和每类的平均精度。YOLO是唯一的实时检测器。Fast R-CNN + YOLO是评分第四高的方法,比Fast R-CNN提升了2.3%。

我们联合的Fast R-CNN + YOLO模型是性能最高的检测方法之一。Fast R-CNN从与YOLO的组合中获得了2.3%提高,在公开排行榜上上移了5位。

5、泛化能力,艺术品中的行人检测

用于目标检测的学术数据集以相同分布获取训练和测试数据。在现实世界的应用中,很难预测所有可能的用例,而且测试数据可能与系统之前看到的不同[3]。我们在Picasso数据集上和People-Art数据集上将YOLO与其它的检测系统进行比较,这两个数据集用于测试艺术品中的行人检测。

下图显示了YOLO和其它检测方法之间的比较性能。作为参考,我们在person上提供VOC 2007的检测AP,其中所有模型仅在VOC 2007数据上训练。在Picasso数据集上的模型在VOC 2012上训练,而People-Art数据集上的模型则在VOC 2010上训练。

Picasso和People-Art数据集上的泛化结果。

R-CNN在VOC 2007上有高AP。然而,当应用于艺术品时,R-CNN明显下降。R-CNN使用选择性搜索来调整自然图像的边界框提出。R-CNN中的分类器步骤只能看到小区域,并且需要很好的边界框提出。

DPM在应用于艺术品时保持了其AP。之前的工作认为DPM表现良好,因为它具有目标形状和布局的强大空间模型。虽然DPM不会像R-CNN那样退化,但它开始时的AP较低。

YOLO在VOC 2007上有很好的性能,在应用于艺术品时其AP下降低于其它方法。像DPM一样,YOLO建模目标的大小和形状,以及目标和目标通常出现的位置之间的关系。艺术品和自然图像在像素级别上有很大不同,但是它们在目标的大小和形状方面是相似的,因此YOLO仍然可以预测好的边界框和检测结果。

定性结果。YOLO在网络采样的艺术品和自然图像上的运行结果。虽然它将人误检成了飞机,但它大部分上是准确的。

四 实时目标检测

YOLO是一种快速,精确的目标检测器,非常适合计算机视觉应用。我们将YOLO连接到网络摄像头,并验证它是否能保持实时性能,包括从摄像头获取图像并显示检测结果的时间。

由此产生的系统是交互式和参与式的。虽然YOLO单独处理图像,但当连接到网络摄像头时,其功能类似于跟踪系统,可在目标移动和外观变化时检测目标。系统演示和源代码可以在项目网站上找到:http://pjreddie.com/yolo/

五 结论

我们介绍了YOLO,一种统一的目标检测模型。我们的模型构建简单,可以直接在整张图像上进行训练。与基于分类器的方法不同,YOLO直接在对应检测性能的损失函数上训练,并且整个模型联合训练。

快速YOLO是文献中最快的通用目的的目标检测器,YOLO推动了实时目标检测的最新技术。YOLO还很好地泛化到新领域,使其成为依赖快速,强大的目标检测应用的理想选择。

7

参考文章:

[1]YOLO论文翻译——中文版(推荐)

[2]目标检测算法之YOLO

[3]YOLO:实时快速目标检测

[4]Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object detection. In: CVPR. (2016)

[5]YOLO: Real-Time Object Detection(官方网址)

第三十五节,目标检测之YOLO算法详解的更多相关文章

  1. 【转】目标检测之YOLO系列详解

    本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...

  2. 目标检测:SSD算法详解

    一些概念   True    Predict  True postive False postive  预测为正类 False negivate True negivate  预测为负类    真实为 ...

  3. 【目标检测】RCNN算法详解

    网址: 1. https://blog.csdn.net/zijin0802034/article/details/77685438 (box regression 边框回归) 2. https:// ...

  4. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  5. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  6. 风炫安全web安全学习第三十五节课 文件下载和文件读取漏洞

    风炫安全web安全学习第三十五节课 文件下载和文件读取漏洞 0x03 任意文件下载漏洞 一些网站由于业务需求,往往需要提供文件下载功能,但若对用户下载的文件不做限制,则恶意用户就能够下载任意敏感文件, ...

  7. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  8. “全栈2019”Java多线程第二十五章:生产者与消费者线程详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  9. “全栈2019”Java第六十五章:接口与默认方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. requests 使用免费的代理ip爬取网站

    import requests import queue import threading from lxml import etree #要爬取的URL url = "http://xxx ...

  2. 谈谈对C#中反射的一些理解和认识(上)

    今天就平常用到的非常多的反射这个技术来做一个总结,当然关于反射需要讲解的东西实在是太多的内容,在一片文章中想要讲解清楚是非常难的,本篇博客也是就自己本人对这些内容学习后的一个总结,当然包括看书和自己写 ...

  3. codeforces509B

    Painting Pebbles CodeForces - 509B There are n piles of pebbles on the table, the i-th pile contains ...

  4. THEPYTHONCHALLENG闯关记录

    由于是自己看视频学python,总觉得不写几行代码就什么都没有学到. 找了一个写代码的网站其实只是因为这个看起来好玩. 闯关地址http://www.pythonchallenge.com/index ...

  5. java excel Workbook API

    此文摘自:http://blog.sina.com.cn/zenyunhai 1. int getNumberOfSheets() 获得工作薄(Workbook)中工作表(Sheet)的个数,示例: ...

  6. Codeforces1037F Maximum Reduction 【单调栈】

    题目分析: 没啥好说的,会单调栈就会做. 代码: #include<bits/stdc++.h> using namespace std; ; ; int n,k; int pre[max ...

  7. 云服务器搭建在线ssh终端GateOne

    由于公司在使用内网和安全桌面,不能在安全桌面中安装Xshell的ssh终端,所有想操作个人公网服务器很困难. 查阅发现,使用GateOne可以在服务器上搭建一个在线的ssh工具.使用体验友好,可以满足 ...

  8. 【XSY2716】营养餐 博弈论

    题目描述 给你一棵有根树,每个点有两个属性\(a,b\) 两人轮流操作,每次要减小一个点的\(a\)值,要求 \[ a_x\geq\sum_{i\in child(x)}a_ib_i \] 保证初始状 ...

  9. android json 解析简单实例

    Android JSON解析跟JAVA 的JSON解析原理是一样的. Android自带的JSON方式跟方便,不需要导包啥的.不深究原理了,直接上代码: public class JsonActivi ...

  10. dns配置文件

    /etc/resolv.conf 该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数. resolv.conf的关键字主要有四个,分别是: nameserver   ...