Ultralytics 中文文档(四)
移动端任意分割(MobileSAM)
MobileSAM 的论文现已在arXiv上发布。
可以通过此演示链接访问 MobileSAM 在 CPU 上运行的演示。在 Mac i5 CPU 上,每张图片大约需要 3 秒。在 Hugging Face 的演示中,界面和性能较低的 CPU 导致响应速度较慢,但功能仍然有效。
MobileSAM 已在多个项目中实施,包括Grounding-SAM,AnyLabeling,以及3D 中的任意分割。
MobileSAM 在单个 GPU 上训练,使用了 100k 数据集(原始图像的 1%)不到一天时间。该训练的代码将在未来公布。
可用模型、支持的任务和操作模式
此表显示了可用模型及其特定的预训练权重,它们支持的任务以及它们与不同操作模式(支持的模式用✅标示,不支持的模式用❌标示)的兼容性。
模型类型 | 预训练权重 | 支持的任务 | 推理 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
从 SAM 适配到 MobileSAM
由于 MobileSAM 保留了与原始 SAM 相同的管道,我们已经整合了原始的预处理、后处理和所有其他接口。因此,当前使用原始 SAM 的用户可以以最小的努力过渡到 MobileSAM。
MobileSAM 在执行方面与原始 SAM 相媲美,并且保留了相同的管道,只是更改了图像编码器。具体来说,我们用更小的 Tiny-ViT(5M)替换了原始的重型 ViT-H 编码器(632M)。在单个 GPU 上,MobileSAM 每张图片的操作时间约为 12ms:图像编码器为 8ms,蒙版解码器为 4ms。
下表提供了基于 ViT 的图像编码器的比较:
图像编码器 | 原始 SAM | MobileSAM |
---|---|---|
参数 | 611M | 5M |
速度 | 452ms | 8ms |
原始 SAM 和 MobileSAM 都利用相同的提示引导蒙版解码器:
蒙版解码器 | 原始 SAM | MobileSAM |
---|---|---|
参数 | 3.876M | 3.876M |
速度 | 4ms | 4ms |
下面是整体管道的比较:
整体管道(Enc+Dec) | 原始 SAM | MobileSAM |
---|---|---|
参数 | 615M | 9.66M |
速度 | 456ms | 12ms |
MobileSAM 和原始 SAM 的性能通过点和框提示进行演示。
凭借其卓越的性能,MobileSAM 比当前的 FastSAM 大约小了 5 倍,速度快了 7 倍。更多细节请参阅 MobileSAM 项目页面。
在 Ultralytics 中测试 MobileSAM
就像原始的 SAM 一样,我们在 Ultralytics 中提供了一种简单直接的测试方法,包括点和框提示的模式。
模型下载
您可以在 这里 下载该模型。
点提示
示例
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
框提示
示例
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a box prompt
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
我们使用相同的 API 实现了 MobileSAM
和 SAM
。有关更多使用信息,请参阅 SAM 页面。
引用和致谢
如果您在研究或开发工作中发现 MobileSAM 有用,请考虑引用我们的论文:
@article{mobile_sam,
title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung Ho and Lee, Seungkyu and Hong, Choong Seon},
journal={arXiv preprint arXiv:2306.14289},
year={2023}
}
常见问题
MobileSAM 是什么,它与原始 SAM 模型有什么不同?
MobileSAM 是一种专为移动应用设计的轻量级快速图像分割模型。它保留了与原始 SAM 相同的管道,但将笨重的 ViT-H 编码器(632M 参数)替换为较小的 Tiny-ViT 编码器(5M 参数)。这一改变使 MobileSAM 大约小了 5 倍,速度快了 7 倍。例如,MobileSAM 每张图像的操作速度约为 12 毫秒,而原始 SAM 则为 456 毫秒。您可以在各种项目中了解更多关于 MobileSAM 实现的信息 这里。
如何使用 Ultralytics 测试 MobileSAM?
通过简单的方法即可完成在 Ultralytics 中测试 MobileSAM。您可以使用点和框提示来预测段。以下是使用点提示的示例:
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
您还可以参考《测试 MobileSAM》部分获取更多详细信息。
为什么我应该在我的移动应用中使用 MobileSAM?
由于其轻量级架构和快速推理速度,MobileSAM 非常适合移动应用。与原始的 SAM 相比,MobileSAM 大约小了 5 倍,速度快了 7 倍,适合计算资源有限的环境。这种效率确保了移动设备可以在没有显著延迟的情况下进行实时图像分割。此外,MobileSAM 的模型(如推理模型)已经优化,以提升移动性能。
MobileSAM 是如何训练的,训练代码是否可用?
MobileSAM 在少于一天的时间内使用单个 GPU 训练了一个包含 10 万张数据集的模型,这相当于原始图像的 1%。虽然训练代码将来会公开,但目前您可以在 MobileSAM GitHub 仓库 中了解 MobileSAM 的其他方面。该仓库包括预训练权重和各种应用的实现细节。
MobileSAM 的主要用例是什么?
MobileSAM 旨在移动环境中实现快速高效的图像分割。主要用例包括:
-
移动应用的实时目标检测和分割。
-
低延迟图像处理,适用于计算资源有限的设备。
-
人工智能驱动的移动应用中的集成,用于增强现实(AR)和实时分析等任务。
有关更详细的用例和性能比较,请参见从 SAM 到 MobileSAM 的适应部分。
Fast Segment Anything Model (FastSAM)
Fast Segment Anything Model (FastSAM) 是一种新颖的基于实时 CNN 的解决方案,用于任意分段任务。该任务旨在基于各种可能的用户交互提示对图像中的任意对象进行分割。FastSAM 显著降低了计算需求,同时保持了竞争性能,使其成为各种视觉任务的实用选择。
www.youtube.com/embed/F7db-EHhxss
观看: 使用 FastSAM 进行对象跟踪与 Ultralytics
模型架构
概述
FastSAM 的设计旨在解决 Segment Anything Model (SAM) 的局限性,SAM 是一个具有重大计算资源要求的沉重 Transformer 模型。FastSAM 将任意分段任务解耦为两个连续阶段:所有实例分割和提示引导选择。第一阶段使用 YOLOv8-seg 生成图像中所有实例的分割蒙版。在第二阶段,它输出与提示相对应的感兴趣区域。
关键特点
-
实时解决方案: 利用 CNN 的计算效率,FastSAM 提供了针对任意分段任务的实时解决方案,对于需要快速结果的工业应用非常有价值。
-
效率和性能: FastSAM 在不影响性能质量的前提下,显著减少了计算和资源需求。它实现了与 SAM 相当的性能,但计算资源大大减少,能够实时应用。
-
提示引导分割: FastSAM 可以根据各种可能的用户交互提示分割图像中的任意对象,在不同场景中提供灵活性和适应性。
-
基于 YOLOv8-seg: FastSAM 基于 YOLOv8-seg,这是一个装备有实例分割分支的物体检测器。这使得它能够有效地生成图像中所有实例的分割蒙版。
-
在基准测试中的竞争结果: 在单个 NVIDIA RTX 3090 上,FastSAM 在 MS COCO 的对象提议任务上以显著更快的速度取得了高分,比 SAM 更有效率和能力强大。
-
实际应用: 所提出的方法以极高的速度为大量视觉任务提供了新的实用解决方案,比当前方法快十倍甚至百倍。
-
模型压缩可行性: FastSAM 展示了通过引入结构人工先验显著减少计算工作的路径的可行性,从而为一般视觉任务的大型模型架构开辟了新的可能性。
可用模型、支持任务和操作模式
此表格显示了可用模型及其特定的预训练权重,它们支持的任务以及它们与不同操作模式(推断、验证、训练和导出)的兼容性。支持的模式用✅表示,不支持的模式用❌表示。
模型类型 | 预训练权重 | 支持的任务 | 推断 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | 实例分割 | ✅ | ❌ | ❌ | ✅ |
FastSAM-x | FastSAM-x.pt | 实例分割 | ✅ | ❌ | ❌ | ✅ |
使用示例
FastSAM 模型易于集成到您的 Python 应用程序中。Ultralytics 提供了用户友好的 Python API 和 CLI 命令,以简化开发流程。
预测用法
要在图像上执行目标检测,使用如下所示的predict
方法:
示例
from ultralytics import FastSAM
# Define an inference source
source = "path/to/bus.jpg"
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])
# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])
# Run inference with texts prompt
results = model(source, texts="a photo of a dog")
# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640
此代码段演示了加载预训练模型并在图像上运行预测的简易性。
FastSAMPredictor 示例
通过这种方式,您可以在图像上运行推断并一次性获取所有段results
,而无需多次运行推断。
from ultralytics.models.fastsam import FastSAMPredictor
# Create FastSAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", model="FastSAM-s.pt", save=False, imgsz=1024)
predictor = FastSAMPredictor(overrides=overrides)
# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")
# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")
注意
上述示例中所有返回的results
都是 Results 对象,可以轻松访问预测的掩模和源图像。
验证用法
在数据集上验证模型可以按以下步骤完成:
示例
from ultralytics import FastSAM
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Validate the model
results = model.val(data="coco8-seg.yaml")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640
请注意,FastSAM 仅支持单类对象的检测和分割。这意味着它将所有对象识别并分割为相同的类别。因此,在准备数据集时,需要将所有对象的类别 ID 转换为 0。
跟踪用法
要在图像上执行目标跟踪,使用如下所示的track
方法:
示例
from ultralytics import FastSAM
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)
yolo segment track model=FastSAM-s.pt source="path/to/video/file.mp4" imgsz=640
FastSAM 官方用法
FastSAM 还可以直接从github.com/CASIA-IVA-Lab/FastSAM
存储库获取。这里简要介绍了使用 FastSAM 的典型步骤:
安装
-
克隆 FastSAM 存储库:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
-
创建并激活一个带有 Python 3.9 的 Conda 环境:
conda create -n FastSAM python=3.9 conda activate FastSAM
-
导航至克隆的存储库并安装所需的包:
cd FastSAM pip install -r requirements.txt
-
安装 CLIP 模型:
pip install git+https://github.com/ultralytics/CLIP.git
用法示例
-
下载模型检查点。
-
使用 FastSAM 进行推断。示例命令:
-
在图像中分割所有内容:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
-
使用文本提示分割特定对象:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
-
在边界框内分割对象(以 xywh 格式提供框坐标):
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
-
在特定点附近分割对象:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"
-
此外,您可以通过Colab 演示或HuggingFace 网络演示来尝试 FastSAM,获得视觉体验。
引文和致谢
我们要感谢 FastSAM 的作者在实时实例分割领域做出的重要贡献:
@misc{zhao2023fast,
title={Fast Segment Anything},
author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
year={2023},
eprint={2306.12156},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
最初的 FastSAM 论文可以在arXiv上找到。作者已经公开了他们的工作,并且代码库可以在GitHub上访问。我们感谢他们在推动该领域发展并使其工作对更广泛的社区可用的努力。
常见问题解答(FAQ)
FastSAM 是什么,与 SAM 有何不同?
FastSAM,即快速任意物体模型,是基于实时卷积神经网络(CNN)的解决方案,旨在减少计算需求,同时在物体分割任务中保持高性能。与使用更重的基于 Transformer 的架构的 Segment Anything Model(SAM)不同,FastSAM 利用 Ultralytics YOLOv8-seg 在两个阶段进行高效实例分割:全对象分割,然后是提示引导选择。
FastSAM 如何实现实时分割性能?
FastSAM 通过将分割任务解耦成全对象分割和提示引导选择两个阶段实现了实时分割。利用 CNN 的计算效率,FastSAM 在减少计算和资源需求方面取得了显著成效,同时保持竞争性能。这种双阶段方法使 FastSAM 能够提供适用于需要快速结果的应用的快速高效的分割。
FastSAM 的实际应用有哪些?
FastSAM 非常适用于需要实时分割性能的各种计算机视觉任务。应用包括:
-
用于质量控制和保证的工业自动化
-
用于安全监控和监视的实时视频分析
-
用于物体检测和分割的自动驾驶车辆
-
用于精确和快速分割任务的医学影像
其处理各种用户交互提示的能力使 FastSAM 适应性强,能够在各种情景下灵活应用。
如何在 Python 中使用 FastSAM 模型进行推理?
要在 Python 中使用 FastSAM 进行推理,可以参考以下示例:
from ultralytics import FastSAM
# Define an inference source
source = "path/to/bus.jpg"
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])
# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])
# Run inference with texts prompt
results = model(source, texts="a photo of a dog")
# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
有关推理方法的详细信息,请查看文档的预测使用部分。
FastSAM 支持哪些提示类型用于分割任务?
FastSAM 支持多种提示类型来引导分割任务:
-
全对象提示:为所有可见对象生成分割结果。
-
边界框(BBox)提示:在指定的边界框内分割对象。
-
文本提示:使用描述性文本来分割与描述匹配的对象。
-
点提示:根据用户定义的特定点附近分割对象。
这种灵活性使 FastSAM 能够适应广泛的用户交互场景,增强其在不同应用中的实用性。有关使用这些提示的更多信息,请参阅关键特性部分。
YOLO-NAS
概述
由 Deci AI 开发,YOLO-NAS 是一个开创性的物体检测基础模型。它是先进的神经架构搜索技术的产物,精心设计以解决以往 YOLO 模型的局限性。通过在量化支持和精度-延迟权衡方面显著改进,YOLO-NAS 代表了物体检测领域的重大进步。
YOLO-NAS 概述。 YOLO-NAS 采用量化感知块和选择性量化以实现最佳性能。当转换为其 INT8 量化版本时,该模型经历了最小的精度下降,远优于其他模型。这些进步使其成为一个具有突出物体检测能力和出色性能的优越架构。
主要特点
-
Quantization-Friendly Basic Block: YOLO-NAS 引入了一种新的基本块,非常适合量化,解决了以往 YOLO 模型的一个显著限制。
-
Sophisticated Training and Quantization: YOLO-NAS 利用先进的训练方案和后训练量化来增强性能。
-
AutoNAC Optimization and Pre-training: YOLO-NAS 利用 AutoNAC 优化,并在著名数据集如 COCO、Objects365 和 Roboflow 100 上进行了预训练。这种预训练使其在生产环境中非常适合下游目标检测任务。
预训练模型
通过 Ultralytics 提供的预训练 YOLO-NAS 模型,体验下一代物体检测的强大功能。这些模型旨在在速度和准确性方面提供一流性能。根据您的特定需求选择多种选项:
模型 | mAP | 延迟(毫秒) |
---|---|---|
YOLO-NAS S | 47.5 | 3.21 |
YOLO-NAS M | 51.55 | 5.85 |
YOLO-NAS L | 52.22 | 7.87 |
YOLO-NAS S INT-8 | 47.03 | 2.36 |
YOLO-NAS M INT-8 | 51.0 | 3.78 |
YOLO-NAS L INT-8 | 52.1 | 4.78 |
每个模型变体都旨在在均值平均精度(mAP)和延迟之间提供平衡,帮助您优化目标检测任务的性能和速度。
使用示例
Ultralytics 已经通过我们的ultralytics
Python 包,使 YOLO-NAS 模型易于集成到您的 Python 应用程序中。该包提供了一个用户友好的 Python API,以简化整个过程。
以下示例展示了如何使用ultralytics
包中的 YOLO-NAS 模型进行推断和验证:
推断和验证示例
在这个示例中,我们在 COCO8 数据集上验证了 YOLO-NAS-s。
示例
此示例提供了 YOLO-NAS 的简单推断和验证代码。有关处理推断结果,请参见预测模式。有关使用具有其他模式的 YOLO-NAS,请参见 Val 和 Export。ultralytics
包中的 YOLO-NAS 不支持训练。
可以将 PyTorch 预训练的*.pt
模型文件传递给NAS()
类以在 Python 中创建一个模型实例:
from ultralytics import NAS
# Load a COCO-pretrained YOLO-NAS-s model
model = NAS("yolo_nas_s.pt")
# Display model information (optional)
model.info()
# Validate the model on the COCO8 example dataset
results = model.val(data="coco8.yaml")
# Run inference with the YOLO-NAS-s model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
可以直接运行模型的 CLI 命令:
# Load a COCO-pretrained YOLO-NAS-s model and validate it's performance on the COCO8 example dataset
yolo val model=yolo_nas_s.pt data=coco8.yaml
# Load a COCO-pretrained YOLO-NAS-s model and run inference on the 'bus.jpg' image
yolo predict model=yolo_nas_s.pt source=path/to/bus.jpg
支持的任务和模式
我们提供了 YOLO-NAS 模型的三个变体:小型(s)、中型(m)和大型(l)。每个变体都设计用于满足不同的计算和性能需求:
-
YOLO-NAS-s:针对计算资源有限但效率至关重要的环境进行了优化。
-
YOLO-NAS-m:提供了一种平衡的方法,适用于具有更高准确性的通用物体检测。
-
YOLO-NAS-l:为需要最高准确性场景量身定制,计算资源不再是限制因素。
下面详细介绍了每个模型,包括它们预训练权重的链接、它们支持的任务以及它们与不同操作模式的兼容性。
模型类型 | 预训练权重 | 支持的任务 | 推理 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
YOLO-NAS-s | yolo_nas_s.pt | 物体检测 | ✅ | ✅ | ❌ | ✅ |
YOLO-NAS-m | yolo_nas_m.pt | 物体检测 | ✅ | ✅ | ❌ | ✅ |
YOLO-NAS-l | yolo_nas_l.pt | 物体检测 | ✅ | ✅ | ❌ | ✅ |
引用和致谢
如果您在研究或开发工作中使用 YOLO-NAS,请引用 SuperGradients:
@misc{supergradients,
doi = {10.5281/ZENODO.7789328},
url = {https://zenodo.org/record/7789328},
author = {Aharon, Shay and {Louis-Dupont} and {Ofri Masad} and Yurkova, Kate and {Lotem Fridman} and {Lkdci} and Khvedchenya, Eugene and Rubin, Ran and Bagrov, Natan and Tymchenko, Borys and Keren, Tomer and Zhilko, Alexander and {Eran-Deci}},
title = {Super-Gradients},
publisher = {GitHub},
journal = {GitHub repository},
year = {2021},
}
我们感谢 Deci AI 的SuperGradients团队为计算机视觉社区创造和维护这一宝贵资源所付出的努力。我们相信 YOLO-NAS 以其创新的架构和卓越的物体检测能力,将成为开发者和研究人员的重要工具。
常见问题解答
YOLO-NAS 是什么,它如何改进之前的 YOLO 模型?
YOLO-NAS 是由 Deci AI 开发的一种先进的物体检测模型,利用先进的神经架构搜索(NAS)技术。它通过引入量化友好的基本块和复杂的训练方案来解决之前 YOLO 模型的限制。这导致在性能上有显著改进,特别是在计算资源有限的环境中。YOLO-NAS 还支持量化,在转换为其 INT8 版本时保持高准确性,增强了其在生产环境中的适用性。有关更多详细信息,请参阅概述部分。
如何将 YOLO-NAS 模型集成到我的 Python 应用程序中?
您可以使用ultralytics
包轻松集成 YOLO-NAS 模型到您的 Python 应用程序中。这里是一个加载预训练 YOLO-NAS 模型并进行推断的简单示例:
from ultralytics import NAS
# Load a COCO-pretrained YOLO-NAS-s model
model = NAS("yolo_nas_s.pt")
# Validate the model on the COCO8 example dataset
results = model.val(data="coco8.yaml")
# Run inference with the YOLO-NAS-s model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
获取推理和验证示例的更多信息,请参考。
YOLO-NAS 的关键特性及其为何值得考虑使用的原因是什么?
YOLO-NAS 引入了几个关键特性,使其成为对象检测任务的优选:
-
量化友好的基本块:增强架构,在量化后最小化精度损失的同时提高模型性能。
-
精细化训练和量化:采用先进的训练方案和训练后量化技术。
-
AutoNAC 优化和预训练:利用 AutoNAC 优化并预训练于 COCO、Objects365 和 Roboflow 100 等知名数据集。这些特性提高了其在高精度、高效性能及适合生产环境部署方面的表现。详细了解请参考关键特性部分。
YOLO-NAS 模型支持哪些任务和模式?
YOLO-NAS 模型支持各种对象检测任务和模式,如推理、验证和导出。它们不支持训练。支持的模型包括 YOLO-NAS-s、YOLO-NAS-m 和 YOLO-NAS-l,每个模型都针对不同的计算能力和性能需求进行了优化。详细概述请参考支持的任务和模式部分。
是否有预训练的 YOLO-NAS 模型可用,如何访问它们?
是的,Ultralytics 提供了预训练的 YOLO-NAS 模型,您可以直接访问。这些模型在诸如 COCO 等数据集上进行了预训练,保证了在速度和准确性方面的高性能。您可以通过预训练模型部分提供的链接下载这些模型。以下是一些示例:
百度的 RT-DETR:基于视觉 Transformer 的实时目标检测器
概述
由百度开发的实时检测变压器(RT-DETR)是一种先进的端到端目标检测器,提供实时性能的同时保持高准确性。它基于 DETR(无 NMS 框架)的思想,同时引入了基于卷积的骨干和高效的混合编码器以实现实时速度。RT-DETR 通过解耦内部尺度交互和跨尺度融合高效处理多尺度特征。该模型高度灵活,支持使用不同的解码器层调整推理速度,无需重新训练。RT-DETR 在像 CUDA 与 TensorRT 这样的加速后端上表现优异,胜过许多其他实时目标检测器。
www.youtube.com/embed/SArFQs6CHwk
监视: 实时检测变压器(RT-DETR)
百度 RT-DETR 概述。 RT-DETR 模型架构图显示了作为编码器输入的骨干网的最后三个阶段 {S3, S4, S5}。高效的混合编码器通过内部尺度特征交互(AIFI)和跨尺度特征融合模块(CCFM),将多尺度特征转换为图像特征序列。使用 IoU 感知查询选择来选择一定数量的图像特征,作为解码器的初始对象查询。最后,解码器通过辅助预测头迭代优化对象查询,生成框和置信度分数(来源)。
主要特点
-
高效的混合编码器: 百度的 RT-DETR 采用高效的混合编码器,通过解耦内部尺度交互和跨尺度融合来处理多尺度特征。这种基于视觉 Transformer 的独特设计降低了计算成本,实现了实时目标检测。
-
IoU 感知查询选择: 百度的 RT-DETR 通过使用 IoU 感知查询选择来改进对象查询初始化。这使得模型能够集中精力处理场景中最相关的对象,从而提高检测精度。
-
可调节的推理速度: 百度的 RT-DETR 通过使用不同的解码器层,无需重新训练即可支持灵活调整推理速度。这种适应性促进了在各种实时目标检测场景中的实际应用。
预训练模型
Ultralytics Python API 提供了预训练的 PaddlePaddle RT-DETR 模型,具有不同的规模:
-
RT-DETR-L:在 COCO val2017 上达到 53.0%的 AP,T4 GPU 上的帧率为 114 FPS
-
RT-DETR-X:在 COCO val2017 上达到 54.8%的 AP,T4 GPU 上的帧率为 74 FPS
使用示例
本示例提供了简单的 RT-DETR 训练和推理示例。有关这些以及其他模式的完整文档,请参阅预测、训练、验证和导出文档页面。
示例
from ultralytics import RTDETR
# Load a COCO-pretrained RT-DETR-l model
model = RTDETR("rtdetr-l.pt")
# Display model information (optional)
model.info()
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the RT-DETR-l model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a COCO-pretrained RT-DETR-l model and train it on the COCO8 example dataset for 100 epochs
yolo train model=rtdetr-l.pt data=coco8.yaml epochs=100 imgsz=640
# Load a COCO-pretrained RT-DETR-l model and run inference on the 'bus.jpg' image
yolo predict model=rtdetr-l.pt source=path/to/bus.jpg
支持的任务和模式
该表格展示了各个模型类型、具体的预训练权重、每个模型支持的任务,以及通过✅表情符号表示的各种模式(训练、验证、预测、导出)。
模型类型 | 预训练权重 | 支持的任务 | 推断 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
RT-DETR 大型 | rtdetr-l.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
RT-DETR 超大型 | rtdetr-x.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
引用和致谢
如果您在研究或开发工作中使用百度的 RT-DETR,请引用原始论文:
@misc{lv2023detrs,
title={DETRs Beat YOLOs on Real-time Object Detection},
author={Wenyu Lv and Shangliang Xu and Yian Zhao and Guanzhong Wang and Jinman Wei and Cheng Cui and Yuning Du and Qingqing Dang and Yi Liu},
year={2023},
eprint={2304.08069},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
我们要感谢百度和PaddlePaddle团队为计算机视觉社区创建和维护这一宝贵资源。他们通过开发基于 Vision Transformers 的实时目标检测器 RT-DETR,为该领域做出了重要贡献,深受赞赏。
常见问题
百度的 RT-DETR 模型是什么,它是如何工作的?
百度的 RT-DETR(Real-Time Detection Transformer)是基于 Vision Transformer 架构构建的先进实时目标检测器。它通过其高效的混合编码器有效处理多尺度特征,通过解耦内尺度交互和跨尺度融合。通过采用 IoU 感知的查询选择,该模型专注于最相关的对象,增强了检测精度。其可调节的推断速度,通过调整解码器层而无需重新训练,使 RT-DETR 适用于各种实时目标检测场景。在这里了解更多关于 RT-DETR 的特性链接。
我如何使用 Ultralytics 提供的预训练 RT-DETR 模型?
你可以利用 Ultralytics Python API 使用预训练的 PaddlePaddle RT-DETR 模型。例如,要加载在 COCO val2017 上预训练的 RT-DETR-l 模型,并在 T4 GPU 上实现高 FPS,您可以使用以下示例:
示例
from ultralytics import RTDETR
# Load a COCO-pretrained RT-DETR-l model
model = RTDETR("rtdetr-l.pt")
# Display model information (optional)
model.info()
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the RT-DETR-l model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a COCO-pretrained RT-DETR-l model and train it on the COCO8 example dataset for 100 epochs
yolo train model=rtdetr-l.pt data=coco8.yaml epochs=100 imgsz=640
# Load a COCO-pretrained RT-DETR-l model and run inference on the 'bus.jpg' image
yolo predict model=rtdetr-l.pt source=path/to/bus.jpg
为什么应该选择百度的 RT-DETR 而不是其他实时目标检测器?
百度的 RT-DETR 凭借其高效的混合编码器和 IoU 感知的查询选择而脱颖而出,大幅降低计算成本同时保持高准确性。其通过使用不同的解码器层而无需重新训练来调整推断速度的独特能力,增加了显著的灵活性。这使得它特别适用于在 CUDA 与 TensorRT 等加速后端上需要实时性能的应用,胜过许多其他实时目标检测器。
RT-DETR 如何支持不同实时应用的可调节推断速度?
Baidu 的 RT-DETR 可以通过使用不同的解码器层来灵活调整推理速度,而无需重新训练。这种适应性对于在各种实时目标检测任务中提升性能至关重要。无论您需要更快的处理以满足低精度需求,还是更慢但更精确的检测,RT-DETR 都可以定制以满足您的特定要求。
我能在其他 Ultralytics 模式下使用 RT-DETR 模型吗,比如训练、验证和导出?
是的,RT-DETR 模型与包括训练、验证、预测和导出在内的多种 Ultralytics 模式兼容。您可以参考相应的文档以获取如何利用这些模式的详细说明:Train、Val、Predict 和 Export。这确保了开发和部署您的目标检测解决方案的全面工作流程。
YOLO-World 模型
YOLO-World 模型引入了基于 Ultralytics YOLOv8 的先进实时方法,用于开放词汇检测任务。该创新能够根据描述性文本在图像中检测任何对象。通过显著降低计算需求,同时保持竞争性能,YOLO-World 成为多种基于视觉的应用的多功能工具。
www.youtube.com/embed/cfTKj96TjSE
观看: YOLO World 自定义数据集的训练工作流程
概览
YOLO-World 解决了传统开放词汇检测模型面临的挑战,这些模型通常依赖于耗费大量计算资源的繁琐 Transformer 模型。这些模型对预定义的物体类别的依赖也限制了它们在动态场景中的实用性。YOLO-World 通过视觉语言建模和在大规模数据集上的预训练,在零-shot 场景中卓越地识别广泛对象。
主要特点
-
实时解决方案: 利用 CNN 的计算速度,YOLO-World 提供了快速的开放词汇检测解决方案,满足需要即时结果的行业需求。
-
效率与性能: YOLO-World 在不牺牲性能的情况下大幅削减了计算和资源需求,提供了 SAM 等模型的强大替代方案,但计算成本仅为其一小部分,支持实时应用。
-
离线词汇推断: YOLO-World 引入了一种“提示-检测”策略,采用离线词汇进一步提升效率。这种方法允许使用预先计算的自定义提示,如标题或类别,作为离线词汇嵌入进行编码和存储,从而简化检测过程。
-
由 YOLOv8 驱动: 基于 Ultralytics YOLOv8 构建的 YOLO-World,利用实时目标检测的最新进展,实现了开放词汇检测,具有无与伦比的准确性和速度。
-
基准卓越: YOLO-World 在标准基准测试中表现优于现有的开放词汇检测器,包括 MDETR 和 GLIP 系列,展示了 YOLOv8 在单个 NVIDIA V100 GPU 上的卓越能力。
-
多用途应用: YOLO-World 的创新方法为多种视觉任务开辟了新的可能性,大幅提升了速度,比现有方法快上数个数量级。
可用模型、支持的任务和操作模式
此部分详细介绍了具体预训练权重的可用模型、它们支持的任务以及它们与各种操作模式的兼容性,推理、验证、训练和导出分别用✅表示支持和❌表示不支持。
Note
所有 YOLOv8-World 的权重都直接从官方YOLO-World存储库迁移,突显了它们的卓越贡献。
Model Type | 预训练权重 | 支持的任务 | 推理 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
在 COCO 数据集上进行零-shot 转移
Model Type | mAP | mAP50 | mAP75 |
---|---|---|---|
yolov8s-world | 37.4 | 52.0 | 40.6 |
yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
yolov8m-world | 42.0 | 57.0 | 45.6 |
yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
yolov8l-world | 45.7 | 61.3 | 49.8 |
yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
yolov8x-world | 47.0 | 63.0 | 51.2 |
yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
用法示例
YOLO-World 模型易于集成到您的 Python 应用程序中。Ultralytics 提供了用户友好的 Python API 和 CLI 命令,以简化开发。
训练用法
Tip
强烈推荐使用yolov8-worldv2
模型进行自定义训练,因为它支持确定性训练,并且容易导出其他格式,例如 onnx/tensorrt。
使用train
方法进行目标检测非常简单,如下所示:
示例
可以将预训练的 PyTorch *.pt
模型以及配置*.yaml
文件传递给YOLOWorld()
类,在 Python 中创建模型实例:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640
预测用法
使用predict
方法进行目标检测非常简单,如下所示:
示例
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640
此代码片段展示了加载预训练模型并在图像上进行预测的简易性。
Val 使用
在数据集上进行模型验证的简化步骤如下:
示例
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640
跟踪使用情况
使用 YOLO-World 模型在视频/图像上进行对象跟踪的简化步骤如下:
示例
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video/file.mp4"
注意
由 Ultralytics 提供的 YOLO-World 模型已预配置为离线词汇表的 COCO 数据集类别的一部分,提升了立即应用的效率。这种集成使得 YOLOv8-World 模型能直接识别和预测 COCO 数据集定义的 80 个标准类别,无需额外的设置或定制。
设置提示
YOLO-World 框架允许通过自定义提示动态指定类别,让用户根据特定需求定制模型,无需重新训练。此功能特别适用于将模型适应原始训练数据中未包含的新领域或特定任务。通过设置自定义提示,用户可以引导模型关注感兴趣的对象,从而提高检测结果的相关性和准确性。
例如,如果您的应用程序只需要检测'人'和'公交车'对象,您可以直接指定这些类别:
示例
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
在设置自定义类后,您还可以保存模型。通过这样做,您可以创建一个专门针对特定用例的 YOLO-World 模型版本。此过程将您的自定义类定义直接嵌入到模型文件中,使得模型准备好使用您指定的类别,无需进一步调整。按照以下步骤保存和加载您的自定义 YOLOv8 模型:
示例
首先加载一个 YOLO-World 模型,为其设置自定义类别并保存:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")
保存后,custom_yolov8s.pt 模型与任何其他预训练的 YOLOv8 模型一样工作,但有一个关键区别:它现在优化为仅检测您定义的类别。这种定制可以显著提高特定应用场景中的检测性能和效率。
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
保存具有自定义词汇的好处
-
效率:通过专注于相关对象,简化检测过程,减少计算开销并加快推理速度。
-
灵活性:允许轻松调整模型以适应新的或小众检测任务,无需进行大量的重新训练或数据收集。
-
简易性:通过在运行时消除重复指定自定义类的需要,简化部署,使模型直接可用于其内置词汇表。
-
性能:通过专注于识别定义的对象,增强特定类别的检测精度,优化模型的注意力和资源分配。
该方法为定制最先进的目标检测模型提供了强大手段,使得先进的 AI 技术更加易于访问和应用于更广泛的实际应用领域。
从零开始重现官方结果(实验性)
准备数据集
- 训练数据
数据集 | 类型 | 样本数 | 盒数 | 注释文件 |
---|---|---|---|---|
Objects365v1 | 检测 | 609k | 9621k | objects365_train.json |
GQA | 确定性 | 621k | 3681k | final_mixed_train_no_coco.json |
Flickr30k | 确定性 | 149k | 641k | final_flickr_separateGT_train.json |
- 验证数据
数据集 | 类型 | 注释文件 |
---|---|---|
LVIS minival | 检测 | minival.txt |
从零开始启动训练
注意
WorldTrainerFromScratch
极大地定制化,允许同时在检测数据集和确定性数据集上训练 yolo-world 模型。更多细节请查看 ultralytics.model.yolo.world.train_world.py。
示例
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = dict(
train=dict(
yolo_data=["Objects365.yaml"],
grounding_data=[
dict(
img_path="../datasets/flickr30k/images",
json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
),
dict(
img_path="../datasets/GQA/images",
json_file="../datasets/GQA/final_mixed_train_no_coco.json",
),
],
),
val=dict(yolo_data=["lvis.yaml"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)
引用和致谢
我们对 腾讯 AI 实验室计算机视觉中心 在实时开放词汇目标检测领域与 YOLO-World 的开创性工作表示感谢:
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}
想进一步阅读,YOLO-World 的原始论文可在 arXiv 获得。项目的源代码和其他资源可以通过他们的 GitHub 仓库 获取。我们感谢他们在推动领域进步和与社区分享宝贵见解的努力。
常见问题解答
YOLO-World 模型是什么以及其工作原理?
YOLO-World 模型是基于 Ultralytics YOLOv8 框架的先进实时目标检测方法。它通过识别基于描述性文本的图像内对象,在开放词汇检测任务中表现出色。利用视觉语言建模和在大型数据集上的预训练,YOLO-World 实现了高效和性能,并显著减少了计算需求,非常适合各行业的实时应用。
YOLO-World 如何处理自定义提示的推理?
YOLO-World 支持“提示-检测”策略,利用离线词汇表增强效率。像标题或特定对象类别这样的自定义提示会被预先编码并存储为离线词汇表嵌入。这种方法简化了检测过程,无需重新训练即可动态设置这些提示以适应特定的检测任务,如下所示:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt")
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
为什么应该选择 YOLO-World 而不是传统的开放词汇检测模型?
YOLO-World 相比传统的开放词汇检测模型提供了多个优势:
-
实时性能: 它利用 CNN 的计算速度提供快速、高效的检测。
-
高效性和低资源需求: YOLO-World 在显著减少计算和资源需求的同时,保持了高性能。
-
可定制的提示: 模型支持动态提示设置,允许用户指定自定义检测类别而无需重新训练。
-
基准卓越性: 在标准基准测试中,它在速度和效率上均优于其他开放词汇检测器,如 MDETR 和 GLIP。
如何在我的数据集上训练 YOLO-World 模型?
使用提供的 Python API 或 CLI 命令,训练 YOLO-World 模型的数据集非常简单。以下是如何开始使用 Python 进行训练的示例:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
或者使用 CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640
可用的预训练 YOLO-World 模型及其支持的任务是什么?
Ultralytics 提供多个预训练的 YOLO-World 模型,支持各种任务和操作模式:
模型类型 | 预训练权重 | 支持的任务 | 推断 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
我如何从头开始复现 YOLO-World 的官方结果?
要从头开始复现官方结果,您需要准备数据集并使用提供的代码启动训练。训练过程涉及创建数据字典,并使用自定义训练器运行train
方法:
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "../datasets/flickr30k/images",
"json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "../datasets/GQA/images",
"json_file": "../datasets/GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)
数据集概述
Ultralytics 提供对各种数据集的支持,以促进计算机视觉任务,如检测、实例分割、姿态估计、分类和多对象跟踪。以下是主要的 Ultralytics 数据集列表,随后是每个计算机视觉任务和相应数据集的摘要。
www.youtube.com/embed/YDXKa1EljmU
Watch: Ultralytics 数据集概述