干货 | 基于深度学习的目标检测算法综述

Original url:

https://cloud.tencent.com/developer/article/1344469

 

精品文章,第一时间送达

来源:美图云视觉技术部

转自:美团技术,未经允许不得二次转载

目标检测(Object Detection)是计算机视觉领域的基本任务之一,学术界已有将近二十年的研究历史。近些年随着深度学习技术的火热发展,目标检测算法也从基于手工特征的传统算法转向了基于深度神经网络的检测技术。从最初 2013 年提出的 R-CNN、OverFeat,到后面的 Fast/Faster R-CNN、SSD、YOLO 系列,再到 2018 年最近的 Pelee。短短不到五年时间,基于深度学习的目标检测技术,在网络结构上,从 two stage 到 one stage,从 bottom-up only 到 Top-Down,从 single scale network 到 feature pyramid network,从面向 PC 端到面向手机端,都涌现出许多好的算法技术,这些算法在开放目标检测数据集上的检测效果和性能都很出色。

基于深度学习的目标检测算法综述分为三部分:

1. Two/One stage 算法改进。这部分将主要总结在 two/one stage 经典网络上改进的系列论文,包括 Faster R-CNN、YOLO、SSD 等经典论文的升级版本。

2. 解决方案。这部分我们归纳总结了目标检测的常见问题和近期论文提出的解决方案。

3. 扩展应用、综述。这部分我们会介绍检测算法的扩展和其他综述类论文。

图 1

基于深度学习的目标检测算法综述(一)介绍了 Two/One stage 算法改进,基于深度学习的目标检测算法综述(二)我们归纳总结了目标检测的常见问题和近期论文提出的解决方案。本篇文章是基于深度学习的目标检测算法综述的最后部分。在这里,我们会介绍目标检测算法的扩展应用,每个方向给出 1 篇代表论文,同时,最后给出 google 发表在 CVPR2017 上的目标检测算法效果和性能评估论文。

目标检测在很多计算机视觉领域中已经有了很多成熟的应用,如人脸检测、行人检测、图像检索和视频监控等。而目标检测算法不仅可以应用在普通物体的分类和定位上,在近年也有了很多扩展。我们会在后文中介绍其中三篇论文,如 logo 检测论文“Scalable Object Detection for Stylized Objects”、通过改进的 Top-Down 结构提升识别和分割效果的论文“Path Aggregation Network for Instance Segmentation”以及把目标检测思想用于视频分段的“Rethinking the Faster R-CNN Architecture for Temporal Action Localization”。

论文"Mimicking Very Efficient Network for Object Detection"借鉴知识蒸馏思想,在训练过程中用训练好的大网络作为监督网络指导小网络的参数学习,实现从零开始训练目标检测网络。

本综述中的最后部分我们还介绍了 Google 发表于 CVPR2017 的平衡速度和准确率的论文"Speed/accuracy trade-offs for modern convolutional object detectors",该文用非常大量详实的实验探讨了常用目标检测算法及其各参数设置对于目标检测 speed 和 accuracy 的影响,对如何平衡速度和准确率提出了建议。

logo 检测

Scalable Object Detection for Stylized Objects

论文链接:arxiv.org/abs/1711.09822 开源代码:/ 录用信息:/

论文目标

论文旨在解决对 logo 的检测问题。作者将 e2e 的检测模型分为两步,1. 使用 Single Shot Multibox Detector(文中使用 YOLO v2)检测可能的 logo 位置;2. 使用Triplet Loss训练的 deep image-similarity network 模型对 logo 进行检索。

核心思想

Logo 检测和普通目标检测的区别,以及分成两步检测的原因有:

1. Logo 种类可能很多,如果用 Softmax 分类几千种物体效果会很差。随着数量增多,识别效果会很快变差,由于每个分类器不仅要识别是哪个物体而且要识别 Proposal 中是否包含待检测目标。

2. Logo 更新很快,如果用普通目标检测,添加新数据后需要重新训练。

