Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching 论文精读

Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching

论文链接:[2305.13310] Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching (arxiv.org)

代码链接:aim-uofa/Matcher: Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching (github.com)[Code尚未开源]

文章目录

  • Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching
    • 1. 背景和动机
      • 1.1 Integrating Foundation Models
      • 1.2 Matcher
    • 2. 方法
      • 2.1 Overview
      • 2.2 Correspondence Matrix Extraction
      • 2.3 Prompts Generation
        • 2.3.1 Patch-Level Matching
        • 2.3.2 Robust Prompt Sampler
        • 2.3.3 Controllable Masks Generation
          • Instance-Level Matching
          • Controllable Masks Merging
    • 3. 结果
      • 3.1 One-shot Semantic Segmentation
      • 3.2 One-shot Object Part Segmentation
      • 3.3 Video Object Segmentation
      • 3.4 Ablation Study
        • 3.4.1 Effect of Different Image Encoders
        • 3.4.2 Ablation Study of ILM
        • 3.4.3 Ablation Study of Bidirectional Matching
        • 3.4.4 Ablation Study of Different Mask Proposal Metrics
        • 3.4.5 Effect of the Number of Frames for VOS
      • 3.5 Qualitative Results

1. 背景和动机

1.1 Integrating Foundation Models

在大规模数据集上预训练后,大语言模型(Large Language Model,LLMs),例如ChatGPT,革新了NLP领域,在一些zero-shot以及few-shot任务上,展现出了极强的迁移和泛化能力。

计算机视觉领域近期也出现了一些类似的基础模型:

  • Large-Scale Image-Text Contrast Pre-Training
    • [2103.00020] Learning Transferable Visual Models From Natural Language Supervision (arxiv.org)(CLIP)
    • [2102.05918] Scaling Up Visual and Vision-Language Representation Learning With Noisy Text Supervision (arxiv.org)(ALIGN)
  • Learns All-Purpose Visual Features From Raw Image Data Alone
    • [2304.07193] DINOv2: Learning Robust Visual Features without Supervision (arxiv.org)
  • Class-agnostic Segmentation
    • [2304.02643] Segment Anything (arxiv.org)

类似于CLIP、ALIGN、DINOv2这类基础模型,虽然其在一些下游任务中表现出了较强的zero-shot迁移能力,但是其在下游任务中使用时,仍然需要配合任务特定的heads作为ImageEncoder来使用,这限制了其在真实世界中的泛化应用。

而SAM本身是一个Class-Agnostic Segmenter,无法提取高级的语义信息,这也限制了其在真实开放图像理解中的应用。

本文指出,虽然这些基础模型独立使用还存在一定的有限性,但将其结合起来,可以取得协同增效效应,同时提升分割质量和在开放世界中的泛化能力。

目前已经有一些优秀的工作进行了相关尝试:

  • Grounded-Segment-Anything

但这些工作中的各个模型仍然是独立运行的,一个模型的输出会直接作为另一个模型的输入,在模型运行过程中的累积误差无法被消除。因此,需要探索更为高效、合理的基础模型集成方案。

1.2 Matcher

基于以上发现,本文重新思考了不同视觉基础模型的集成策略。

作者指出,SAM其实用性受到两个方面的限制:

  • 缺乏语义信息
  • 分割结果以模棱两可的Mask呈现

为了解决这些问题,本文提出仅使用一个示例并且不进行任何训练的情况下,实现Segment Anything,即OneShot Segment Anything。

在实现OneShot Segment Anything时,本文考虑了两种特征多样性:

  • Semantic Diversity
    • Semantic Diversity包括实例级别和语义级别感知
    • 本文主要是通过一个All-purpose Feature Matching方案实现
  • Structural Diversity
    • Structural Diversity意味着多种语义粒度,从部分到整体,再到多个实例
    • 本文主要是通过Prompt-based SAM来实现

基于以上考虑,本文提出了Matcher,一个无需训练的OneShot Segment Anything框架,其结合了一个通用特征提取模型(例如DINOv2)和一个无类别分割模型(例如SAM)。

