论文阅读《Deep Learning in Video Multi-Object Tracking: A Survey》-程序员宅基地

技术标签: 多目标跟踪  

时间:2019年11月

作者机构:萨勒诺大学&格拉纳达大学等

链接:https://arxiv.org/abs/1907.12740


《DEEP LEARNING IN VIDEO MULTI -OBJECT TRACKING :   A SURVEY》


1.Introduction

mot的output

应用领域:video surveillance 、autonomous cars 、action recognition 、 crowd behaviour analysis

大多数性能高的MOT算法都使用了DL,以帮助解决MOT中存在问题的子任务

 main contributions

1.提供了最新的、最全的 DL in MOT 工作总结  single-camera videos  2D image

2.总结了MOT 算法的四个步骤,并描述了每个步骤中采用的不同DL模型和方法,包括使用它们的算法环境。
表格中还总结了每个分析工作所使用的技术,以及指向可用源代码的链接,以作为将来研究的快速参考。

3.我们在最常用的MOT数据集上收集实验结果,以在其中进行数值比较,并确定性能最佳的算法的主要趋势

 MOT: algorithms, metrics and datasets

many MOT algorithms formulate the task as an assignment problem

许多MOT数据集提供了一组标准的检测结果,算法可以使用这些检测结果(从而可以跳过检测阶段),以便专门比较其性能与关联算法的质量,因为检测器的性能会严重影响跟踪结果 。

MOT algorithms 可以分为 batch and online methods

尽管文献中介绍的方法种类繁多,但是大多数MOT算法都共享以下部分或全部步骤(汇总于图2):

  • Detection stage
  •  Feature extraction/motion prediction stage: 一种或多种特征提取算法分析检测和/或轨迹,以提取外观,运动和/或交互特征。 可选地,运动预测器预测每个跟踪目标的下一个位置;
  • Affinity stage: 特征和运动预测用于计算成对的检测和/轨迹之间的相似度/距离得分;
  • Association stage:

 Metrics

为了提供可以公平地测试和比较算法的通用实验设置,事实上已经建立了一组度量标准,并且几乎在所有工作中都使用了它们。
最相关的是CLEAR MOT指标[20]和最近的ID指标[21]。这些指标集旨在反映测试模型的整体性能,并指出每个模型可能存在的缺点

Classical metrics

这些指标由Wu和Nevatia [19]定义,强调了MOT算法可能产生的不同类型的错误

CLEAR MOT metrics

不能与假设相关联的GT边界框被视为假阴性(FN),而不能与真实边界框相关联的假设被标记为假阳性(FP)。另外,每次GT跟踪中断并在以后恢复时,都计为fragmentation,而在跟踪持续时间内每次跟踪的GT对象ID发生错误更改时,都将被视为ID switch。然后,计算出的简单指标如下:

The ground truth bounding boxes that cannot be associated with a hypothesis are counted as false negatives (FN),

the hypotheses that cannot be associated with a real bounding box are marked as false positives (FP).

Also, every time a ground truth object tracking is interrupted and later resumed is counted as a fragmentation,while every time a tracked ground truth object ID is incorrectly changed during the tracking duration is counted as an ID switch.

MOTA   MPTP

 Benchmark datasets

MOTChallenge

MOT15

 它包含从旧数据集中收集的一系列22个视频(用于训练的11个视频和用于测试的11个视频),具有各种特征(固定和移动摄像机,不同的环境和光照条件等) 总共包含11283个不同分辨率的帧,其中1221个不同ID和101345个框。 提供的检测是使用ACF检测器获得的[24]

MOT16/17

MOT16集合中总共包含14个视频(用于训练的7个视频和用于测试的7个视频),使用基于可变形部分的模型(DPM)v5获得的公开检测结果[25,26],与其他模型相比,发现它们在检测问题上具有更好的性能。这次数据集包括11235帧,具有1342个id和292733个框。

MOT17数据集包含与MOT16相同的视频,但具有更准确的GT,每个视频具有三组检测:一组来自Faster R-CNN [4],一组来自DPM,一组来自比例相关池检测器(SDP) [27]。然后,必须证明跟踪器具有足够的通用性和鲁棒性,以使用不同的检测质量获得良好的性能。

MOT19

最近,CVPR 2019 Tracking Challenge的数据集的新版本已经发布,其中包含8个视频(用于训练的4个,用于测试的4个)的行人密度非常高,在最拥挤的视频中,平均每帧最多可容纳245位行人。数据集包含13410帧,具有6869条轨迹,总共2259143个bbox,比以前的数据集多得多。

 

