zhiqing0205
Add complete U2Net project with HuggingFace preparation
ece7754
|
Raw
History Blame Contribute Delete
6.13 kB
# 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 实现。请参考原始仓库的许可证信息。