共计 2416 个字符,预计需要花费 7 分钟才能阅读完成。
1. ADE20K 数据集简介
ADE20K 是 MIT 发布的场景解析数据集,广泛应用于语义分割任务。它的核心价值在于:

- 数据规模:包含 20,210 张训练图和 2,000 张验证图,覆盖 150 个语义类别
- 标注类型:像素级语义标注(PNG 格式)+ 实例级多边形标注(JSON 格式)
- 场景多样性:包含室内 / 室外场景,常见物体如家具、交通工具、建筑等
与 Cityscapes、PASCAL VOC 等数据集相比,ADE20K 的显著特点是标注更精细(包含物体部件标注)且场景更复杂。
2. 数据集下载方法
官方渠道
- 访问 MIT 官方页面:http://groups.csail.mit.edu/vision/datasets/ADE20K/
- 点击 ”Download” 获取 ADE20K_2016_07_26.zip(约 3.8GB)
镜像源加速
- 清华大学镜像:
wget https://mirrors.tuna.tsinghua.edu.cn/.../ADE20K_2016_07_26.zip - 百度云备份(需第三方工具加速)
下载技巧
- 使用 axel 多线程下载:
axel -n 10 [URL] - 校验 MD5 值:
2e5b8f5e6c5f8e6a0d7b3c4b5e6f7d8a
3. 数据集结构解析
解压后的目录结构:
ADE20K_2016_07_26/
├── images/ # 原始 JPEG 图像
│ ├── training/
│ └── validation/
└── annotations/ # 标注文件
├── training/
└── validation/
标注格式详解
- 语义分割标注:每个像素值对应类别 ID(0= 背景,1-150 为物体类别)
- 实例标注:JSON 文件中包含多边形顶点坐标和物体属性
4. Python 数据处理实战
基础数据加载
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
# 加载图像和标注
def load_sample(img_path, label_path):
img = np.array(Image.open(img_path))
label = np.array(Image.open(label_path))
return img, label
# 可视化
img, label = load_sample('ADE_val_00000001.jpg', 'ADE_val_00000001.png')
plt.figure(figsize=(12,6))
plt.subplot(121); plt.imshow(img); plt.title('Original')
plt.subplot(122); plt.imshow(label, cmap='jet'); plt.title('Label')
plt.show()
高级预处理
import torch
from torchvision import transforms
class ADE20KDataset(torch.utils.data.Dataset):
def __init__(self, img_dir, label_dir, transform=None):
self.transform = transforms.Compose([transforms.Resize((512,512)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
def __getitem__(self, idx):
# 实现数据增强逻辑
img = self.transform(image)
label = torch.from_numpy(label).long()
return img, label
5. 常见问题解决方案
标注文件损坏
- 解决方案:使用官方提供的修复工具或重新下载
- 预防措施:下载后立即验证 MD5
类别不平衡
- 采样策略:使用加权随机采样
- 损失函数:采用带类别权重的 CrossEntropyLoss
class_weights = 1.0 / torch.bincount(labels.flatten()) criterion = nn.CrossEntropyLoss(weight=class_weights)
6. PyTorch 数据加载器实现
from torch.utils.data import DataLoader
train_set = ADE20KDataset('ADE20K/training/images',
'ADE20K/training/annotations')
train_loader = DataLoader(train_set, batch_size=16,
shuffle=True, num_workers=4)
# 使用示例
for images, labels in train_loader:
outputs = model(images)
loss = criterion(outputs, labels)
...
性能优化建议
- IO 优化:
- 使用 LMDB 或 HDF5 存储预处理后的数据
-
启用
pin_memory=True加速 GPU 传输 -
预处理加速:
- 使用 OpenCV 替代 PIL(约快 3 - 5 倍)
-
预先生成 resize 后的版本
-
增强策略:
- 使用 Albumentations 库(比 torchvision 快 2 - 3 倍)
- 离线生成常用增强组合
与其他数据集对比
| 数据集 | 图像数量 | 类别数 | 特点 |
|---|---|---|---|
| ADE20K | 22,210 | 150 | 精细部件标注 |
| Cityscapes | 5,000 | 19 | 街景场景 |
| PASCAL VOC | 10,582 | 21 | 通用物体 |
| COCO | 328k | 80 | 多任务支持 |
结语
在实际项目中使用 ADE20K 时,建议先从小规模数据开始验证流程。对于显存有限的设备,可以从 256×256 分辨率起步。数据集中的 ”stuff” 类别(如天空、墙壁)对场景理解很重要,但可能需要调整损失权重。希望本指南能帮助读者快速上手这个强大的场景理解工具。
正文完