Deep learning in MOT

DL in detection step

 Faster R-CNN

 SSD

 

 DL in feature extraction and motion prediction

 Autoencoders: first usage of DL in a MOT pipeline

 CNNs as visual feature extractors

SORT算法[35]后来经过深化改进,新版本称为DeepSORT [41]。 该模型合并了通过自定义残差CNN提取的视觉信息[92]。 CNN提供了具有128个特征作为输出的归一化向量,并将这些向量之间的余弦距离添加到SORT中使用的affinity scores中。 网络结构图如图4所示。
实验表明,这种修改克服了SORT算法的主要缺点,即高的IDswitches。

 

Mahmoudi等人[42]结合了CNN提取的视觉特征以及动态和位置特征,然后通过匈牙利算法解决了关联问题;

在[93]中,ImageNet上预训练的ResNet-50 [3]被用作视觉特征提取器;

在[94]中可以找到有关如何使用CNN区分行人的详尽解释。在他们的模型中,Bae等人将CNN的输出与形状和运动模型相结合,并为每对检测计算出 Affinity 得分; 然后通过匈牙利算法解决了关联问题。


Ullah等人[95]应用了现成的GoogLeNet [2]版本进行特征提取

Fang等人[96]选择了Inception CNN [97]的隐藏卷积层的输出作为视觉特征。
Fu等[98]采用DeepSORT特征提取器,并使用判别相关滤波器测量特征的相关性。然后,将匹配分数与时空关系分数相结合,最终分数在高斯混合概率假设密度过滤器中用作可能性[99]。
[100]中的作者在ILSVRC CLS-LOC [101]数据集上使用了经过微调的GoogLeNet,用于行人识别。
在[70]中,作者重用了基于CNN的检测器提取的视觉特征,并使用反向最近邻技术进行了关联[102]。
Sheng等人[103]利用GoogLeNet的卷积部分提取外观特征,使用它们之间的余弦距离来计算检测对之间的亲和力得分,并将该信息与运动预测合并,以计算整体亲和力,从而图问题中的边缘成本。
Chen等[104]利用ResNet的卷积部分建立了一个自定义模型,在卷积顶部堆叠了一个LSTM单元,以便同时计算相似性评分和边界框回归。

Ran等[52]提出了将经典CNN用于视觉特征提取和将AlphaPose CNN用于姿势估计的组合。然后,将这两个网络的输出与Tracklet信息历史记录一起输入LSTM模型中,以计算相似性,如第3.3.1节中所述。

 

Siamese networks

另一个经常出现的想法是使用损失函数来训练CNN,这些函数结合了来自不同图像的信息,以学习最能区分不同对象示例的一组特征。 这些网络通常称为Siamese网络(该体系结构的示例如图5所示)。

 

Kim等 [106]提出了一个使用对比损失进行训练的Siamese网络[107]。 网络拍摄了两个图像,它们的IoU得分和面积比作为输入,并产生了对比损失作为输出。 训练好网络后,删除计算对比损失的层,最后一层用作输入图像的特征向量。随后通过组合特征向量之间的欧式距离,IoU分数和边界框之间的面积比来计算相似度分数。
使用自定义的贪婪算法解决了关联步骤。

Wang等[108]还提出了一个Siamese网络,该网络采用了两个图像补丁并计算了它们之间的相似度得分。计算测试时间的得分,比较网络为两个图像提取的视觉特征,包括时间上的受约束的信息。用作相似性评分的距离是带有权重矩阵的马氏距离,该距离也由模型学习。

 

 More complex approaches for visual feature extraction

还提出了更复杂的方法。 Lu等人[59]将检测步骤中由SSD预测的类别作为特征,并将其与通过RoI池提取的图像描述符结合起来用于每次检测。之后,将提取的特征用作LSTM网络的输入,该网络学习了计算检测的关联特征。这些特征随后通过它们之间的余弦距离被用于亲和力计算。

LSTM有时用于运动预测,以便从数据中学习更复杂的非线性运动模型。在图6中,显示了LSTM通常用于运动预测的方案。

 

