跳转至内容

SAM 3: 用概念分割万物

现已在 Ultralytics 中提供

SAM 3 已完全集成到 Ultralytics 包中,截至 版本 8.3.237 (PR #22897)。通过以下方式安装或升级: pip install -U ultralytics 以访问所有 SAM 3 功能,包括基于文本的概念分割、图像示例提示和视频 track。

SAM 3 概述

SAM 3 (Segment Anything Model 3) 是 Meta 发布的用于 可提示概念分割 (PCS) 的基础模型。在 SAM 2 的基础上,SAM 3 引入了一项全新的能力:detect、segment 和 track 通过文本提示、图像示例或两者指定的 所有实例。与之前每个提示分割单个对象的 SAM 版本不同,SAM 3 可以在图像或视频中找到并 segment 概念的每一次出现,这与现代 实例分割 中的开放词汇目标保持一致。

SAM 3 现已完全集成到 ultralytics 包,提供对概念 segment 的原生支持,支持文本提示、图像示例提示以及视频 track 功能。

概述

SAM 3 在可提示概念分割方面比现有系统实现了 2 倍的性能提升,同时保持并改进了 SAM 2 在交互式 视觉分割方面的能力。该模型擅长开放词汇分割,允许用户使用简单的名词短语(例如,“黄色校车”、“条纹猫”)或提供目标对象的示例图像来指定概念。这些功能补充了依赖于简化 预测跟踪 工作流的生产就绪管道。

SAM 3 分割

可提示概念分割 (PCS) 是什么?

PCS 任务将一个concept prompt作为输入,并返回所有匹配对象实例的具有唯一标识的 segmentation masks。concept prompt 可以是:

  • 文本:简单的名词短语,如“红苹果”或“戴帽子的人”,类似于 零样本学习
  • 图像示例:围绕示例对象(正或负)的边界框,用于快速泛化
  • 组合:文本和图像示例相结合,实现精确控制

这与传统的视觉提示(点、框、掩码)不同,传统视觉提示仅分割单个特定对象实例,这由最初的SAM系列推广开来。

关键性能指标

指标SAM 3 成就
LVIS 零样本 Mask AP47.0 (相较于此前最佳的 38.5,提升 22%)
SA-Co基准测试2× 更好 于现有系统
推理速度 (H200 GPU)每张图像 30 毫秒,检测到 100+ 个目标
视频性能针对约5个并发对象的接近实时性能
MOSEv2 VOS Benchmark60.1 J&F (比 SAM 2.1 提升 25.5%,比之前的 SOTA 提升 17%)
交互式优化+18.6 CGF1 在 3 个示例提示后的改进
人机性能差距在 SA-Co/Gold 上达到估计下限的88%

有关生产中模型指标和权衡的背景信息,请参阅模型评估洞察YOLO 性能指标

架构

SAM 3 由一个共享感知编码器 (PE) 视觉骨干网络的 检测器跟踪器 组成。这种解耦设计避免了任务冲突,同时实现了图像级 detect 和视频级 track,并提供与 Ultralytics python 用法CLI 用法 兼容的接口。

核心组件

  • 检测器:基于 DETR 的架构,用于图像级概念检测。

    • 用于名词短语提示的文本编码器
    • 用于基于图像提示的范例编码器
    • 融合编码器,根据提示条件化图像特征
    • 新颖的存在头,将识别(“是什么”)与定位(“在哪里”)解耦
    • 用于生成实例分割掩码的Mask头
  • 跟踪器:继承自 SAM 2 的基于内存的视频分割

    • 提示编码器、掩码解码器、记忆编码器
    • 用于存储跨帧对象外观的内存库
    • 在多目标场景中,借助卡尔曼滤波器等技术实现时间消歧
  • 存在令牌:一个学习到的全局令牌,用于预测目标概念是否存在于图像/帧中,通过将识别与定位分离来改进检测。

SAM 3 架构

主要创新

  1. 解耦识别与定位:存在头部全局预测概念存在,而提议查询仅关注定位,从而避免了冲突的目标。
  2. 统一的概念和视觉提示: 在单个模型中同时支持PCS(概念提示)和PVS(视觉提示,如SAM 2的点击/框)。
  3. 交互式示例 refinement:用户可以添加正面或负面图像示例以迭代地 refinement 结果,模型会泛化到相似对象,而不仅仅是修正单个实例。
  4. 时序消歧:利用 masklet 检测分数和周期性重新提示来处理视频中的遮挡、拥挤场景和 track 失败,与实例分割和 track 最佳实践保持一致。

SA-Co数据集

SAM 3 在 Segment Anything with Concepts (SA-Co) 上进行训练,这是 Meta 迄今为止最大、最多样化的分割数据集,超越了诸如 COCOLVIS 等常见基准。

训练数据

数据集组件描述规模
SA-Co/HQ来自四阶段数据引擎的高质量人工标注图像数据520万张图像,400万个唯一名词短语
SA-Co/SYN由人工智能标记的合成数据集,无需人工参与3800万个名词短语,14亿个掩码
SA-Co/EXT利用难分辨负样本增强的 15 个外部数据集因来源而异
SA-Co/VIDEO带有时间 track 的视频标注5.25万个视频,2.48万个唯一名词短语

基准数据

The SA-Co评估基准包含21.4万个独特短语,涵盖12.6万张图像和视频,提供了比现有基准多50倍以上的概念。它包括:

  • SA-Co/Gold:7个领域,经过三重标注以衡量人类性能极限
  • SA-Co/Silver:10个领域,单次人工标注
  • SA-Co/BronzeSA-Co/Bio:9个适用于概念分割的现有数据集
  • SA-Co/VEval:包含3个领域(SA-V、YT-Temporal-1B、SmartGlasses)的视频基准

数据引擎创新

SAM 3 的可扩展人机协作数据引擎通过以下方式实现了 2 倍的标注吞吐量

  1. AI 注释器:基于Llama的模型提出各种名词短语,包括硬负例
  2. AI 验证器:经过微调的多模态 LLM以接近人类的性能验证掩码质量和详尽性
  3. 主动挖掘:将人类精力集中在 AI 难以处理的具有挑战性的失败案例上
  4. 本体驱动:利用基于Wikidata的大型本体进行概念覆盖

安装

SAM 3 在 Ultralytics 8.3.237 版本及更高版本中可用。通过以下方式安装或升级:

pip install -U ultralytics

SAM 3 所需模型权重

与其他 Ultralytics 模型不同,SAM 3 权重 (sam3.pt) 为 不会自动下载。您必须从以下位置手动下载模型权重 官方 SAM 3 仓库 在使用 SAM 之前 3. 将下载的 sam3.pt 文件在您的工作目录中,或者在加载模型时指定完整路径。

如何使用 SAM 3:概念 segment 中的多功能性

SAM 3 通过不同的预测器接口,同时支持可提示概念分割 (PCS) 和可提示视觉分割 (PVS) 任务:

支持的任务和模型

任务类型提示类型输出
概念分割 (PCS)文本(名词短语),图像示例与概念匹配的所有实例
视觉分割 (PVS)点、框、掩码单个目标实例 (SAM 2 风格)
交互式优化迭代地添加/移除示例或点击改进的分割,具有更高的精度

概念分割示例

使用文本提示进行segment

基于文本的概念分割

使用文本描述查找并 segment 概念的所有实例。文本提示需要 SAM3SemanticPredictor 界面。

from ultralytics.models.sam import SAM3SemanticPredictor

# Initialize predictor with configuration
overrides = dict(
    conf=0.25,
    task="segment",
    mode="predict",
    model="sam3.pt",
    half=True,  # Use FP16 for faster inference
)
predictor = SAM3SemanticPredictor(overrides=overrides)

# Set image once for multiple queries
predictor.set_image("path/to/image.jpg")

# Query with multiple text prompts
results = predictor(text=["person", "bus", "glasses"], save=True)

# Works with descriptive phrases
results = predictor(text=["person with red cloth", "person with blue cloth"], save=True)

# Query with a single concept
results = predictor(text=["a person"], save=True)

使用图像范例进行segment

基于图像样本的分割

使用边界框作为视觉提示来查找所有相似实例。这还需要 SAM3SemanticPredictor 用于基于概念的匹配。

from ultralytics.models.sam import SAM3SemanticPredictor

# Initialize predictor
overrides = dict(conf=0.25, task="segment", mode="predict", model="sam3.pt", half=True)
predictor = SAM3SemanticPredictor(overrides=overrides)

# Set image
predictor.set_image("path/to/image.jpg")

# Provide bounding box examples to segment similar objects
results = predictor(bboxes=[[480.0, 290.0, 590.0, 650.0]], save=True)

# Multiple bounding boxes for different concepts
results = predictor(bboxes=[[539, 599, 589, 639], [343, 267, 499, 662]], save=True)

基于特征的推理以提高效率

重用图像特征进行多重查询

提取图像特征一次,并将其重复用于多个segmentation查询,以提高效率。

import cv2

from ultralytics.models.sam import SAM3SemanticPredictor
from ultralytics.utils.plotting import Annotator, colors

# Initialize predictors
overrides = dict(conf=0.50, task="segment", mode="predict", model="sam3.pt", verbose=False)
predictor = SAM3SemanticPredictor(overrides=overrides)
predictor2 = SAM3SemanticPredictor(overrides=overrides)

# Extract features from the first predictor
source = "path/to/image.jpg"
predictor.set_image(source)
src_shape = cv2.imread(source).shape[:2]

# Setup second predictor and reuse features
predictor2.setup_model()

# Perform inference using shared features with text prompt
masks, boxes = predictor2.inference_features(predictor.features, src_shape=src_shape, text=["person"])

# Perform inference using shared features with bounding box prompt
masks, boxes = predictor2.inference_features(predictor.features, src_shape=src_shape, bboxes=[[439, 437, 524, 709]])

# Visualize results
if masks is not None:
    masks, boxes = masks.cpu().numpy(), boxes.cpu().numpy()
    im = cv2.imread(source)
    annotator = Annotator(im, pil=False)
    annotator.masks(masks, [colors(x, True) for x in range(len(masks))])

    cv2.imshow("result", annotator.result())
    cv2.waitKey(0)

视频概念 segment

使用边界框跨视频跟踪概念

结合视觉提示的视频跟踪

使用边界框提示在视频帧中检测和跟踪目标实例。

from ultralytics.models.sam import SAM3VideoPredictor

# Create video predictor
overrides = dict(conf=0.25, task="segment", mode="predict", model="sam3.pt", half=True)
predictor = SAM3VideoPredictor(overrides=overrides)

# Track objects using bounding box prompts
results = predictor(source="path/to/video.mp4", bboxes=[[706.5, 442.5, 905.25, 555], [598, 635, 725, 750]], stream=True)

# Process and display results
for r in results:
    r.show()  # Display frame with segmentation masks

使用文本提示跟踪概念

结合语义查询的视频跟踪

跟踪跨视频帧由文本指定的所有概念实例。

from ultralytics.models.sam import SAM3VideoSemanticPredictor

# Initialize semantic video predictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=640, model="sam3.pt", half=True)
predictor = SAM3VideoSemanticPredictor(overrides=overrides)

# Track concepts using text prompts
results = predictor(source="path/to/video.mp4", text=["person", "bicycle"], stream=True, save=True)

# Process results
for r in results:
    r.show()  # Display frame with tracked objects

# Alternative: Track with bounding box prompts
results = predictor(
    source="path/to/video.mp4",
    bboxes=[[864, 383, 975, 620], [705, 229, 782, 402]],
    labels=[1, 1],  # Positive labels
    stream=True,
    save=True,
)

视觉提示 (SAM 2 兼容性)

SAM 3 完全保持与 SAM 2 视觉提示的向后兼容性,用于单目标分割:

SAM 2 风格视觉提示

基本 SAM 界面行为与 SAM 2 完全一致,仅分割由视觉提示(点、框或掩码)指示的特定区域。

from ultralytics import SAM

model = SAM("sam3.pt")

# Single point prompt - segments object at specific location
results = model.predict(source="path/to/image.jpg", points=[900, 370], labels=[1])
results[0].show()

# Multiple points - segments single object with multiple point hints
results = model.predict(source="path/to/image.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])

# Box prompt - segments object within bounding box
results = model.predict(source="path/to/image.jpg", bboxes=[100, 150, 300, 400])
results[0].show()

视觉提示对比概念分割

使用 SAM("sam3.pt") 带有视觉提示(点/框/掩码)将进行segment 仅特定对象 在该位置,就像 SAM 2 一样。进行分割 某个概念的所有实例,使用 SAM3SemanticPredictor 带有文本或示例提示,如上所示。

性能基准

图像分割

SAM 3 在多个基准测试中取得了最先进的结果,包括 LVISCOCO for segmentation 等真实世界数据集:

基准测试指标SAM 3历史最佳改进
LVIS(零样本)Mask AP47.038.5+22.1%
SA-Co/GoldCGF165.034.3 (OWLv2)+89.5%
COCO (零样本)框 AP53.552.2 (T-Rex2)+2.5%
ADE-847 (语义分割)mIoU14.79.2 (APE-D)+59.8%
PascalConcept-59mIoU59.458.5 (APE-D)+1.5%
Cityscapes(语义分割)mIoU65.144.2 (APE-D)+47.3%

探索数据集选项以在Ultralytics 数据集中进行快速实验。

视频 segment 性能

SAM 3 在 DAVIS 2017YouTube-VOS 等视频基准测试中,相较于 SAM 2 和此前最先进的技术,展现出显著改进:

基准测试指标SAM 3SAM 2.1 L改进
MOSEv2J&F60.147.9+25.5%
DAVIS 2017J&F92.090.7+1.4%
LVOSv2J&F88.279.6+10.8%
SA-VJ&F84.678.4+7.9%
YTVOS19J&F89.689.3+0.3%

小样本适应

SAM 3 擅长以最少示例适应新领域,这与 以数据为中心的 AI 工作流密切相关:

基准测试0-shot AP10-shot AP历史最佳 (10样本)
ODinW1359.971.667.9 (gDino1.5-Pro)
RF100-VL14.335.733.7 (gDino-T)

交互式细化效果

SAM 3 的基于概念的示例提示比视觉提示收敛速度快得多:

已添加提示CGF1分数增益与纯文本增益与 PVS 基线
仅文本46.4基线基线
+1 个范例57.6+11.2+6.7
+2 个范例62.2+15.8+9.7
+3 个范例65.0+18.6+11.2
+4 个范例65.7+19.3+11.5(稳定)

对象计数准确性

SAM 3 通过分割所有实例提供准确的计数,这是 目标计数 中的常见需求:

基准测试准确率MAE对比最佳 MLLM
CountBench95.6%0.1192.4% (Gemini 2.5)
PixMo-Count87.3%0.2288.8% (Molmo-72B)

SAM 3 vs SAM 2 vs YOLO 对比

在此,我们比较SAM 3与SAM 2和YOLO11模型的能力:

功能SAM 3SAM 2YOLO11n-seg
概念分割✅ 来自文本/示例的所有实例❌ 不支持❌ 不支持
视觉分割✅ 单实例(兼容 SAM 2)✅ 单实例✅ 所有实例
零样本能力✅ 开放词汇✅ 几何提示❌ 封闭集
交互式优化✅ 示例 + 点击✅ 仅限点击❌ 不支持
视频 track✅ 带身份的多对象✅ 多对象✅ 多对象
LVIS Mask AP(零样本)47.0N/AN/A
MOSEv2 J&F60.147.9N/A
推理速度 (H200)30 毫秒 (100+ 个目标)约23毫秒(每个对象)2-3 毫秒 (图像)
模型大小3.4GB162 MB (基础)5.9 MB

要点

  • SAM 3:最适合开放词汇概念分割,通过文本或示例提示查找概念的所有实例
  • SAM 2:最适合在图像和视频中使用几何提示进行交互式单目标分割
  • YOLO11:最适用于资源受限部署中的实时、高速segment,利用高效的导出管道,如ONNXTensorRT

评估指标

SAM 3 引入了专为 PCS 任务设计的新指标,补充了诸如 F1 分数精确度召回率 等熟悉度量。

分类门控F1 (CGF1)

结合定位和分类的主要指标是:

CGF1 = 100 × pmF1 × IL_MCC

其中:

  • pmF1(正向宏F1):衡量正样本上的定位质量
  • IL_MCC(图像级马修斯相关系数):衡量二元分类准确性(“概念是否存在?”)

为什么选择这些指标?

传统的 AP 指标不考虑校准,使得模型在实践中难以使用。通过仅评估置信度高于 0.5 的预测,SAM 3 的指标强制执行良好的校准,并模拟交互式 predicttrack 循环中的实际使用模式。

关键消融实验和见解

存在头的影响

存在头将识别与定位解耦,提供了显著改进:

配置CGF1IL_MCCpmF1
不存在时57.60.7774.7
存在时63.30.8277.1

存在头提供了+5.7 CGF1 的提升 (+9.9%),主要提高了识别能力 (IL_MCC +6.5%)。

难例负样本的影响

难负样本/图像CGF1IL_MCCpmF1
031.80.4470.2
544.80.6271.9
3049.20.6872.3

难负样本对于开放词汇识别至关重要,将 IL_MCC 提高了 54.5% (0.44 → 0.68)。

训练数据扩展

数据源CGF1IL_MCCpmF1
仅外部30.90.4666.3
外部 + 合成39.70.5770.6
外部 + 高质量51.80.7173.2
所有这三者54.30.7473.5

高质量人工标注相比单独使用合成数据或外部数据,能带来显著提升。有关数据质量实践的背景信息,请参阅数据收集和标注

应用

SAM 3 的概念分割能力开辟了新的应用场景:

  • 内容审核:在媒体库中查找所有特定内容类型的实例
  • 电子商务:在目录图像中分割特定类型的所有产品,支持自动标注
  • 医学成像:识别特定组织类型或异常的所有出现
  • 自主系统:按类别 track 交通标志、行人或车辆的所有实例
  • 视频分析:计数并 track 所有穿着特定服装或执行动作的人
  • 数据集标注:快速标注稀有目标类别的所有实例
  • 科学研究:量化并分析所有符合特定标准的样本

SAM 3 代理:扩展语言推理

SAM 3 可以与多模态大型语言模型 (MLLM) 结合,以处理需要推理的复杂查询,其理念类似于 OWLv2T-Rex 等开放词汇系统。

在推理任务上的性能

基准测试指标SAM 3 代理 (Gemini 2.5 Pro)历史最佳
ReasonSeg (验证)gIoU76.065.0 (SoTA)
ReasonSeg (测试)gIoU73.861.3 (SoTA)
OmniLabel(验证)AP46.736.5 (REAL)
RefCOCO+准确率91.289.3 (LISA)

复杂查询示例

SAM 3 代理可以处理需要推理的查询:

  • “坐着但没有拿着礼品盒的人”
  • “离相机最近的没有戴项圈的狗”
  • “比人的手大的红色物体”

MLLM 向 SAM 3 提出简单的名词短语查询,分析返回的掩码,并迭代直到满意。

局限性

尽管 SAM 3 代表了一项重大进步,但它也存在某些局限性:

  • 短语复杂度:最适合简单的名词短语;长的指代表达或复杂的推理可能需要 MLLM 集成。
  • 歧义处理:某些概念本质上仍然模棱两可(例如,“小窗户”、“舒适的房间”)
  • 计算要求:比 YOLO 等专用检测模型更大、更慢
  • 词汇范围:专注于原子视觉概念;在没有 MLLM 协助的情况下,组合推理能力有限。
  • 稀有概念:在训练数据中未充分表示的极其稀有或细粒度概念上,性能可能会下降。

引用

@inproceedings{sam3_2025,
  title     = {SAM 3: Segment Anything with Concepts},
  author    = {Anonymous authors},
  booktitle = {Submitted to ICLR 2026},
  year      = {2025},
  url       = {https://openreview.net/forum?id=r35clVtGzw},
  note      = {Paper ID: 4183, under double-blind review}
}

常见问题

SAM 3 是何时发布的?

SAM 3 由 Meta 于 2025 年 11 月 20 日 发布,并自 版本 8.3.237 (PR #22897) 起已完全集成到 Ultralytics 中。现已全面支持 预测模式track 模式

SAM 3 是否已集成到 Ultralytics 中?

是的!SAM 3 已完全集成到 Ultralytics Python 包中,包括概念分割、SAM 2 风格的视觉提示以及多目标视频 track。您可以导出ONNXTensorRT 等格式进行部署,并采用简化的 PythonCLI 工作流程。

可提示概念分割 (PCS) 是什么?

PCS 是 SAM 3 中引入的一项新任务,它用于 segment 图像或视频中视觉概念的所有实例。与针对特定对象实例的传统 segment 不同,PCS 能够找到某个类别的所有出现。例如:

  • 文本提示:“黄色校车” → 分割场景中所有黄色校车
  • 图像示例:框选一只狗 → segment图像中所有狗
  • 组合:“条纹猫” + 示例框 → segment 所有与示例匹配的条纹猫

了解有关目标检测实例分割的相关背景信息。

SAM 3与SAM 2有何不同?

特性SAM 2SAM 3
任务每个提示一个目标某个概念的所有实例
提示类型点、框、掩码+ 文本短语、图像范例
检测能力需要外部detector内置开放词汇 detect 器
识别仅基于几何文本与视觉识别
架构仅跟踪器检测器 + 跟踪器,带存在头
零样本性能不适用(需要视觉提示)LVIS 上 47.0 AP,SA-Co 上提升 2 倍
交互式优化仅点击点击 + 示例泛化

SAM 3 保持与 SAM 2 视觉提示的向后兼容性,同时增加了基于概念的功能。

SAM 3使用哪些数据集进行训练?

SAM 3 在 Segment Anything with Concepts (SA-Co) 数据集上进行训练:

训练数据

  • 520 万张图像,包含 400 万个独特的名词短语 (SA-Co/HQ) - 高质量人工标注
  • 5.25 万个视频,包含 2.48 万个独特的名词短语 (SA-Co/VIDEO)
  • 1.4B 合成遮罩 遍及 38M 名词短语 (SA-Co/SYN)
  • 15 个外部数据集 使用难分辨的负样本进行了丰富 (SA-Co/EXT)

基准数据

  • 214K 独特概念 遍及 126K 图像/视频
  • 比现有基准多 50 倍的概念 (例如,LVIS 有约 4K 个概念)
  • 对 SA-Co/Gold 进行三重标注,以衡量人类性能边界

这种大规模和多样性使得 SAM 3 能够实现跨越开放词汇概念的卓越零样本泛化能力。

SAM 3与YOLO11在分割方面相比如何?

SAM 3 和 YOLO11 服务于不同的用例:

SAM 3 优势

  • 开放词汇:通过文本提示分割任何概念,无需训练
  • 零样本: 立即适用于新类别
  • 交互式:基于示例的 refinement 泛化到相似对象
  • 基于概念:自动查找某个类别的所有实例
  • 精度:LVIS 零样本实例分割的 47.0 AP

YOLO11优势:

  • 速度:推理速度快 10-15 倍(每张图像 2-3 毫秒对比 30 毫秒)
  • 效率:体积缩小576倍(5.9MB vs 3.4GB)
  • 资源友好型:可在边缘设备和移动设备上运行
  • 实时:针对生产部署进行了优化

推荐

  • 使用SAM 3进行灵活的开放词汇segmentation,您需要找到由文本或示例描述的概念的所有实例
  • 使用YOLO11进行高速生产部署,其中类别是预先已知的
  • 使用SAM 2进行交互式单目标segmentation,并结合几何提示

SAM 3能处理复杂的语言查询吗?

SAM 3 专为简单名词短语设计(例如,“红苹果”,“戴帽子的人”)。对于需要推理的复杂查询,将 SAM 3 与 MLLM 结合作为 SAM 3 Agent

简单查询 (原生SAM 3):

  • “黄色校车”
  • “条纹猫”
  • “戴着红帽子的人”

复杂查询(带MLLM的SAM 3 Agent)

  • “坐着但没有拿着礼品盒的人”
  • “离相机最近的没有项圈的狗”
  • “比人的手大的红色物体”

SAM 3 代理通过将 SAM 3 的分割与 MLLM 推理能力相结合,在 ReasonSeg 验证中实现了 76.0 GIoU(而之前的最佳成绩为 65.0,提高了 16.9%)。

SAM 3 与人类表现相比,准确度如何?

在 SA-Co/Gold 基准测试中,采用三重人工标注:

  • 人工下限:74.2 CGF1(最保守的标注者)
  • SAM 3 性能:65.0 CGF1
  • 成就:估计人类下限的 88%
  • 人类上限:81.4 CGF1(最宽松的标注者)

SAM 3 在开放词汇概念分割方面取得了接近人类水平的强大性能,差距主要体现在模糊或主观概念(例如,“小窗户”、“舒适的房间”)上。



📅 2个月前创建 ✏️ 1天前更新
glenn-jocherY-T-G凯瑟姆·麦克努恩RizwanMunawarLaughing-q

评论