Video Self-Supervised Pertraining(Video SSL)

这篇具有很好参考价值的文章主要介绍了Video Self-Supervised Pertraining(Video SSL)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Video Self-Supervised learning (SSL):Video Model 在大规模 unabled dataset 上 Pertraining,然后在 labeled dataset 上 Finetuning:

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

Video Pertraining Model Downstream Evaluation

Video Pertraining Downstream Evaluation将预训练的Video Model经过Zero-Shot(不再训练)、Fine-tuning(需要再训练)、Linear probing(需要再训练).通常在以下Task上进行测试评估:

  • Action Recognition:视频分类任务,在Video Model后面接一个Linear层预测input_video的class_label,评价指标(accuracy, precision, recall)
  • Temporal Action Segmentation:视频时序定位任务/视频动作分割,检测视频中某个动作的start 和 end 时间,评价指标(frame accuracy (FA))
  • Temporal Action Step Localization:视频时序动作步骤定位,检测视频中哪些片段属于哪些动作的哪些步骤。对于每一帧,评价指标(recall=落在真实时间间隔内的step分配,除以视频中的总step)
  • Video Retrieval:视频检索任务,寻找与给定视频相似或接近重复的视频。评价指标(retrieval, recall, similarity measures)
    Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
  • Text-to-Video Retrieval:文本检索视频任务,将文本查询作为输入并返回相应的匹配视频。评价指标(retrieval, recall, similarity measures)
  • Video Captioning:视频描述任务,生成准确描述视频内容的文本标题。评价指标(BLEU, METEOR, Rouge-L Lin,CIDEr)
    Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

Video Dataset

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

Self-Supervised Learning Approaches

https://www.bilibili.com/video/BV1sr4y1s7QH/?spm_id_from=333.337.search-card.all.click&vd_source=b2549fdee562c700f2b1f3f49065201b

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

  1. pretext tasks:设定预定义任务进行训练。在pretext tasks中,对回放速度进行分类在下游动作识别上表现最好,这种方法比帧排序表现更好,因为它有多种方法可以通过修改速度来使用时间信号,而帧顺序具有有限的排列。
  2. generative learning:常用的生成方法包括生成对抗网络、掩码自动编码器和多模态掩码建模。其中一些方法使用一系列先前的帧来生成下一个帧序列。其他方法使用模型使用一个或多个模态的未屏蔽输入来生成掩码输入。效果最佳的是使用掩码建模的方法。
  3. contrastive learning:为锚剪辑生成有很多方法正样本和负样本,包括视图增强、时间增强、时空增强、聚类。对比学习是所有基于动作的下游任务中性能最好的学习目标。
  4. cross-modal agreement:具有跨模态一致性的多模态域的对比学习。这些方法既提高了动作识别任务的性能,又扩展到其他任务,如使用文本和音频模式的文本到视频检索和动作分割。

1. Pretext Learning 预定义任务

设置预定义任务的类似主要有4种:

  1. Appearance Statistics Prediction 外观统计预测:对视频的空间和时间元素进行数据增强,要求模型对相关统计数据进行预测;
  2. Playback Speed 回放速度预测:改变视频的播放速度,要求模型预测速度或重建原始速度;
  3. Temporal Order 时序分类预测:洗牌帧,其中任务包括预测奇数和/或将帧排序到原始顺序;
  4. Video Jigsaw 视频拼图顺序预测:洗牌帧/视频的patch,并要求模型预测所选择的排列。

通常Playback speed任务训练的模型效果最好:

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

1.1 Appearance Statistics Prediction 外观统计预测

预测或分类视频的Appearance augmentation:颜色color、旋转rotation、随机噪声random noise等。如给定通过旋转增强的帧,并要求模型预测所使用的旋转程度。

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

1.2 Playback Speed 回放速度预测

对倍速视频的播放速度进行分类:通过改变video的播放速度,在时间维度上应用增强,并要求模型预测该变化的幅度(对加减速分类,或以原视频速度重建)。

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

1.3 Temporal Order 时序分类预测

在时间顺序分类中,每个视频V被分成t帧的片段,训练模型来分类输入片段的顺序是否正确,或训练模型来完成正确的片段排序。

每一组剪辑都包含一个顺序正确的剪辑,其余的剪辑通过打乱顺序来修改。例如,(t2, t1, t3)是错误的,而(t1, t2, t3)是正确的。

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