Sadeghian等人展示了使用循环网络的一个例子 [123],他提出了一个模型,该模型采用三种不同的RNN来为每次检测计算各种类型的特征,而不仅仅是运动特征。第一个RNN用于提取外观特征。该RNN的输入是VGG CNN [1]提取的视觉特征向量,该向量经过专门训练以进行人的重新识别。第二个RNN是经过LSTM训练的LSTM,可以预测每个跟踪对象的运动模型。在这种情况下,LSTM的输出是每个对象的速度矢量。训练了最后一个RNN,以学习场景中不同对象之间的相互作用,因为某些对象的位置可能会受到影响通过周围物品的行为。然后由另一个LSTM以其他RNN的信息作为输入执行亲和力计算。

 

 CNNs for motion prediction: correlation filters

相关滤波跟踪的基本思想就是,设计一个滤波模板,利用该模板与目标候选区域做相关运算,最大输出响应的位置即为当前帧的目标位置。

Wang等人[128]研究了相关滤波器[129]的使用,其输出是被跟踪物体的响应图。该响应图是对下一帧中对象新位置的估计。 将该亲和力进一步与使用Lucas-Kanade算法[130]计算的光流亲和力,通过卡尔曼滤波器计算的运动亲和力和比例亲和力(由涉及边界框的高度和宽度的比率表示)相结合。将两次检测之间的亲和力计算为先前得分的线性组合。还有一个步骤,即使用SVM分类器消除错误的检测,并丢失检测处理,为此任务使用先前步骤中计算出的响应图。 如果某个对象被错误丢失并重新识别,则该步骤可以修复错误并重新连接损坏的轨迹。

在[61]中,相关滤波器也被用来预测物体在后续帧中的位置。filter接收CNN提取的外观特征作为输入,之前使用PCA对其进行了缩小,并生成了下一帧中对象的预测位置的响应图作为输出。预测位置随后用于计算相似度得分,将预测和检测之间的IoU与响应图的APCE得分相结合。构建成本矩阵后,计算帧之间每对检测的得分,便可以使用匈牙利算法解决分配问题。

 

 DL in affinity computation

尽管许多作品通过对CNN提取的特征使用某种距离度量来计算tracklets和检测(或tracklets和其他tracklets)之间的亲和力,但也有一些算法使用深度学习模型直接输出亲和力分数,而无需指定显式 特征之间的距离度量。 本节重点介绍此类作品。

 Recurrent neural networks and LSTMs

 Siamese LSTMs

 Bidirectional LSTMs

 Uses of LSTMs in MHT frameworks

 

 DL in Association/Tracking step

有些工作虽然不如其他步骤那么多,但它们已经使用深度学习模型来改善由经典算法(例如匈牙利算法)执行的关联过程,或管理轨道状态(例如,通过决定开始或终止 轨道)

 

 Analysis and comparisons

本节介绍了在一个MOTChallenge数据集上测试过其算法的所有作品之间的比较。我们将仅关注MOTChallenge数据集,因为对于其他数据集,没有足够的相关论文使用深度学习来进行有意义的分析。

根据前面介绍的分类,显示了每个组合数据集/检测源的表。表2和表3分别​​显示了使用公共和私人检测得出的关于MOT15的结果;

表4和5在MOT16上执行相同的操作;最后,表6显示了MOT17的结果,MOT17目前仅发布了使用公共检测的算法。
每个表分别将在线方法和批处理方法分组,并且对于每个组,按年份对论文进行排序,如果论文来自同一年,则按MOTA分数递增,因为这是MOTChallenge数据集中考虑的主要指标【18】。
如果一件作品使用相同的检测集和相同的操作模式在同一数据集上呈现多个结果,则我们仅显示具有最高MOTA的结果。每个指标的最佳性能是以粗体突出显示,而在以相同模式(批处理/在线)运行的论文中,最佳性能用下划线标出。
重要的是要注意,尽管对Hz指标的比较可能并不可靠,因为通常仅针对算法的跟踪部分报告性能,而没有检测步骤,有时甚至不包括深度学习模型的运行时,这通常是本次调查提出的算法中计算量最大的部分;此外,这些算法在多种不同的硬件上运行。

 

 

 

 

 

 

Discussion of the results

