当前位置:网站首页>论文精读-YOLOv1:You Only Look Once:Unified, Real-Time Object Detection
论文精读-YOLOv1:You Only Look Once:Unified, Real-Time Object Detection
2022-07-26 03:12:00 【樱花的浪漫】
Abstract
我们提出了一种新的目标检测方法YOLO。先前在目标检测方面的工作是重新利用分类器来执行检测。相反,我们将目标检测框架为一个回归问题,以确定空间分离的边界框和相关的类概率。一个单一的神经网络在一次评估中直接从完整的图像中预测边界框和类的概率。由于整个检测管道是一个单一的网络,因此可以根据检测性能直接进行端到端优化。
我们的统一体系结构运行的速度非常快。我们的基础YOLO模型以每秒45帧的速度实时处理图像。该网络的一个较小的版本,Fast YOLO,每秒处理惊人的155帧,同时仍然是其他实时探测器的两倍。与最先进的检测系统相比,YOLO做出了更多的定位错误,但不太可能预测背景下的假阳性。最后,YOLO学习对象的非常一般的表示。当从自然图像推广到其他领域,如艺术品时,它优于其他检测方法,包括DPM和R-CNN。
1. Introduction
人类瞥一眼图像,就会立刻知道图像中的物体是什么,它们在哪里,以及它们是如何相互作用的。人类的视觉系统是快速和准确的,允许我们执行复杂的任务,比如驾驶时很少有意识的思考。快速、准确的目标检测算法将允许计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传递实时场景信息,并释放通用的、响应式机器人系统的潜力。
目前的检测系统重新利用分类器来执行检测。为了检测一个对象,这些系统为该对象使用分类器,并在测试图像的不同位置和尺度对其进行评估。像可变形部件模型(DPM)这样的系统使用滑动窗口方法,其中分类器在整个图像[10]上均匀间隔的位置运行。
最近的方法,如R-CNN,使用区域提议的方法,首先在图像中生成潜在的边界框,然后在这些提议的边界框上运行分类器。分类后,使用后处理方法对边界框进行细化,消除重复检测,并基于场景[13]中的其他对象对边界框进行重新评分。这些复杂的管道非常缓慢,难以优化,因为每个单独的组件必须单独训练。
我们将目标检测重新定义为一个单一的回归问题,直接从图像像素到边界框坐标和类概率。使用我们的系统,你只看一次(YOLO)就可以预测有什么物体以及它们在哪里。
YOLO简单得令人耳目一新:见图1。单个卷积网络同时预测多个边界框和这些边界框的类概率。YOLO训练完整的图像,并直接优化检测性能。与传统的目标检测方法相比,这个统一的模型有几个优点。

首先,YOLO的速度非常快。由于我们将帧检测作为一个回归问题,所以我们不需要一个复杂的管道。我们只是在测试时在一个新的图像上运行我们的神经网络来预测检测。我们的基本网络以每秒45帧的速度运行,在TitanXGPU上没有批处理,而fast版本的运行速度超过150fps。这意味着我们可以用不到25毫秒的延迟实时处理流媒体视频。此外,YOLO实现的平均精度是其他实时系统的两倍以上。有关我们的系统在网络摄像头上实时运行的演示,请参阅我们的项目网页:http://pjreddie.com/yolo/。
其次,YOLO在做预测时推理整个图像。与基于滑动窗口和区域建议的技术不同,YOLO在训练和测试期间可以看到整个图像,因此它隐式地编码关于类及其外观的上下文信息。FastR-CNN,一种顶级检测方法[14],将图像中的背景补丁错误为对象,因为它看不到更大的上下文。与FasTR-CNN相比,YOLO产生的背景错误数量不到一半。
第三,YOLO学习对象的可推广表示。当在自然图像上进行训练和在艺术品上进行测试时,YOLO的性能远远优于DPM和R-CNN等顶级检测方法。由于YOLO是高度可一般化的,因此当应用于新域或意外输入时,不太可能崩溃。
YOLO在精度上仍然落后于最先进的检测系统。虽然它可以快速识别图像中的物体,但它很难精确定位一些物体,特别是小的物体。我们在实验中进一步研究了这些权衡。
我们所有的培训和测试代码都是开源的。经过预训练过的各种模型也可以下载。
2. Unifified Detection
我们将目标检测的独立组件统一为一个单一的神经网络。我们的网络使用来自整个图像的特征来预测每个边界框。它还同时预测图像的所有类的所有边界框。这意味着我们的网络会对整个图像和图像中的所有对象进行全局推理。YOLO设计支持端到端训练和实时速度,同时保持较高的平均精度。
我们的系统将输入图像分割为一个S×S网格。如果一个对象的中心落入一个网格单元格中,则该网格单元格负责检测该对象。
每个网格单元格预测B边界框和这些边界框的置信度分数。这些置信度分数反映了模型对盒子包含物体的信心,也反映了它认为盒子预测的准确性。形式上,我们将置信度定义为
。如果该单元格中不存在对象,则置信度分数应该为零。否则,我们希望置信度得分等于预测框和地面真实值之间的并集的交集(IOU)。
每个边界框由5个预测组成:x、y、w、h和置信度。(x、y)坐标表示相对于网格单元格边界的方框的中心。并将其宽度和高度相对于整个图像进行了预测。最后,置信度预测表示预测盒和任何地面真实盒之间的IOU。
每个网格单元还预测C条件类概率,Pr(Classi|Object)。这些概率以包含一个对象的网格单元格为条件。我们只预测每个网格单元的一组类概率,而不管方框B的数量。
在测试时,我们将条件类概率和单个盒子置信度预测相乘,
![]()
这给了我们每个盒子的特定类别的信心分数。这些分数既编码了该类出现在框中的概率,也编码了预测的框与对象的匹配程度。