但是简单地结合DINOv2和SAM无法取得令人满意的效果,例如,模型倾向去生成匹配的异常值和假阳性的Mask预测。

为了解决以上问题,本文提出了以下策略:

  • Bidirectional Matchting Strategy:用于实现准确的图像间语义密集匹配
  • Robust Prompt Sampler:用于进行Mask Propose,提升Mask Proposals的多样性,同时抑制由于异常匹配点带来的假阳性Mask预测
  • Instance-Level Matching:用于选择高质量的masks
  • Controllable Masks Merging:通过控制Merged Mask的数量,Matcher可以生成可控的Mask输出。

2. 方法

2.1 Overview

image-20230604161710440

Matcher 是一个无需训练的框架,通过集成一个通用特征提取模型(例如 DINOv]、CLIP 和 MAE )和一个无类别分割模型(SAM),其可以实现OneShot Segment Anything。

对于一个给定的参考图像 x r x_r xr及其Mask m r m_r mr,Matcher可以在目标图像 x t x_t xt中分割具有相同语义信息的目标或者部位。

上图是Matcher的概览图,其主要包括三个部件:

  • Correspondence Matrix Extraction (CME)
  • Prompts Generation (PG)
  • Controllable Masks Generation (CMG)

其OneShot Segment Anything流程大致如下:

  1. 通过计算 x r x_r xr x t x_t xt图像特征之间的的相似度,来提取Correspondence Matrix
  2. 进行Patch-Level Matching (PLM) 获取匹配点,再采用Robust Prompt Sampler来采样部分质量高的匹配点,用于生成一些prompts(Point、Center以及Box)。
  3. 将上述prompts输入到SAM中,生成初始的Mask Proposals。
  4. 进行参考图像和Mask Proposals之间的Instance-Level Matching (ILM),以选取高质量的Masks
  5. 使用**Controllable Masks Merging (CMM)**完成最终的Mask的生成

2.2 Correspondence Matrix Extraction

Matcher使用一些开箱即用的Image Encoders去提取参考图像和目标图像的特征。

对于 x r x_r xr x t x_t xt,Image Encoder将会输出Patch-Level的features z r , z t ∈ R H   t i m e s W × C z_r,z_t \in \mathbb{R}^{H\ times W \times C} zr,ztRH timesW×C

Matcher会通过计算两个特征Patch-wise的相似度来目标图像上参考Mask的最佳匹配区域。

Correspondence Matrix S ∈ R H W × H W \mathbf{S} \in \mathbb{R}^{HW \times HW} SRHW×HW定义如下:
( S ) i j = z r i ⋅ z t j ∥ z r i ∥ × ∥ z t j ∥ (\mathbf{S})_{i j}=\frac{\mathbf{z}_r^i \cdot \mathbf{z}_t^j}{\left\|\mathbf{z}_r^i\right\| \times\left\|\mathbf{z}_t^j\right\|} (S)ij=zri× ztj zriztj
其中 ( S ) i j (S)_{ij} (S)ij表示第 i − t h i-th ith 来自 z r z_r zr的Patch Feature z r i z_r^i zri 和第 j − t h j-th jth 个来自 z t z_t zt的Patch Feature z r i z_r^i zri之间的余弦相似度,上式可以以一个更为紧凑形式表示为: S = sim ⁡ ( z r , z t ) \mathbf{S}=\operatorname{sim}\left(\mathbf{z}_r, \mathbf{z}_t\right) S=sim(zr,zt)

2.3 Prompts Generation

对于一个给定的Dense Correspondence Matrix,可以通过选取目标图像中最相似的一些Patch来获取一个粗糙的分割Mask。然而这种简单的方式,会导致不准确、支离破碎以及其他异常分割结果。

因此,本文考虑使用Correspondence Feature去生成高质量的Point、Box,以用于promptable segmentation,该流程包括一个Bidirectional Patch Matching以及一个Diverse Prompt Sampler。

2.3.1 Patch-Level Matching