3. Logo 在图片中一般都有固定的字体、特性,而且相对普通物体更醒目易于观察。

4. Logo 相比普通物体和背景的关系不大。作者用人脸检测来做示例,人脸和 logo 检测类似,都是大量实例检测。每张人脸都是不同的,但是如果用目标检测来区分每个人脸是不现实的。只能先做人脸检测,然后再做人脸检索。

图 2

如上图所示,本文使用的网络为 2-layer 网络。Layer1 是 YOLOv2,通过识别 Logo 来提取框,然后 crop+resize 为 224*224。 作者提出使用 Single Shot Multibox Detector 而非 proposal-based 网络的原因为 logo 检测需要使用物体的全局信息。Layer2 是训练检索网络。训练为典型的 triplet loss 训练过程:使用两组相同 logo,一组不同 logo,通过缩小类内 loss、增大类间 loss 来促进收敛网络。Layer2 网络通过 CNN 提取特征然后经过 L2 归一化和 FC 层,最终提取 feature vector。检索数据集的准备过程在训练完成后进行,使用特定 logo 经过特征提取和仿射变换操作,制作数据集。最终使用 feature vector 的余弦距离来进行实例检索。

图 3

算法效果

由于这篇论文针对的是logo检测的改进,所以测评都是在logo数据集上。Flickrlogos-32为开源的logo数据集,MSR1k和Synth9K为作者自己造的logo数据集。

图 4

实例分割

Path Aggregation Network for Instance Segmentation

论文链接:arxiv.org/abs/1803.01534 开源代码:/ 录用信息:CVPR2018

论文目标

我们在综述的第二部分提到,FPN 是目标检测 Top-Down 结构的一种常见形式。这篇论文通过改进主干网络 FPN 的结构,缩短了从低层特征到高层特征之间的路径,进一步减少了定位信息流动的难度,从而同时提升了目标检测和实例分割的效果。

核心思想

网络结构如下图。

图 5:PANet 的框架

PANet 的框架如图 5 所示,Bottom-up Path 用于增强 Low-layer 的信息传播。Adaptive Feature Pooling 允许每个候选区域可以获取所有特征层次的信息,以此用于预测。添加了一个互补分支用于预测 mask。

PANet 的创新点可以总结如下:

a.创建 Bottom-up 增强路径缩短信息路径,利用 Low-level 特征中存储的精确定位信号,提升特征金字塔架构。

b.创建 Adaptive Feature Pooling 合并所有特征层次上每个 proposal 的特征信息,避免任意分配结果。

c.使用小型 Fc 层补充 mask 预测,捕获每个 proposal 的不同视图,以此与原始的 Mask R-CNN 互补。通过融合这两个视图,增加信息多样性,能更好的预测 mask。

具体如下:

1. Bottom-up Path Augmentation

高层的神经元主要响应整个物体,其他神经元更倾向于响应局部纹理信息。该网络结构通过传播 low-level 的强响应,增强了整个特征结构的定位能力。因为对边缘和实例部分的强响应对于精确定位实例是强指向标。因此论文使用横向连接将低层和高层的信息连接起来。使用 bottom-up path 将底层信息传递到决策层只需要不到十层(如图 5绿色虚线所示),但是 FPN则 需要通过 backbone,走完整个 ResNet 基础网络,需要走一百多层。具体的 Augmented Bottom-up Structure 如图 6 所示。

图 6: Augmented Bottom-up Structure

网络结构在 FPN{P2,P3,P4,P5}后接{N2,N3,N4,N5}(图 5 a,b 所示),其中 N2 就是 P2 没有经过任何操作。如图 6 所示,每个模块通过横向连接将较高分辨率的 Ni 和低分辨率的 Pi+1 横向连接,产生 Ni+1。

2. Adaptive Feature Pooling