不出所料,每个数据集上性能最佳的算法都使用私有检测,这证实了检测质量在跟踪器的整体性能中占主导地位的事实:MOTA为56.5%,MOT15为42.3%,MOT16为71.0%,49.3%。
此外,在MOT16和MOT17上,即使在线方法逐渐接近批处理算法的性能,批处理算法也略胜于在线算法。实际上,在MOT15上,使用深度学习的报道最好的算法以在线方式运行。但是,这可能是更加关注开发在线方法的结果,这是MOT深度学习研究社区的趋势。
如我们所见,在线方法之间的一个普遍问题是MOTA得分未反映出的问题是碎片数量较多,发生在表7中。发生这种情况的原因是,当发生遮挡或缺少检测时,在线算法无法向前看, 在视频中,重新识别丢失的目标并插补轨迹的缺失部分[124、89、94]。我们在图8中可以看到一个轨迹示例,该轨迹由在线方法MOTDT [118]分割,而通过批处理方法eHAF16 [103]可以正确跟踪。

 

图8:在线方法在咬合过程中产生碎片的例子。 上图:在线算法MOTDT [118]的跟踪结果。下图:批处理算法eHAF16 [103]的跟踪结果。 从左到右分别显示了两种方法的MOT16-08视频的第50、60和70帧。 仅显示相关框,以避免混乱。如图所示,虽然某些在线算法能够在遮挡之后重新识别丢失的目标,但是当目标不可见时,它们通常无法跟踪它们,这会导致碎片化。另一方面,批处理方法能够通过推断给定的过去和未来信息来确定目标的位置,从而重建碎片化的轨迹。

 

值得注意的另一点是,由于MOTA分数基本上是FP,FN和ID switch的标准化总和,并且FN的数量通常至少比FP高一个数量级,并且比ID switch高至少两个数量级。设法最大程度地减少FN数量的方法是获得最佳性能的方法
因此,尽管使用公共检测在减少FN方面有有限的改进,但最有效的方法仍是构建和训练自定义检测器

为了避免此问题,许多新算法都包括解决该问题的新策略。实际上,尽管执行插值的基本方法能够在遮挡期间恢复丢失的框,但这仍然不足以检测甚至单个检测都无法覆盖的目标,在MOT15和MOT16上已显示它们占总数的18% [14]。
例如,Sheng等人[103]提出的eHAF16算法采用了超像素提取算法来补充公开提供的检测,实际上能够显着减少MOT17上的假阴性数量,达到数据集上最高的MOTA得分。
MOTDT算法[118]却使用R-FCN将丢失的检测与新候选物集成在一起,并且能够在MOT17的在线算法中达到最佳的MOTA和最低的假阴性数。
AP-RCNN算法[145]还能够通过采用粒子滤波算法并仅依靠检测来初始化新目标并恢复丢失的目标,从而避免了由于缺少检测而导致的问题。
[150]中提出的算法还通过设计深度预测网络来减少FN,其目的是学习物体的运动模型。在测试时,网络能够预测它们在后续帧中的位置,从而减少由于缺少检测而产生的假阴性的数量。实际上,就此指标而言,它是MOT16中在线方法中的第二好的方法。

必须针对亲和力网络的训练策略进行重要观察。
如[93]所述,使用GT轨迹训练网络以预测亲和力可能会产生次优的结果,因为在测试时,这些网络将暴露于不同的数据分布,其中包含可能包含丢失/错误检测的嘈杂轨迹。 实际上,许多算法都选择使用实际检测[96]或通过将噪声和错误手动添加到GT轨迹[93、115]来训练网络,尽管这有时会减慢训练过程,但并不总是可行的[60]。 。

Best approaches in the four MOT steps

(1)谈到私有检测,表格表明,性能最好的检测器目前是Faster R-CNN及其变体。实际上,[38]中提出的使用改良的Faster R-CNN的算法在MOT16的在线方法中一直保持着最高的排名,而且其他许多性能最高的MOT16算法也采用了相同的检测方法 。相反,采用SSD检测器的算法(例如[60]和[61]中提出的算法)的性能往往较差。不过,SSD的一大优势在于它的速度更快:尽管有大量的在线方法,但是在MOT管道中使用深度学习技术的主要问题仍然是获取实时预测的困难,这使得这种算法在大多数实际的在线场景中不可用。

(2)关于特征提取,在三个考虑的数据集上所有表现最好的方法都使用了CNN来提取外观特征,其中GoogLeNet是最常见的一种。
不利用外观的方法(用深层方法或经典方法提取)往往表现较差。但是,视觉特征还不够:许多最佳算法还采用其他类型的特征来计算亲和力,尤其是运动的亲和力。实际上,通常使用LSTM和Kalman滤波器之类的算法来预测目标在下一帧中的位置,这通常有助于提高关联质量。各种贝叶斯滤波器算法(例如粒子滤波器和假设密度滤波器)也用于预测目标运动,并且它们受益于深度模型的使用[158、145、98]。但是,即使与非视觉功能一起使用,外观仍然在提高算法的整体性能[123,158]中起着主要作用尤其是在避免ID切换[83]或长时间遮挡后重新识别目标[ 41]。在后一种情况下,简单的运动预测器不起作用,因为线性运动假设很容易被破坏,正如Zhou等人[55]所指出的。

