ControlNet数据集格式:JSON标注文件规范与示例

ControlNet数据集格式:JSON标注文件规范与示例

【免费下载链接】ControlNet Let us control diffusion models! 【免费下载链接】ControlNet 项目地址: https://gitcode.com/gh_mirrors/co/ControlNet

概述

ControlNet作为强大的扩散模型控制工具,其训练效果高度依赖数据集质量。本文详细介绍ControlNet训练所需JSON标注文件的规范要求、字段含义及实际应用示例,帮助开发者快速构建符合标准的训练数据集。

数据集结构

ControlNet训练数据集采用"图片文件+JSON标注"的经典结构,典型组织方式如下:

training/
└── fill50k/
    ├── source/           # 条件控制图(如边缘图、深度图)
    ├── target/           # 目标生成图
    └── prompt.json       # 标注文件(核心)

上述结构在tutorial_dataset.py中得到实现,通过MyDataset类完成数据加载流程。

JSON标注文件规范

基础格式要求

JSON标注文件采用行分隔JSON(JSON Lines)格式,即每行一个独立JSON对象,而非数组形式。这种格式在处理大型数据集时具有内存效率优势,可逐行读取而无需加载整个文件。

核心字段定义

字段名类型描述必要性
source字符串条件控制图路径,相对于标注文件的位置必需
target字符串目标生成图路径,相对于标注文件的位置必需
prompt字符串文本提示词,描述目标图像内容必需

字段约束条件

  1. 路径格式:使用Unix风格正斜杠/,不支持Windows反斜杠\
  2. 文件名:建议使用数字ID命名(如0001.png),避免特殊字符
  3. 提示词:长度控制在5-100字符,包含核心视觉特征描述

示例解析

标注文件示例

以下是符合规范的JSON标注行示例(源自tutorial_dataset.py的加载逻辑):

{"source": "source/0001.png", "target": "target/0001.png", "prompt": "a red car parked on street, photorealistic"}
{"source": "source/0002.png", "target": "target/0002.png", "prompt": "a cat sitting on sofa, digital art style"}

数据加载实现

tutorial_dataset.py中的MyDataset类完整实现了数据加载流程:

class MyDataset(Dataset):
    def __init__(self):
        self.data = []
        # 读取JSON Lines格式标注文件
        with open('./training/fill50k/prompt.json', 'rt') as f:
            for line in f:
                self.data.append(json.loads(line))
                
    def __getitem__(self, idx):
        item = self.data[idx]
        # 加载条件图和目标图
        source = cv2.imread('./training/fill50k/' + item['source'])
        target = cv2.imread('./training/fill50k/' + item['target'])
        # 图像预处理与格式转换
        source = cv2.cvtColor(source, cv2.COLOR_BGR2RGB)
        target = cv2.cvtColor(target, cv2.COLOR_BGR2RGB)
        return dict(jpg=target, txt=item['prompt'], hint=source)

数据验证示例

tutorial_dataset_test.py提供了简单的数据验证方法:

dataset = MyDataset()
print(len(dataset))  # 输出数据集大小
item = dataset[1234]  # 获取第1234个样本
print(item['txt'])    # 打印提示词
print(item['jpg'].shape)  # 验证图像维度

条件控制图类型

ControlNet支持多种条件控制图,每种类型对应不同的标注处理方式:

边缘检测图

使用HED或Canny边缘检测器生成,对应annotator/hed/模块实现的边缘提取算法。示例图:

Canny边缘图示例

深度图

通过MiDaS模型生成,对应annotator/midas/目录下的深度估计算法。示例图:

深度图示例

姿态图

使用OpenPose模型生成人体关键点,相关实现位于annotator/openpose/。示例图:

姿态图示例

常见问题解决

路径错误

确保JSON中的sourcetarget路径与实际文件位置匹配,可参考tutorial_dataset_test.py的调试方法,打印路径并验证文件存在性。

图像尺寸不一致

所有训练图像应统一尺寸,建议使用256×256、512×512等标准分辨率。可在数据加载时添加尺寸检查:

assert source.shape == (512, 512, 3), f"图像尺寸错误: {source.shape}"

中文乱码

JSON文件需使用UTF-8编码保存,提示词中的中文需直接写入,无需转义。

相关资源

总结

遵循本文介绍的JSON标注规范,配合提供的代码示例,即可构建高质量的ControlNet训练数据集。建议先使用少量样本(如100个)进行测试,通过tutorial_dataset_test.py验证数据加载正确性后,再扩展至完整数据集规模。合理的数据集构建是ControlNet模型训练成功的关键基础。

【免费下载链接】ControlNet Let us control diffusion models! 【免费下载链接】ControlNet 项目地址: https://gitcode.com/gh_mirrors/co/ControlNet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值