图2:模型。我们的系统将检测建模为一个回归问题。它将图像划分为一个S×S网格,并为每个网格单元预测B边界框、这些框的置信度和C类概率。这些预测被编码为一个S×S×(B∗5+C)张量。
为了评估YOLO,我们使用S=7,B=2。PASCAL VOC 有20个标签类,所以C=20。我们最终的预测是一个7×7×30张量。
2.1. Network Design
我们将该模型作为一个卷积神经网络实现,并在PASCAL VOC检测数据集[9]上对其进行了评估。网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。
我们的网络架构受到用于图像分类[34]模型的启发。我们的网络有24个卷积层,然后是2个完全连接的层。我们没有使用GoogLeNet使用的初始模块,而是简单地使用1×1缩减层和3×3卷积层,类似于Lin等人的[22]。整个网络如图3所示。
我们还训练了一个快速版本的YOLO,旨在推动快速目标检测的边界。FastYOLO使用的神经网络的卷积层更少(9个而不是24个),而这些层的过滤器更少。除了网络的大小之外,YOLO和FastYOLO之间的所有训练和测试参数都是相同的。

我们的网络的最终输出是预测的7×7×30张量。
2.2. Training
我们在ImageNet1000级竞争数据集[30]上预训练了我们的卷积层。对于预训练,我们使用图3中的前20个卷积层,然后是一个平均池化层和一个完全连接的层。我们对该网络进行了大约一周的训练,并在ImageNet2012验证集上实现了88%的单一作物最高5名的精度,可与Caffe’s Model Zoo 中的GoogLeNet 模型相比较。我们对所有的训练和推理[26]都使用Darknet框架。
然后,我们转换模型来执行检测。Ren等人的研究表明,在预训练的网络中同时添加卷积层和连接层可以提高性能[29]。根据他们的例子,我们添加了四个卷积层和两个具有随机初始化权值的完全连接层。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224×224提高到448×448。
我们的最后一层预测了类的概率和边界框坐标。我们根据图像的宽度和高度将边界框的宽度和高度进行归一化,使它们落在0到1之间。我们参数化边界框x和y坐标为特定网格单元位置的偏移,因此它们也被限定在0和1之间。
我们对最后一层使用线性激活函数,所有其他层使用以下leaky RELU:

我们对模型输出中的和平方误差进行了优化。我们使用和平方误差是因为它很容易优化,但是它并不完全符合我们最大化平均精度的目标。它对定位误差和分类误差的权重相同,这可能并不理想。此外,在每个图像中,许多网格单元格不包含任何对象。这将这些细胞的“confidence”分数推向零,通常超过了确实包含物体的细胞的梯度。这可能导致模型不稳定,导致训练在早期出现分歧。
为了解决这一点,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的一致性预测的损失。我们使用两个参数,λcoord和λnoobj来完成这一点。我们设置了λcoord=5和λnoobj=.5。
平方和误差也同样权重大盒子和小盒子的误差。我们的误差度量应该反映大盒子的小偏差比小盒子的小偏差小。为了部分解决这个问题,我们预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。
YOLO预测每个网格单元格有多个边界框。在训练时,我们只希望一个边界框预测器负责每个对象。我们分配了一个预测器来“负责”预测一个对象,基于这个预测框与真知框有着最高的IOU。这导致了边界框预测器之间的专门化。每个预测器都能更好地预测特定的大小、纵横比或物体的类别,从而提高整体回忆率。
在训练过程中,我们优化了以下几点,多部分的损失函数:

其中,
表示对象是否出现在单元格i中,而
表示单元格i中的第j个边界框预测器“负责”该预测。
请注意,只有当该网格单元格中存在一个对象时,损失函数才会惩罚分类错误(因此,前面讨论过的条件类概率)。如果预测器对地面真实框“负责”(即在该网格单元中具有任何预测器的最高IOU),它也只惩罚边界框坐标错误。
我们根据pascalVOC2007和2012的训练和验证数据集对网络进行了大约135个epochs的训练。在2012年的测试时,我们还包括VOC2007测试数据用于培训。在整个训练过程中,我们使用的批量大小为64,动量为0.9,衰减为0.0005。
我们的学习速率计划如下:在第一个阶段,我们将学习速率从10**−3缓慢提高到10**−2。如果我们从一个较高的学习速率开始,我们的模型经常会由于不稳定的梯度而发散。我们继续用10**−2训练75个epochs,然后10**−3训练30个epochs,最后10**−4训练30个epochs。
为了避免过拟合,我们使用了dropout和广泛的数据增强。在第一连接层之后,0.5的dropout层阻止了层[18]之间的共适应。对于数据增强,我们引入了高达原始图像大小的20%的随机缩放和平移。我们还在HSV颜色空间中随机调整图像的曝光和饱和度高达1.5倍。
2.3. Inference
就像在训练中一样,预测一个测试图像的检测只需要一个网络评估。在PASCAL VOC上,网络预测每幅图像98个边界框和每个框的类概率。YOLO在测试时速度非常快,因为与基于分类器的方法不同,它只需要一个单一的网络评估。
网格设计在边界框预测中加强了空间多样性。通常,对象落入哪个网格单元,网络只预测每个对象的一个框。然而,一些大型物体或靠近多个细胞边界的物体可以被多个细胞很好地定位。非最大抑制可以用来修复这些多重检测。虽然不像R-CNN或DPM那样对性能至关重要,但非最大抑制在mAP中增加了2-3%。
2.4. Limitations of YOLO
YOLO对边界框预测施加了强大的空间约束,因为每个网格单元只能预测两个框,并且只能有一个类。这个空间约束限制了我们的模型可以预测的附近物体的数量。我们的模型会与成群出现的小物体作斗争,比如鸟群。
由于我们的模型学会了从数据中预测边界框,所以它很难推广到新的或不寻常的长宽比或配置的对象。我们的模型还使用了相对粗糙的特征来预测边界框,因为我们的架构从输入图像中有多个降采样层。
最后,当我们训练一个近似于检测性能的损失函数时,我们的损失函数处理小边界框与大边界框中的错误是相同的。一个大box里的小错误通常是良性的,但一个box里的小错误对IOU有更大的影响。我们的主要错误来源是不正确的定位。
3. Comparison to Other Detection Systems
目标检测是计算机视觉中的一个核心问题。检测管道通常从从输入图像中提取一组鲁棒特征(Haar[25],SIFT[23],HOG[4],卷积特征[6])开始。然后,使用分类器[36,21,13,10]或定位器[1,32]来识别特征空间中的对象。这些分类器或定位器要么以滑动窗口的方式在整个图像上运行,要么在图像[35,15,39]中的某些区域的子集上运行。我们将YOLO检测系统与几个顶级检测框架进行了比较,突出了关键的相似性和差异性。
Deformable parts models. DPM使用滑动窗口方法来进行目标检测[10]。DPM使用一个不相交的管道来提取静态特征、分类区域、预测高评分区域的边界框等。我们的系统用一个单一的卷积神经网络取代了所有这些不同的部分。该网络同时进行特征提取、边界盒预测、非最大抑制和上下文推理。网络不是静态特征,而是对特征进行在线训练并进行优化以完成检测任务。我们的统一架构导致了一个比DPM更快、更准确的模型。
R-CNN。R-CNN及其变体使用区域建议而不是滑动窗口来寻找图像中的对象。选择性搜索[35]生成潜在的边界框,卷积网络提取特征,SVM对边界框进行评分,线性模型调整边界框,非最大抑制消除了重复检测。这个复杂管道的每个阶段都必须精确地独立调优,并且由此产生的系统非常缓慢,在测试时间[14]时,每张图像需要超过40秒。
YOLO与R-CNN有一些相似之处。每个网格单元格提出潜在的边界框,并使用卷积特征对这些框进行评分。然而,我们的系统对网格单元的建议施加了空间约束,这有助于减轻对同一对象的多次检测。我们的系统还提出了更少的边界框,每张图像只有98个,而选择性搜索有大约2000个。最后,我们的系统将这些单独的组件组合成一个单一的、联合优化的模型。
Other Fast Detectors.Fast和Faster R-CNN专注于通过共享计算和使用神经网络提出区域而不是选择性搜索来加速R-CNN框架[14][28]。虽然它们比R-CNN提供了速度和准确性的提高,但都仍然低于实时性能。
许多研究工作都集中在加快DPM管道的[31][38][5]上。它们加快了HOG计算,使用级联,并将计算推到gpu。然而,只有30Hz的DPM[31]才能实时运行。
YOLO没有试图优化大型检测管道的单个组件,而是完全抛出了管道,而且设计速度快。单类如面孔或人的探测器可以高度优化,因为它们必须处理更少的变异[37]。YOLO是一种通用的探测器,它可以学习同时检测各种物体。
Deep MultiBox.与R-CNN不同,Szegedy等人训练了一个卷积神经网络来预测感兴趣的区域[8],而不是使用选择性搜索。MultiBox还可以通过用单个类预测替换置信度预测来执行单一目标检测。然而,MultiBox不能执行一般的目标检测,仍然只是一个更大的检测管道中的一部分,需要进一步的图像补丁分类。YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。
OverFeat. Sermanet等人训练了一个卷积神经网络来执行定位,并调整该定位器来执行检测[32]。OverFeat可以有效地执行滑动窗口检测,但它仍然是一个不相交的系统。OverFeat优化了定位,而不是检测性能。与DPM一样,定位器在进行预测时只看到候选框。OverFeat不能推理全局环境,因此需要重要的后处理来产生一致的检测
MultiGrasp. 我们的工作在设计上与Redmon等人[27]的抓取检测工作相似。我们的边界盒预测的网格方法是基于多重抓取系统的回归到抓取。然而,抓取检测比目标检测要简单得多。多重抓取只需要预测包含一个对象的图像的单个可抓取区域。它不需要估计物体的大小、位置或边界,或预测它的类别,只需要找到一个适合抓取的区域。YOLO预测图像中多个类的多个对象的边界框和类概率。
4. Experiments
首先,我们将YOLO与其他2007实时检测系统进行比较。为了理解YOLO和R-CNN变体之间的差异,我们探索了YOLO和FastR-CNN在VOC2007上所犯的错误,这是R-CNN[14]中性能最高的版本之一。基于不同的误差分布,我们表明YOLO可以用于重构fast R-CNN检测,并减少背景假阳性的误差,显著提高性能。我们还展示了VOC2012的结果,并将mAP与目前最先进的方法进行了比较。最后,我们证明了YOLO在两个艺术品数据集上比其他检测器更能更好地推广到新的领域。
4.1. Comparison to Other Real-Time Systems
在目标检测方面的许多研究工作都集中在使标准检测管道的快速运行上。[5][38][31][14][17][28]然而,只有Sadeghi等人实际上产生了一个实时运行(每秒30帧或更高)[31]的检测系统。我们将YOLO与在30Hz或100Hz运行的DPM的GPU实现进行比较。虽然其他的努力没有达到实时的里程碑,但我们也比较了它们的相对地图和速度,以检查在目标检测系统中可用的准确性-性能权衡。
FastYOLO是PASCAL上最快的目标检测方法;据我们所知,它是现存最快的目标探测器。对于52.7%的mAP,它的准确性是之前的实时检测工作的两倍多。YOLO将mAP推高到63.4%,同时仍然保持实时性能。
我们还使用VGG-16训练YOLO。这个模型比YOLO更准确,但也要慢得多。与其他依赖于VGG-16的检测系统相比,它是有用的,但由于它比实时速度慢,本文的其余部分集中在我们更快的模型上。
最快的DPM有效地加速了DPM,而没有增加多少mAP,但它仍然错过了2倍[38]的实时性能。与神经网络方法相比,DPM的检测精度相对较低的限制。
R-CNN减去R用静态边界框建议[20]替换选择性搜索。虽然它比R-CNN快得多,但它仍然不能实时性,而且由于没有好的建议而需要显著的准确性。

