FiftyOne 集成 Albumentations:在 App 中可视化与调试数据增强的完整指南
【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone
FiftyOne 将计算机视觉领域广泛使用的开源图像增强库 Albumentations 以插件(Plugin)形式深度集成到自身生态中,使开发者可以直接在 FiftyOne App 内对数据集应用 Albumentations 变换、实时预览增强效果、按标签筛选增强样本,并将变换管线保存到数据集实现可复现。读完本文,你将掌握该插件的安装步骤、augment_with_albumentations等核心操作符的完整使用方式、增强样本的持久化与运行信息追溯方法,以及如何借助源码理解其背后的标签过滤与自定义 Runs 机制。
集成概览
Albumentations 是机器学习领域领先的开源图像增强库,在计算机视觉社区中被广泛使用,以丰富的增强算子集合与高性能著称。FiftyOne 将 Albumentations 的变换管线直接集成到数据集工作流中,使开发者能够:
- 在 FiftyOne App 中直接可视化 Albumentations 增强的效果;
- 在真实数据上测试增强对样本的影响。
该集成以 FiftyOne 插件的形式提供,安装简单,并且可以完全通过便捷的图形化界面使用。借助 FiftyOne Albumentations 插件,你可以变换所有类型的标签——Detections(目标检测框)、Keypoints(关键点)、Segmentation(分割掩码)、Heatmap(热力图)——也可以只变换图像本身。
本文聚焦插件的安装流程与功能。关于如何策划你的增强策略(curate augmentations),可参考 Data Augmentation 教程。
从仓库证据看,该集成是 FiftyOne 官方文档体系的组成部分:集成索引页中列出了 Albumentations 条目,发布说明中也记录了这一集成的引入("Added an Albumentations integration for performing data augmentation on FiftyOne datasets"),对应源码中的插件化设计使它可以借助 FiftyOne 的 插件使用指南中的通用机制(操作符、委托执行等)运行。
支持的变换类型
Albumentations 提供 80+ 种变换,覆盖像素级变换、几何变换等多个类别。FiftyOne Albumentations 插件当前支持其中除以下变换之外的全部类型:
AdvancedBlur(高级模糊)GridDropout(网格丢弃)MaskDropout(掩码丢弃)PiecewiseAffine(分段仿射)RandomGravel(随机沙砾)RandomGridShuffle(随机网格洗牌)RandomShadow(随机阴影)RandomSunFlare(随机太阳耀斑)Rotate(旋转)
在使用插件时,如果需要在管线中用到上述变换,需要在实际应用前确认插件版本的支持情况,或考虑其他等价实现。
插件功能清单
FiftyOne Albumentations 插件提供以下核心功能:
- 将 Albumentations 变换应用到整个数据集、当前视图(view)或选中的样本上;
- 直接在 FiftyOne App 中可视化这些变换的效果;
- 查看上一次应用变换生成的样本;
- 将增强后的样本保存到数据集;
- 获取上一次应用变换的相关信息;
- 将变换管线保存到数据集,实现可复现。
这些功能分别由不同的操作符(operator)提供,下文将逐一展开。
环境安装与准备
安装 FiftyOne 与 Albumentations
首先确保已安装 FiftyOne 和 Albumentations:
$ pip install -U fiftyone albumentations下载 Albumentations 插件
然后安装 FiftyOne Albumentations 插件:
$ fiftyone plugins download https://github.com/jacobmarks/fiftyone-albumentations-plugin提示:如果你已安装
@voxel51/plugins插件,也可以通过其中的install_plugin操作符,在社区插件下拉菜单中选择 Albumentations 插件完成安装。
准备数据集
你需要加载(必要时先下载)一个数据集用于应用增强。本文使用 quickstart 数据集作为示例:
import fiftyone as fo import fiftyone.zoo as foz # 仅取 5 个样本用于快速演示 dataset = foz.load_zoo_dataset("quickstart", max_samples=5) # 只保留 ground truth 标签 dataset.select_fields("ground_truth").keep_fields() session = fo.launch_app(dataset)从 数据集动物园文档可以看到,quickstart 数据集来自 FiftyOne 数据集动物园(Dataset Zoo),可通过foz.load_zoo_dataset()一键加载。
注意:quickstart 数据集只包含
Detections标签。如果你想在其他标签类型上测试 Albumentations 变换,可以利用 FiftyOne 的 Hugging Face Transformers 集成 和 Ultralytics 集成快速生成相应标签,示例代码如下:
pip install -U transformers ultralyticsimport fiftyone as fo import fiftyone.zoo as foz from ultralytics import YOLO # 关键点(Keypoints) model = YOLO("yolov8l-pose.pt") dataset.apply_model(model, label_field="keypoints") # 实例分割(Instance Segmentation) model = YOLO("yolov8l-seg.pt") dataset.apply_model(model, label_field="instances") # 语义分割(Semantic Segmentation) model = foz.load_zoo_model( "segmentation-transformer-torch", name_or_path="Intel/dpt-large-ade", ) dataset.apply_model(model, label_field="mask") # 热力图(Heatmap) model = foz.load_zoo_model( "depth-estimation-transformer-torch", name_or_path="LiheYoung/depth-anything-small-hf", ) dataset.apply_model(model, label_field="depth_map")应用 Albumentations 变换
要对数据集应用 Albumentations 变换,使用augment_with_albumentations操作符。在 FiftyOne App 中按下反引号键(),打开操作符弹窗,从下拉菜单中选择augment_with_albumentations` 即可。
随后你可以配置要应用的变换:
每个样本的增强数量(Number of augmentations per sample):为每个输入样本生成的增强样本数量。默认值为 1,对于确定性变换来说已经足够;但对于概率性变换,你可能希望生成多个样本,以观察可能的输出范围。
变换数量(Number of transforms):组合进管线、应用到每个样本的变换数量。默认值为 1,你可以根据需要设置更高的数值——变换越多,增强越复杂。每个变换都可以单独配置。
目标视图(Target view):变换将应用到的视图。默认是
dataset,你也可以将变换应用到当前视图或 App 中当前选中的样本。执行模式(Execution mode):如果设置
delegated=False,操作会立即执行;如果设置delegated=True,操作会被排队为后台任务,随后可在终端中运行:
$ fiftyone delegated launch对于每个变换,你可以选择来自 Albumentations 库的"原始(primitive)"变换,或选择之前保存到数据集的"已保存(saved)"变换管线。这些已保存的管线可以由一个或多个变换组成。
当应用原始变换时,你可以在 App 内直接配置该变换的参数。可用的参数、默认值、类型和 docstring 都直接集成自 Albumentations 库本身——这意味着你在界面中看到的就是 Albumentations 官方定义的参数语义,无需额外查表。
当应用已保存的管线时,则没有参数需要配置。
可视化变换效果
应用变换后,你可以直接在 FiftyOne App 中可视化变换的效果。所有增强样本都会被添加到数据集中,并被打上augmented标签,方便你在 App 中轻松筛选出增强样本或非增强样本。
你也可以通过match_tags()方法在代码中编程筛选增强样本。该方法定义于 fiftyone/core/collections.py(SampleCollection.match_tags),其签名支持tags、bool与all参数:bool=False表示取反筛选(即不包含该标签的样本),all=True表示必须同时具备所有给定标签:
# 只取增强样本 augmented_view = dataset.match_tags("augmented") # 只取非增强样本 non_augmented_view = dataset.match_tags("augmented", bool=False)然而,基于这些标签匹配会返回所有由增强生成的样本,而不仅仅是最后一次应用变换生成的样本——稍后你会看到,我们可以把增强保存到数据集中。要只获取上一次应用变换生成的样本,可以使用view_last_albumentations_run操作符:
注意:对于 FiftyOne Albumentations 插件添加到数据集的所有样本,都会有一个
"transform"字段,其中不仅包含所应用管线的信息,还包含本次应用该管线的具体参数。例如,如果你有一个应用概率为p=0.5的HorizontalFlip变换,那么"transform"字段的内容会告诉你该变换是否真的应用到了这个样本上——这对于理解概率性增强的实际行为非常有价值。
保存增强样本
默认情况下,所有增强都是临时的,因为 FiftyOne Albumentations 插件主要面向快速原型验证和实验。这意味着当你生成新一批增强样本时,上一批增强样本会从数据集中被移除,对应的图像文件也会从磁盘上删除。
如果你想把增强样本保存到数据集中,可以使用save_albumentations_augmentations操作符,它会将增强样本保存到数据集,同时保留样本上的augmented标签:
这一机制保证了"临时预览"与"正式落地"两种工作流的清晰分离:原型阶段无需担心磁盘被不断增长的增强样本占满,确认效果后再一键持久化。
获取上一次变换的信息
当你使用 FiftyOne Albumentations 插件对数据集中的样本应用变换管线时,相关信息会被捕获,并借助 FiftyOne 的自定义 Runs(custom runs)机制存储。这意味着你可以轻松访问上一次应用变换的信息。
在 FiftyOne App 中,可以使用get_last_albumentations_run_info操作符,以格式化的摘要形式展示相关信息:
注意:你也可以在代码中访问这些信息。Albumentations 插件的运行信息存储在键
'_last_albumentations_run'下:
last_run_info = dataset.get_run_info("_last_albumentations_run") print(last_run_info)get_run_info()是 FiftyOne 中查询自定义 Run 信息的标准接口(可参见 developing_plugins.rst 中关于managing-custom-runs的说明),插件选择以_last_albumentations_run为键,使得运行元数据与数据集深度绑定、随数据集持久化,方便审计与复现。
保存变换管线
如果你对自己创建的变换管线感到满意,可以把整个变换组合连同超参数一起保存到数据集。这意味着快速原型阶段结束后,你可以轻松过渡到更可复现的工作流,并且可以将变换分享给他人或移植到其他数据集。
要保存变换管线,使用save_albumentations_transform操作符。
保存之后,你可以使用get_albumentations_run_info操作符查看该已保存变换管线的相关信息:
此外,在augment_with_albumentations操作符弹窗中,每个变换的"saved"标签页下都可以访问到已保存的变换管线——这意味着你可以在后续的增强会话中直接复用此前保存的管线,实现"一次配置、处处复用"。
常见工作流小结
综合上述功能,一个典型的 Albumentations 增强工作流可以概括为:
- 安装:
pip install -U fiftyone albumentations,并通过fiftyone plugins download安装插件; - 准备数据:加载数据集(如 quickstart),必要时用 Hugging Face 或 Ultralytics 模型生成
Keypoints、Segmentation、Heatmap等标签; - 应用变换:在 App 中通过反引号键打开操作符弹窗,运行
augment_with_albumentations,配置增强数量、变换数量、目标视图与执行模式,并逐个配置原始变换参数或选择已保存管线; - 可视化与筛选:在 App 中直接观察增强效果,使用
augmented标签或match_tags()编程筛选,用view_last_albumentations_run定位上一次生成的样本,并通过样本的"transform"字段核验每个变换的实际应用情况; - 沉淀与复用:满意后用
save_albumentations_augmentations持久化增强样本,用save_albumentations_transform保存管线,通过get_last_albumentations_run_info与get_albumentations_run_info追溯运行细节。
整个过程无需编写任何增强代码即可在图形界面中完成,同时保留了通过 Python API 编程访问全部信息的灵活性。该插件的所有功能均建立在 FiftyOne 插件系统(操作符、委托执行、自定义 Runs)之上,相关机制可进一步参考 FiftyOne 插件使用指南 与 插件开发指南。
【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考