FPN 的 proposals 根据其大小分配给不同的特征层次。这样尺寸小的 proposal 被分配给 Low-level,而尺寸大的分配给 High-level,但这可能会产生非最优结果。例如两个只相差 10 个像素的 proposals 会被分给不同的特征层次,但实际上它们很相似。因此,特征的重要性与其所属的特征层次并不是强相关。高层次的特征由更大的感受野产生,获取了更丰富的语义信息。小型 proposals 获取这些特征可以更好地使用语义信息做预测。另一方面,低层次特征有许多细节和定位信息。基于此,论文提出对每个 proposal 池化所有层次的特征,然后融合它们做预测。其实现过程如图 7所示。

将每个候选区域映射到不同的特征层次,用 RoIAlign 池化不同层次的特征网格,进一步融合不同层次的特征网格(逐像素求最大或者求和)。

图 7: Adaptive Feature Pooling Structure

3. Fully-connected Fusion

Fc 与 FCN 有不同的属性,由于局部感受野和共享参数,FCN 有像素级预测,而 Fc 对不同空间的预测均是通过一组可变参数实现,因此它的位置敏感度较高。另外 Fc 预测不同空间位置均通过全部 proposals 的全局信息实现,这对于区分不同实例和识别属于同一对象的分离部分很有效。因此考虑将这两种层的预测结果融合可以达到更好的预测。其实现如图 8 所示。

图 8: Fully-connected Fusion Structure

算法效果

在实例分割方面,使用相同的初始化模型,PANet 比 Mask R-CNN 好了将近 3 个点;在目标检测方面,使用 renet50 当基础网络的 PANet 比 coco2016 年的冠军高了 0.9%,它的 backbone 是 2×ResNet-101+ 3×Inception-ResNet-v2 和推理 tricks。

图 9: PANet 在 COCO 上的结果图,其中上侧为分割的结果对比表,下侧为检测的结果对比表

目标检测用于视频分段

Rethinking the Faster R-CNN Architecture for Temporal Action Localization

论文链接:arxiv.org/abs/1804.07667 开源代码:/ 录用信息:CVPR2018

论文目标

本文借鉴了目标检测经典算法 Faster R-CNN 的思想,实现了对视频动作的定位与识别:

1. 通过 multi-tower network 和 dilated temporal convolutions 方法,提高了动作定位精度(Temporal Action Localization)。

2. 通过扩展候选片段感受野,提高视频中的关键动作的识别效果(Temporal context)。

核心思想

1.借鉴了 Faster R-CNN 的思想,将目标检测的思想从空间域转化为时间域。采用类似 RPN 层的结构对视频中动作做初步的定位与识别,然后采用类似 RCNN 的结构对动作实现精确定位及分类。

2. 由于视频时长从 1s 到 200s 不等,跨度非常大。本文通过 multi-tower network 和 dilated temporal convolutions 解决了视频动作分布时间跨度较大难以定位的问题,同时通过扩展生成候选片段和动作分类的感受野,更有效的利用了视频上下文时序信息提升了动作识别效果。

算法概述

Temporal Action Localization

即:给定一段未分割的长视频,算法需要检测视频中的行为开始时间、结束时间及其类别。

action recognition 与 temporal action Localization 之间的关系同 image classfication 与 object detection 之间的关系非常像。本文主要为了解决 Temporal Action Localization 问题,借鉴了 Faster R-CNN 的结构。

图 10

与目标检测类似,它包含两个阶段:

1.生成动作候选区域

给定一组帧序列,通常通过二维或者三维卷积网络提取出一组一维特征图。之后,将该特征图传输给一维网络(类似 RPN 层,Segment Proposal Network),返回一组候选片段。

2.对候选区域分类

接着,对于每个候选片段,本论文计算动作类别的概率,并进一步对片段边界进行回归。在这一步,首先使用一维的 SoIPooling(时间维度上做 Pooling,类似空间维度的 RoIPooling),接着使用 DNN 分类器来实现。

Segment Proposal Network:

文中作者采用了 multi-tower 架构。每个 anchor 大小都有一个具备对齐后的感受野的相关网络。