在一些困难场景,例如相似的上下文信息、多个实例等,Image Encoder可以会预测一些错误的匹配结果,本文提出了一个Bidirectional Patch Matching策略,去减少这些异常匹配。

image-20230604173359885

上图是Bidirectional Patch Matching策略的流程图,其大致步骤如下:

  1. 使用Forward Correspondence Matrix S → = sim ⁡ ( P r , z t ) \mathbf{S}^{\rightarrow}=\operatorname{sim}\left(P_r, \mathbf{z}_t\right) S=sim(Pr,zt) 在参考Mask的所有点 P r = { p r i } i = 1 L P_r=\left\{\mathbf{p}_r^i\right\}_{i=1}^L Pr={pri}i=1L z t z_t zt之间进行二分匹配(和DETR上进行Object和Target进行匹配的方式一样,可以参考DETR | 基于匈牙利算法的样本分配策略_detr 匈牙利_Clichong的博客-CSDN博客),在目标图像上获得Forward Matched Points P t → = { p t 2 } i = 1 L P_t^{\rightarrow}=\left\{\mathbf{p}_t^2\right\}_{i=1}^L Pt={pt2}i=1L
  2. 然后再进行另一个二分匹配,即 P t → P_t^{\rightarrow} Pt z t z_t zt之间的反向匹配,使用Reverse Correspondence Matrix S ← = sim ⁡ ( z r , P t → ) \mathbf{S}^{\leftarrow}=\operatorname{sim}\left(\mathbf{z}_r, P_t^{\rightarrow}\right) S=sim(zr,Pt)去获得在参考图像上的Reversed Matched Points P r ← = { p r i } i = 1 L P_r^{\leftarrow}=\left\{\mathbf{p}_r^i\right\}_{i=1}^L Pr={pri}i=1L
  3. 最终过滤掉那些对应Reverse Points不在参考Mask区域内的前向点,最终的匹配点集合为 P ^ = { p t i ∈ P t → ∣ p r i \hat{P}=\left\{\mathbf{p}_t^i \in P_t^{\rightarrow} \mid \mathbf{p}_r^i\right. P^={ptiPtpri in m r } \left.m_r\right\} mr}

简单来说:

根据二分匹配,将参考图像对应Mask上的所有点投射到目标图像上,再根据二分匹配将投射到目标图像上的所有点再投射回原参考图像上,检查哪些点经过投射后,不再再落在参考图像原Mask区域内了,这些点就不是匹配点。

2.3.2 Robust Prompt Sampler

为了使得Matcher可以在不同语义粒度(部分、整体以及多实例)上实现鲁棒的分割,本文提出了一个Robust Prompt Sampler去生成多样且有意义的Mask Proposals。

其步骤如下:

  1. 使用k-means++算法,根据位置将匹配点 P ^ \hat{P} P^聚类为 K K K个簇 P ^ k \hat{P}_k P^k
  2. 接下来采样以下三种子集作为prompts
    1. Patch-Level Prompts P p ⊂ P ^ k P^p \subset \hat{P}_k PpP^k :在每个簇内采样
    2. Instance-Level Prompts P i ⊂ P ^ P^i \subset \hat{P} PiP^ :在所有匹配点内采样
    3. Global Prompts P g ⊂ C P^g \subset C PgC :在所有簇中心点 C = { c 1 , c 2 , … , c k } C=\left\{c_1, c_2, \ldots, c_k\right\} C={c1,c2,,ck}内进行采样
  3. 最后增加参考点 P ^ \hat{P} P^的Bounding Box作为Box Proposal

Robust Prompt Sampler这种策略不仅增加了Mask Proposals的多样性,而且还抑制了由匹配异常值引起的碎片化假阳性Mask预测。

2.3.3 Controllable Masks Generation

Image Encoder 提取的目标边缘特征会混淆背景信息,导致一些异常激活,这些异常激活点可能会被选择作为prompt,从而生成一些假阳性Mask预测。

为了解决该问题,Matcher进一步通过Instance-Level Matching模块从Mask Proposals中选择高质量的Mask,然后合并选择的Masks以获得最终的目标Mask。

