尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Anomalib RealIAD Datamodule:以 PyTorch Lightning 加载 Real-IAD 工业异常检测数据集

Anomalib RealIAD Datamodule:以 PyTorch Lightning 加载 Real-IAD 工业异常检测数据集 Anomalib RealIAD Datamodule以 PyTorch Lightning 加载 Real-IAD 工业异常检测数据集【免费下载链接】anomalibAn anomaly detection library comprising state-of-the-art algorithms and features such as experiment management, hyper-parameter optimization, and edge inference.项目地址: https://gitcode.com/GitHub_Trending/an/anomalib本文围绕 Anomalib 中的RealIADDatamodule 展开介绍如何下载并准备需要作者审批授权的 Real-IAD 工业异常检测数据集、配置类别与分辨率等核心参数并从源码层面解析其元数据解析、数据划分与任务类型推断的实现机制。读完本文后你可以直接在 API 或 YAML 配置中构建 Real-IAD 训练/测试流程并理解底层RealIADDataset如何把 JSON 元数据转化为可训练的样本表。1. RealIAD Datamodule 概述Real-IAD 是一个大规模工业异常检测数据集包含 30 类工业物体每类均包含正常OK与异常NG样本且每个物体从 5 个不同的相机视角C1–C5拍摄。Anomalib 通过 PyTorch Lightning 风格的 DataModule 封装了该数据集模块定义位于 src/anomalib/data/datamodules/image/realiad.py并在 src/anomalib/data/datamodules/image/init.py 中导出因此可以直接from anomalib.data import RealIAD使用。与 MVTec AD 等可以目录约定直接推断样本的数据集不同Real-IAD 的样本组织以JSON 元数据文件为核心train/test 的样本列表、图像路径、掩码路径、异常类别和相机视角都记录在 JSON 中。Datamodule 的构造函数签名与完整参数说明如下源自模块 docstring 与源码签名见 realiad.py#L156-L172参数类型默认值说明rootPath \| str \| None./datasets/Real-IAD数据集根目录传None时回退到 anomalib 数据集缓存目录下的Real-IADcategorystraudiojack类别名必须是CATEGORIES中的 30 个类别之一非法值会抛出ValueErrorresolutionstr \| int256图像分辨率档位可为256、512、1024、raw或其整数等价形式json_pathstr \| Pathrealiad_jsons/realiad_jsons/{category}.json相对于root的元数据文件路径支持{category}占位符自动替换train_batch_sizeint32训练 batch sizeeval_batch_sizeint32验证/测试 batch sizenum_workersint8DataLoader worker 数train_augmentations/val_augmentations/test_augmentationsTransform \| NoneNone分阶段数据增强augmentationsTransform \| NoneNone未提供分阶段增强时作为通用增强test_split_modeTestSplitModeTestSplitMode.NONE测试集构造方式val_split_modeValSplitModeValSplitMode.SAME_AS_TEST验证集构造方式seedint \| NoneNone随机种子用于可复现的划分其中 30 个可选类别和 4 个分辨率档位是硬编码在底层数据集模块中的常量src/anomalib/data/datasets/image/realiad.py#L47-L79分辨率RESOLUTIONS (256, 512, 1024, raw)对应realiad_256、realiad_512、realiad_1024目录及原始分辨率目录类别audiojack、bottle_cap、button_battery、end_cap、eraser、fire_hood、mint、mounts、pcb、phone_battery、plastic_nut、plastic_plug、porcelain_doll、regulator、rolled_strip_base、sim_card_set、switch、tape、terminalblock、toothbrush、toy_brick、toy、transistor1、u_block、usb_adaptor、usb、vcpill、wooden_beads、woodstick、zipper。2. 数据集目录结构模块 docstring 中明确给出了 Real-IAD 的目录布局realiad.py#L12-L22下载完成后根目录应包含以下子目录Real-IAD/ ├── realiad_256/ # 256x256 分辨率图像 │ └── CATEGORY/ # 如 audiojack、button_battery 等 │ ├── OK/ # 正常样本 │ │ └── SXXXX/ # 样本 ID │ │ └── CATEGORY_XXXX_OK_CX_TIMESTAMP.jpg │ └── NG/ # 异常样本 │ └── DEFECT_TYPE/ # 缺陷类型 │ └── SXXXX/ │ ├── CATEGORY_XXXX_NG_CX_TIMESTAMP.jpg │ └── CATEGORY_XXXX_NG_CX_TIMESTAMP_mask.png ├── realiad_512/ # 512x512 分辨率图像 ├── realiad_1024/ # 1024x1024 分辨率图像 └── realiad_jsons/ # JSON 元数据文件 ├── realiad_jsons/ # 基础元数据多视角 ├── realiad_jsons_sv/ # 单视角元数据 └── realiad_jsons_fuiad/ # FUIAD 系列元数据0.0/0.1/0.2/0.4 版本从结构可以看出三点关键事实图像按分辨率 → 类别 → OK/NG → 样本 ID分层组织异常样本按缺陷类型再细分目录文件名编码了类别_ID_OK|NG_视角C1-C5_时间戳异常样本额外附带_mask.png分割掩码样本的 train/test 归属不靠目录名而是由 JSON 元数据决定。3. 下载与准备数据集需要作者审批授权Real-IAD 不随 Anomalib 分发且需要数据集作者审批后才能访问。Datamodule 的prepare_data方法realiad.py#L206-L233会检查root下是否存在任一必需目录realiad_256/realiad_512/realiad_1024或各realiad_jsons*目录若全部缺失则抛出RuntimeError错误信息即为完整的下载指引由 get_download_instructions 函数格式化生成。该指引的核心内容如下申请访问流程Real-IAD 数据集托管在 Hugging Face 上数据集标识为REAL-IAD/Real-IAD。由于需要审批你需要注册 Hugging Face 账号打开该数据集页面点击 Access Repository 并填写申请表等待数据集作者审批通过审批通过后下载并解压到目标目录。下载方式一Hugging Face CLI推荐# 安装 CLI pip install huggingface_hub # 登录 huggingface-cli login # 下载数据集到 root 目录 huggingface-cli download \ --repo-type dataset \ --local-dir ./datasets/Real-IAD REAL-IAD/Real-IAD \ --include* \ --token YOUR_HF_TOKEN下载方式二手动下载在审批通过后进入数据集页面手动下载全部文件并解压到 root 目录。注意事项将YOUR_HF_TOKEN替换为你的 Hugging Face 访问令牌在个人设置页的 tokens 页面生成该数据集以 Creative Commons Attribution-NonCommercial-ShareAlike 4.0CC BY-NC-SA 4.0协议发布使用前请遵守其非商业与相同方式共享条款resolve_dataset_rootsrc/anomalib/utils/path.py#L118-L129决定了 root 的最终取值显式传入root时直接使用传None时回退到 anomalib 数据集缓存目录下的Real-IAD。4. 实操示例构建与使用 RealIAD Datamodule以下示例继承自模块 docstring 的官方用法realiad.py#L93-L146全部可复制运行前提是数据集已就位。4.1 默认配置创建from anomalib.data import RealIAD datamodule RealIAD() # root./datasets/Real-IAD, categoryaudiojack, resolution256 datamodule.setup() i, data next(enumerate(datamodule.train_dataloader())) data.keys() # dict_keys([image_path, label, image, mask_path, mask]) data[image].shape # torch.Size([32, 3, 256, 256])4.2 切换类别与分辨率字符串与整数分辨率等价Datamodule 内部会把整数resolution转为字符串realiad.py#L190-L194# 使用字符串分辨率 datamodule RealIAD( categorybutton_battery, resolution512, ) # 使用整数分辨率 datamodule RealIAD( categorybutton_battery, resolution1024, )4.3 选择不同的 JSON 元数据json_path支持{category}占位符初始化时会被格式化为实际类别名src/anomalib/data/datasets/image/realiad.py#L201-L206。常用组合# 基础元数据多视角 datamodule RealIAD( json_pathrealiad_jsons/realiad_jsons/{category}.json, ) # 单视角元数据 datamodule RealIAD( json_pathrealiad_jsons/realiad_jsons_sv/{category}.json, ) # FUIAD v0.4 元数据筛选子集 datamodule RealIAD( json_pathrealiad_jsons/realiad_jsons_fuiad_0.4/{category}.json, ) # 自定义元数据文件 datamodule RealIAD( json_pathpath/to/custom/metadata.json, )4.4 从测试集派生验证集datamodule RealIAD( val_split_modeValSplitMode.FROM_TEST, val_split_ratio0.1, )5. 通过 YAML 配置使用Anomalib 的流水线pipeline体系支持以 YAML 配置实例化任意 DataModule仓库提供的官方配置见 examples/configs/data/realiad.yamlclass_path: anomalib.data.RealIAD init_args: root: ./datasets/Real-IAD category: audiojack resolution: 256 train_batch_size: 32 eval_batch_size: 32 num_workers: 8 test_split_mode: none val_split_mode: same_as_test train_augmentations: null val_augmentations: null test_augmentations: null augmentations: null这份配置与构造函数默认值一一对应即开箱默认的加载方式audiojack类别、256 分辨率、32 batch、不使用增强、test_split_mode: none直接使用 JSON 中的 test 划分、val_split_mode: same_as_test验证集与测试集相同。由于class_path采用anomalib.data.RealIAD这一公开路径你可以将该配置作为基准按需覆盖category、resolution或json_path等init_args字段。6. 源码解析从 Datamodule 到样本 DataFrame6.1 Datamodule 层的职责RealIAD继承自AnomalibDataModulesrc/anomalib/data/datamodules/base/image.py#L59-L94自身只负责三件事参数校验构造函数中检查category in CATEGORIES与resolution in RESOLUTIONS否则抛出带可选值列表的ValueErrorrealiad.py#L197-L204数据就位检查prepare_data在训练前验证数据集目录存在前文第 3 节已述构建子数据集_setup分别以Split.TRAIN与Split.TEST创建两个RealIADDatasetrealiad.py#L235-L249随后基类的setup会进一步执行_create_test_split与_create_val_split按test_split_mode/val_split_mode对样本表做动态切分。值得注意RealIAD没有覆写test_dataloader的增强/合成逻辑test_split_mode默认为NONE——也就是说JSON 元数据里的 test 列表就是测试集本身这是该数据集区别于 MVTec AD常需from_dir/synthetic模式的重要特性。6.2 RealIADDataset解析 JSON 元数据底层RealIADDatasetsrc/anomalib/data/datasets/image/realiad.py#L82-L230在初始化时完成以下工作校验category与resolution同 Datamodule 层因为 Dataset 也可独立使用将json_path中的{category}占位符格式化后拼接root若文件不存在抛出FileNotFoundError加载 JSON 并校验结构元数据必须是dict且至少包含train或test键否则抛出ValueErrorrealiad.py#L216-L219依据分辨率定位类别目录self.root / frealiad_{resolution} / category然后调用make_realiad_dataset生成样本表。make_realiad_datasetrealiad.py#L233-L294是样本组织的核心逻辑按split从元数据取train或test列表若split为None则合并两者每条样本转换为四列 DataFrameimage_path类别目录下的相对路径、mask_path无掩码时为空串、label_indexanomaly_class OK为正常否则为异常、splittrain/test任务类型推断若所有样本mask_path均为空samples.attrs[task]置为classification否则为segmentationrealiad.py#L291-L292。这意味着使用单视角或 FUIAD 元数据、且样本不带掩码时同一 Dataset 也能支撑仅分类头的训练任务类型由数据本身决定。6.3 与基类增强机制的衔接基类AnomalibDataModule.setup在构建子集后会调用_update_augmentations若模型 PreProcessor 提供 transform则把其中的Resize提取出来前置到数据增强链中保证 resize 发生在 collate 之前以降低 DataLoader worker 的共享内存占用src/anomalib/data/datamodules/base/image.py#L166-L200。因此给RealIAD传train_augmentations时只需关注裁剪、翻转等图像内容级增强尺寸归一化会与模型变换自动协调。7. 测试验证单测与模拟数据仓库用两条链路验证了上述机制Datamodule 单测tests/unit/data/datamodule/image/test_realiad.py继承通用图像 Datamodule 测试基类_TestAnomalibImageDatamodule以categoryaudiojack、resolution256、num_workers0构造RealIAD先prepare_data后setup并声明其数据配置文件即examples/configs/data/realiad.yaml——这意味着 CI 会按该 YAML 的默认配置校验整个加载流程模拟数据集生成tests/helpers/data.py#L595-L649_generate_dummy_realiad_dataset按真实约定生成realiad_256/audiojack/图像、realiad_jsons/realiad_jsons/元数据其中 NG 样本同时写出图像与_mask.png掩码JSON 中记录image_path、mask_path、anomaly_class、camera_view、timestamp字段。对比该生成逻辑与make_realiad_dataset的解析字段可以确认元数据的最小必需字段为image_path、mask_path、anomaly_class三项。8. 实践要点与限制结合源码实现使用 RealIAD Datamodule 时应注意必须手动下载prepare_data只做存在性检查并给出指引Anomalib 不提供该数据集的自动下载器且访问需作者审批首次准备数据的等待时间不可控JSON 元数据是必需的make_realiad_dataset对metadata is None直接抛出ValueError不能像某些数据集那样仅靠目录约定自定义元数据时字段需与解析逻辑对齐默认验证集即测试集val_split_mode默认SAME_AS_TEST如需独立验证集请显式设置FROM_TEST并指定val_split_ratio分辨率档位有限只接受256/512/1024/raw四档其他值会触发ValueError图像目录名realiad_{resolution}与档位一一绑定许可合规CC BY-NC-SA 4.0 意味着衍生作品需以相同协议共享且限于非商业用途商用场景需另行评估。9. 小结RealIADDatamodule 通过 JSON 元数据 分辨率目录 类别目录 三要素组织 Real-IAD 数据集Datamodule 层负责参数校验与目录就位检查底层RealIADDataset负责元数据解析、样本表构建与任务类型推断基类AnomalibDataModule则统一了 split 与增强逻辑。借助 examples/configs/data/realiad.yaml 或 API 直接实例化即可把该数据集接入 Anomalib 的训练与推理流水线核心源码集中在 src/anomalib/data/datamodules/image/realiad.py 与 src/anomalib/data/datasets/image/realiad.py可进一步对照阅读。【免费下载链接】anomalibAn anomaly detection library comprising state-of-the-art algorithms and features such as experiment management, hyper-parameter optimization, and edge inference.项目地址: https://gitcode.com/GitHub_Trending/an/anomalib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表