图 11

可以理解为对于尺度 Feature map 做相应 Pooling 或者空洞卷积(dilated temporal convolutions),作者经过实验后认为空洞卷积效果更好,时序定位更加准确。

如何有效利用时序上下文(temporal context)

作者在生成动作候选区域及动作种类识别时,认为动作前后信息对精确定位和动作分类有很大的意义。故强制将前面一段时间和后面一段时间加入候选区。如图:

图 12

虽然候选区是中间的 S 区域,但是它依然会强制把前 s/2 和后 s/2 的区域加入 proposal。文中表示: 推理过程中以 0.7 为阈值的 IoU 的 proposals 做 NMS。在训练过程中阈值大于 0.7 选为正样本,小于 0.3 为负样本。用 Adam 优化器,学习率 0.0001。

算法效果

图 13

可以看到该方法在提取的片段较少时,有最好的表现。其他方法在提取片段较多时才会有较好表现。

从零训练目标检测网络

Mimicking Very Efficient Network for Object Detection

论文链接: http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimicking_Very_Efficient_CVPR_2017_paper.pdf 开源代码:/ 录用信息:CVPR2017

论文目标

这篇论文与本综述(一)中介绍的 DSOD 的目标一致,都是解决如何有效地「从 0 开始训练检测网络」的问题。不同的是,DSOD 旨在提出一种可以实现从头训练的检测网络结构。而本文借鉴知识蒸馏思想,在训练过程中,用训练好的大网络作为监督网络指导小网络的参数学习,小网络无需用预训练模型初始化。训练得到的小网络模型用于测试。

核心思想

知识蒸馏,用大网络监督小网络的学习,常被用于解决分类任务中的模型压缩和加速问题。mimic 论文作者将此思想应用于检测网络的学习任务。

论文以 faster rcnn 为例,介绍了论文的网络结构和训练过程。

图 14

上图示意了训练时的网络结构,上半部分是要训练的目标网络,通常是一个精简的小网络,后面加上 RPN 网络;下半部分是大网络,大网络用已经训练好的大检测网络模型进行参数初始化。论文将训练过程中的监督信息分成两部分:来自大网络的监督信息 mimic supervision 和训练数据的标注信息 ground-truth supervision。

作者认为检测过程分为两个部分 feature extractor 和 feature decoder,feature 对于大网络和小网络分别作为 basenet 的 faster rcnn,二者的区别仅在于 feature extractor 不同(分别是大网络和小网络),而在提取到特征后的 feature decoder 是一致的。因此,论文将来自大网络的 mimic supervision 应用于 feature extractor 部分,而将 ground-truth supervision 应用于 feature decoder 部分。

论文将训练过程分为两个阶段,下面分别介绍这两个阶段的参数学习方法:

1.第一个阶段应用 mimic supervision 学习图中上半部分的目标小网络;小网络随机初始化参数,大网络用已经训练好的大检测网络模型进行参数初始化。训练过程中,固定大网络参数,使用以下 loss 指导小网络进行参数学习。

其中,u^i 为大网络的 RPN 输出的第 i 个候选框的特征,这个特征是从候选框的对用的 feature map 中直接提取得到的;v^i 是小网络的 RPN 对应的第i个候选框的特征;变换操作 r() 是用于将 v^i 变换到与 u^i 相同的维度;m_i 是第 i 个候选框特征的维度。

最小化以上 loss 的过程也就是将大网络的特征提取能力迁移到小网络的过程。

2.第二个阶段应用 ground-truth supervision 进行检测网络(detection network)的学习和 RPN 网络的精修。对于 faster rcnn,检测网络跟 RPN 网络共享部分特征,对共享的特征层,使用第一阶段学到的参数初始化;对检测网络新增加的卷积层,随机初始化参数。