1.4 Video Jigsaw 视频拼图顺序预测

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

Image Jigsaw任务:首先将图像分割成网格,并将这些网格中的像素提取到孤立的patch中。然后对这些patch进行洗牌,模型必须预测patch的正确顺序。

Video Jigsaw任务:将每帧分割成2D网格(2D tensor) 或 将多个帧分割成3D网格(3D tensor),提取为patch。然后对这些patch进行洗牌,并要求模型预测正确的顺序或用于洗牌的排列。

2. Generative Approaches 生成任务

  1. Adversarial and Reconstruction 对抗与重建:重建改变的输入/和/或噪声;
  2. Frame Prediction 帧预测:利用前一帧生成序列中的后一帧;
  3. Masked Autoencoders 掩码自编码器MAE:生成Mask的pixel,可以是帧内的patch,也可以是整个帧;
  4. Multimodal Masked Modeling 多模态掩码建模:生成视频、文本和/或音频tokens序列中Mask的输入。

使用Transformer生成Mask的输入(MAE)作为其预训练任务的方法是表现最好的:

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

由于多模态掩模建模(MM)使用文本,这些生成方法还可以在标题生成上进行评估:

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

2.1 Adversarial and Reconstruction 对抗与重建

一个生成器generator从正态分布中获取随机噪声来生成图像。然后将生成的图像和原始图像传递给判别器discriminator,判别器discriminator对真实(原始)和虚假(生成)进行分类。
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

2.2 Frame Prediction 帧预测

前一帧被送到编解码器encoder-decoder以生成序列中的下一帧。然后将原始帧和下一帧预测传递给判别器,判别器对真实(原始)或虚假(生成)进行分类。
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

2.3 Masked Autoencoders 掩码自编码器MAE

随机屏蔽视频中的时空片段,并学习一个Autoencoder以像素重建它们。
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

2.4 Multimodal Masked Modeling 多模态掩码建模

使用了视觉、文本和/或音频tokens的组合来进行Mask建模,以学习不同模态的联合空间。
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

使用具有多种模态的掩码建模的方法将可视数据转换为离散的tokens,从而允许在序列中组合Text tokens和Visual tokens。在本例中,Text tokens和Visual tokens被随机mask,并要求模型“填补空白”。

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

3. Contrastive Learning 对比学习

正样本对拉近,而将负样本对拉开。如从视频中的锚帧和同一视频中不同时间的帧(例如同一剪辑中的相邻帧)生成正样本对。在锚帧和其他视频的帧之间创建成一组负样本对。

产生正样本对和负样本对的方法是不同对比学习方法之间的主要区别因素:
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

对比学习目标函数:

  • Cross-entropy:交叉熵与二元分类器一起用于确定一对是否“好”。
  • Discriminators:用于返回正对较高、负对较低的分数。最常用的对比训练目标是NCE的变体,起源于NLP领域。
  • NCE loss:NCE loss取一对正样本和一组负样本作为输入,使正样本对之间的距离最小,负样本对之间的距离最大。

3.1 View Augmentation 视图增强

在视频中,这些增强应用于片段中的每一帧,关注通过各种转换来改变外观。这些包括随机调整大小裁剪,通道下降,随机颜色抖动,随机灰色和/或随机旋转。正样本对是原始clip的增强版本,而负样本对是来自其他视频的clip。
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
对于一个data sample(图中为video clips),对他们进行两种random data augmentation(如剪切,反转,高斯模糊,颜色抖动等)。经过augmented的samples放入一个encoder的network中来提取feature。

最终的contrastive loss形式如下,其目的就是尽可能地**pull(拉近)同一个sample的feature在feature space中的距离(positive samples),而push(远离)**来自不同sample的feature在feature space中的距离(negative samples)。这种contrastive loss也被称为infoNCE loss,最早在CPC中被提出。
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

infoNCE loss基于instance discrimination假设:random augmentation并不会改变sample的semantic,因此我们希望模型提取同一个sample经过augmentation后的feature作为一组,而其他所有不同sample提取到的feature作为另一组。

CoCLR NIPS2020

Motivation