Fset R-CNN加快了R-CNN的分类阶段,但它仍然依赖于选择性搜索,每张图像可能需要大约2秒钟来生成边界框建议。因此,它有很高的mAP,但在0.5fps时,它仍然远非实时的。
最近的Faster R-CNN用神经网络取代了选择性搜索,提出了边界框,类似于Szegedy等人。[8]在我们的测试中,他们最精确的模型达到7帧/秒,而一个更小,更不精确的模型运行在18帧/秒。Faster R-CNN的VGG-16版本要高10mAP,但也比YOLO慢6倍。费格斯Faster R-CNN只比YOLO慢2.5倍,但也不准确。
4.2. VOC 2007 Error Analysis
为了进一步检查YOLO和最先进的探测器之间的差异,我们查看了2007年VOC检测结果的详细细分。我们将YOLO和Fast RCNN进行了比较,因为FastR-CNN是帕斯卡尔上性能最高的探测器之一,而且它的检测结果是公开的。
我们使用Hoiem等人[19]的方法和工具。在测试时,对于每个类别,我们查看该类别的前N个预测。每个预测要么是正确的,要么是根据错误的类型进行分类的:


图4显示了所有20个类中每种错误类型的平均细分情况。
YOLO正在努力地正确地定位对象。定位错误占YOLO的错误比所有其他来源加起来还要多。Fast R-CNN产生的定位错误更少,但背景错误更多。13.6%的顶级检测结果是假阳性,不包含任何物体。fast R-CNN预测背景检测的可能性几乎是YOLO的3倍。
4.3. Combining Fast R-CNN and YOLO
YOLO所犯的背景错误比FastR-CNN要少得多。通过使用YOLO来消除来自Fast R-CNN的背景检测,我们得到了一个显著的性能提高。对于R-CNN预测的每一个边界框,我们检查一下YOLO是否预测了一个类似的边界框。如果是这样,我们会根据YOLO预测的概率和两个box之间的重叠来提高预测。
最佳的FastR-CNN模型在VOC2007测试集上的mAP为71.8%mAP。当与YOLO结合时,其mAP增加了3.2%至75.0%。我们还尝试了将顶级的FastR-CNN模型与其他几个版本的FastR-CNN相结合。这些集合产生的mAP在0.3到0.6%之间略有增加,详见表2。