Instance-Level Matching

Matcher进行参考Mask和Mask Proposals之间的Instance-Level Matching,用于选择好的Masks。

本文将该匹配问题看作是Optimal Transport问题,并且使用Earth Mover’s Distance (EMD)去计算Masks内密集语义特征之间的结构距离(记作 e m d emd emd),以确定Masks之间的相关性(这个部分可以参考:机器学习工具(二)Notes of Optimal Transport - 知乎 (zhihu.com))。

除此之外,本文还提出了额外两个Mask Proposal Metrics,用于衡量Mask Proposal的质量:
 purity  = Num ⁡ ( P ^ m p ) Area ⁡ ( m p ) \text { purity }=\frac{\operatorname{Num}\left(\hat{P}_{m p}\right)}{\operatorname{Area}\left(m_p\right)}  purity =Area(mp)Num(P^mp)
 coverage  = Num ⁡ ( P ^ m p ) Num ⁡ ( P ^ ) \text { coverage }=\frac{\operatorname{Num}\left(\hat{P}_{m p}\right)}{\operatorname{Num}(\hat{P})}  coverage =Num(P^)Num(P^mp)

其中 P ^ m p = { p t i ∈ P t → ∣ p t i  in  m p } \hat{P}_{m p}=\left\{\mathbf{p}_t^i \in\right.\left.P_t \rightarrow \mid \mathbf{p}_t^i \text { in } m_p\right\} P^mp={ptiPt→∣pti in mp} Num ⁡ ( ⋅ ) \operatorname{Num}(\cdot) Num()表示Points的数目, Area ⁡ ( ⋅ ) \operatorname{Area}(\cdot) Area()表示Mask的面积, m p m_p mp表示Mask Proposal。
 score  = α ⋅ ( 1 −  emd  ) + β ⋅  purity  ⋅  coverage  λ , \text { score }=\alpha \cdot(1-\text { emd })+\beta \cdot \text { purity } \cdot \text { coverage }{ }^\lambda,  score =α(1 emd )+β purity  coverage λ,
其中 α , β \alpha, \beta α,β以及 λ \lambda λ都是平衡系数。

Matcher可以使用提出的度量指标score,通过适当的阈值过滤假阳性Mask预测,然后可以TopK个分数最高的Mask进行输出。

Controllable Masks Merging

通过控制最终合并的Masks的数目,Matcher 可以为目标图像中具有相同语义的实例生成可控的Mask输出。

3. 结果

Matcher默认使用DINOv2(ViT-L/14)作为Image Encoder,SAM(ViT-H)作为Segmenter。

3.1 One-shot Semantic Segmentation

image-20230604191000909

可以看出,Matcher在无需任何训练微调的情况下,超越了其他SOTA结果,接近SegGPT(SegGPT的训练数据包括COCO)结果。

对比PerSAM的结果可以看出,仅依赖于SAM输出的结果对于语义任务泛化能力较差。

3.2 One-shot Object Part Segmentation

image-20230604191343191

即使SAM具有在三个层次(whole, part, and subpart)上分割任意物体的能力,但是由于其缺乏语义信息,其无法区分一些模棱两可的Masks。

而Matcher则通过结合All-Purpose Feature Extractor,大大提升了SAM的细粒度Object Part Segmentation能力。

3.3 Video Object Segmentation

image-20230604191833653

在没有在视频数据集上训练的情况下,Matcher可以取得和在视频数据集上训练过的模型相当的性能。

3.4 Ablation Study

image-20230604192137171

3.4.1 Effect of Different Image Encoders

对比CLIP、MAE,DINOv2在所有数据集上,都取得了更优的性能。

  • CLIP:由于文本-图像对比预训练限制了学习复杂的像素级信息,CLIP不能精确地匹配图像块。

  • MAE:虽然MAE可以通过Mask图像来提取像素级特征,但它的表现很差。作者怀疑,MAE提取的块级特征混淆了周围块的信息,导致错误的特征匹配。

  • DINOv2:通过图像级和块级判别式自监督学习预训练,DIVOv2提取了通用的视觉特征,并展示了令人印象深刻的块级特征匹配能力。

