| # MVTec LOCO 前景分割工具 |
|
|
| **[中文版 README](README_CN.md)** | **[English README](README.md)** |
|
|
| 本工具使用 U²-Net 为 MVTec LOCO 异常检测数据集生成二值前景掩码。 |
|
|
| ## 概述 |
|
|
| `mvtec_loco_fg_segmentation.py` 脚本处理整个 MVTec LOCO 数据集,为所有图像生成二值前景掩码。它使用 U²-Net 模型执行显著性目标检测,并将概率图转换为二值掩码。 |
|
|
| ## 功能特点 |
|
|
| - **完整数据集处理**:处理所有类别(breakfast_box, screw_bag, juice_bottle, splicing_connectors, pushpins) |
| - **灵活的结构支持**:处理 test 和 train 分割中的所有子目录(good, logical_anomalies, structural_anomalies) |
| - **二值掩码输出**:生成标准的二值掩码(0/255),使用 L 模式(灰度) |
| - **参数可配置**:可自定义阈值、类别、分割和处理选项 |
| - **GPU/CPU 支持**:自动检测并利用可用硬件 |
|
|
| ## 环境要求 |
|
|
| ### 环境设置 |
| ```bash |
| # 创建 conda 环境 |
| conda create -n u2net python=3.8 -y |
| conda activate u2net |
| |
| # 安装依赖 |
| pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 --index-url https://download.pytorch.org/whl/cu116 |
| pip install opencv-python scikit-image matplotlib numpy pillow |
| ``` |
|
|
| ### 模型权重 |
| 下载 U²-Net 模型权重并放置到正确目录: |
| - 从 [GoogleDrive](https://drive.google.com/file/d/1ao1ovG1Qtx4b7EoskHXmi2E9rp5CHLcZ/view) 下载 `u2net.pth`(176.3 MB) |
| - 放置到:`./saved_models/u2net/u2net.pth` |
|
|
| ### 数据集结构 |
| 确保您的 MVTec LOCO 数据集遵循以下结构: |
| ``` |
| mvtec_loco_anomaly_detection/ |
| ├── breakfast_box/ |
| │ ├── test/ |
| │ │ ├── good/ |
| │ │ ├── logical_anomalies/ |
| │ │ └── structural_anomalies/ |
| │ └── train/ |
| │ └── good/ |
| ├── screw_bag/ |
| │ ├── test/ |
| │ └── train/ |
| └── ... (其他类别) |
| ``` |
|
|
| ## 使用方法 |
|
|
| ### 基本用法 |
| ```bash |
| # 使用默认设置处理整个数据集 |
| python mvtec_loco_fg_segmentation.py |
| |
| # 显示帮助信息 |
| python mvtec_loco_fg_segmentation.py -h |
| ``` |
|
|
| ### 高级用法 |
|
|
| ```bash |
| # 指定自定义数据集和模型路径 |
| python mvtec_loco_fg_segmentation.py \ |
| --dataset_path /path/to/mvtec_loco \ |
| --model_path /path/to/u2net.pth |
| |
| # 仅处理特定类别 |
| python mvtec_loco_fg_segmentation.py \ |
| --categories breakfast_box juice_bottle |
| |
| # 仅处理测试集 |
| python mvtec_loco_fg_segmentation.py \ |
| --splits test |
| |
| # 使用不同的二值化阈值 |
| python mvtec_loco_fg_segmentation.py \ |
| --threshold 0.3 |
| |
| # 自定义输出目录名称 |
| python mvtec_loco_fg_segmentation.py \ |
| --output_dir custom_masks |
| |
| # 使用多进程优化处理速度 |
| python mvtec_loco_fg_segmentation.py \ |
| --num_workers 4 \ |
| --batch_size 4 |
| ``` |
|
|
| ## 命令行参数 |
|
|
| | 参数 | 类型 | 默认值 | 说明 | |
| |------|------|--------|------| |
| | `--dataset_path` | str | `/root/hy-data/datasets/mvtec_loco_anomaly_detection` | MVTec LOCO 数据集根目录路径 | |
| | `--model_path` | str | `./saved_models/u2net/u2net.pth` | U2NET 模型权重文件路径 | |
| | `--output_dir` | str | `fg_mask` | 生成掩码的输出目录名称 | |
| | `--threshold` | float | `0.5` | 二值掩码生成阈值 | |
| | `--categories` | list | `所有5个类别` | 要处理的类别 | |
| | `--splits` | list | `['test', 'train']` | 要处理的数据集分割 | |
| | `--batch_size` | int | `1` | 处理批次大小 | |
| | `--num_workers` | int | `1` | 数据加载工作进程数 | |
|
|
| ## 输出结构 |
|
|
| 脚本生成以下结构的掩码: |
| ``` |
| mvtec_loco_anomaly_detection/ |
| ├── fg_mask/ # 生成的掩码目录 |
| │ ├── breakfast_box/ |
| │ │ ├── test/ |
| │ │ │ ├── good/ |
| │ │ │ │ ├── 000.png # 二值掩码(0/255 值) |
| │ │ │ │ ├── 001.png |
| │ │ │ │ └── ... |
| │ │ │ ├── logical_anomalies/ |
| │ │ │ └── structural_anomalies/ |
| │ │ └── train/ |
| │ │ └── good/ |
| │ └── ... (其他类别) |
| └── ... (原始数据集) |
| ``` |
|
|
| ## 掩码属性 |
|
|
| - **格式**:PNG 图像 |
| - **模式**:L(灰度,单通道) |
| - **值**:二值(背景为0,前景为255) |
| - **尺寸**:与原始图像相同 |
| - **阈值**:可配置(默认0.5) |
|
|
| ## 性能说明 |
|
|
| - **推荐GPU**:使用支持CUDA的GPU处理速度显著更快 |
| - **内存使用**:每张图像在处理期间需要约200MB GPU内存 |
| - **处理时间**:现代GPU上每张图像约2-3秒 |
| - **总图像数**:完整数据集中约5000+张图像 |
|
|
| ## 故障排除 |
|
|
| ### 常见问题 |
|
|
| 1. **CUDA内存不足**:减少批次大小或使用CPU处理 |
| 2. **找不到模型**:确保u2net.pth在正确目录中 |
| 3. **数据集路径错误**:验证MVTec LOCO数据集结构 |
| 4. **权限错误**:检查输出目录的写入权限 |
|
|
| ### 错误信息 |
|
|
| - `ERROR: Dataset path not found`:检查数据集路径和提取情况 |
| - `ERROR: Model path not found`:正确下载并放置u2net.pth |
| - `ERROR: Invalid categories`:使用有效的类别名称 |
|
|
| ## 示例输出 |
|
|
| 脚本提供详细的进度信息: |
| ``` |
| 配置信息: |
| 数据集路径: /root/hy-data/datasets/mvtec_loco_anomaly_detection |
| 模型路径: ./saved_models/u2net/u2net.pth |
| 输出目录: fg_mask |
| 二值化阈值: 0.5 |
| 类别: ['breakfast_box', 'screw_bag', 'juice_bottle', 'splicing_connectors', 'pushpins'] |
| 分割: ['test', 'train'] |
| |
| ...加载 U2NET--- |
| 处理类别: breakfast_box |
| 处理 breakfast_box/test/good |
| 找到 102 张图像 |
| 处理 1/102: 000.png |
| 处理 20/102: 019.png |
| ... |
| ``` |
|
|
| ## 引用 |
|
|
| 如果您在研究中使用此工具,请引用原始的 U²-Net 论文: |
|
|
| ```bibtex |
| @InProceedings{Qin_2020_PR, |
| title = {U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection}, |
| author = {Qin, Xuebin and Zhang, Zichen and Huang, Chenyang and Dehghan, Masood and Zaiane, Osmar and Jagersand, Martin}, |
| journal = {Pattern Recognition}, |
| volume = {106}, |
| pages = {107404}, |
| year = {2020} |
| } |
| ``` |
|
|
| ## 许可证 |
|
|
| 本工具扩展了原始 U²-Net 实现。请参考原始仓库的许可证信息。 |