(3)虽然深度学习在检测和特征提取中起着重要作用,但是使用深度网络来学习亲和力函数的普及性却不高,并且尚未被证明对于好的MOT算法是必不可少的。实际上,许多算法都依赖于各种深度和非深度特征的手工距离度量的组合。然而,一些工作已经证明了使用亲和力网络如何产生性能最佳的算法[148、145、51、96],其方法从使用连体CNN到递归神经网络不等。特别是,Ma等人[148]提出的经过改进的sam网络能够产生可靠的相似性度量,这些度量有助于遮挡后的人重新识别,并使算法在MOT16上达到最高的MOTA得分。身体部位信息的整合对于Tang等人[51]提出的StackNetPose CNN也是至关重要的:它是一种关注机制,可以使网络专注于输入图像的相关部位,从而产生更准确的相似性度量,使用私有检测,该算法能够在MOT16上达到最高性能。

相反,很少有作品探索使用深度学习模型来指导关联过程,这可能是未来方法的有趣研究方向。

 

Other trends in top-performing algorithms

在当前排名最高的方法中,可以发现其他一些趋势。 例如,一种在线方法的成功方法是使用单对象跟踪算法,并对其进行适当修改以解决MOT任务。实际上,这3个数据集上一些性能最高的在线算法已经采用了SOT跟踪器,并添加了深度学习技术以从遮挡中恢复或刷新目标模型[159、115、123]。有趣的是,据我们所知,尚未使用任何经过修改的SOT算法对私人检测进行跟踪。正如我们已经观察到的,使用私有检测可以减少完全未被发现的目标的数量。由于一旦确定目标,SOT跟踪器通常不需要检测就可以继续跟踪目标,因此未发现目标的减少可能意味着丢失的轨道数量少得多,从而可以提高跟踪器的整体性能。因此,将SOT跟踪器应用于私人检测可能是一个很好的研究方向,以试图进一步改善MOTChallenge数据集的结果。
批处理方法还可以利用SOT跟踪器查看过去的帧,以便在检测器首次识别目标之前恢复错过的检测。但是,基于SOT的MOT跟踪器有时仍易于跟踪漂移并产生更多的IDsw。

例如,KCF16算法[159]在公开检测的MOT16在线方法中达到最高的MOTA评分时,由于跟踪器的漂移,它仍然会产生相对较高的开关数量,如图10所示。此外,基于SOT的MOT算法必须注意不要跟踪虚假的轨迹,这是由高质量检测器预测的不可避免的假阳性检测次数过多而导致的,因为帧太多,因为这可能抵消FN数量的减少 。当前的方法[159,115]仍然倾向于使用检测重叠来了解轨迹从长远来看是对还是错,但是应该研究更好的解决方案,以避免完全依赖检测。

尽管许多方法通过将任务表述为图形优化问题来执行关联,但是批处理方法尤其可以从中受益,因为批处理方法可以对其进行全局优化。 例如,在CNN计算的相似性的帮助下,最小成本提升的多割问题已在MOT16上达到了最高性能[148,51],而在两种顶级MOT17方法上使用了异构关联图融合和相关聚类[103,155]。

最后,可以注意到边界框的准确性从根本上影响了算法的最终性能。
实际上,在MOT15上排名靠前的跟踪器[89]仅通过使用深度RL代理对先前的最新算法[89]的输出执行包围盒回归步骤即可获得相对较高的MOTA分数。
开发一个有效的包围盒回归器以结合到未来的MOT算法中可能是一个有趣的研究方向,尚未进行深入探讨。
此外,批处理方法不是依靠单个框架来固定框,而是可以在发生遮挡时将错误的目标围起来,而批处理方法还可以尝试利用将来和过去的目标外观来更准确地使右边的边界框回归 目标。

 

 Conclusion and future directions