但是这种instance discrimination的方法却存在问题。对于上图中的两个video clips,上面的是一个人在打高尔夫,下面的是一个人在扔铅球。这种两种截然不同的运动,我们当然是希望它们学习到的representation在feature space中越远越好。
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
但是对于下图中的两个video clips,它们都是一个人在打高尔夫,这两个sample的semantic语义是非常相近的。但是按照instance discrimination的思想,由于它们是从不同视频裁剪出的clip,属于不同sample,所以在使用infoNCE loss时也会尽量的pull它们的feature distance,这显然是不合理的。

因此:我们希望通过semantic对学习到的representation进行分组,而不是通过instance进行分组。 以下图中两个video clips为例,两个clips都是关于高尔夫。但是不管是前景还是background都非常不同,所以这两个instance在RGB space中的distance是非常远的(dissimilar)。但是当我们以optical flow的view来看着两个实例时,由于两个人的动作都是在挥打高尔夫,所以这两个instance在flow的feature space里面是非常接近的(similar)。同样的,也有可能有这样的两个instance,它们在flow space中dissimilar,但是在RGB space中是similar的。

Method

利用这种特性,作者设计了一种协同训练网络(包括两个网络),通过交替使用一个 space/view 来帮助另一个 space/view 来共同训练两个网络。

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
具体来说,作者设计了两个网络,一个用于RBG space,另一个用于optical flow space。整个训练是一个two stages的过程:

1.初始化:两个网络都首先通过InfoNCE loss的方法在各自的space中进行pre-trained初始化;

2.交叉采样:通过InfoNCE loss的方法进行train之后,RGB和Flow网络相较random初始化的网络都获得了更强学习representation的能力。之后交替利用一个网络来为另一个网络进行positive pairs的采样:首先获取optical flow的sample,将它送到Flow网络中提取特征,然后将该特征和其他flow sample提取的feature进行比较,选取在flow space中top K个相近的instances(这里K为超参数)。然后我们将这K个在flow feature相近的sample作为positive pairs用于RGB网络中对比学习的更新,更新的loss函数被称为MIL-NCE(multi-instance contrastive loss)。

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

3.2 Temporal Augmentation 时序增强

通过修改时间顺序或clip间隔的开始和结束点来生成正负样本对:相同视频的不同时序构成正样本对,不同视频的相同/不同时序构成负样本对。

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

3.3 Spatio-Temporal Augmentation 时空增强

Spatio-Temporal Augmentation是View和Temporal变化的结合:相同视频的空间数据增强和时序变化构成正样本对,不同视频的空间数据增强和时序变化构成负样本对。

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

3.4 Clustering 聚类

伪标签生成使用聚类分配作为具有多种模态的伪标签。一个信号的聚类分配用作另一个信号的伪标签。

局部聚集关注latent空间,其中每个样本的“近”邻居被拉得更近,“背景”邻居被推得更远

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

4. Cross-Modal Agreement 跨模态增强

正样本是来自相同clip的音频或文本样本,负样本是来自其他clip的音频、视频和/或文本。跨模态的正负样本对:如<video, text><video, audio><video, text, audio>

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

4.1 Video and Text

Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

4.2 Video and Audio

4.3 Video, Text and Audio

5. Tracking 追踪

第一帧是有segment mask的,后面的帧要跟踪这个mask。或者完全没用第一帧的mask,分割每帧的object。
Video Self-Supervised Pertraining(Video SSL),人工智能,机器学习,深度学习