3.4.2 Ablation Study of ILM

ILM极大地提升了模型的分割能力。

3.4.3 Ablation Study of Bidirectional Matching

从结果可以看出,Reverse Matching效果很差,Forward Matching已经可以取得尚可的效果,但Bidirectional Matching可以取得更佳的性能。

3.4.4 Ablation Study of Different Mask Proposal Metrics

对于不同的数据集,三种指标的效果不同:

  • 对于COCO数据集来说,emd指标相较于purity和coverage,更为重要
  • 对于DAVIS 2017数据集来说,purity和coverage则更为重要
  • 对于FSS数据集来说,两者效果相当

当同时结合以上指标时,都能取得更好的效果。

3.4.5 Effect of the Number of Frames for VOS

随着帧数的增加,效果会逐渐提升,在四帧时效果最优。

3.5 Qualitative Results

image-20230604193254235

image-20230604193316299

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/25691.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图的邻接矩阵表示

设图有n个顶点,则邻接矩阵是一个n*n的方阵;若2个顶点之间有边,则方阵对应位置的值为1,否则为0; 看几个例子; 此图的邻接矩阵是 0 1 1 1 1 0 1 0 1 1 0 1 1 0…

计算机网络基础知识(七)—— 什么是HTTPS协议?你听我“瞎掰”

文章目录 01 | 工作原理02 | SSL/TLS协议2.1 | 握手协议2.2 | 更换密码协议(Change Cipher Spec Protocol)2.3 | 警告协议(Alert Protocol)2.4 | 应用数据协议(Application Data Protocol) 03 | 加密算法3.…

南大通用数据库-Gbase-8a-报错集锦-02-metadata is incomplete on localhost

一、版本信息 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2Gbase8a版本8.6.2-R43 二、问题原因 由于gbase.table_distribution存储了所有引擎为express的表元数据信息,如果此表出现数据损坏&a…

【五】设计模式~~~创建型模式~~~单例模式(Java)

【学习难度:★☆☆☆☆,使用频率:★★★★☆】 5.1. 模式动机 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一…

Hystrix 服务熔断

书籍,人,借阅服务之间相互调用, 高度耦合, 一旦一个服务故障, 其他服务会雪崩, 和多米诺骨牌一样 Hystrix 熔断器, 保险丝 服务降级 提供补救措施发给请求者, 服务可用, 能力下降了 borrow-service 导入依赖 <dependency><groupId>org.springframework.cloud&l…

【MySQL新手到通关】第六章 时间日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…

使用Chat gpt提高Android开发效率

简介 在过去几周里&#xff0c;我进行了一项令人大开眼界的实验&#xff0c;将 Chat-GPT&#xff08;我使用的是 Bing Chat&#xff0c;它在后台使用了 GPT-4&#xff0c;并且可以免费使用&#xff09;融入到我的日常 Android 开发工作流程中&#xff0c;以探索它是否能够提高…

DAY04_JDBC快速入门JDBC API详解SQL防注入数据库连接池JDBC综合练习

目录 1 JDBC1.1 JDBC概念1.2 JDBC本质 1.3 JDBC好处 2 JDBC快速入门2.1 编写代码步骤2.2 具体操作 3 JDBC API详解3.1 DriverManager3.2 Connection3.2.1 获取执行对象3.2.2 事务管理 3.3 Statement3.4 ResultSet3.4.1 ResultSet案例 3.5 PreparedStatement3.5.1 SQL注入3.5.2 …

hutool文件导出

hutool文件导出 需求&#xff1a;管理员设置会议&#xff0c;参加会议会根据管理员设置的会议要求&#xff0c;用户参加会议填写相关数据&#xff0c;并且生成一个动态的excel数据并导出 示例&#xff1a; 每场都可以自定义报名字段 根据需求与前端约定 字段名称&#xff08;n…

Koa学习1:初始化项目