四个主要步骤来表征通用的MOT管道:检测,特征提取,相似性计算,关联
尽管大多数方法都集中在前两种方法上,但是也存在深度学习以学习亲和力函数的一些应用,但是只有极少数的方法使用深度学习直接指导关联算法。所提出的方法之间可以发现一些共同点:

检测质量很重要:假阴性的数量仍占MOTA得分的主导。虽然深度学习在这方面允许采用公共检测的算法有所改进,但使用高质量检测仍然是减少假阴性的最有效方法。 因此,在检测步骤中仔细使用深度学习可以大大提高跟踪算法的性能;

CNN在特征提取中必不可少:外观特征的使用对于良好的跟踪器也是至关重要的,而CNN在提取它们方面特别有效。而且,强大的跟踪器往往将它们与运动特征结合使用,可以使用LSTM,卡尔曼滤波器或其他贝叶斯滤波器来计算运动特征;

SOT跟踪器和全局图形优化工作:借助深度学习,使SOT跟踪器适应MOT任务,最近产生了性能良好的在线跟踪器; 相反,批处理方法受益于将深度模型集成到全局图优化算法中。

 

promising future research directions :

1. 研究更多的策略来减轻检测错误:尽管现代检测器不断取得越来越好的性能,但在复杂的场景(如密集的行人跟踪)中,它们仍然易于产生大量的假阴性和假阳性。一些算法提供了解决方案,通过将其与从其他来源(例如,超像素[103],R-FCN [118],粒子过滤器[145]等)提取的信息集成在一起,从而减少了对检测的排他性依赖,但是进一步策略需要去研究 ;

2.应用DL跟踪不同的目标:大多数基于DL的MOT算法都专注于行人跟踪。由于不同类型的目标面临着不同的挑战,因此应研究使用深度网络在跟踪车辆,动物或其他物体方面可能的改进;

3.应用DL指导关联:使用深度学习指导关联算法并直接执行跟踪仍处于起步阶段:需要更多的研究以了解深度算法在此步骤中是否也有用;

4.将SOT跟踪器与私人检测结合起来:减少丢失的轨迹数量,从而减少假阴性的一种可能方法是将SOT跟踪器与私人检测结合使用,尤其是在批处理环境中,可以恢复过去错过的检测。

5.调研边界框回归:已证明使用边界框回归是获得较高MOTA分数的有希望的步骤,但尚未对此进行详细探讨,应研究进一步的改进,例如使用过去和将来的信息来指导回归;

6.研究跟踪后处理:在批处理环境中,可以对跟踪器的输出应用校正算法以提高其性能。Babaee等人已经证明了这一点。 [132],这是在现有算法的基础上应用遮挡处理的,由Jiang等人提出。 [152]具有上述包围盒回归步骤。可以对跟踪器的结果应用更复杂的处理,以进一步改善结果。

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TYUT_xiaoming/article/details/103588364

智能推荐

js-选项卡原理_选项卡js原理-程序员宅基地

文章浏览阅读90次。【代码】js-选项卡原理。_选项卡js原理

设计模式-原型模式(Prototype)-程序员宅基地