Limitations and Future Work

  1. 在评估下游动作识别时,大多数方法使用UCF101和HMDB51缺乏时间特异性的数据集。更多的方法应该额外评估时间特定数据集,如Something-Something数据集Goyal等人[2017]。特定于不同的类别,未来的工作应该试图了解跨模态方法之间的性能差异和鲁棒性。
  2. 从自我监督的角度来看,视频对象检测、动作检测、视频语义分割等没有得到很好的探索,是一个很有前途的未来方向。
  3. 结合来自多个类别的学习目标,如掩模建模和对比学习,可以进一步探索。
  4. 长期视频表示。目前的方法主要集中在小的视频片段上,不学习长视频的表示。在大多数方法中,视频被分成剪辑作为其预处理的一部分。虽然这些方法使用视频的时间元素来改进学习,但它们缺乏长期的时间学习。此外,已经证明像MSRVTT和UCF101这样的数据集不一定需要时间学习。未来的研究应该评估更多与时间相关的数据集,如SomethingSomethingSomething 和NExT-QA 。未来的研究还应该尝试从整个长视频中学习表示,专注于时间学习,而不仅仅是使用时间信号作为训练的指导。
  5. 简单的端到端方法。大多数方法使用预训练的主干作为特征提取的依赖。例如,许多多模态方法使用MIL-NCE的S3Dg。该模型已经在文本和视频上使用对比损失函数进行预训练,并且是一个开箱即用的大型计算方法。这些新方法从 S3Dg 中提取特征,然后添加大型计算方法。很少有人关注减少这些模型的大小或创建不直接依赖先前工作的方法。此外,这可以防止探测模型更好地理解这些模型正在学习的内容,尤其是当文本有语义信息时。当下游任务也是动作识别时,使用 I3D 等网络的纯视频方法也是如此。最近有一些方法利用变压器视觉编码器,如将原始视频作为输入,但这一领域的研究有限,但对未来的工作有很大的潜力。未来的工作应该更多地关注不直接依赖于先前工作的简单端到端方法,因此可以减少计算成本和依赖性。
  6. 可解释性和可解释性。下游任务专注于每个模态的特定区域,例如动作识别、音频的事件识别和文本的字幕生成。虽然这些有助于理解学习表示的普遍性,但它们并没有提供对这些模型实际学习的内容的洞察。虽然这是通过探测模型 Thush 等人在图像域中完成的。 [2022],但没有一种方法表明理解模型用于生成视频域中的表示。这种缺乏可解释性强制执行“黑盒模型”方法。未来的研究应该侧重于了解这些模型正在学习的内容以及为什么它们的表示更具泛化性。通过这种理解,可以进一步提高模型,并对视频提供更多理解。虽然多模态方法通常在下游任务中表现最佳,但缺乏对模型学习的内容的洞察阻碍了理解这些模式是如何相互作用的。例如,当使用两种模式时,由此产生的联合嵌入空间看起来是什么。在图 16 中,使用 t-sne 可视化该联合空间的示例。样本是来自 YouCook2 数据集中不同食谱的片段,其中视觉特征被描述为 ·,文本特征为 x。虽然跨模态VideoClip Xu等人[2021a]和联合模态UniVL Luo等人[2020]模型在文本到视频检索任务上显著优于MIL-NCE模型Miech等人[2020],但每个模态的特征嵌入彼此相距甚远。未来的工作应该调查这样的问题。更可解释的模型将更好地表示文本、视频和音频是如何交互的,并可能导致改进的语义图、事件交互的时间理解等。
  7. 标准基准。主干编码器和预训练协议的变化使得直接比较变得困难。虽然这项调查试图组织这些差异并讨论几个现有的基准Feichtenhofer等人[2021],Huang等人[2018],Buch等人[2022],但社区对自我监督学习进行基准评估是有益的,这允许在许多不同的方法之间进行更好的比较。虽然在图像域中,自监督学习Hendrycks和Dietterich[2018]、Bhojanapalli等人[2021]、Hendrycks等人[2021]研究了鲁棒性,但在视频领域Schiappa等人[2022]、Liang等人[2021]中缺乏类似的工作。这些模型通常在零样本学习上进行评估,因此理解对不同类型分布变化的鲁棒性将提供进一步的改进。未来的工作应该生成评估自我监督学习性能的基准以及不同方法的稳健性。

InternVideo: General Video Foundation Models via Generative and Discriminative Learning

https://zhuanlan.zhihu.com/p/614798241文章来源地址https://www.toymoban.com/news/detail-839587.html