来自YOLO的提升并不仅仅是模型集成的副产品,因为结合不同版本的FastR-CNN几乎没有什么好处。相反,正是因为YOLO在测试时犯了不同类型的错误,所以它如此有效地提高了fast R-CNN的性能。
不幸的是,这种组合并没有受益于YOLO的速度,因为我们单独运行每个模型,然后组合结果。然而,由于YOLO是如此之快,与fast R-CNN相比,它并没有增加任何显著的计算时间。

4.4. VOC 2012 Results
在VOC2012测试集上,YOLO的mAP得分为57.9%。这低于目前的技术水平,更接近于使用VGG-16的原始R-CNN,见表3。与最接近的竞争对手相比,我们的系统在小物体上苦苦挣扎。在奶瓶、绵羊和电视/监视器等类别中,YOLO的得分比R-CNN或功能编辑低8-10%。然而,在其他类别,如猫和训练YOLO获得更高的性能。
我们的组合fast R-CNN+YOLO模型是性能最高的检测方法之一。FastR-CNN比与YOLO的结合提高了2.3%,使其在公共排行榜上上升了5位。
4.5. Generalizability: Person Detection in Artwork
目标检测的学术数据集从相同的分布中提取训练和测试数据。在实际应用程序中,很难预测所有可能的用例,而且测试数据可能与系统在[3]之前所看到的有所不同。我们将YOLO与毕加索数据集[12]和人物艺术数据集[3]上的其他检测系统进行了比较,这两个数据集用于测试艺术品上的人的检测。
图5显示了YOLO与其他检测方法的性能比较。作为参考,我们给出了VOC2007检测AP,其中所有模型都只对VOC2007数据进行了训练。毕加索的模型接受VOC2012的训练,而在人-艺术方面,他们接受VOC2010的训练。
R-CNN对VOC2007有很高的AP。然而,当R-CNN应用于艺术作品时,效果会显著下降。R-CNN使用选择性搜索的边界框建议,以调整自然图像。R-CNN中的分类器步骤只看到较小的区域,需要很好的建议。
DPM在应用于艺术品时,可以很好地保持其AP。先前的工作理论认为DPM表现良好,因为它具有强大的物体形状和布局的空间模型。虽然DPM不像R-CNN那样退化,但它从一个较低的AP开始。
YOLO在VOC2007上具有良好的性能,其AP在艺术品上的降解程度低于其他方法。与DPM一样,YOLO也对对象的大小和形状以及对象之间的关系以及对象通常出现的位置进行建模。艺术品和自然图像在像素水平上非常不同,但在物体的大小和形状上是相似的,因此YOLO仍然可以预测好的边界框和检测。
5. Real-Time Detection In The Wild
YOLO是一种快速、准确的目标探测器,是一种理想的计算机视觉应用工具。我们将YOLO连接到一个网络摄像头上,并验证它是否保持了实时性能,包括从摄像头中获取图像和显示检测结果的时间。