论文指出,第二阶段如果只用 ground-truth supervision 精修,会损害第一阶段学到的网络参数。因此,作者提出使用 softmax 层之前的那层特征(classification logits)进行 mimic supervision。即上面公式中的 u^i 和 v^i 分别为大小网络的第 i 个 proposal 的 classfication logits,这个阶段的 loss 计算包括两部分 L_m(W)和 L_gt(W),如下所示,其中 L_gt(W)代表分类和位置预测误差。

以上介绍了大网络到小网络的特征提取和检测能力迁移。除此以外,本论文思想还可用于接受大分别率输入图像的网络的检测能力迁移至小分辨率输入图像的网络,提升小分辨率输入图像的检测效果。如下图所示,基本思想即在最后一个 feature map 输出让 RPN 网络之前添加一个 decovolution 层增加 feature map 的分辨率,训练时使用支持大分辨率输入的网络进行监督。

图 15

算法效果

下表中 MR_-2 为 Miss Rate on False Positive Per Image,数值越小代表效果越好。其他细节可参见原论文。

图 16

调研速度和准确率平衡的综述

Speed/accuracy trade-offs for modern convolutional object detectors

论文链接:arxiv.org/abs/1611.10012 开源代码:/ 录用信息:CVPR2017

论文目标

通过大量实验对比三种主流检测算法在各个情况下的表现。

核心思想

在我们日常的视觉任务中往往有一个大家都会有一个经验,就是当提高一个网络的复杂度能得到更好的效果,而去精简一个网络的同时准确度自然会有所损失。更进一步来讲,相比于分类任务,目标检测任务在实际应用的时候更容易受到计算复杂度,内存要求等因素的限制。本文用非常大量详实的实验探讨了最常用的一些目标检测算法以及其中各个参数的设置对于目标检测的 speed 和 accuracy 的影响,以及对于如何以较好的性价比平衡速度和准确率给予了自己的结论。

看这篇论文的作者参与数量就能感觉到做完这些大量的实验,尤其是在像 coco 这样很大的数据集上,是非常耗时且花费精力的。在这里感谢作者的工作为没有资源和时间去做这些试验的人给出了很好的指导性的建议。我认为这些建议很多时候在实用的角度来讲贡献一点也不亚于提出一个新的方法。

首先先说一下试验的背景:用不同的深度学习框架,不同的网络初始化方法,不同的数据增强方法等等训练相同的算法,其性能和最终准确率都会有所不同。为了去掉这些因素的影响,作者统一在 tensorflow 的框架上实现了 Faster R-CNN、SSD、RFCN 算法,并以此为基础进行试验,保证了试验的公平性,其中有部分的参数初始化方法以及优化方法略有不同,在论文中均作了说明。同时为了保证基础特征的公平性和丰富程度,作者分别在 VGG16、ResNet-101、Mobilenet、Inception-V2、Inception-V3、Inception-ResNet 上进行试验,使得结果具有更高的普适性,同时也能从基础网络的角度看到了不同网络对于不同算法准确率和速度的影响。作者还对比了不同图像输入尺寸在以上这些网络上的表现。最后作者还对比了各个算法不同的预选框的设置方法,某些网络特定层的特征分辨率的不同等等设置对于网络的影响。可以说作者整个的试验设计非常系统,非常严谨。通过作者的试验结果,可以从各个角度对于当前目标检测的网络选择和参数设置有一个很直观的认识。

整个论文有非常多的试验结果和结论,如果对于哪方面感兴趣的读者建议还是去仔细查看原论文的相应部分的图表和论述。本文这里就不一一拿出来讨论,只抽出一部分试验结果进行描述。

图 17

首先整体对比一下不同的网络接入三种检测算法后的表现,其中每种网络和算法的组合对又根据不同的图像输入尺寸,stride size 画出了多个点。可以看到 ResNet101 和 Inception-ResNet101(在输入尺寸等比较小的情况下)是性价比比较高的网络,而 Inceptionv2-3 网络表现平平。也许像 Inceptionv3 这种网络是对于分类任务高度定制的,多尺寸的卷积和的融合影响了物体的位置信息的表达,不太适合于目标检测任务。

