提交 7465623a 编写于 作者: L LutaoChu 提交者: wuzewu

improve create_dataset_list (#56)

* improve create_dataset_list
上级 a0690c69
...@@ -65,6 +65,16 @@ PaddleSeg采用通用的文件列表方式组织训练集、验证集和测试 ...@@ -65,6 +65,16 @@ PaddleSeg采用通用的文件列表方式组织训练集、验证集和测试
![cityscapes_filelist](./imgs/file_list.png) ![cityscapes_filelist](./imgs/file_list.png)
若数据集缺少标注图片,则文件列表不用包含分隔符和标注图片路径,如下图所示。
![cityscapes_filelist](./imgs/file_list2.png)
**注意事项**
此时的文件列表仅可在调用`pdseg/vis.py`进行可视化展示时使用,
即仅可在`DATASET.TEST_FILE_LIST``DATASET.VIS_FILE_LIST`配置项中使用。
不可在`DATASET.TRAIN_FILE_LIST``DATASET.VAL_FILE_LIST`配置项中使用。
完整的配置信息可以参考[`./dataset/cityscapes_demo`](../dataset/cityscapes_demo/)目录下的yaml和文件列表。 完整的配置信息可以参考[`./dataset/cityscapes_demo`](../dataset/cityscapes_demo/)目录下的yaml和文件列表。
### 文件列表生成 ### 文件列表生成
...@@ -72,7 +82,9 @@ PaddleSeg提供了生成文件列表的使用脚本,可适用于自定义数 ...@@ -72,7 +82,9 @@ PaddleSeg提供了生成文件列表的使用脚本,可适用于自定义数
``` ```
python pdseg/tools/create_dataset_list.py <your/dataset/dir> ${FLAGS} python pdseg/tools/create_dataset_list.py <your/dataset/dir> ${FLAGS}
``` ```
运行后将在数据集根目录下生成训练/验证/测试集的文件列表(文件主名与`--second_folder`一致,扩展名为`.list`)。 运行后将在数据集根目录下生成训练/验证/测试集的文件列表(文件主名与`--second_folder`一致,扩展名为`.txt`)。
**Note:** 若训练/验证/测试集缺少标注图片,仍可自动生成不含分隔符和标注图片路径的文件列表。
#### 命令行FLAGS列表 #### 命令行FLAGS列表
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
import glob import glob
import os.path import os.path
import argparse import argparse
import warnings
def parse_args(): def parse_args():
...@@ -110,29 +111,39 @@ def generate_list(args): ...@@ -110,29 +111,39 @@ def generate_list(args):
separator = args.separator separator = args.separator
for dataset_split in args.second_folder: for dataset_split in args.second_folder:
print("Creating {}.list...".format(dataset_split)) print("Creating {}.txt...".format(dataset_split))
image_files = get_files(0, dataset_split, args) image_files = get_files(0, dataset_split, args)
label_files = get_files(1, dataset_split, args) label_files = get_files(1, dataset_split, args)
if not image_files: if not image_files:
img_dir = os.path.join(dataset_root, args.folder[0], dataset_split) img_dir = os.path.join(dataset_root, args.folder[0], dataset_split)
print("No files in {}".format(img_dir)) print("No files in {}".format(img_dir))
continue num_images = len(image_files)
elif not label_files:
if not label_files:
label_dir = os.path.join(dataset_root, args.folder[1], dataset_split) label_dir = os.path.join(dataset_root, args.folder[1], dataset_split)
print("No files in {}".format(label_dir)) print("No files in {}".format(label_dir))
num_label = len(label_files)
if num_images < num_label:
warnings.warn("number of images = {} < number of labels = {}."
.format(num_images, num_label))
continue continue
num_images = len(image_files) file_list = os.path.join(dataset_root, dataset_split + '.txt')
file_list = os.path.join(dataset_root, dataset_split + '.list')
with open(file_list, "w") as f: with open(file_list, "w") as f:
for item in range(num_images): for item in range(num_images):
left = image_files[item].replace(dataset_root, '') left = image_files[item].replace(dataset_root, '')
if left[0] == os.path.sep: if left[0] == os.path.sep:
left = left.lstrip(os.path.sep) left = left.lstrip(os.path.sep)
right = label_files[item].replace(dataset_root, '')
if right[0] == os.path.sep: try:
right = right.lstrip(os.path.sep) right = label_files[item].replace(dataset_root, '')
line = left + separator + right + '\n' if right[0] == os.path.sep:
right = right.lstrip(os.path.sep)
line = left + separator + right + '\n'
except:
line = left + '\n'
f.write(line) f.write(line)
print(line) print(line)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册