由此产生的系统是交互式的和参与性的。当YOLO单独处理图像时,当它连接到网络摄像头时,它就像一个跟踪系统,在物体移动和外观变化时检测它们。该系统的演示版本和源代码可以在我们的项目网站:http://pjreddie.com/yolo/上找到。
6. Conclusion
我们介绍了目标检测的统一模型YOLO。我们的模型构造简单,可以直接在完整的图像上进行训练。与基于分类器的方法不同,YOLO是在一个直接对应于检测性能的损失函数上进行训练的,并且整个模型是联合训练的。
FastYOLO是文献中最快的通用目标探测器,YOLO推动了最先进的实时目标检测。YOLO还可以很好地推广到新领域,使其成为依赖快速、健壮的对象检测的应用程序。
边栏推荐
- js中数组排序的方法有哪些
- 【无标题】
- dataframe整理:datetime格式分拆;删除特定行;分组整合。
- Leetcode · daily question · sword finger offer | | 115. reconstruction sequence · topological sorting
- Win11 hide input method status bar method
- CMD CPM command summary
- Canvas - ECG design and how to clean the canvas
- Etcdv3 actual combat (III) -prevkv description and related operations
- STM32——PWM学习笔记
- canvas——绘制图片——动图制作
猜你喜欢

Execution process behind shell commands

LeetCode·每日一题·919.完全二叉树插入器·层次遍历·BFS

Win11隐藏输入法状态栏方法

LeetCode·每日一题·剑指 Offer || 115.重建序列·拓扑排序

Remember SQL optimization once
![[sql] case expression](/img/05/1bbb0b5099443f7ce5f5511703477e.png)
[sql] case expression

图解LeetCode——5. 最长回文子串(难度:中等)

"Xiao Deng's view" the value brought by Siem to enterprises (II)
![[noip2001 popularization group] packing problem](/img/b7/1310b3e68d0ee016465fc069315af6.png)
[noip2001 popularization group] packing problem

如何用U盘进行装机?
随机推荐
dataframe整理:datetime格式分拆;删除特定行;分组整合。
tf.truncated_normal()用法
Understand preloading and lazy loading, and learn slow animation
STM32——DMA笔记
堆内存与栈内存的区别?
在混合云中管理数据库:八个关键注意事项
Quick check of OGC WebGIS common service standards (wms/wmts/tms/wfs)
STM32 - DMA notes
Design of golang lottery system
事半功倍:学会WEB性能测试用例设计模型
els 回调函数、退出消息
els 修改光标、修改图标
What's good for starting a business with 10000 yuan? Is we media OK?
Cloud native guide what is cloud native infrastructure
LeetCode·每日一题·919.完全二叉树插入器·层次遍历·BFS
"Xiao Deng's view" the value brought by Siem to enterprises (II)
持续交付和DevOps是一对好基友
els 窗口设置、WM_CREATE、WM_PAINT
LeetCode·83双周赛·6128.最好的扑克手牌·模拟
Digital commerce cloud DMS dealer management system solution: DMS system realizes business Omni channel and sales data collection