文章浏览阅读67次。原型模式是一种对象创建型模式,它采用复制原型对象的方法来创建对象的实例。它创建的实例,具有与原型一样的数据结构和值分为深度克隆和浅度克隆。浅度克隆:克隆对象的值类型(基本数据类型),克隆引用类型的地址;深度克隆:克隆对象的值类型,引用类型的对象也复制一份副本。UML图:具体代码:浅度复制:import java.util.List;/*..._prototype 设计模式

个性化政府云的探索-程序员宅基地

文章浏览阅读59次。入选国内首批云计算服务创新发展试点城市的北京、上海、深圳、杭州和无锡起到了很好的示范作用,不仅促进了当地产业的升级换代,而且为国内其他城市发展云计算产业提供了很好的借鉴。据了解,目前国内至少有20个城市确定将云计算作为重点发展的产业。这势必会形成新一轮的云计算基础设施建设的**。由于云计算基础设施建设具有投资规模大,运维成本高,投资回收周期长,地域辐射性强等诸多特点,各地在建...

STM32问题集之BOOT0和BOOT1的作用_stm32boot0和boot1作用-程序员宅基地

文章浏览阅读9.4k次,点赞2次,收藏20次。一、功能及目的 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。BOOT1=x BOOT0=0 // 从用户闪存启动,这是正常的工作模式。BOOT1=0 BOOT0=1 // 从系统存储器启动,这种模式启动的程序_stm32boot0和boot1作用

C语言函数递归调用-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏22次。C语言函数递归调用_c语言函数递归调用

明日方舟抽卡模拟器wiki_明日方舟bilibili服-明日方舟bilibili服下载-程序员宅基地

文章浏览阅读410次。明日方舟bilibili服是一款天灾驾到战斗热血的创新二次元废土风塔防手游,精妙的二次元纸片人设计,为宅友们源源不断更新超多的纸片人老婆老公们,玩家将扮演废土正义一方“罗德岛”中的指挥官,与你身边的感染者们并肩作战。与同类塔防手游与众不同的几点,首先你可以在这抽卡轻松获得稀有,同时也可以在战斗体系和敌军走位机制看到不同。明日方舟bilibili服设定:1、起因不明并四处肆虐的天灾,席卷过的土地上出..._明日方舟抽卡模拟器

随便推点

Maven上传Jar到私服报错:ReasonPhrase: Repository version policy: SNAPSHOT does not allow version: xxx_repository version policy snapshot does not all-程序员宅基地

文章浏览阅读437次。Maven上传Jar到私服报错:ReasonPhrase: Repository version policy: SNAPSHOT does not allow version: xxx_repository version policy snapshot does not all

斐波那契数列、素数、质数和猴子吃桃问题_斐波那契日-程序员宅基地

文章浏览阅读1.2k次。斐波那契数列(Fibonacci Sequence)是由如下形式的一系列数字组成的:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …上述数字序列中反映出来的规律,就是下一个数字是该数字前面两个紧邻数字的和,具体如下所示:示例:比如上述斐波那契数列中的最后两个数,可以推导出34后面的数为21+34=55下面是一个更长一些的斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584,_斐波那契日

PHP必会面试题_//该层循环用来控制每轮 冒出一个数 需要比较的次数-程序员宅基地

文章浏览阅读363次。PHP必会面试题1. 基础篇1. 用 PHP 打印出前一天的时间格式是 2017-12-28 22:21:21? //>>1.当前时间减去一天的时间,然后再格式化echo date('Y-m-d H:i:s',time()-3600*24);//>>2.使用strtotime,可以将任何字符串时间转换成时间戳,仅针对英文echo date('Y-m-d H:i:s',str..._//该层循环用来控制每轮 冒出一个数 需要比较的次数

windows用mingw(g++)编译opencv,opencv_contrib,并install安装_opencv mingw contrib-程序员宅基地

文章浏览阅读1.3k次,点赞26次,收藏26次。windows下用mingw编译opencv貌似不支持cuda,选cuda会报错,我无法解决,所以没选cuda,下面两种编译方式支持。打开cmake gui程序,在下面两个框中分别输入opencv的源文件和编译目录,build-mingw为你创建的目录,可自定义命名。1、如果已经安装Qt,则Qt自带mingw编译器,从Qt安装目录找到编译器所在目录即可。1、如果已经安装Qt,则Qt自带cmake,从Qt安装目录找到cmake所在目录即可。2、若未安装Qt,则安装Mingw即可,参考我的另外一篇文章。_opencv mingw contrib

5个高质量简历模板网站,免费、免费、免费_hoso模板官网-程序员宅基地

文章浏览阅读10w+次,点赞42次,收藏309次。今天给大家推荐5个好用且免费的简历模板网站,简洁美观,非常值得收藏!1、菜鸟图库https://www.sucai999.com/search/word/0_242_0.html?v=NTYxMjky网站主要以设计类素材为主,办公类素材也很多,简历模板大部个偏简约风,各种版式都有,而且经常会更新。最重要的是全部都能免费下载。2、个人简历网https://www.gerenjianli.com/moban/这是一个专门提供简历模板的网站,里面有超多模板个类,找起来非常方便,风格也很多样,无须注册就能免费下载,_hoso模板官网

通过 TikTok 联盟提高销售额的 6 个步骤_tiktok联盟-程序员宅基地

文章浏览阅读142次。你听说过吗?该计划可让您以推广您的产品并在成功销售时支付佣金。它提供了新的营销渠道,使您的产品呈现在更广泛的受众面前并提高品牌知名度。此外,TikTok Shop联盟可以是一种经济高效的产品或服务营销方式。您只需在有人购买时付费,因此不存在在无效广告上浪费金钱的风险。这些诱人的好处是否足以让您想要开始您的TikTok Shop联盟活动?如果是这样,本指南适合您。_tiktok联盟