而检测算法方面,Faster R-CNN 系列在 mAP 上稳稳胜出。但是速度相较于 SSD R-FCN 来讲也明显慢一些,但是通过一些参数的设置 FASTER R-CNN 也可以达到很快的速度。

作者对比了输入不同图像尺寸对网络的影响,可以看到,输入更大的图片确实可以明显的提升 mAP 但是也降低了网络的速度。作者还统计了不同算法和网络对于不同尺寸的目标预测的表现。结论是 SSD 对于小物体表现非常差,远低于其他算法。而在大物体上的表现几乎一样,甚至在一些网络上表现更好。所以如果检测任务当中大部分目标均为大物体,SSD 绝对是一个非常好的选择,可以达到有快又准的效果。但是如果存在大量的小物体,为了提高召回率还是建议选择两阶段的检测算法比较好。具体试验结果请查看原始论文。

图 18

上图的实验结论非常超出我的认知,图中对比了不同网络在不同算法上的表现。可以看到 SSD 算法对于基础网络的特征非常不敏感,从结构、计算复杂度、深度差别很大的网络接入 SSD 后 mAP 的变化非常不明显。而两阶段的检测器,对于不同的网络 mAP 变化非常大。当基础网络复杂度比较低的时候 SSD 算法的性价比要更高一些。而另一方面增大 SSD 基础网络的复杂度,收益也相当有限,无法达到二阶段算法的准确率。可能 SSD 算法的主要瓶颈在于算法结构上,所以提高送入 feature 的质量并没有特别改善 SSD 的表现。

还有一个很有指导意义的结论是当要优化算法的速度的时候,减少 proposal 的数量是一个很好的选择。可以很大程度的加快网络的速度同时精度受到的影响比较小。一个例子是当 Faster R-CNN+Inception-ResNet 组合时,只用 50 个 proposals 与用 300 个 proposals 相比,mAP 相差无几,但是速度提升了三倍之多,这里原文中有更详细的讨论。

结论

图 19

本文通过大量实验对比了影响目标检测算法速度和准确性各项因素的作用,可以帮助从业者在实际应用中选择更合适的目标检测算法。

