5个最适合初学者的语义分割数据集推荐(附下载链接与使用教程)
5个最适合初学者的语义分割数据集实战指南
刚接触语义分割时,最让人头疼的不是模型调参,而是找不到合适的"练手"数据集。要么数据量太大跑不动,要么标注质量参差不齐,要么文档缺失无从下手。作为过来人,我精选了5个真正适合新手的黄金数据集,它们就像游戏里的新手村——难度适中、装备齐全,能让你快速积累实战经验而不被劝退。
1. PASCAL VOC2007:经典入门之选
如果你问10个CV工程师第一个用的分割数据集,9个会回答PASCAL VOC。这个2007年发布的"老将"至今仍是教学首选,原因很简单:
- 数据量友好:仅9963张训练图片,GTX1060显卡也能轻松驾驭
- 标注精细:20类常见物体(如人、车、动物)的像素级标注
- 生态完善:几乎所有框架都内置VOC数据加载接口
下载后建议先运行官方提供的示例代码:
from torchvision.datasets import VOCSegmentation dataset = VOCSegmentation('./data', year='2007', image_set='train', download=True) print(dataset[0]) # 查看第一张图片和掩码注意:解压后会得到JPEGImages和SegmentationClass两个关键文件夹,前者存放原图,后者是对应的PNG格式标注图。
常见坑点在于标注图的处理——它的像素值不是常规的0-255,而是用特定数值代表不同类别。这里有个转换技巧:
# VOC类别ID到颜色的映射表 voc_palette = [ (0, 0, 0), (128, 0, 0), (0, 128, 0), ... # 共20个颜色值 ] def decode_segmap(temp): for cls_idx, color in enumerate(voc_palette): temp[np.all(temp == color, axis=-1)] = cls_idx return temp2. COCO Stuff:场景理解的瑞士军刀
当VOC已经玩腻时,COCO Stuff是理想的进阶选择。它在经典COCO数据集基础上增加了"stuff"类别(如天空、草地),特别适合学习场景解析:
| 特性 | VOC2007 | COCO Stuff |
|---|---|---|
| 图片数量 | 9,963 | 164,000 |
| 类别数 | 20 | 172 |
| 标注类型 | 实例 | 语义+实例 |
| 场景复杂度 | 简单 | 中等 |
虽然总数据量很大,但可以只加载特定子集。比如用以下代码只使用2017版的训练集:
wget http://images.cocodataset.org/zips/train2017.zip wget http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/stuffthingmaps_trainval2017.zip处理COCO数据推荐使用官方API,这个代码片段展示了如何可视化带标注的图片:
from pycocotools.coco import COCO import matplotlib.pyplot as plt coco = COCO('./annotations/instances_train2017.json') img_ids = coco.getImgIds(catIds=[1])[:3] # 获取包含"人"的图片 for img_id in img_ids: img = coco.loadImgs(img_id)[0] I = plt.imread(f'./train2017/{img["file_name"]}') plt.imshow(I); plt.axis('off') ann_ids = coco.getAnnIds(imgIds=img['id']) anns = coco.loadAnns(ann_ids) coco.showAnns(anns) plt.show()3. Cityscapes:自动驾驶的微观世界
想体验真实街景分割?Cityscapes包含50个城市街景的5000张精细标注图片(另有20000张粗标注)。它的三大优势:
- 高清画质:2048×1024分辨率,能看清远处交通标志
- 动态场景:包含移动车辆、行人等挑战性目标
- 多任务支持:除语义分割外还可做实例分割、深度估计
数据集目录结构很有条理:
cityscapes/ ├── gtFine/ │ ├── train/ │ │ ├── aachen/ │ │ │ ├── aachen_000000_000019_gtFine_color.png │ │ │ └── aachen_000000_000019_gtFine_instanceIds.png ├── leftImg8bit/ │ ├── train/ │ │ ├── aachen/ │ │ │ └── aachen_000000_000019_leftImg8bit.png处理时需要注意:
- 使用
cityscapesscripts包提供的工具转换标注格式 - 大尺寸图片需要先裁剪或降采样再训练
- 推荐从
train_extra子集开始,它标注更简单
4. ADE20K:室内设计的百科全书
MIT发布的ADE20K特别适合室内场景理解,包含2万张涵盖厨房、卧室等场景的图片。它的独特价值在于:
- 层次化标签:150个类别按"家具->座椅->办公椅"方式组织
- 部件标注:比如标注了椅子的靠背、扶手等组件
- 场景多样性:从家庭到商场、机场等各种室内环境
加载数据时可以这样获取层次信息:
classes = pd.read_csv('ADE20K/meta/classes.csv') print(classes[classes.index == 3]) # 输出第3类的层级关系一个实用的预处理技巧是对图片做基于场景的筛选。比如只想训练浴室相关图片:
scene_df = pd.read_csv('ADE20K/meta/scenes.csv') bathroom_ids = scene_df[scene_df.scene_type.str.contains('bathroom')].image_id bathroom_imgs = [f for f in os.listdir('images') if int(f.split('.')[0]) in bathroom_ids.values]5. LoveDA:遥感分割的轻量级选择
相比传统遥感数据集动辄GB级的下载量,武汉大学发布的LoveDA非常轻量(仅1.2GB),但包含城乡场景的8944张高分影像。它的亮点:
- 多分辨率:包含0.3m和0.8m两种地面采样距离
- 季节变化:同一区域在不同季节的影像
- 领域适应:专门设计用于研究城乡差异对模型的影响
处理遥感数据要注意:
- 使用GDAL库读取GeoTIFF格式
- 需要特别处理16位深度图像
- 建议先将坐标系统一转为WGS84
import gdal ds = gdal.Open('urban/0.3m/img_1.tif') band = ds.GetRasterBand(1) arr = band.ReadAsArray() # 获取numpy数组数据集自带的工具链能快速生成训练样本:
python tools/convert.py --dataset love --outdir ./train --crop_size 512这会产生已裁剪好的图像-标注对:
train/ ├── images/ │ └── urban_0_0_0.png └── masks/ └── urban_0_0_0.png选择数据集时记住三个原则:从少量数据开始、优先选择标注质量高的、确保有成熟的预处理方案。与其在50个数据集上浅尝辄止,不如把这5个经典数据集吃透——它们足够支撑你从入门到进阶的全过程。