到了这里,关于Video Self-Supervised Pertraining(Video SSL)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉 + Self-Supervised Learning 五种算法原理解析

    自监督学习是一种机器学习方法,它利用未标记的数据来训练模型,而无需人工标注的标签。相反,自监督学习通过利用数据中的自动生成的标签或任务来训练模型。 现在,让我使用拟人化的方法来解释自监督学习的原理。假设你是一个学习者,而计算机视觉任务是你需要完

    2024年02月11日
    浏览(29)
  • 论文阅读:SERE: Exploring Feature Self-relation for Self-supervised Transformer

    Self-supervised 学习目的是在无人工标注的情况下通过自定制的任务(hand-crafted pretext tasks)学习丰富的表示。 使用 自监督学习 为卷积网络(CNN)学习表示已经被验证对视觉任务有效。作为CNN的一种替代方案, 视觉变换器 (ViT)具有强大的表示能力,具有 空间自注意力和通道

    2024年02月09日
    浏览(29)
  • [论文阅读]Self-Supervised Learning for Videos: A Survey

    Schiappa, M. C., Rawat, Y. S., Shah, M. (2023). Self-Supervised Learning for Videos: A Survey. ACM Comput. Surv., 55(13s), 1–37. https://doi.org/10.1145/3577925 论文中文名称:视频的自监督学习综述 摘要: 深度学习在各个领域取得的显著成功依赖于大规模标注数据集的可用性。然而,获取标注是昂贵且需要巨

    2024年01月17日
    浏览(42)
  • 【论文阅读】Digging Into Self-Supervised Monocular Depth Estimation

    论文:https://arxiv.org/pdf/1806.01260.pdf 代码:https://github.com/nianticlabs/monodepth2 A: 这篇论文试图解决的问题是如何提高仅使用单目图像进行深度估计的性能。具体来说,它关注的是如何在没有像素级地面真实深度数据的情况下,通过自监督学习方法训练模型来生成高质量的深度图。

    2024年04月17日
    浏览(29)
  • 论文解读:SuperPoint: Self-Supervised Interest Point Detection and Description

    发表时间: 2018年 项目地址:https://arxiv.org/abs/1712.07629 论文地址:https://github.com/magicleap/SuperPointPretrainedNetwork 本文提出了一种用于训练计算机视觉中大量多视点几何问题的兴趣点检测器和描述符的自监督框架。与patch-based的神经网络相比,我们的全卷积模型处理全尺寸的图像,

    2024年02月14日
    浏览(42)
  • Self-supervised 3D Human Pose Estimation from a Single Image

    基于单幅图像的自监督三维人体姿态估计   主页: https://josesosajs.github.io/ imagepose/ 源码:未开源 我们提出了一种新的自我监督的方法预测三维人体姿势从一个单一的图像。预测网络是从描绘处于典型姿势的人的未标记图像的数据集和一组未配对的2D姿势训练的。通过最小化

    2024年02月10日
    浏览(36)
  • 【论文阅读】Self-supervised Image-specific Prototype Exploration for WSSS

    一篇CVPR2022上的论文,用于弱监督分割 Self-supervised Image-specific Prototype Exploration for Weakly Supervised Semantic Segmentation https://github.com/chenqi1126/SIPE https://openaccess.thecvf.com/content/CVPR2022/papers/Chen_Self-Supervised_Image-Specific_Prototype_Exploration_for_Weakly_Supervised_Semantic_Segmentation_CVPR_2022_paper.pdf 现

    2024年02月11日
    浏览(27)
  • CS231N assignment3-transformer,GAN,self-supervised,LSTM

    这部分作业内容很大,上传到github费了很多时间,参考的是这篇:如何在GitHub上传大文件(≥100M) | 码农家园 (codenong.com) 但是还是没传成功··· 所以我直接传到网盘里了 链接:https://pan.baidu.com/s/1T8Sc2Owq6OMtDSo5SNKlaA  提取码:784w  --来自百度网盘超级会员V2的分享 然后简单介

    2024年02月15日
    浏览(32)
  • MaskVO: Self-Supervised Visual Odometry with a Learnable Dynamic Mask 论文阅读

    题目 :MaskVO: Self-Supervised Visual Odometry with a Learnable Dynamic Mask 作者 :Weihao Xuan, Ruijie Ren, Siyuan Wu, Changhao Chen 时间 :2022 来源 : IEEE/SICE International Symposium on System Integration (SII) 深度学习的最新进展使移动机器人能够以自我监督的方式联合学习自我运动和深度图。 然而,现有的方

    2024年02月09日
    浏览(28)
  • 论文阅读:Image-to-Lidar Self-Supervised Distillation for Autonomous Driving Data

    目录 摘要 Motivation 整体架构流程 技术细节 雷达和图像数据的同步 小结 论文地址:  [2203.16258] Image-to-Lidar Self-Supervised Distillation for Autonomous Driving Data (arxiv.org) 论文代码: GitHub - valeoai/SLidR: Official PyTorch implementation of \\\"Image-to-Lidar Self-Supervised Distillation for Autonomous Driving Data\\\"    

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包