(完)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark Streaming 和 Flink 都是流处理框架,但在一些方面有所不同。 1. 数据处理模型 Spark Streaming 基于批处理模型,将流数据分成一批批进行处理。而 Flink 则是基于流处理模型,可以实时处理数据流。 2. 窗口处理 Spark Streaming 的窗口处理是基于时间的,即将一段时间内的数据作为一个窗口进行处理。而 Flink 的窗口处理可以基于时间和数据量,可以更加灵活地进行窗口处理。 3. 状态管理 Spark Streaming 的状态管理是基于 RDD 的,需要将状态存储在内存中。而 Flink 的状态管理是基于内存和磁盘的,可以更加灵活地管理状态。 4. 容错性 Flink 的容错性比 Spark Streaming 更加强大,可以在节点故障时快速恢复,而 Spark Streaming 则需要重新计算整个批次的数据。 总的来说,Flink 在流处理方面更加强大和灵活,而 Spark Streaming 则更适合批处理和数据仓库等场景。 ### 回答2: Spark Streaming 和 Flink 都是流处理框架,它们都支持低延迟的流处理和高吞吐量的批处理。但是,它们在处理数据流的方式和性能上有许多不同之处。下面是它们的详细比较: 1. 处理模型 Spark Streaming 采用离散化流处理模型(DPM),将长周期的数据流划分为离散化的小批量,每个批次的数据被存储在 RDD 中进行处理,因此 Spark Streaming 具有较好的容错性和可靠性。而 Flink 采用连续流处理模型(CPM),能够在其流处理过程中进行事件时间处理和状态管理,因此 Flink 更适合处理需要精确时间戳和状态管理的应用场景。 2. 数据延迟 Spark Streaming 在处理数据流时会有一定的延迟,主要是由于对数据进行缓存和离散化处理的原因。而 Flink 的数据延迟比 Spark Streaming 更低,因为 Flink 的数据处理和计算过程是实时进行的,不需要缓存和离散化处理。 3. 机器资源和负载均衡 Spark Streaming 采用了 Spark 的机器资源调度和负载均衡机制,它们之间具有相同的容错和资源管理特性。而 Flink 使用 Yarn 和 Mesos 等分布式计算框架进行机器资源调度和负载均衡,因此 Flink 在大规模集群上的性能表现更好。 4. 数据窗口处理 Spark Streaming 提供了滑动、翻转和窗口操作等灵活的数据窗口处理功能,可以使用户更好地控制数据处理的逻辑。而 Flink 也提供了滚动窗口和滑动窗口处理功能,但相对于 Spark Streaming 更加灵活,可以在事件时间和处理时间上进行窗口处理,并且支持增量聚合和全量聚合两种方式。 5. 集成生态系统 Spark Streaming 作为 Apache Spark 的一部分,可以充分利用 Spark 的分布式计算和批处理生态系统,并且支持许多不同类型的数据源,包括Kafka、Flume和HDFS等。而 Flink 提供了完整的流处理生态系统,包括流SQL查询、流机器学习和流图形处理等功能,能够灵活地适应不同的业务场景。 总之,Spark Streaming 和 Flink 都是出色的流处理框架,在不同的场景下都能够发挥出很好的性能。选择哪种框架取决于实际需求和业务场景。 ### 回答3: Spark Streaming和Flink都是流处理引擎,但它们的设计和实现方式有所不同。在下面的对比中,我们将比较这两种流处理引擎的主要特点和差异。 1. 处理模型 Spark Streaming采用离散流处理模型,即将数据按时间间隔分割成一批一批数据进行处理。这种方式可以使得Spark Streaming具有高吞吐量和低延迟,但也会导致数据处理的粒度比较粗,难以应对大量实时事件的高吞吐量。 相比之下,Flink采用连续流处理模型,即数据的处理是连续的、实时的。与Spark Streaming不同,Flink的流处理引擎能够应对各种不同的实时场景。Flink的实时流处理能力更强,因此在某些特定的场景下,它的性能可能比Spark Streaming更好。 2. 窗口计算 Spark Streaming内置了许多的窗口计算支持,如滑动窗口、滚动窗口,但支持的窗口计算的灵活性较低,只适合于一些简单的窗口计算。而Flink的窗口计算支持非常灵活,可以支持任意窗口大小或滑动跨度。 3. 数据库支持 在处理大数据时,存储和读取数据是非常重要的。Spark Streaming通常使用HDFS作为其数据存储底层的系统。而Flink支持许多不同的数据存储形式,包括HDFS,以及许多其他开源和商业的数据存储,如Kafka、Cassandra和Elasticsearch等。 4. 处理性能 Spark Streaming的性能比Flink慢一些,尤其是在特定的情况下,例如在处理高吞吐量的数据时,在某些情况下可能受制于分批处理的架构。Flink通过其流处理模型和不同的调度器和优化器来支持更高效的实时数据处理。 5. 生态系统 Spark有着庞大的生态系统,具有成熟的ML库、图处理库、SQL框架等等。而Flink的生态系统相对较小,但它正在不断地发展壮大。 6. 规模性 Spark Streaming适用于规模小且不太复杂的项目。而Flink可扩展性更好,适用于更大、更复杂的项目。Flink也可以处理无限制的数据流。 综上所述,Spark Streaming和Flink都是流处理引擎,它们有各自的优缺点。在选择使用哪一个流处理引擎时,需要根据实际业务场景和需求进行选择。如果你的业务场景较为复杂,需要处理海量数据并且需要比较灵活的窗口计算支持,那么Flink可能是更好的选择;如果你只需要简单的流处理和一些通用的窗口计算,Spark Streaming是更为简单的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值