数据标注推荐使用LabelMe工具,具体可参考文档PaddleSeg 数据标注
PaddleSeg采用通用的文件列表方式组织训练集、验证集和测试集。像素标注类别需要从0开始递增。
NOTE: 标注图像请使用PNG无损压缩格式的图片
以Cityscapes数据集为例, 我们需要整理出训练集、验证集、测试集对应的原图和标注文件列表用于PaddleSeg训练即可。
其中DATASET.DATA_DIR
为数据根目录,文件列表的路径以数据集根目录作为相对路径起始点。
./cityscapes/ # 数据集根目录
├── gtFine # 标注目录
│ ├── test
│ │ ├── berlin
│ │ └── ...
│ ├── train
│ │ ├── aachen
│ │ └── ...
│ └── val
│ ├── frankfurt
│ └── ...
└── leftImg8bit # 原图目录
├── test
│ ├── berlin
│ └── ...
├── train
│ ├── aachen
│ └── ...
└── val
├── frankfurt
└── ...
文件列表组织形式如下
原始图片路径 [SEP] 标注图片路径
其中[SEP]
是文件路径分割符,可以在DATASET.SEPARATOR
配置项中修改, 默认为空格。
注意事项
-
务必保证分隔符在文件列表中每行只存在一次, 如文件名中存在空格,请使用'|'等文件名不可用字符进行切分
-
文件列表请使用UTF-8格式保存, PaddleSeg默认使用UTF-8编码读取file_list文件
如下图所示,左边为原图的图片路径,右边为图片对应的标注路径。
完整的配置信息可以参考./dataset/cityscapes_demo
目录下的yaml和文件列表。
从7方面对用户自定义的数据集和yaml配置进行校验,帮助用户排查基本的数据和配置问题。
数据校验脚本如下,支持通过YAML_FILE_PATH
来指定配置文件。
# YAML_FILE_PATH为yaml配置文件路径
python pdseg/check.py --cfg ${YAML_FILE_PATH}
- 数据集路径检查,包括
DATASET.TRAIN_FILE_LIST
,DATASET.VAL_FILE_LIST
,DATASET.TEST_FILE_LIST
设置是否正确。 - 列表分割符检查,判断在
TRAIN_FILE_LIST
,VAL_FILE_LIST
和TEST_FILE_LIST
列表文件中的分隔符DATASET.SEPARATOR
设置是否正确。
检查实际标注类别是否和配置参数DATASET.NUM_CLASSES
,DATASET.IGNORE_INDEX
匹配。
NOTE:
标注图像类别数值必须在[0~(DATASET.NUM_CLASSES
-1)]范围内或者为DATASET.IGNORE_INDEX
。
标注类别最好从0开始,否则可能影响精度。
统计每种类别像素数量,显示以供参考。
检查标注图像是否为PNG格式。
NOTE: 标注图像请使用PNG无损压缩格式的图片,若使用其他格式则可能影响精度。
检查图片类型DATASET.IMAGE_TYPE
是否设置正确。
NOTE: 当数据集包含三通道图片时DATASET.IMAGE_TYPE
设置为rgb;
当数据集全部为四通道图片时DATASET.IMAGE_TYPE
设置为rgba;
验证图像尺寸和对应标注图尺寸是否一致。
验证EVAL_CROP_SIZE
是否设置正确,共有3种情形:
-
当
AUG.AUG_METHOD
为unpadding时,EVAL_CROP_SIZE
的宽高应不小于AUG.FIX_RESIZE_SIZE
的宽高。 -
当
AUG.AUG_METHOD
为stepscaling时,EVAL_CROP_SIZE
的宽高应不小于原图中最大的宽高。 -
当
AUG.AUG_METHOD
为rangscaling时,EVAL_CROP_SIZE
的宽高应不小于缩放后图像中最大的宽高。
我们将计算并给出EVAL_CROP_SIZE
的建议值。