前言 作为前端开发者&#xff0c;最适合我们的后端就是node了&#xff0c;node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。 学习教程是&#xff1a;【杰哥课堂】-项目实战-NodeKoa2从零搭建通用API服务 写这些文章&#xff0…

javascript基础九:说说Javascript中的继承?如何实现继承?

一、是什么 继承&#xff08;inheritance&#xff09;是面向对象软件技术当中的一个概念 如果一个类别B“继承自”另一个类别A&#xff0c;就把这个B称为“A的子类”&#xff0c;而把A称为“B的父类别”也可以称“A是B的超类” 继承的优点 继承可以使得子类具有父类别的各种属性…

Java 版 spring cloud 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

【企业化架构部署】Apache网页优化

文章目录 一、Apache网页优化概述1.优化内容2.网页压缩2.1gzip概述2.2作用2.3Apache的压缩模块概述mod_gzip模块与mod_deflate模块 3.配置网页压缩功能3.1启用网页压缩功能步骤3.2具体操作步骤 4.配置网页缓存功能4.1启用网页压缩功能步骤4.2具体操作步骤 二、Apache安全优化1.…

设计模式之~工厂系列(简单工厂、工厂方法、抽象工厂)

目录 简单工厂模式 工厂方法模式 简单工厂 VS 工厂方法 抽象工厂模式&#xff1a; 拓展&#xff1a; 利用简单工厂模式优化抽象工厂 利用反射抽象工厂 进行优化 反射配置文件抽象工厂进行优化 简单工厂模式 优点&#xff1a;简单工厂模式的最大优点在于工厂类包含…

计算机专业主要学习什么

2020计算机专业主要学习什么 1计算机专业都学习哪些方面的知识 1、可视化编程 掌握编程方法和可视化技术&#xff0c;熟悉一个可视化平台及其软件开发技术。能够获取Delphi编程人员系列&#xff0c;Java Basic或VB开发专家认证。 就业方向&#xff1a;企业&#xff0c;政府&…

vue前端分页功能怎么实现

Vue前端分页功能可以通过以下几个步骤实现&#xff1a; 1. 安装分页组件库&#xff08;如vue-pagination-2&#xff09;&#xff1a; bash npm install vue-pagination-2 2. 在Vue项目中引入并注册分页组件&#xff1a; javascript import Vue from vue; import Pagination fr…

传地址给组件并让该组件用到地址在背景图片中的方法

问题 这是我在开发中遇到的问题。在网站的分页面中&#xff0c;背景图片的格式几乎一模一样。只是上面的文字和图片不一样而已。 所以我希望写一个组件&#xff0c;然后页面只需要传入背景图片地址和标题就可以显示出相关内容。 于是我动手写了&#xff0c;大致思路是一个盒…

判断点在多边形内算法的C++实现

本篇博客介绍了使用射线法判断点在多边形内部还是外部的算法&#xff0c;并通过C做了具体实现 1. 算法思路 判断平面内点是否在多边形内有多种算法&#xff0c;其中射线法是其中比较好理解的一种&#xff0c;而且能够支持凹多边形的情况。该算法的思路很简单&#xff0c;就是…

AMEYA360:纳芯微推出车规级耐高压、三线霍尔开关及锁存器NSM101x系列

纳芯微推出全新三线制车规霍尔效应开关/锁存器NSM101x系列&#xff0c;为数字位置检测提供高精度的解决方案&#xff0c;可被广泛应用于汽车执行器等的位置检测。 NSM101x产品系列包含了3个产品型号&#xff0c;即NSM1011(单极霍尔开关)、NSM1012(全极霍尔开关)、NSM1013(霍尔锁…

【Unity】Playable使用细则

【Unity】Playable使用细则 本文基于Unity 2021.3 API。 本文介绍官方文档中没提及的Playable使用限制、注意事项、Bug及规避方案&#xff0c;不是Playable的入门教程&#xff01; 如果你还不熟悉Playable的基础用法&#xff0c;请先学习以下官方文档和示例&#xff1a; Playa…